package frame.file;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import frame.data.Entity;
|
import frame.data.EntitySet;
|
import frame.persist.NamedSQL;
|
import frame.persist.SQLRunner;
|
|
public class FileIOContainer {
|
|
private static FileIOContainer instance;
|
private static Object locker = new Object();
|
|
private Map<String, FileIO> fileIOMap;
|
private Map<String, FileIoItem> ioItemMap;
|
private Map<String, IOMapping> ioMappingMap;
|
private List<FileIO> fileIOList;
|
|
private FileIOContainer() {
|
fileIOMap = new HashMap<String, FileIO>();
|
ioItemMap = new HashMap<String, FileIoItem>();
|
ioMappingMap = new HashMap<String, IOMapping>();
|
fileIOList = new ArrayList<FileIO>();
|
}
|
|
public static FileIOContainer getInstance() {
|
if (instance == null) {
|
synchronized (locker) {
|
if (instance == null) {
|
instance = new FileIOContainer();
|
}
|
}
|
}
|
|
return instance;
|
}
|
|
public static FileIO get(String ioCode) {
|
getInstance();
|
|
if (ioCode == null) {
|
return null;
|
}
|
|
ioCode = ioCode.toLowerCase();
|
|
if (!instance.fileIOMap.containsKey(ioCode)) {
|
return null;
|
}
|
|
return instance.fileIOMap.get(ioCode);
|
}
|
|
public static void load() {
|
getInstance();
|
NamedSQL namedSQL;
|
Entity entity;
|
instance.clear();
|
|
//1. load mapping
|
namedSQL = NamedSQL.getInstance("getMappingList");
|
EntitySet mappingList = SQLRunner.getEntitySet(namedSQL);
|
|
while (mappingList.hasNext()) {
|
entity = mappingList.next();
|
|
IOMapping mapping = new IOMapping();
|
mapping.initLoad(entity);
|
|
instance.ioMappingMap.put(mapping.getId(), mapping);
|
}
|
|
//2. load mapping detail
|
namedSQL = NamedSQL.getInstance("getMappingDetails");
|
EntitySet mappingDetails = SQLRunner.getEntitySet(namedSQL);
|
|
while (mappingDetails.hasNext()) {
|
entity = mappingDetails.next();
|
|
IOMappingItem mappingItem = new IOMappingItem();
|
mappingItem.initLoad(entity);
|
|
IOMapping mapping = instance.getIOMapping(mappingItem.getParentId());
|
|
if (mapping == null) {
|
return;
|
}
|
|
mapping.addItem(mappingItem);
|
}
|
|
//3. load fileio
|
namedSQL = NamedSql.getInstance("getFileIOList");
|
EntitySet fileIOList = SQLRunner.getEntitySet(namedSQL.toSQLString());
|
|
while (fileIOList.hasNext()) {
|
entity = fileIOList.getCurrent();
|
FileIO fileIO = new FileIO();
|
fileIO.load(entity);
|
|
instance.addFileIO(fileIO);
|
}
|
|
//4. load fileio item
|
namedSQL = NamedSql.getInstance("getFileIOItemList");
|
EntitySet fileIOItemList = SQLRunner.getEntitySet(namedSQL.toSQLString());
|
|
while (fileIOItemList.hasNext()) {
|
entity = fileIOItemList.getCurrent();
|
|
String ioCode = entity.getStringByName("code");
|
FileIO fileIO = instance.getFileIO(ioCode);
|
|
if (fileIO == null) {
|
return;
|
}
|
|
FileIOItem ioItem = new FileIOItem();
|
ioItem.load(entity);
|
|
IOMapping mapping = instance.ioMappingMap[ioItem.getMappingId()];
|
ioItem.setMapping(mapping);
|
|
fileIO.addItem(ioItem);
|
instance.ioItemMap[ioItem.getId()] = ioItem;
|
}
|
|
//5. create mapping runtime
|
foreach (FileIO fileIO in instance.fileIOList) {
|
fileIO.createRuntime();
|
}
|
|
//6. load ioItem handler
|
namedSQL = NamedSql.getInstance("getIOItemHandlerList");
|
EntitySet privateHandlers = SQLRunner.getEntitySet(namedSQL.toSQLString());
|
|
while (privateHandlers.hasNext()) {
|
entity = privateHandlers.getCurrent();
|
|
IOHandler handler = new IOHandler();
|
handler.initLoad(entity);
|
|
FileIOItem ioItem = instance.getIOItem(handler.getItemId());
|
|
if (ioItem == null) {
|
return;
|
}
|
|
ioItem.addHandler(handler);
|
}
|
|
//7. load fileIO handler
|
namedSQL = NamedSQL.getInstance("getFileIOHandlerList");
|
EntitySet publicHandlerList = SQLRunner.getEntitySet(namedSQL);
|
|
while (publicHandlerList.hasNext()) {
|
entity = publicHandlerList.next();
|
|
IOHandler handler = new IOHandler();
|
handler.initLoad(entity);
|
|
FileIO fileIO = instance.getFileIO(handler.getIOCode());
|
|
if (fileIO == null) {
|
return;
|
}
|
|
fileIO.addHandler(handler);
|
}
|
}
|
|
private void clear() {
|
fileIOList.clear();
|
|
fileIOMap.clear();
|
ioItemMap.clear();
|
ioMappingMap.clear();
|
}
|
|
private FileIO getFileIO(String code) {
|
if (code == null) {
|
return null;
|
}
|
|
code = code.toLowerCase();
|
|
if (!instance.fileIOMap.containsKey(code)) {
|
return null;
|
}
|
|
return instance.fileIOMap.get(code);
|
}
|
|
private FileIoItem getIOItem(String id) {
|
if (!instance.ioItemMap.containsKey(id)) {
|
return null;
|
}
|
|
return instance.ioItemMap.get(id);
|
}
|
|
private IOMapping getIOMapping(String id) {
|
if (!instance.ioMappingMap.containsKey(id)) {
|
return null;
|
}
|
|
return instance.ioMappingMap.get(id);
|
}
|
|
private void addFileIO(FileIO fileIO) {
|
String ioCode = fileIO.getCode();
|
|
if (ioCode == null) {
|
return;
|
}
|
|
ioCode = ioCode.toLowerCase();
|
instance.fileIOMap.put(ioCode, fileIO);
|
|
fileIOList.add(fileIO);
|
}
|
}
|