/******************************************************************************* * Copyright (c) 2007, 2008 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.core.internal.model; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.springframework.ide.eclipse.core.model.IModelElement; import org.springframework.ide.eclipse.core.model.IModelElementVisitor; import org.springframework.ide.eclipse.webflow.core.model.IIf; import org.springframework.ide.eclipse.webflow.core.model.IIfTransition; import org.springframework.ide.eclipse.webflow.core.model.ITransitionableTo; import org.springframework.ide.eclipse.webflow.core.model.IWebflowState; import org.w3c.dom.Node; /** * @author Christian Dupuis * @since 2.0 */ public class IfTransition extends Transition implements IIfTransition { /** * The is then. */ private boolean isThen; /** * The Constructor. * @param webflowState the webflow state * @param isThen the is then */ public IfTransition(IWebflowState webflowState, boolean isThen) { super(webflowState); this.isThen = isThen; } /** * Checks if is then. * @return true, if is then */ public boolean isThen() { return isThen; } /** * Sets the then. * @param isThen then */ public void setThen(boolean isThen) { boolean oldValue = this.isThen; this.isThen = isThen; super.firePropertyChange(PROPS, new Boolean(oldValue), new Boolean( isThen)); } /** * Gets the from if. * @return the from if */ public IIf getFromIf() { return (IIf) this.parent; } /** * Sets the from if. * @param fromIf the from if */ public void setFromIf(IIf fromIf) { Node parent = this.node.getParentNode(); if (parent != null) { parent.removeChild(this.node); } fromIf.getNode().appendChild(this.node); this.parent = fromIf; } /** * Gets the to state id. * @return the to state id */ @Override public String getToStateId() { if (isThen) { return getAttribute("then"); } else { return getAttribute("else"); } } /** * Sets the to state. * @param state the to state */ @Override public void setToState(ITransitionableTo state) { ITransitionableTo newTargetState = null; if (state != null) { newTargetState = (ITransitionableTo) WebflowModelXmlUtils .getStateById(webflowState, state.getId()); } if (newTargetState != null && !newTargetState.equals(newTargetState)) { if (targetState != null) { targetState.removeInputTransition(this); } if (isThen) { setAttribute(this.parent.getNode(), "then", state.getId()); } else { setAttribute(this.parent.getNode(), "else", state.getId()); } super.fireStructureChange(OUTPUTS, state); targetState = newTargetState; if (targetState != null) { targetState.addInputTransition(this); } } else { if (state != null) { if (isThen) { setAttribute(this.parent.getNode(), "then", state.getId()); } else { setAttribute(this.parent.getNode(), "else", state.getId()); } } else { targetState = newTargetState; } super.fireStructureChange(OUTPUTS, state); } } public void accept(IModelElementVisitor visitor, IProgressMonitor monitor) { visitor.visit(this, monitor); } public void setToStateId(String id) { if (this.isThen) { setAttribute("then", id); } else { setAttribute("else", id); } } public IModelElement[] getElementChildren() { List<IModelElement> children = new ArrayList<IModelElement>(); return children.toArray(new IModelElement[children.size()]); } }