/*******************************************************************************
* 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.jsf.ui.editor;
import org.jboss.tools.common.editor.AbstractSelectionProvider;
import org.jboss.tools.common.editor.ObjectMultiPageEditor;
import org.jboss.tools.common.editor.ObjectTextEditor;
import org.jboss.tools.common.model.ui.texteditors.XMLTextEditorComponent;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
import org.jboss.tools.common.gef.outline.xpl.DiagramContentOutlinePage;
import org.jboss.tools.jsf.messages.JSFUIMessages;
import org.jboss.tools.jsf.model.FacesConfigFilteredTreeConstraint;
import org.jboss.tools.jsf.model.JSFConstants;
import org.jboss.tools.jsf.project.JSFNature;
import org.jboss.tools.jsf.ui.IJSFHelpContextIds;
import org.jboss.tools.jsf.ui.JsfUiPlugin;
import org.jboss.tools.common.model.ui.editor.EditorDescriptor;
public class FacesConfigEditor extends ObjectMultiPageEditor {
protected FacesConfigGuiEditor guiEditor;
protected FacesConfigFilteredTreeConstraint constraint = new FacesConfigFilteredTreeConstraint();
protected Composite createPageContainer(Composite parent) {
Composite composite = super.createPageContainer(parent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IJSFHelpContextIds.FACES_CONFIG_EDITOR);
return composite;
}
public FacesConfigEditor() {
constraint.setEditorEnvironment(true);
FacesConfigFilteredTreeConstraint constraint2 = new FacesConfigFilteredTreeConstraint();
outline.addFilter(constraint2);
}
protected boolean isWrongEntity(String entity) {
return !entity.startsWith(JSFConstants.ENT_FACESCONFIG);
}
protected void doCreatePages() {
if (isAppropriateNature() || true /* JBIDE-541 */) {
createGuiPage();
treeFormPage = createTreeFormPage();
treeFormPage.setTitle(JSFUIMessages.FACES_CONFIG_EDITOR);
treeFormPage.addFilter(constraint);
treeFormPage.initialize(getModelObject());
addFormPage(treeFormPage);
}
createTextPage();
initEditors();
}
protected String[] getSupportedNatures() {
return new String[]{JSFNature.NATURE_ID};
}
protected String getNatureWarningMessageKey() {
return "SharableEditors.natureWarning.jsf.message"; //$NON-NLS-1$
}
protected void createGuiPage() {
try{
guiEditor = new FacesConfigGuiEditor();
guiEditor.init(getEditorSite(), getEditorInput());
int index = addPage(guiEditor, input);
setPageText(index, JSFUIMessages.FacesConfigEditor_Diagram);
guiEditor.setInput(input);
selectionProvider.setHost(guiEditor.getSelectionProvider());
guiEditor.addErrorSelectionListener(createErrorSelectionListener());
selectionProvider.addHost("guiEditor", guiEditor.getSelectionProvider()); //$NON-NLS-1$
} catch(PartInitException ex) {
JsfUiPlugin.getPluginLog().logError(ex);
}
}
protected ObjectTextEditor createTextEditor() {
return new XMLTextEditorComponent();
}
public void dispose() {
super.dispose();
if(guiEditor != null) {
guiEditor.dispose();
guiEditor = null;
}
}
protected void setErrorMode() {
setNormalMode();
}
protected void setNormalMode() {
if(guiEditor != null) {
guiEditor.setObject(getModelObject(), isErrorMode());
updateSelectionProvider();
}
if (treeEditor != null) {
treeEditor.setObject(object, isErrorMode());
}
if (treeFormPage != null) {
treeFormPage.initialize(getModelObject());
treeFormPage.setErrorMode(isErrorMode());
}
}
protected int getGuiPageIndex() {
return 0;
}
public boolean isGuiEditorActive() {
return getActivePage() == getGuiPageIndex();
}
protected void updateSelectionProvider() {
if(guiEditor != null) selectionProvider.addHost("guiEditor", guiEditor.getSelectionProvider()); //$NON-NLS-1$
if(textEditor != null) selectionProvider.addHost("textEditor", getTextSelectionProvider()); //$NON-NLS-1$
int index = getActivePage();
if(index == getSourcePageIndex()) {
if(textEditor != null) {
selectionProvider.setHost(getTextSelectionProvider());
}
return;
}
if(index == 1 || guiEditor == null || guiEditor.getSelectionProvider() == null) {
if (treeEditor != null) {
selectionProvider.setHost(treeEditor.getSelectionProvider());
treeEditor.fireEditorSelected();
}
if (treeFormPage != null) {
selectionProvider.addHost("treeEditor", treeFormPage.getSelectionProvider(), true); //$NON-NLS-1$
}
} else {
ISelectionProvider p = guiEditor.getSelectionProvider();
selectionProvider.setHost(p);
if(p instanceof AbstractSelectionProvider) {
((AbstractSelectionProvider)p).fireSelectionChanged();
}
}
}
protected void pageChange(int newPageIndex) {
super.pageChange(newPageIndex);
if(newPageIndex != getGuiPageIndex()) {
} else {
}
}
public Object getAdapter(Class adapter) {
if(adapter == IContentOutlinePage.class){
if(guiEditor == null || guiEditor.getGUI() == null) {
return super.getAdapter(adapter);
}
Object o = guiEditor.getGUI().getAdapter(adapter);
if(o instanceof DiagramContentOutlinePage) {
DiagramContentOutlinePage g = (DiagramContentOutlinePage)o;
g.setTreeOutline(outline);
}
return o;
}
if(adapter == ActionRegistry.class || adapter == org.eclipse.gef.editparts.ZoomManager.class){
if(guiEditor != null)
if(guiEditor.getGUI() != null)
return guiEditor.getGUI().getAdapter(adapter);
}
if (adapter == EditorDescriptor.class)
return new EditorDescriptor("faces-config"); //$NON-NLS-1$
if(adapter == FacesConfigEditor.class) return this;
return super.getAdapter(adapter);
}
}