package com.iailab.module.infra.framework.file.core.client; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ReflectUtil; import com.iailab.module.infra.framework.file.core.enums.FileStorageEnum; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; /** * 文件客户端的工厂实现类 * * @author iailab */ @Slf4j public class FileClientFactoryImpl implements FileClientFactory { /** * 文件客户端 Map * key:配置编号 */ private final ConcurrentMap> clients = new ConcurrentHashMap<>(); @Override public FileClient getFileClient(Long configId) { AbstractFileClient client = clients.get(configId); if (client == null) { log.error("[getFileClient][配置编号({}) 找不到客户端]", configId); } return client; } @Override @SuppressWarnings("unchecked") public void createOrUpdateFileClient(Long configId, Integer storage, Config config) { AbstractFileClient client = (AbstractFileClient) clients.get(configId); if (client == null) { client = this.createFileClient(configId, storage, config); client.init(); clients.put(client.getId(), client); } else { client.refresh(config); } } @SuppressWarnings("unchecked") private AbstractFileClient createFileClient( Long configId, Integer storage, Config config) { FileStorageEnum storageEnum = FileStorageEnum.getByStorage(storage); Assert.notNull(storageEnum, String.format("文件配置(%s) 为空", storageEnum)); // 创建客户端 return (AbstractFileClient) ReflectUtil.newInstance(storageEnum.getClientClass(), configId, config); } }