/* * 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.Collection; import java.util.Iterator; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.diagram.ui.editor.DiagramEditor; import org.teiid.designer.diagram.ui.editor.DiagramViewer; import org.teiid.designer.mapping.ui.PluginConstants; import org.teiid.designer.mapping.ui.UiPlugin; import org.teiid.designer.metamodels.diagram.Diagram; import org.teiid.designer.metamodels.transformation.MappingClass; import org.teiid.designer.transformation.ui.actions.TransformationGlobalActionsManager; import org.teiid.designer.transformation.util.TransformationHelper; import org.teiid.designer.ui.common.eventsupport.SelectionUtilities; import org.teiid.designer.ui.editors.ModelEditor; import org.teiid.designer.ui.viewsupport.ModelObjectEditHelper; import org.teiid.designer.ui.viewsupport.ModelUtilities; /** * @since 8.0 */ public class MappingObjectEditHelper extends ModelObjectEditHelper { /** * * @since 4.3 */ public MappingObjectEditHelper() { super(); } /* (non-Javadoc) * @See org.teiid.designer.ui.actions.IModelObjectEditHelper#canDelete(java.lang.Object) */ @Override public boolean canDelete(Object obj) { if( obj instanceof EObject ) { // Defect 23466 - Need to put a hack in here to NOT allow deleting if the focused part is Diagram Editor, the diagram is // a transformation & the transformation global actions manager says it can or not. // This is because the SQL Editor global actions may supercede the DiagramEditor's and there is no framework to restore // these actions at the momement. // Let's Check out the selection's source. If it's IWorkbenchPart activePart = UiPlugin.getDefault().getCurrentWorkbenchWindow().getPartService().getActivePart(); if( activePart instanceof ModelEditor ) { IEditorPart activeSubEditorPart = ((ModelEditor)activePart).getActiveEditor(); if( activeSubEditorPart instanceof DiagramEditor ) { DiagramViewer viewer = ((DiagramEditor)activeSubEditorPart).getDiagramViewer(); if( viewer.isValidViewer() && viewer.hasFocus() ) { // Check for T-Diagram Diagram diagram = viewer.getEditor().getDiagram(); if( diagram.getType().equals(PluginConstants.MAPPING_TRANSFORMATION_DIAGRAM_TYPE_ID) ) { EObject vTable = diagram.getTarget(); if( vTable != null ) { EObject transform = TransformationHelper.getTransformationMappingRoot(vTable); if( transform != null ) { IStructuredSelection diagramSelection = (IStructuredSelection)viewer.getSelection(); List selectedObjs = SelectionUtilities.getSelectedEObjects(diagramSelection); if( selectedObjs.contains(obj) ) { return TransformationGlobalActionsManager.canDelete(transform, selectedObjs); } } } } } } } } return true; } /* (non-Javadoc) * @See org.teiid.designer.ui.actions.IModelObjectEditHelper#canDelete(java.lang.Object) */ @Override public boolean canUndoDelete(Object obj) { if ( obj instanceof MappingClass ) { return false; }else if(obj instanceof Collection) { //Defect 23550 //If a collection, return false if any item in the collection is a mapping class final Iterator objs = ((Collection)obj).iterator(); while(objs.hasNext() ) { final Object next = objs.next(); if(next instanceof MappingClass) { return false; } } } return true; } /* (non-Javadoc) * @See org.teiid.designer.ui.actions.IModelObjectEditHelper#canDelete(java.lang.Object) */ public boolean canSplit(Object obj) { return true; } /* (non-Javadoc) * @See org.teiid.designer.ui.actions.IModelObjectEditHelper#canDelete(java.lang.Object) */ public boolean canUndoSplit(Object obj) { return false; } /* (non-Javadoc) * @See org.teiid.designer.ui.actions.IModelObjectEditHelper#canDelete(java.lang.Object) */ public boolean canMerge(Object obj) { return true; } /* (non-Javadoc) * @See org.teiid.designer.ui.actions.IModelObjectEditHelper#canDelete(java.lang.Object) */ public boolean canUndoMerge(Object obj) { return false; } public boolean canEdit(Object obj, Object targetResource) { // We need to return FALSE if the object being edited is a "Source" to a transformation if( obj instanceof EObject && targetResource instanceof ModelResource ) { // Check if the obj's ModelResource is same as target ModelResource mr = ModelUtilities.getModelResourceForModelObject((EObject)obj); if( mr != null && mr == targetResource) { return true; } return false; } return true; } }