/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.ui.views; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.views.properties.IPropertySheetPage; import org.eclipse.ui.views.properties.PropertySheet; import org.teiid.designer.ui.common.eventsupport.SelectionProvider; import org.teiid.designer.ui.properties.ModelObjectPropertySourceProvider; import org.teiid.designer.ui.undo.IUndoManager; import org.teiid.designer.ui.viewsupport.ModelUtilities; import org.teiid.designer.ui.viewsupport.StatusBarUpdater; /** * ModelerView is a base class for adding property and status bar support to ViewParts in the Modeler. * * @since 8.0 */ public abstract class ModelerView extends ViewPart { protected ModelObjectPropertySourceProvider propertySourceProvider; protected ISelectionProvider selectionProvider = new SelectionProvider(); protected ISelectionListener selectionListener; protected StatusBarUpdater statusBarListener; /** * Construct an instance of ModelerView. * */ public ModelerView() { super(); } /* (non-Javadoc) * @see org.eclipse.ui.IViewPart#init(org.eclipse.ui.IViewSite) */ @Override public void init(IViewSite site) throws PartInitException { super.init(site); site.setSelectionProvider(selectionProvider); this.selectionListener = new ISelectionListener() { @Override public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (part != ModelerView.this && !(part instanceof PropertySheet)) { selectionProvider.setSelection(selection); } } }; site.getWorkbenchWindow().getSelectionService().addSelectionListener(this.selectionListener); } protected ISelectionChangedListener getStatusBarListener() { return statusBarListener; } /** * Overridden from super to provide the PropertySheet for EObject, since EObject * does not implement IAdaptable * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) * @since 4.0 */ @Override public Object getAdapter(Class key) { if (key.equals(IPropertySheetPage.class)) { if (propertySourceProvider == null) { propertySourceProvider = ModelUtilities.getPropertySourceProvider(); // new ModelObjectPropertySourceProvider(); } return propertySourceProvider.getPropertySheetPage(); } if (key.equals(IUndoManager.class)) { return getUndoManager(); } return super.getAdapter(key); } protected IUndoManager getUndoManager() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ @Override public void createPartControl(Composite parent) { // hook up our status bar manager for EObjects IStatusLineManager slManager = getViewSite().getActionBars().getStatusLineManager(); statusBarListener = new StatusBarUpdater(slManager); selectionProvider.addSelectionChangedListener(statusBarListener); // set the initial selection to the current workbench selection ISelection selection = getSite().getWorkbenchWindow().getSelectionService().getSelection(); if (selection != null) { selectionProvider.setSelection(selection); } } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ @Override public void dispose() { getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(this.selectionListener); super.dispose(); } }