/******************************************************************************* * <copyright> * * Copyright (c) 2005, 2010 SAP AG. * 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: * SAP AG - initial API, implementation and documentation * mwenz - Bug 340627 - Features should be able to indicate cancellation * Bug 336488 - DiagramEditor API * pjpaulin - Bug 352120 - Now uses IDiagramContainerUI interface * * </copyright> * *******************************************************************************/ package org.eclipse.graphiti.ui.platform; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.gef.EditPart; import org.eclipse.graphiti.dt.IDiagramTypeProvider; import org.eclipse.graphiti.features.IFeature; import org.eclipse.graphiti.features.context.IContext; import org.eclipse.graphiti.internal.command.CommandExec; import org.eclipse.graphiti.mm.pictograms.Diagram; import org.eclipse.graphiti.mm.pictograms.PictogramElement; import org.eclipse.graphiti.platform.IDiagramContainer; import org.eclipse.graphiti.platform.IDiagramEditor; import org.eclipse.graphiti.ui.internal.T; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.part.IContributedContentsView; import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; /** * The Class GFPropertySection. */ public abstract class GFPropertySection extends AbstractPropertySection implements PropertyChangeListener { /** * @return the selected pictogram element. */ protected PictogramElement getSelectedPictogramElement() { if (getSelection() instanceof StructuredSelection) { StructuredSelection structuredSelection = (StructuredSelection) getSelection(); Object firstElement = structuredSelection.getFirstElement(); if (firstElement instanceof PictogramElement) { return (PictogramElement) firstElement; } EditPart editPart = null; if (firstElement instanceof EditPart) { editPart = (EditPart) firstElement; } else if (firstElement instanceof IAdaptable) { editPart = (EditPart) ((IAdaptable) firstElement).getAdapter(EditPart.class); } if (editPart != null && editPart.getModel() instanceof PictogramElement) { return (PictogramElement) editPart.getModel(); } } return null; } /** * Executes the feature and adds it to the command stack. * * @param feature * the feature * @param context * the context */ public void execute(IFeature feature, IContext context) { try { CommandExec.executeFeatureWithContext(feature, context); } catch (Exception e) { if (e instanceof OperationCanceledException) { // Just log it as info (operation was cancelled on purpose) T.racer().log(IStatus.INFO, "GFCommandStack.execute(Command) " + e, e); //$NON-NLS-1$ } else { // Just log it as an error T.racer().error("GFCommandStack.execute(Command) " + e, e); //$NON-NLS-1$ } } } public void propertyChange(PropertyChangeEvent evt) { refresh(); } /** * @return the {@link IDiagramEditor} diagram editor. * @deprecated Use {@link #getDiagramContainer()} instead */ protected IDiagramEditor getDiagramEditor() { IWorkbenchPart part = getPart(); IDiagramEditor ret = checkAdapter(part, IDiagramEditor.class); if (ret != null) { return ret; } IContributedContentsView contributedView = (IContributedContentsView) part.getAdapter(IContributedContentsView.class); if (contributedView != null) { part = contributedView.getContributingPart(); } ret = checkAdapter(part, IDiagramEditor.class); return ret; } @SuppressWarnings("unchecked") private <U> U checkAdapter(IAdaptable adaptable, Class<U> clazz) { if (clazz.isInstance(adaptable)) { return (U) adaptable; } return (U) adaptable.getAdapter(clazz); } /** * @return the {@link IDiagramContainer}. * @since 0.10 */ protected IDiagramContainer getDiagramContainer() { IWorkbenchPart part = getPart(); IDiagramContainer ret = checkAdapter(part, IDiagramContainer.class); if (ret != null) { return ret; } IContributedContentsView contributedView = (IContributedContentsView) part .getAdapter(IContributedContentsView.class); if (contributedView != null) { part = contributedView.getContributingPart(); } ret = checkAdapter(part, IDiagramContainer.class); return ret; } /** * @return the diagram. */ protected Diagram getDiagram() { IDiagramTypeProvider diagramTypeProvider = getDiagramTypeProvider(); if (diagramTypeProvider == null) { return null; } return diagramTypeProvider.getDiagram(); } /** * @return the diagram type provider. */ protected IDiagramTypeProvider getDiagramTypeProvider() { IDiagramContainer diagramContainer = getDiagramContainer(); if (diagramContainer == null) { return null; } return diagramContainer.getDiagramTypeProvider(); } }