//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation and others. // 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: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.diagram.core.commands; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Set; import org.eclipse.draw2d.geometry.Point; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.epf.diagram.core.DiagramCorePlugin; import org.eclipse.epf.diagram.model.util.TxUtil; import org.eclipse.epf.library.edit.command.IResourceAwareCommand; import org.eclipse.gef.commands.Command; import org.eclipse.gmf.runtime.diagram.core.util.ViewUtil; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.View; /** * Command for change view dimensions. * * @author Shashidhar Kannoori * @since 1.2 */ public class ChangeBoundsCommand extends Command implements IResourceAwareCommand { private static final String label = "change bounds command label"; //$NON-NLS-1$ private TransactionalEditingDomain domain; private View view; private int width; private int height; private Point location; private Point oldLocation; private int oldWidth; private int oldHeight; /** * */ public ChangeBoundsCommand(TransactionalEditingDomain domain, View view, Point location, int width, int height) { super(label); this.domain = domain; this.view = view; this.width = width; this.height = height; this.location = location; } @Override public boolean canExecute() { return (this.width != 0 || this.height != 0); } @Override public void execute() { try { TxUtil.runInTransaction(domain, new Runnable() { public void run() { oldLocation = new Point(); Object x = ViewUtil.getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_X()); if(x != null){ oldLocation.x = ((Integer)x).intValue(); } Object y = ViewUtil.getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_Y()); if(y != null){ oldLocation.y = ((Integer) y).intValue(); } oldWidth = ((Integer) ViewUtil.getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Width())).intValue(); oldHeight = ((Integer) ViewUtil.getStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Height())).intValue(); if (location != null) { ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_X(), new Integer( location.x)); ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_Y(), new Integer( location.y)); } if (width > 0) { ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Width(), new Integer( width)); } if (height > 0) { ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Height(), new Integer(height)); } } }); } catch (Exception e) { DiagramCorePlugin.getDefault().getLogger().logError("Error in changebounds command :", e); //$NON-NLS-1$ undo(); } } @Override public void undo() { try { TxUtil.runInTransaction(domain, new Runnable() { public void run() { if (oldLocation != null) { ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_X(), new Integer( location.x)); ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getLocation_Y(), new Integer( location.y)); } if (oldWidth != width) { ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Width(), new Integer( width)); } if (oldHeight > height) { ViewUtil.setStructuralFeatureValue(view, NotationPackage.eINSTANCE.getSize_Height(), new Integer(height)); } } }); } catch (Exception e) { } } public Collection getModifiedResources() { Set<Resource> set = new HashSet<Resource>(); set.add(view.eResource()); if (!set.isEmpty()) return set; return Collections.EMPTY_LIST; } public org.eclipse.emf.common.command.Command chain( org.eclipse.emf.common.command.Command command) { // TODO Auto-generated method stub return null; } public Collection getAffectedObjects() { // TODO Auto-generated method stub return null; } public String getDescription() { // TODO Auto-generated method stub return null; } public Collection getResult() { // TODO Auto-generated method stub return null; } }