package entitymodeler;
import javax.inject.Inject;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.osgi.service.datalocation.Location;
import org.eclipse.osgi.service.environment.EnvironmentInfo;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchAdvisor;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.ide.FileStoreEditorInput;
import org.eclipse.ui.internal.util.PrefUtil;
import org.objectstyle.wolips.eomodeler.EOModelerPerspectiveFactory;
import org.objectstyle.wolips.eomodeler.editors.EOModelEditor;
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
private OpenDocumentEventProcessor _openDocProcessor;
@Inject private EnvironmentInfo environmentInfo;
public ApplicationWorkbenchAdvisor(OpenDocumentEventProcessor openDocProcessor) {
_openDocProcessor = openDocProcessor;
}
public void eventLoopIdle(Display display) {
_openDocProcessor.openFiles();
super.eventLoopIdle(display);
}
@Override
public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
return new ApplicationWorkbenchWindowAdvisor(configurer);
}
@Override
public String getInitialWindowPerspectiveId() {
return EOModelerPerspectiveFactory.EOMODELER_PERSPECTIVE_ID;
}
@Override
public void preStartup() {
Location loc = Platform.getInstanceLocation();
try {
// loc.setURL(new File("/tmp/.entityModeler").toURL(), false);
}
catch (Exception e) {
e.printStackTrace();
}
PrefUtil.getAPIPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, false);
super.preStartup();
}
@Override
public void postStartup() {
super.postStartup();
try {
String[] args = environmentInfo.getNonFrameworkArgs();
String modelPath = null;
boolean optionValue = false;
for (String arg : args) {
if ("-showlocation".equals(arg)) {
optionValue = false;
}
else if (arg.startsWith("-")) {
optionValue = true;
}
else if (optionValue) {
optionValue = false;
}
else {
modelPath = arg;
}
}
ApplicationWorkbenchAdvisor.openModelPath(modelPath);
}
catch (Throwable t) {
t.printStackTrace();
}
}
public static void openModelPath(String modelPath) throws CoreException {
if (modelPath == null) {
return;
}
IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(modelPath));
IFileStore modelFileStore;
if (fileStore.getName().equals("index.eomodeld")) {
modelFileStore = fileStore;
}
else if (fileStore.getName().endsWith(".eomodeld")) {
modelFileStore = fileStore.getChild("index.eomodeld");
}
else {
modelFileStore = fileStore;
}
IWorkbenchWindow existingWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage existingPage = existingWindow.getActivePage();
IEditorReference[] editorReferences = existingPage.getEditorReferences();
if (editorReferences.length == 0) {
existingPage.openEditor(new FileStoreEditorInput(modelFileStore), EOModelEditor.EOMODEL_EDITOR_ID);
}
else {
IWorkbenchWindow newWindow = PlatformUI.getWorkbench().openWorkbenchWindow(EOModelerPerspectiveFactory.EOMODELER_PERSPECTIVE_ID, null);
newWindow.getActivePage().openEditor(new FileStoreEditorInput(modelFileStore), EOModelEditor.EOMODEL_EDITOR_ID);
}
}
}