package org.eclipselabs.spray.xtext.ui.editor;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.xtext.ui.editor.XtextEditor;
import com.google.inject.Inject;
public class SprayMultiPageEditor extends MultiPageEditorPart implements IResourceChangeListener {
@Inject
private XtextEditor xtextEditor;
private SprayGeneratorPropertiesForm generatorPropertiesForm;
@Inject
private TextEditor generatorPropertiesEditor;
@Inject
private IWorkspaceRoot root;
public static final String ID = "org.eclipselabs.spray.xtext.ui.editor.SprayMultiPageEditor"; //$NON-NLS-1$
public SprayMultiPageEditor() {
ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
}
@Override
public void dispose() {
ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
super.dispose();
}
@Override
protected void createPages() {
IFile sprayFile = (IFile) getEditorInput().getAdapter(IFile.class);
setPartName(sprayFile.getFullPath().removeFileExtension().lastSegment());
try {
addPage(xtextEditor, getEditorInput());
setPageText(0, sprayFile.getName());
} catch (PartInitException e) {
e.printStackTrace();
}
generatorPropertiesForm = new SprayGeneratorPropertiesForm(SprayGeneratorPropertiesForm.class.getName(), "Generator Settings");
try {
IFile propertiesFile = root.getFile(sprayFile.getFullPath().removeFileExtension().addFileExtension("properties"));
FileEditorInput input = propertiesFile.exists() ? new FileEditorInput(propertiesFile) : null;
addPage(generatorPropertiesEditor, input);
setPageText(1, propertiesFile.getName());
} catch (PartInitException e) {
e.printStackTrace();
}
}
@Override
public boolean isSaveAsAllowed() {
// TODO Auto-generated method stub
return false;
}
@Override
public void doSave(IProgressMonitor monitor) {
getActiveEditor().doSave(monitor);
}
@Override
public void doSaveAs() {
// TODO Auto-generated method stub
}
@Override
public void resourceChanged(final IResourceChangeEvent event) {
if ((event.getType() == IResourceChangeEvent.PRE_CLOSE || event.getType() == IResourceChangeEvent.PRE_DELETE) && event.getResource() instanceof IProject) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
IWorkbenchPage[] pages = getSite().getWorkbenchWindow().getPages();
for (int i = 0; i < pages.length; i++) {
if (((FileEditorInput) xtextEditor.getEditorInput()).getFile().getProject().equals(event.getResource())) {
IEditorPart editorPart = pages[i].findEditor(xtextEditor.getEditorInput());
pages[i].closeEditor(editorPart, true);
}
}
}
});
}
}
}