/* * 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.actions.workers; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IEditorPart; import org.teiid.core.designer.ModelerCoreException; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.metamodels.diagram.Diagram; import org.teiid.designer.ui.UiConstants; import org.teiid.designer.ui.common.eventsupport.SelectionUtilities; import org.teiid.designer.ui.editors.ModelEditor; import org.teiid.designer.ui.table.ModelTableEditor; import org.teiid.designer.ui.viewsupport.DiagramHelperManager; import org.teiid.designer.ui.viewsupport.ModelObjectEditHelperManager; /** * @since 8.0 */ public class CopyWorker extends ModelObjectWorker { private static final String PROBLEM = "CopyWorker.problem"; //$NON-NLS-1$ /** * * @since 4.2 */ public CopyWorker(boolean enableAfterExecute) { super(enableAfterExecute); } /** * @see org.teiid.designer.ui.common.actions.IActionWorker#getEnableState() * @since 4.2 */ @Override public boolean setEnabledState() { boolean enable = false; Object selection = getSelection(); if( selection instanceof ISelection && canLegallyEditResource() ) { ISelection iSelection = (ISelection)selection; if( SelectionUtilities.isSingleSelection(iSelection)) { final EObject obj = SelectionUtilities.getSelectedEObject(iSelection); if ( obj instanceof Diagram ) { enable = DiagramHelperManager.canCopy((Diagram) obj); } else { // Now we check if edit helpers will veto this copy enable = (obj != null) && ModelObjectEditHelperManager.canCopy(obj); /* && ModelerCore.getModelEditor().isPasteable(obj)*/ } } else if( SelectionUtilities.isMultiSelection(iSelection)) { final List eObjectList = SelectionUtilities.getSelectedEObjects(iSelection); enable = (eObjectList != null && !eObjectList.isEmpty()); // Now we check if edit helpers will veto this copy if( enable ) { EObject nextEObj = null; for( Iterator iter = eObjectList.iterator(); iter.hasNext(); ) { nextEObj = (EObject)iter.next(); if( !ModelObjectEditHelperManager.canCopy(nextEObj)) { enable = false; break; } } } } } return enable; } /** * @see org.teiid.designer.ui.common.actions.IActionWorker#execute() * @since 4.2 */ @Override public boolean execute() { boolean successful = false; Object selection = getSelection(); if( selection instanceof ISelection && canLegallyEditResource() ) { ISelection iSelection = (ISelection)selection; if( SelectionUtilities.isSingleSelection(iSelection)) { final EObject obj = SelectionUtilities.getSelectedEObject(iSelection); try { ModelerCore.getModelEditor().copyToClipboard(obj); successful = true; } catch (final ModelerCoreException err) { final String msg = UiConstants.Util.getString(PROBLEM, new Object[] {obj}); UiConstants.Util.log(IStatus.ERROR, err, msg); } } else if( SelectionUtilities.isMultiSelection(iSelection)) { final List eObjectList = SelectionUtilities.getSelectedEObjects(iSelection); try { ModelerCore.getModelEditor().copyAllToClipboard(eObjectList); successful = true; } catch (final ModelerCoreException err) { final String msg = UiConstants.Util.getString(PROBLEM, new Object[] {eObjectList}); UiConstants.Util.log(IStatus.ERROR, err, msg); } } // jh Defect 19246: Add copy to System Clipboard doTableCopy(); } return successful; } /* (non-Javadoc) * see org.teiid.designer.ui.common.actions.AbstractAction#doRun() */ protected void doTableCopy() { ModelTableEditor mte = getTableEditor(); if ( mte != null ) { mte.copySelectedToSystemClipboard(); } } private ModelTableEditor getTableEditor() { ModelTableEditor result = null; IEditorPart editor = getActiveEditor(); if (editor instanceof ModelEditor) { ModelEditor modelEditor = (ModelEditor)editor; IEditorPart subEditor = modelEditor.getActiveEditor(); if (subEditor instanceof ModelTableEditor) { result = (ModelTableEditor)subEditor; } } return result; } }