use of org.eclipse.wst.xsd.ui.internal.editor.XSDFileEditorInput in project webtools.sourceediting by eclipse.
the class OpenInNewEditor method openInlineSchema.
public static void openInlineSchema(IEditorInput editorInput, XSDConcreteComponent xsdComponent, XSDSchema schema, String editorName) {
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page = null;
if (workbenchWindow != null) {
page = workbenchWindow.getActivePage();
}
boolean isWorkspaceFile = false;
String schemaLocation = schema.getSchemaLocation();
String workspaceFileLocation = URIHelper.removePlatformResourceProtocol(schemaLocation);
IPath workspaceFilePath = new Path(workspaceFileLocation);
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(workspaceFilePath);
if (page != null && file != null && file.exists()) {
isWorkspaceFile = true;
}
if (isWorkspaceFile) {
try {
IEditorPart editorPart = null;
XSDFileEditorInput xsdFileEditorInput = new XSDFileEditorInput(file, schema);
xsdFileEditorInput.setEditorName(editorName);
IEditorReference[] refs = page.getEditorReferences();
int length = refs.length;
for (int i = 0; i < length; i++) {
IEditorInput input = refs[i].getEditorInput();
if (input instanceof XSDFileEditorInput) {
IFile aFile = ((XSDFileEditorInput) input).getFile();
if (aFile.getFullPath().equals(file.getFullPath())) {
if (((XSDFileEditorInput) input).getSchema() == schema) {
editorPart = refs[i].getEditor(true);
page.activate(refs[i].getPart(true));
break;
}
}
}
}
if (editorPart == null) {
// $NON-NLS-1$
editorPart = page.openEditor(xsdFileEditorInput, XSDEditorPlugin.EDITOR_ID, true, 0);
}
if (editorPart instanceof InternalXSDMultiPageEditor) {
InternalXSDMultiPageEditor xsdEditor = (InternalXSDMultiPageEditor) editorPart;
xsdEditor.openOnGlobalReference(xsdComponent);
}
} catch (PartInitException pie) {
}
} else {
if (schemaLocation != null && !schemaLocation.startsWith("http")) {
String fileLocation = null;
//
if (java.io.File.separatorChar == '/') {
fileLocation = "/" + URIHelper.removePlatformResourceProtocol(schemaLocation);
} else // Windows
{
fileLocation = URIHelper.removeProtocol(schemaLocation);
}
IPath schemaPath = new Path(fileLocation);
IFileStore fileStore = EFS.getLocalFileSystem().getStore(schemaPath);
if (!fileStore.fetchInfo().isDirectory() && fileStore.fetchInfo().exists()) {
try {
ADTFileStoreEditorInput xsdFileStoreEditorInput = new ADTFileStoreEditorInput(fileStore, schema);
xsdFileStoreEditorInput.setEditorName(editorName);
IEditorPart editorPart = null;
IEditorReference[] refs = page.getEditorReferences();
int length = refs.length;
for (int i = 0; i < length; i++) {
IEditorInput input = refs[i].getEditorInput();
if (input instanceof ADTFileStoreEditorInput) {
URI uri = ((ADTFileStoreEditorInput) input).getURI();
if (uri.equals(xsdFileStoreEditorInput.getURI()) && ((ADTFileStoreEditorInput) input).getSchema() == xsdFileStoreEditorInput.getSchema()) {
editorPart = refs[i].getEditor(true);
page.activate(refs[i].getPart(true));
break;
}
}
}
if (page != null && editorPart == null) {
// $NON-NLS-1$
editorPart = page.openEditor(xsdFileStoreEditorInput, XSDEditorPlugin.EDITOR_ID, true, 0);
}
if (editorPart instanceof InternalXSDMultiPageEditor) {
InternalXSDMultiPageEditor xsdEditor = (InternalXSDMultiPageEditor) editorPart;
xsdEditor.openOnGlobalReference(xsdComponent);
}
} catch (PartInitException pie) {
}
}
} else {
try {
IEditorPart editorPart = null;
IEditorReference[] refs = page.getEditorReferences();
int length = refs.length;
// Need to find if an editor on that schema has already been opened
for (int i = 0; i < length; i++) {
IEditorInput input = refs[i].getEditorInput();
if (input instanceof ADTReadOnlyFileEditorInput) {
ADTReadOnlyFileEditorInput xsdFileStorageEditorInput = (ADTReadOnlyFileEditorInput) input;
if (xsdFileStorageEditorInput.getUrlString().equals(schemaLocation) && xsdFileStorageEditorInput.getEditorID().equals(XSDEditorPlugin.EDITOR_ID)) {
editorPart = refs[i].getEditor(true);
page.activate(refs[i].getPart(true));
break;
}
}
}
if (editorPart == null) {
ADTReadOnlyFileEditorInput xsdFileStorageEditorInput = new ADTReadOnlyFileEditorInput(schemaLocation);
xsdFileStorageEditorInput.setSchema(schema);
xsdFileStorageEditorInput.setEditorName(editorName);
xsdFileStorageEditorInput.setEditorID(XSDEditorPlugin.EDITOR_ID);
editorPart = page.openEditor(xsdFileStorageEditorInput, XSDEditorPlugin.EDITOR_ID, true, 0);
}
if (editorPart instanceof InternalXSDMultiPageEditor) {
InternalXSDMultiPageEditor xsdEditor = (InternalXSDMultiPageEditor) editorPart;
xsdEditor.openOnGlobalReference(xsdComponent);
}
} catch (PartInitException pie) {
}
}
return;
}
}
use of org.eclipse.wst.xsd.ui.internal.editor.XSDFileEditorInput in project webtools.sourceediting by eclipse.
the class OpenInNewEditor method getExistingEditorForInlineSchema.
private IEditorPart getExistingEditorForInlineSchema(IWorkbenchPage page, IFile schemaFile, XSDSchema schema) {
IEditorReference[] refs = page.getEditorReferences();
int length = refs.length;
IEditorPart editorPart = null;
try {
for (int i = 0; i < length; i++) {
IEditorInput input = refs[i].getEditorInput();
if (input instanceof XSDFileEditorInput) {
IFile aFile = ((XSDFileEditorInput) input).getFile();
if (aFile.getFullPath().equals(schemaFile.getFullPath())) {
if (((XSDFileEditorInput) input).getSchema() == schema) {
editorPart = refs[i].getEditor(true);
page.activate(refs[i].getPart(true));
break;
}
}
}
}
} catch (PartInitException e) {
}
return editorPart;
}
use of org.eclipse.wst.xsd.ui.internal.editor.XSDFileEditorInput in project webtools.sourceediting by eclipse.
the class OpenInNewEditor method run.
public void run() {
Object selection = ((IStructuredSelection) getSelection()).getFirstElement();
IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
IWorkbenchPage page = null;
IEditorInput editorInput = null;
if (workbenchWindow != null) {
page = workbenchWindow.getActivePage();
IEditorPart activeEditor = page.getActiveEditor();
if (activeEditor != null) {
editorInput = activeEditor.getEditorInput();
}
}
if (selection instanceof XSDBaseAdapter) {
XSDBaseAdapter xsdAdapter = (XSDBaseAdapter) selection;
XSDConcreteComponent fComponent = (XSDConcreteComponent) xsdAdapter.getTarget();
XSDSchema schema = fComponent.getSchema();
boolean isReference = false;
if (fComponent instanceof XSDFeature) {
isReference = ((XSDFeature) fComponent).isFeatureReference();
fComponent = ((XSDFeature) fComponent).getResolvedFeature();
}
String schemaLocation = null;
IPath schemaPath = null;
IFile schemaFile = null;
// Special case any imports/includes
if (selection instanceof XSDSchemaDirectiveAdapter) {
XSDSchemaDirective dir = (XSDSchemaDirective) ((XSDSchemaDirectiveAdapter) selection).getTarget();
// force load of imported schema
if (dir instanceof XSDImportImpl) {
((XSDImportImpl) dir).importSchema();
}
if (dir.getResolvedSchema() != null) {
schemaLocation = URIHelper.removePlatformResourceProtocol(dir.getResolvedSchema().getSchemaLocation());
schemaPath = new Path(schemaLocation);
schemaFile = ResourcesPlugin.getWorkspace().getRoot().getFile(schemaPath);
schema = dir.getResolvedSchema();
fComponent = dir.getResolvedSchema();
}
} else // Handle any other external components
if (fComponent.getSchema() != null && fComponent.eContainer() instanceof XSDSchema || fComponent.eContainer() instanceof XSDRedefine || isReference) {
schemaLocation = URIHelper.removePlatformResourceProtocol(fComponent.getSchema().getSchemaLocation());
schemaPath = new Path(schemaLocation);
schemaFile = ResourcesPlugin.getWorkspace().getRoot().getFile(schemaPath);
try {
XSDSchema xsdSchema = (XSDSchema) getWorkbenchPart().getAdapter(XSDSchema.class);
if (fComponent.getSchema() == xsdSchema) {
IEditorPart editorPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
if (editorPart instanceof InternalXSDMultiPageEditor) {
((InternalXSDMultiPageEditor) editorPart).openOnGlobalReference(fComponent);
}
return;
}
} catch (Exception e) {
}
}
// If the schemaFile exists in the workspace
if (page != null && schemaFile != null && schemaFile.exists()) {
try {
// Get the current editor's schema
XSDSchema xsdSchema = (XSDSchema) getWorkbenchPart().getAdapter(XSDSchema.class);
IEditorPart editorPart = null;
// are in the same resource file....hence multiple schemas in the same file.
if (xsdSchema != null && fComponent.getRootContainer().eResource() == xsdSchema.eResource() && xsdSchema != schema) {
String editorName = null;
XSDFileEditorInput xsdFileEditorInput = new XSDFileEditorInput(schemaFile, fComponent.getSchema());
// Try to use the same editor name as the current one
if (editorInput != null) {
editorName = editorInput.getName();
xsdFileEditorInput.setEditorName(editorName);
}
editorPart = getExistingEditorForInlineSchema(page, schemaFile, schema);
if (editorPart == null) {
editorPart = page.openEditor(xsdFileEditorInput, XSDEditorPlugin.EDITOR_ID, true, 0);
}
} else {
editorPart = page.openEditor(new FileEditorInput(schemaFile), XSDEditorPlugin.EDITOR_ID);
}
if (editorPart instanceof InternalXSDMultiPageEditor) {
((InternalXSDMultiPageEditor) editorPart).openOnGlobalReference(fComponent);
}
} catch (Exception e) {
}
} else {
// open the xsd externally
if (schemaLocation != null)
openExternalFiles(page, schemaLocation, fComponent);
}
}
}
Aggregations