/* * 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.emf.common.notify.Notification; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.impl.EStringToStringMapEntryImpl; import org.eclipse.emf.edit.provider.INotifyChangedListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.views.properties.PropertySheetPage; import org.teiid.designer.core.notification.util.NotificationUtilities; import org.teiid.designer.metamodels.core.Annotation; import org.teiid.designer.ui.common.eventsupport.SelectionUtilities; import org.teiid.designer.ui.properties.ModelObjectPropertySheetPage; import org.teiid.designer.ui.properties.udp.UserDefinedPropertySourceProvider; import org.teiid.designer.ui.viewsupport.ModelUtilities; /** * TagsView is a properties view for the user-defined properties on an EObject. * * @since 8.0 */ public class TagsView extends ModelerView implements INotifyChangedListener { PropertySheetPage page; /** * Construct an instance of TagsView. */ public TagsView() { super(); } /** * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ @Override public void createPartControl( Composite parent ) { super.createPartControl(parent); page = new ModelObjectPropertySheetPage(); page.setPropertySourceProvider(new UserDefinedPropertySourceProvider()); page.createControl(parent); getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(page); ISelection selection = getSite().getWorkbenchWindow().getSelectionService().getSelection(); if (selection != null) { super.selectionProvider.setSelection(selection); page.selectionChanged(this, selection); } ModelUtilities.addNotifyChangedListener(this); } /** * @see org.eclipse.ui.IWorkbenchPart#setFocus() */ @Override public void setFocus() { page.setFocus(); } /** * @see org.eclipse.ui.IWorkbenchPart#dispose() */ @Override public void dispose() { getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(page); ModelUtilities.removeNotifyChangedListener(this); super.dispose(); } /** * @see org.eclipse.emf.edit.provider.INotifyChangedListener#notifyChanged(org.eclipse.emf.common.notify.Notification) */ @Override public void notifyChanged( Notification notification ) { // compare the current EObject with the notification target EObject target = NotificationUtilities.getEObject(notification); // changes to extended properties are on the annotation if (target instanceof EStringToStringMapEntryImpl) { EObject mightBeAnnotation = ((EStringToStringMapEntryImpl)target).eContainer(); if (mightBeAnnotation instanceof Annotation) { target = ((Annotation)mightBeAnnotation).getAnnotatedObject(); } } ISelection currentSelection = super.selectionProvider.getSelection(); EObject object = SelectionUtilities.getSelectedEObject(currentSelection); if (object != null) { if (object.equals(target)) { Display.getCurrent().asyncExec(new Runnable() { @Override public void run() { page.refresh(); } }); } } } }