/******************************************************************************* * 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(); } }