package org.xmind.ui.internal.editor;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.xmind.core.IWorkbook;
public class WorkbookRefInitializer {
private static WorkbookRefInitializer instance = new WorkbookRefInitializer();
public void initialize(WorkbookRef ref, Object refKey, Object referrer)
throws CoreException {
if (refKey instanceof WorkbookEditorInput) {
if (initNonExistingWorkbookRef(ref, (WorkbookEditorInput) refKey))
return;
}
if (initByFileStore(ref, refKey))
return;
if (initByResourceFile(ref, refKey))
return;
initByLoadedWorkbook(ref, refKey);
}
private boolean initNonExistingWorkbookRef(WorkbookRef ref,
WorkbookEditorInput input) {
if (input.getContents() != null) {
ref.setWorkbookLoader(new PreLoadedWorkbookLoader(input
.getContents()));
} else {
ref.setWorkbookLoader(new TemplatedWorkbookLoader(input
.getTemplateStream()));
}
return true;
}
private boolean initByLoadedWorkbook(WorkbookRef ref, Object refKey) {
IWorkbook workbook = (IWorkbook) MME
.getAdapter(refKey, IWorkbook.class);
if (workbook != null) {
ref.setWorkbookLoader(new PreLoadedWorkbookLoader(workbook));
return true;
}
return false;
}
private boolean initByResourceFile(WorkbookRef ref, Object refKey)
throws CoreException {
// TODO
return false;
}
private boolean initByFileStore(WorkbookRef ref, Object refKey)
throws CoreException {
IFileStore fileStore = MME.getFileStore(refKey);
if (fileStore == null)
return false;
FileStoreWorkbookAdapter adapter = new FileStoreWorkbookAdapter(
fileStore);
ref.setWorkbookLoader(adapter);
ref.setWorkbookSaver(adapter);
return true;
}
public static WorkbookRefInitializer getInstance() {
return instance;
}
}