/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.editor;
import java.text.MessageFormat;
import java.util.Properties;
import org.eclipse.ui.*;
import org.eclipse.ui.ide.IDE;
import org.jboss.tools.common.meta.action.*;
import org.jboss.tools.common.model.ServiceDialog;
import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.options.Preference;
import org.jboss.tools.common.model.options.PreferenceModelUtilities;
import org.jboss.tools.common.model.ui.ModelUIPlugin;
import org.jboss.tools.common.model.ui.editor.IModelObjectEditorInput;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.jboss.tools.common.core.resources.*;
public class OpenEditorWizard implements SpecialWizard {
Properties p;
public void setObject(Object object) {
p = (Properties)object;
}
public int execute() {
try {
IEditorPart editor = null;
XModelObject object = (XModelObject)p.get("object"); //$NON-NLS-1$
IWorkbenchPage workbenchPage = getWorkbenchPage();
if(workbenchPage == null) return 0;
String id = object.getModelEntity().getEditorClassName();
if("FileXML".equals(object.getModelEntity().getName())) {
id = null;
}
if(id != null && (id.length() == 0 || id.equals("DefaultEditor"))) { //$NON-NLS-1$
id = null;
} else {
boolean b = "yes".equals(PreferenceModelUtilities.getPreferenceModel().getByPath(Preference.EDITOR_PATH).getAttributeValue("useRedHatEditors")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if(!b) id = null;
}
IModelObjectEditorInput input = XModelObjectEditorInput.createInstance(object);
if(input == null) throw new IllegalStateException("Cannot find resource for object " + object.getPresentationString()); //$NON-NLS-1$
if(input instanceof IFileEditorInput) {
IFileEditorInput fei = (IFileEditorInput)input;
IFile f = fei.getFile();
if(f != null && !f.isSynchronized(IResource.DEPTH_INFINITE)) {
try {
f.getParent().refreshLocal(IResource.DEPTH_INFINITE, null);
} catch (CoreException e) {
ModelUIPlugin.getPluginLog().logError(e);
}
}
if(f == null || !f.exists()) {
ServiceDialog d = object.getModel().getService();
Object pathData = f == null ? object.getPath() : f.getFullPath();
String message = MessageFormat.format(
"The file {0} was removed externally.", pathData);
d.showDialog("Warning", message, new String[]{"Close"}, null, ServiceDialog.WARNING);
object.getModel().update();
return 1;
}
}
if("true".equals(p.getProperty("onlySelectIfOpen"))) { //$NON-NLS-1$ //$NON-NLS-2$
editor = workbenchPage.findEditor(input);
if(editor != null) workbenchPage.bringToTop(editor);
} else if(id == null) {
if(input instanceof IFileEditorInput) {
IFile f = ((IFileEditorInput)input).getFile();
IDE.setDefaultEditor(f, null);
IEditorDescriptor d = IDE.getEditorDescriptor(f);
if(d != null) id = d.getId();
if(id != null) {
editor = IDE.openEditor(workbenchPage, f, id, true);
} else {
editor = IDE.openEditor(workbenchPage, f, true);
}
} else {
if(id == null) {
IEditorDescriptor d = IDE.getEditorDescriptor(input.getName());
if(d != null) id = d.getId();
if(id == null) id = "org.eclipse.ui.DefaultTextEditor";
}
editor = workbenchPage.openEditor(input, id);
}
} else {
editor = workbenchPage.openEditor(input, id);
}
if(p != null && editor != null) p.put("editor", editor); //$NON-NLS-1$
if(p != null && "true".equals(p.get("toErrorTab")) && (editor instanceof ObjectMultiPageEditor)) { //$NON-NLS-1$ //$NON-NLS-2$
ObjectMultiPageEditor m = (ObjectMultiPageEditor)editor;
m.activateErrorTab();
}
} catch (XModelException e) {
p.put("exception", e); //$NON-NLS-1$
return 1;
} catch (PartInitException e) {
p.put("exception", e); //$NON-NLS-1$
return 1;
}
return 0;
}
private IWorkbenchPage getWorkbenchPage() {
ModelUIPlugin plugin = ModelUIPlugin.getDefault();
IWorkbench workbench = (plugin == null) ? null : plugin.getWorkbench();
IWorkbenchWindow window = (workbench == null) ? null : workbench.getActiveWorkbenchWindow();
return (window == null) ? null : window.getActivePage();
}
}