/* * 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.mapping.ui.actions; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.EObject; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.core.workspace.ModelWorkspaceException; import org.teiid.designer.diagram.ui.DiagramUiConstants; import org.teiid.designer.diagram.ui.DiagramUiPlugin; import org.teiid.designer.diagram.ui.actions.DiagramEditorAction; import org.teiid.designer.diagram.ui.model.DiagramModelNode; import org.teiid.designer.mapping.ui.PluginConstants; import org.teiid.designer.mapping.ui.UiConstants; import org.teiid.designer.mapping.ui.diagram.MappingDiagramUtil; import org.teiid.designer.metamodels.diagram.Diagram; import org.teiid.designer.ui.common.util.UiUtil; import org.teiid.designer.ui.editors.ModelEditorManager; import org.teiid.designer.ui.viewsupport.ModelUtilities; /** * ShowParentDiagramAction * * @since 8.0 */ public class ShowParentDiagramAction extends DiagramEditorAction { private static final String textString = "org.teiid.designer.mapping.ui.actions.ShowParentDiagramAction.text"; //$NON-NLS-1$ private static final String toolTipString = "org.teiid.designer.mapping.ui.actions.ShowParentDiagramAction.toolTip"; //$NON-NLS-1$ /** * Construct an instance of ShowParentDiagramAction. * */ public ShowParentDiagramAction() { super(); setImageDescriptor(DiagramUiPlugin.getDefault().getImageDescriptor(DiagramUiConstants.Images.UP_PACKAGE_DIAGRAM)); setToolTipText(UiConstants.Util.getString(toolTipString)); setText(UiConstants.Util.getString(textString)); setEnabled(false); } /* (non-Javadoc) * see org.teiid.designer.ui.common.actions.AbstractAction#doRun() */ @Override protected void doRun() { if( editor != null ) { // CLose object editor ModelEditorManager.closeObjectEditor(); Diagram diagram = getParentDiagram(); if( diagram != null ) { // Mark current navigation location using current open object UiUtil.getWorkbenchPage().getNavigationHistory().markLocation(editor); ModelEditorManager.closeObjectEditor(); editor.openContext(diagram); } } determineEnablement(); } public void determineEnablement() { if( editor != null ) { Diagram diagram = getParentDiagram(); if( diagram != null ) setEnabled(true); else setEnabled(false); } } private Diagram getParentDiagram() { Diagram parentDiagram = null; DiagramModelNode diagramNode = editor.getCurrentModel(); if( diagramNode != null ) { Diagram currentDiagram = (Diagram)diagramNode.getModelObject(); if( currentDiagram != null && currentDiagram.getType() != null ) { ModelResource modelResource = ModelUtilities.getModelResourceForModelObject(currentDiagram); if( modelResource != null ) { if( currentDiagram.getType().equals(PluginConstants.MAPPING_DIAGRAM_TYPE_ID) ) { Object diagramTarget = currentDiagram.getTarget(); if( diagramTarget != null && diagramTarget instanceof EObject ) { // This is a package under a model, so..... get the diagram for the resource? try { // get diagrams and find package diagram. List diagramList = modelResource.getModelDiagrams().getDiagrams(null); Iterator iter = diagramList.iterator(); Diagram nextDiagram = null; while( iter.hasNext() && parentDiagram == null ) { nextDiagram = (Diagram)iter.next(); if( nextDiagram.getType() != null && nextDiagram.getType().equals(org.teiid.designer.diagram.ui.PluginConstants.PACKAGE_DIAGRAM_TYPE_ID) ) { parentDiagram = nextDiagram; } // endif } // endwhile // defect 16988 - create the parent if it doesn't exist yet: if (parentDiagram == null) { // we need to create the package diagram, since it has not existed before. // Doing this will make the model dirty. parentDiagram = DiagramUiPlugin.getDiagramTypeManager().getDiagramForContext(modelResource); } // endif } catch (ModelWorkspaceException e) { String message = "ShowParentDiagramAction cannot find parent package diagram"; //$NON-NLS-1$ DiagramUiConstants.Util.log(IStatus.ERROR, e, message); } } } else if( currentDiagram.getType().equals(PluginConstants.MAPPING_TRANSFORMATION_DIAGRAM_TYPE_ID) ) { parentDiagram = MappingDiagramUtil.getCoarseMappingDiagram(currentDiagram); } } } } return parentDiagram; } }