/******************************************************************************* * Copyright (c) 2007 Spring IDE Developers * 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: * Spring IDE Developers - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.webflow.ui.graph.commands; import org.eclipse.gef.commands.Command; import org.springframework.ide.eclipse.webflow.core.model.ICloneableModelElement; import org.springframework.ide.eclipse.webflow.core.model.IStateTransition; import org.springframework.ide.eclipse.webflow.core.model.ITransitionableTo; import org.springframework.ide.eclipse.webflow.core.model.IWebflowModelElement; /** * @author Christian Dupuis */ public class EditPropertiesCommand extends Command { private IWebflowModelElement child = null; private ITransitionableTo newTarget = null; private ICloneableModelElement<IWebflowModelElement> oldChild = null; private ITransitionableTo oldTarget = null; private boolean onlyReconnect = false; private IWebflowModelElement undoChild = null; public EditPropertiesCommand() { super("Properties"); } /* * (non-Javadoc) * @see org.eclipse.gef.commands.Command#execute() */ public void execute() { if (!onlyReconnect) { IWebflowModelElement tempChild = ((ICloneableModelElement<IWebflowModelElement>) child) .cloneModelElement(); oldChild.applyCloneValues(tempChild); } if (oldChild instanceof IStateTransition && newTarget != null) { oldTarget = ((IStateTransition) oldChild).getToState(); ((IStateTransition) oldChild).setToState(newTarget); } } public IWebflowModelElement getChild() { return child; } public IWebflowModelElement getChildClone() { return this.child; } /* * (non-Javadoc) * @see org.eclipse.gef.commands.Command#redo() */ public void redo() { execute(); } public void setChild(ICloneableModelElement<IWebflowModelElement> oldChild) { this.oldChild = oldChild; // don't work on orginal domain model object this.child = oldChild.cloneModelElement(); this.undoChild = oldChild.cloneModelElement(); } public void setChild(ICloneableModelElement<IWebflowModelElement> oldChild, IWebflowModelElement newChild) { this.oldChild = oldChild; // don't work on orginal domain model object this.child = newChild; this.undoChild = oldChild.cloneModelElement(); } public void setNewTarget(ITransitionableTo newTarget) { this.newTarget = newTarget; } public void setOnlyReconnect(boolean onlyReconnect) { this.onlyReconnect = onlyReconnect; } /* * (non-Javadoc) * @see org.eclipse.gef.commands.Command#undo() */ public void undo() { if (!onlyReconnect) { IWebflowModelElement tempChild = ((ICloneableModelElement<IWebflowModelElement>) undoChild) .cloneModelElement(); oldChild.applyCloneValues(tempChild); } if (oldChild instanceof IStateTransition && newTarget != null && oldTarget != null) { ((IStateTransition) oldChild).setToState(oldTarget); } } }