| /******************************************************************************* |
| * Copyright (c) 2004, 2006 Sybase, Inc. and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are 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: |
| * Sybase, Inc. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.facesconfig.ui.page; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.notify.Adapter; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.notify.impl.AdapterImpl; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; |
| import org.eclipse.emf.edit.domain.EditingDomain; |
| import org.eclipse.emf.edit.domain.IEditingDomainProvider; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; |
| import org.eclipse.emf.edit.ui.view.ExtendedPropertySheetPage; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.ISelectionProvider; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.jface.viewers.ViewerFilter; |
| import org.eclipse.jface.viewers.ViewerSorter; |
| import org.eclipse.jst.jsf.facesconfig.emf.ApplicationType; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType; |
| import org.eclipse.jst.jsf.facesconfig.emf.FactoryType; |
| import org.eclipse.jst.jsf.facesconfig.emf.LifecycleType; |
| import org.eclipse.jst.jsf.facesconfig.ui.EditorMessages; |
| import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin; |
| import org.eclipse.jst.jsf.facesconfig.ui.FacesConfigEditor; |
| import org.eclipse.jst.jsf.facesconfig.ui.section.AbstractFacesConfigSection; |
| import org.eclipse.jst.jsf.facesconfig.ui.section.ApplicationSection; |
| import org.eclipse.jst.jsf.facesconfig.ui.section.FactorySection; |
| import org.eclipse.jst.jsf.facesconfig.ui.section.LifecycleSection; |
| import org.eclipse.jst.jsf.facesconfig.ui.section.LocaleConfigSection; |
| import org.eclipse.jst.jsf.facesconfig.ui.section.OthersPageBaseSection; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.custom.SashForm; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.ui.IActionBars; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.forms.IManagedForm; |
| import org.eclipse.ui.forms.editor.FormPage; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.ScrolledForm; |
| import org.eclipse.ui.views.contentoutline.ContentOutlinePage; |
| import org.eclipse.ui.views.contentoutline.IContentOutlinePage; |
| import org.eclipse.ui.views.properties.IPropertySheetPage; |
| |
| /** |
| * @author Zhi-peng Zhang, sfshi |
| * @version |
| */ |
| |
| /** |
| * This class is the "Others" page. |
| */ |
| public class OthersPage extends FormPage implements IFacesConfigPage, |
| ISelectionProvider, ISelectionChangedListener, IEditingDomainProvider { |
| |
| private static final String BANNER_IMAGE_FILE = "form_banner.gif"; //$NON-NLS-1$ |
| |
| /** |
| * The id of this page in the faces-config editor. |
| */ |
| public static final String PAGE_ID = "org.eclipse.jst.jsf.facesconfig.ui.page.OthersPage"; //$NON-NLS-1$ |
| |
| private final static Image BANNER_IMAGE = EditorPlugin.getDefault() |
| .getImage(BANNER_IMAGE_FILE); |
| |
| private List leftSections; |
| |
| private List rightSections; |
| |
| private Object input; |
| |
| private List selectionChangedListeners = new ArrayList(); |
| |
| private IPropertySheetPage propertySheetPage; |
| |
| private IContentOutlinePage contentOutlinePage; |
| |
| private ISelection currentSelection; |
| |
| private FacesConfigOthersAdapter _facesConfigOthersAdapter; |
| |
| /** |
| * Constructor of OthersPage; |
| * |
| * @param editor |
| * the facesconfig editor; |
| */ |
| public OthersPage(FacesConfigEditor editor) { |
| super(editor, "OthersPage", //$NON-NLS-1$ |
| EditorMessages.FacesConfigEditor_Others_TabName); |
| } |
| |
| protected void createFormContent(IManagedForm managedForm) { |
| super.createFormContent(managedForm); |
| ScrolledForm form = managedForm.getForm(); |
| form.setText(EditorMessages.OthersPage_Title); |
| form.setBackgroundImage(BANNER_IMAGE); |
| fillBody(managedForm, managedForm.getToolkit()); |
| managedForm.refresh(); |
| } |
| |
| private void initSection(OthersPageBaseSection section, String name, |
| String description, ArrayList list) { |
| section.getSection().setText(name); |
| section.getSection().setDescription(description); |
| section.initialize(); |
| section.addSelectionChangedListener(this); |
| section.getSection().setExpanded(false); |
| section.getSection().setLayoutData( |
| new GridData(GridData.FILL_HORIZONTAL)); |
| list.add(section); |
| } |
| |
| public void dispose() { |
| disposeFormSections(rightSections); |
| disposeFormSections(leftSections); |
| removeAdapterFromInput(getInput()); |
| getSite().setSelectionProvider(null); |
| super.dispose(); |
| } |
| |
| private void disposeFormSections(List sections) { |
| for (int i=0; i < sections.size();i++) { |
| OthersPageBaseSection section = (OthersPageBaseSection) sections.get(i); |
| section.removeSelectionChangedListener(this); |
| section.dispose(); |
| } |
| } |
| |
| private void fillBody(IManagedForm managedForm, FormToolkit toolkit) { |
| Composite body = managedForm.getForm().getBody(); |
| |
| body.setLayout(new GridLayout()); |
| |
| SashForm sashForm = new SashForm(body, SWT.NONE); |
| managedForm.getToolkit().adapt(sashForm, false, false); |
| sashForm.setMenu(body.getMenu()); |
| sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| Composite leftContainer = toolkit.createComposite(sashForm); |
| leftContainer.setLayout(new GridLayout()); |
| |
| ArrayList sectionList = new ArrayList(); |
| |
| OthersPageBaseSection section = new ApplicationSection( |
| FacesConfigPackage.eINSTANCE.getActionListenerType(), |
| leftContainer, managedForm, this, toolkit); |
| initSection(section, EditorMessages.ActionListenerSection_Name, |
| EditorMessages.ActionListenerSection_Description, |
| sectionList); |
| section.getSection().setLayoutData(new GridData(GridData.FILL_BOTH)); |
| section.getSection().setExpanded(true); |
| |
| section = new ApplicationSection(FacesConfigPackage.eINSTANCE |
| .getDefaultRenderKitIdType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, |
| EditorMessages.DefaultRenderKitIDSection_Name, |
| EditorMessages.DefaultRenderKitIDSection_Description, |
| sectionList); |
| |
| section = new LocaleConfigSection(FacesConfigPackage.eINSTANCE |
| .getSupportedLocaleType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, EditorMessages.LocaleConfigSection_Name, |
| EditorMessages.LocaleConfigSection_Description, |
| sectionList); |
| |
| section = new ApplicationSection(FacesConfigPackage.eINSTANCE |
| .getMessageBundleType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, EditorMessages.MessageBundleSection_Name, |
| EditorMessages.MessageBundleSection_Description, |
| sectionList); |
| |
| section = new ApplicationSection(FacesConfigPackage.eINSTANCE |
| .getNavigationHandlerType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, |
| EditorMessages.NavigationHandlerSection_Name, |
| EditorMessages.NavigationHandlerSection_Description, |
| sectionList); |
| |
| section = new ApplicationSection(FacesConfigPackage.eINSTANCE |
| .getPropertyResolverType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, |
| EditorMessages.PropertyResolverSection_Name, |
| EditorMessages.PropertyResolverSection_Description, |
| sectionList); |
| |
| section = new ApplicationSection(FacesConfigPackage.eINSTANCE |
| .getStateManagerType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, EditorMessages.StateManagerSection_Name, |
| EditorMessages.StateManagerSection_Description, |
| sectionList); |
| |
| section = new ApplicationSection(FacesConfigPackage.eINSTANCE |
| .getVariableResolverType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, |
| EditorMessages.VariableResolverSection_Name, |
| EditorMessages.VariableResolverSection_Description, |
| sectionList); |
| |
| section = new ApplicationSection(FacesConfigPackage.eINSTANCE |
| .getViewHandlerType(), leftContainer, managedForm, this, |
| toolkit); |
| initSection(section, EditorMessages.ViewHandlerSection_Name, |
| EditorMessages.ViewHandlerSection_Description, |
| sectionList); |
| |
| leftSections = sectionList; |
| |
| sectionList = new ArrayList(); |
| |
| Composite rightContainer = toolkit.createComposite(sashForm); |
| rightContainer.setLayout(new GridLayout()); |
| rightContainer.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| section = new FactorySection(FacesConfigPackage.eINSTANCE |
| .getApplicationFactoryType(), rightContainer, managedForm, |
| this, toolkit); |
| initSection(section, |
| EditorMessages.ApplicationFactorySection_Name, |
| EditorMessages.ApplicationFactorySection_Description, |
| sectionList); |
| section.getSection().setLayoutData(new GridData(GridData.FILL_BOTH)); |
| section.getSection().setExpanded(true); |
| |
| section = new FactorySection(FacesConfigPackage.eINSTANCE |
| .getFacesContextFactoryType(), rightContainer, managedForm, |
| this, toolkit); |
| initSection(section, |
| EditorMessages.FacesContextFactorySection_Name, |
| EditorMessages.FacesContextFactorySection_Description, |
| sectionList); |
| |
| section = new FactorySection(FacesConfigPackage.eINSTANCE |
| .getLifecycleFactoryType(), rightContainer, managedForm, this, |
| toolkit); |
| initSection(section, |
| EditorMessages.LifecycleFactorySection_Name, |
| EditorMessages.LifecycleFactorySection_Description, |
| sectionList); |
| |
| section = new FactorySection(FacesConfigPackage.eINSTANCE |
| .getRenderKitFactoryType(), rightContainer, managedForm, this, |
| toolkit); |
| initSection(section, |
| EditorMessages.RenderKitFactorySection_Name, |
| EditorMessages.RenderKitFactorySection_Description, |
| sectionList); |
| |
| section = new LifecycleSection(FacesConfigPackage.eINSTANCE |
| .getPhaseListenerType(), rightContainer, managedForm, this, |
| toolkit); |
| initSection(section, EditorMessages.PhaseListenerSection_Name, |
| EditorMessages.PhaseListenerSection_Description, |
| sectionList); |
| |
| rightSections = sectionList; |
| |
| getSite().setSelectionProvider(this); |
| } |
| |
| /** |
| * set input for this page when the it got activated at the first time; if |
| * it's not the first time, then refresh the page. |
| * |
| * @see org.eclipse.ui.forms.editor.FormPage#setActive(boolean) |
| */ |
| public void setActive(boolean active) { |
| super.setActive(active); |
| if (active) { |
| if (getInput() != ((FacesConfigEditor) getEditor()) |
| .getFacesConfig()) { |
| setInput(((FacesConfigEditor) getEditor()).getFacesConfig()); |
| } else { |
| this.refresh(); |
| } |
| } |
| } |
| |
| /** |
| * |
| */ |
| public void setInput(Object input) { |
| if (input instanceof FacesConfigType) { |
| this.input = input; |
| FacesConfigType facesConfig = (FacesConfigType) input; |
| facesConfig.eAdapters().add(getFacesConfigAdapter()); |
| setInputForApplicationSections(facesConfig); |
| setInputForFactorySections(facesConfig); |
| setInputForLifecycleSections(facesConfig); |
| } |
| } |
| |
| private void removeAdapterFromInput(Object input_) { |
| if (_facesConfigOthersAdapter != null && input_ != null && input_ instanceof FacesConfigType) { |
| ((FacesConfigType)input_).eAdapters().remove(_facesConfigOthersAdapter); |
| } |
| } |
| |
| private Adapter getFacesConfigAdapter() { |
| if (_facesConfigOthersAdapter == null) { |
| _facesConfigOthersAdapter = new FacesConfigOthersAdapter(); |
| } |
| return _facesConfigOthersAdapter; |
| } |
| |
| public boolean isEditor() { |
| return true; |
| } |
| |
| /** |
| * Reset the editor input for the application section |
| */ |
| public void resetApplicationInput() { |
| if (getInput() instanceof FacesConfigType) { |
| setInputForApplicationSections((FacesConfigType) getInput()); |
| } |
| } |
| |
| /** |
| * Reset the editor input for the factory sections |
| */ |
| public void resetFactoryInput() { |
| if (getInput() instanceof FacesConfigType) { |
| setInputForFactorySections((FacesConfigType) getInput()); |
| } |
| } |
| |
| /** |
| * Reset the editor input for the lifecycle section |
| */ |
| public void resetLifecycleInput() { |
| if (getInput() instanceof FacesConfigType) { |
| setInputForLifecycleSections((FacesConfigType) getInput()); |
| } |
| } |
| |
| /** |
| * Sets the model for all Application sub-model elements to facesConfig |
| * @param facesConfig |
| */ |
| protected void setInputForApplicationSections(FacesConfigType facesConfig) { |
| ApplicationType application; |
| if (facesConfig.getApplication().size() > 0) { |
| application = (ApplicationType) facesConfig.getApplication().get(0); |
| } else { |
| application = null; |
| } |
| for (Iterator it = leftSections.iterator(); it.hasNext();) { |
| ApplicationSection section = (ApplicationSection) it.next(); |
| section.setInput(application); |
| } |
| } |
| |
| /** |
| * Sets the model for all Factory sub-model elements to facesConfig |
| * @param facesConfig |
| */ |
| protected void setInputForFactorySections(FacesConfigType facesConfig) { |
| FactoryType factory; |
| if (facesConfig.getFactory().size() > 0) { |
| factory = (FactoryType) facesConfig.getFactory().get(0); |
| } else { |
| factory = null; |
| } |
| |
| for (Iterator it = rightSections.iterator(); it.hasNext();) { |
| Object section = it.next(); |
| if (section instanceof FactorySection) |
| ((FactorySection) section).setInput(factory); |
| } |
| } |
| |
| /** |
| * Sets the model for all Lifecycle sub-model elements to facesConfig |
| * @param facesConfig |
| */ |
| protected void setInputForLifecycleSections(FacesConfigType facesConfig) { |
| LifecycleType lifecycle; |
| if (facesConfig.getLifecycle().size() > 0) { |
| lifecycle = (LifecycleType) facesConfig.getLifecycle().get(0); |
| |
| } else { |
| lifecycle = null; |
| } |
| for (Iterator it = rightSections.iterator(); it.hasNext();) { |
| Object section = it.next(); |
| if (section instanceof LifecycleSection) |
| ((LifecycleSection) section).setInput(lifecycle); |
| } |
| } |
| |
| public Object getInput() { |
| return input; |
| } |
| |
| public void refresh() { |
| |
| // only refresh the expanded section; |
| for (int i = 0, n = leftSections.size(); i < n; i++) { |
| OthersPageBaseSection section = (OthersPageBaseSection) leftSections |
| .get(i); |
| if (section.getSection().isExpanded()) { |
| section.refresh(); |
| } |
| } |
| |
| for (int i = 0, n = rightSections.size(); i < n; i++) { |
| OthersPageBaseSection section = (OthersPageBaseSection) leftSections |
| .get(i); |
| if (section.getSection().isExpanded()) { |
| section.refresh(); |
| } |
| } |
| |
| } |
| |
| /** |
| * set other sections' expand state to false, except this section; |
| * |
| * @param section |
| * the section that be expanded. |
| */ |
| public void closeOtherSections(AbstractFacesConfigSection section) { |
| OthersPageBaseSection[] sections; |
| if (leftSections.contains(section)) { |
| sections = (OthersPageBaseSection[]) leftSections |
| .toArray(new OthersPageBaseSection[leftSections.size()]); |
| } else { |
| sections = (OthersPageBaseSection[]) rightSections |
| .toArray(new OthersPageBaseSection[rightSections.size()]); |
| } |
| for (int i = 0, n = sections.length; i < n; i++) { |
| AbstractFacesConfigSection aSection = sections[i]; |
| if (aSection != section && aSection.getSection().isExpanded()) { |
| aSection.getSection().setExpanded(false); |
| GridData gd = new GridData(GridData.FILL_HORIZONTAL); |
| aSection.getSection().setLayoutData(gd); |
| } |
| } |
| } |
| |
| /** |
| * An adapter on faces config. |
| * |
| * @author sfshi |
| * |
| */ |
| class FacesConfigOthersAdapter extends AdapterImpl { |
| public void notifyChanged(Notification msg) { |
| if (msg.getEventType() == Notification.REMOVE |
| || msg.getEventType() == Notification.ADD) { |
| if (msg.getFeature() == FacesConfigPackage.eINSTANCE |
| .getFacesConfigType_Application()) { |
| if (Thread.currentThread() == PlatformUI.getWorkbench().getDisplay().getThread()) { |
| resetApplicationInput(); |
| } else { |
| PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { |
| public void run() { |
| resetApplicationInput(); |
| } |
| }); |
| } |
| } else if (msg.getFeature() == FacesConfigPackage.eINSTANCE |
| .getFacesConfigType_Factory()) { |
| if (Thread.currentThread() == PlatformUI.getWorkbench().getDisplay().getThread()) { |
| resetFactoryInput(); |
| } else { |
| PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { |
| public void run() { |
| resetFactoryInput(); |
| } |
| }); |
| } |
| } else if (msg.getFeature() == FacesConfigPackage.eINSTANCE |
| .getFacesConfigType_Lifecycle()) { |
| if (Thread.currentThread() == PlatformUI.getWorkbench().getDisplay().getThread()) { |
| resetLifecycleInput(); |
| } else { |
| PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { |
| public void run() { |
| resetLifecycleInput(); |
| } |
| }); |
| } |
| } |
| } |
| } |
| } |
| |
| public void addSelectionChangedListener(ISelectionChangedListener listener) { |
| // TODO Auto-generated method stub |
| |
| selectionChangedListeners.add(listener); |
| } |
| |
| public ISelection getSelection() { |
| if (currentSelection != null) |
| return currentSelection; |
| |
| return StructuredSelection.EMPTY; |
| } |
| |
| public void removeSelectionChangedListener( |
| ISelectionChangedListener listener) { |
| // TODO Auto-generated method stub |
| |
| selectionChangedListeners.remove(listener); |
| } |
| |
| public void selectionChanged(SelectionChangedEvent event) { |
| currentSelection = event.getSelection(); |
| if (event.getSource() instanceof OthersPageBaseSection) { |
| OthersPageBaseSection source = (OthersPageBaseSection) event |
| .getSource(); |
| |
| if (source.getSection().isExpanded()) { |
| for (int i = 0, n = selectionChangedListeners.size(); i < n; i++) { |
| ((ISelectionChangedListener) selectionChangedListeners |
| .get(i)).selectionChanged(event); |
| } |
| } |
| } |
| } |
| |
| /** |
| * get the section that is expanded. |
| * |
| * @return the page section |
| */ |
| protected OthersPageBaseSection getActiveSection() { |
| for (int i = 0, n = leftSections.size(); i < n; i++) { |
| |
| OthersPageBaseSection section = (OthersPageBaseSection) leftSections |
| .get(i); |
| if (section.getSection().isExpanded()) { |
| return section; |
| } |
| } |
| |
| for (int i = 0, n = rightSections.size(); i < n; i++) { |
| |
| OthersPageBaseSection section = (OthersPageBaseSection) leftSections |
| .get(i); |
| if (section.getSection().isExpanded()) { |
| return section; |
| } |
| } |
| return null; |
| |
| } |
| |
| public Object getAdapter(Class adapter) { |
| |
| if (adapter == IPropertySheetPage.class) { |
| return getPropertySheetPage(); |
| } |
| |
| if (adapter == IContentOutlinePage.class) { |
| return getOutlinePage(); |
| } |
| |
| return super.getAdapter(adapter); |
| } |
| |
| private IPropertySheetPage getPropertySheetPage() { |
| |
| AdapterFactoryEditingDomain editingDomain = (AdapterFactoryEditingDomain) getEditor() |
| .getAdapter(EditingDomain.class); |
| AdapterFactory adapterFactory = (AdapterFactory) getEditor() |
| .getAdapter(AdapterFactory.class); |
| if (propertySheetPage == null) { |
| propertySheetPage = new ExtendedPropertySheetPage(editingDomain) { |
| public void setSelectionToViewer(List selection) { |
| // FacesConfigEditor.this.setSelectionToViewer(selection); |
| // FacesConfigEditor.this.setFocus(); |
| } |
| |
| public void setActionBars(IActionBars actionBars) { |
| super.setActionBars(actionBars); |
| // getActionBarContributor().shareGlobalActions(this, |
| // actionBars); |
| } |
| }; |
| ((ExtendedPropertySheetPage) propertySheetPage) |
| .setPropertySourceProvider(new AdapterFactoryContentProvider( |
| adapterFactory)); |
| // this.addSelectionChangedListener((ExtendedPropertySheetPage) |
| // propertySheetPage); |
| } |
| |
| return propertySheetPage; |
| |
| } |
| |
| private IContentOutlinePage getOutlinePage() { |
| |
| if (contentOutlinePage == null) { |
| // The content outline is just a tree. |
| // |
| class OthersContentOutlinePage extends ContentOutlinePage { |
| public void createControl(Composite parent) { |
| super.createControl(parent); |
| TreeViewer contentOutlineViewer = getTreeViewer(); |
| contentOutlineViewer.addSelectionChangedListener(this); |
| |
| AdapterFactory adapterFactory = (AdapterFactory) getEditor() |
| .getAdapter(AdapterFactory.class); |
| // Set up the tree viewer. |
| contentOutlineViewer |
| .setContentProvider(new AdapterFactoryContentProvider( |
| adapterFactory)); |
| contentOutlineViewer |
| .setLabelProvider(new AdapterFactoryLabelProvider( |
| adapterFactory)); |
| contentOutlineViewer.addFilter(new ViewerFilter() { |
| |
| public boolean select(Viewer viewer, |
| Object parentElement, Object element) { |
| return FacesConfigPackage.eINSTANCE |
| .getApplicationType().isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getFactoryType().isInstance( |
| element) |
| || FacesConfigPackage.eINSTANCE |
| .getLifecycleType().isInstance( |
| element) |
| || FacesConfigPackage.eINSTANCE |
| .getActionListenerType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getDefaultRenderKitIdType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getLocaleConfigType().isInstance( |
| element) |
| || FacesConfigPackage.eINSTANCE |
| .getDefaultLocaleType().isInstance( |
| element) |
| || FacesConfigPackage.eINSTANCE |
| .getSupportedLocaleType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getMessageBundleType().isInstance( |
| element) |
| || FacesConfigPackage.eINSTANCE |
| .getNavigationHandlerType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getPropertyResolverType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getStateManagerType().isInstance( |
| element) |
| || FacesConfigPackage.eINSTANCE |
| .getVariableResolverType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getViewHandlerType().isInstance( |
| element) |
| || FacesConfigPackage.eINSTANCE |
| .getApplicationFactoryType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getFacesContextFactoryType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getLifecycleFactoryType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getRenderKitFactoryType() |
| .isInstance(element) |
| || FacesConfigPackage.eINSTANCE |
| .getPhaseListenerType().isInstance( |
| element) |
| |
| ; |
| } |
| }); |
| |
| contentOutlineViewer.setSorter(new ViewerSorter()); |
| contentOutlineViewer.setInput(getInput()); |
| } |
| |
| } |
| |
| contentOutlinePage = new OthersContentOutlinePage(); |
| |
| // Listen to selection so that we can handle it is a special |
| // way. |
| // |
| contentOutlinePage |
| .addSelectionChangedListener(new ISelectionChangedListener() { |
| // This ensures that we handle selections correctly. |
| public void selectionChanged(SelectionChangedEvent event) { |
| setSelection(event.getSelection()); |
| } |
| }); |
| |
| } |
| |
| return contentOutlinePage; |
| |
| } |
| |
| /** |
| * handle the selection changed event from outline page. |
| * |
| * @param selection |
| */ |
| public void setSelection(ISelection selection) { |
| |
| if (selection instanceof IStructuredSelection) { |
| IStructuredSelection ss = (IStructuredSelection) selection; |
| if (ss.isEmpty()) |
| return; |
| |
| final EObject object = (EObject) ss.getFirstElement(); |
| OthersPageBaseSection section = null; |
| |
| if (FacesConfigPackage.eINSTANCE.getActionListenerType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(0); |
| } else if (FacesConfigPackage.eINSTANCE.getDefaultRenderKitIdType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(1); |
| } else if (FacesConfigPackage.eINSTANCE.getLocaleConfigType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(2); |
| } else if (FacesConfigPackage.eINSTANCE.getDefaultLocaleType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(2); |
| } else if (FacesConfigPackage.eINSTANCE.getSupportedLocaleType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(2); |
| } else if (FacesConfigPackage.eINSTANCE.getMessageBundleType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(3); |
| } else if (FacesConfigPackage.eINSTANCE.getNavigationHandlerType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(4); |
| } else if (FacesConfigPackage.eINSTANCE.getPropertyResolverType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(5); |
| } else if (FacesConfigPackage.eINSTANCE.getStateManagerType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(6); |
| } else if (FacesConfigPackage.eINSTANCE.getVariableResolverType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(7); |
| } else if (FacesConfigPackage.eINSTANCE.getViewHandlerType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) leftSections.get(8); |
| } else if (FacesConfigPackage.eINSTANCE.getApplicationFactoryType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) rightSections.get(0); |
| } else if (FacesConfigPackage.eINSTANCE |
| .getFacesContextFactoryType().isInstance(object)) { |
| section = (OthersPageBaseSection) rightSections.get(1); |
| } else if (FacesConfigPackage.eINSTANCE.getLifecycleFactoryType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) rightSections.get(2); |
| } else if (FacesConfigPackage.eINSTANCE.getRenderKitFactoryType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) rightSections.get(3); |
| } else if (FacesConfigPackage.eINSTANCE.getPhaseListenerType() |
| .isInstance(object)) { |
| section = (OthersPageBaseSection) rightSections.get(4); |
| } |
| if (section != null) { |
| if ((Thread.currentThread() == PlatformUI.getWorkbench().getDisplay().getThread())) { |
| setSelectionInSection(section, object); |
| } |
| else { |
| final OthersPageBaseSection baseSection = section; |
| PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() { |
| public void run() { |
| setSelectionInSection(baseSection, object); |
| } |
| }); |
| } |
| } |
| } |
| } |
| |
| private void setSelectionInSection(final OthersPageBaseSection section, final Object object) { |
| if (!section.getSection().isExpanded()) { |
| this.closeOtherSections(section); |
| GridData gd = new GridData(GridData.FILL_BOTH); |
| section.getSection().setLayoutData(gd); |
| section.getSection().setExpanded(true); |
| } |
| IStructuredSelection newselection = new StructuredSelection( |
| object); |
| section.getTableViewer().setSelection(newselection); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.domain.IEditingDomainProvider#getEditingDomain() |
| */ |
| public EditingDomain getEditingDomain() { |
| return ((FacesConfigEditor) getEditor()).getEditingDomain(); |
| } |
| } |