package foundation.io.define;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
import foundation.dao.DataPackage;
|
import foundation.data.meta.MetaMonitor;
|
import foundation.data.meta.ReloadCheckResult;
|
import foundation.io.IOLoader;
|
import foundation.io.mapping.IOMappings;
|
import foundation.util.MapList;
|
import foundation.util.Util;
|
|
public class DataIOContainer {
|
|
protected static Logger logger;
|
public static boolean Debug = true;
|
private static DataIOContainer instance;
|
private static Object locker = new Object();
|
|
private MapList<String, IOTask> taskList;
|
private MapList<String, IOMappings> mappingsList;
|
private MetaMonitor ioMonitor;
|
private MetaMonitor mappingsMonitor;
|
|
static {
|
logger = LogManager.getLogger(DataPackage.class);
|
}
|
|
private DataIOContainer() {
|
taskList = new MapList<String, IOTask>();
|
mappingsList = new MapList<String, IOMappings>();
|
ioMonitor = new MetaMonitor("getIOTaskLastUpdateTime");
|
mappingsMonitor = new MetaMonitor("getMappingListByParentId");
|
}
|
|
public static DataIOContainer getInstance() {
|
if (instance == null) {
|
synchronized (locker) {
|
if (instance == null) {
|
instance = new DataIOContainer();
|
}
|
}
|
}
|
|
return instance;
|
}
|
|
public IOTask getIOTask(String name) throws Exception {
|
if (Util.isEmpty(name)) {
|
return null;
|
}
|
|
synchronized (this) {
|
ioMonitor.setParam("taskName", name);
|
ReloadCheckResult checkResult = ioMonitor.getReloadCheckResult();
|
|
if (checkResult.isNeedReload()) {
|
reloadIOTask(name);
|
}
|
}
|
|
IOTask ioTask = taskList.get(name);
|
return ioTask;
|
}
|
|
public IOMappings getIOMappings(String name) throws Exception {
|
if (Util.isEmpty(name)) {
|
return new IOMappings(IOSource.AutoCreate);
|
}
|
|
synchronized (this) {
|
mappingsMonitor.setParam("mappingId", name);
|
ReloadCheckResult checkResult = mappingsMonitor.getReloadCheckResult();
|
|
if (checkResult.isNeedReload()) {
|
reloadIOMappings(name);
|
}
|
}
|
|
IOMappings mappings = mappingsList.get(name);
|
|
if (mappings == null) {
|
mappings = new IOMappings(IOSource.AutoCreate);
|
}
|
|
return mappings;
|
}
|
|
private IOTask reloadIOTask(String name) throws Exception {
|
IOTask ioTask = taskList.get(name);
|
|
ioTask = IOLoader.loadOneIOTask(name, ioTask);
|
taskList.set(name, ioTask);
|
|
return ioTask;
|
}
|
|
private IOMappings reloadIOMappings(String name) throws Exception {
|
IOMappings mappings = mappingsList.get(name);
|
|
mappings = IOLoader.loadOneIOMappings(name, mappings);
|
mappingsList.set(name, mappings);
|
|
return mappings;
|
}
|
|
public void clear() {
|
taskList.clear();
|
mappingsList.clear();
|
}
|
|
}
|