📄 flowstructuremodeldigester.java
字号:
/*
* Copyright (c) 2003-2004, Alexander Greif
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the Flow4J-Eclipse project nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.orthanc.flow4j.model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.orthanc.flow4j.model.bind.BooleanTransitionBind;
import net.orthanc.flow4j.model.bind.FlowModelBind;
import net.orthanc.flow4j.model.bind.IFlowletBind;
import net.orthanc.flow4j.model.bind.TransitionBind;
/**
* @author greifa
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class FlowStructureModelDigester extends AbstractModelDigester {
private List nodes = new ArrayList();
private Map flowletId2NodeMap = new HashMap();
protected List getStartFlowletNodes() {
List startFowletNodes = new ArrayList();
for (Iterator iter = nodes.iterator(); iter.hasNext();) {
IFlowNode flowNode = (IFlowNode) iter.next();
if (flowNode instanceof StartFlowletNode)
startFowletNodes.add(flowNode);
}
return startFowletNodes;
}
/**
*
* TODO
* @param flowletBind
*/
protected void addFlowletNode(AbstractFlowletNode flowNode) {
if (nodes.contains(flowNode))
return;
nodes.add(flowNode);
flowletId2NodeMap.put(flowNode.getFlowletBind().getId(flowNode.getFlowModelBind()), flowNode);
}
/**
*
* Class IFlowNode TODO
* @author agreif
*
*/
protected interface IFlowNode {
void addPreviousNode(IFlowNode flowNode);
void addFollowingNode(IFlowNode flowNode);
void visit(IFlowVisitor visitor);
boolean isVisited();
}
protected abstract class AbstractFlowletNode implements IFlowNode {
private FlowModelBind flowModelBind;
private IFlowletBind flowletBind;
private boolean isVisited;
AbstractFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
this.flowletBind = flowletBind;
this.flowModelBind = flowModelBind;
}
public IFlowletBind getFlowletBind() {
return flowletBind;
}
public boolean equals(Object arg0) {
return this.getFlowletBind().equals(
((AbstractFlowletNode) arg0).getFlowletBind());
}
public void addFollowingNode(IFlowNode flowNode) {
}
public void addPreviousNode(IFlowNode flowNode) {
}
public abstract void visit(IFlowVisitor visitor);
public void setVisited(boolean isVisited) {
this.isVisited = isVisited;
}
public boolean isVisited() {
return isVisited;
}
/**
* @return
*/
public FlowModelBind getFlowModelBind() {
return flowModelBind;
}
}
/**
*
* Class SimpleFlowNode TODO
* @author agreif
*
*/
private abstract class SimpleFlowletNode extends AbstractFlowletNode {
IFlowNode previousFlowletNode;
IFlowNode followingFlowletNode;
SimpleFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
public void addFollowingNode(IFlowNode flowletNode) {
followingFlowletNode = flowletNode;
}
public void addPreviousNode(IFlowNode flowletNode) {
previousFlowletNode = flowletNode;
}
protected IFlowNode getPreviousFlowletNode() {
return previousFlowletNode;
}
public void visit(IFlowVisitor visitor) {
if (followingFlowletNode != null)
followingFlowletNode.visit(visitor);
}
}
public class StartFlowletNode extends AbstractFlowletNode {
IFlowNode followingFlowletNode;
public StartFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
public void addFollowingNode(IFlowNode flowNode) {
followingFlowletNode = flowNode;
}
public void visit(IFlowVisitor visitor) {
if (followingFlowletNode != null)
followingFlowletNode.visit(visitor);
}
}
public class JavaTaskFlowletNode extends SimpleFlowletNode {
public JavaTaskFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
}
public class ScriptTaskFlowletNode extends SimpleFlowletNode {
public ScriptTaskFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
}
public class DecisionFlowletNode extends AbstractFlowletNode {
IFlowNode previousFlowletNode;
IFlowNode followingTrueFlowletNode;
IFlowNode followingFalseFlowletNode;
public DecisionFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
public void addPreviousNode(IFlowNode flowNode) {
previousFlowletNode = flowNode;
}
protected IFlowNode getPreviousFlowletNode() {
return previousFlowletNode;
}
public void addFollowingNode(IFlowNode flowNode, boolean isTrue) {
if (isTrue)
followingTrueFlowletNode = flowNode;
else
followingFalseFlowletNode = flowNode;
}
public void visit(IFlowVisitor visitor) {
if (followingTrueFlowletNode != null)
followingTrueFlowletNode.visit(visitor);
if (followingFalseFlowletNode != null)
followingFalseFlowletNode.visit(visitor);
}
public IFlowNode getFollowingFalseFlowletNode() {
return followingFalseFlowletNode;
}
public IFlowNode getFollowingTrueFlowletNode() {
return followingTrueFlowletNode;
}
}
public class CallFlowletNode extends SimpleFlowletNode {
public CallFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
}
public class JoinFlowletNode extends AbstractFlowletNode {
List previousFlowletNodes = new ArrayList();
IFlowNode followingFlowletNode;
public JoinFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
public void addFollowingNode(IFlowNode flowNode) {
followingFlowletNode = flowNode;
}
public void addPreviousNode(IFlowNode flowNode) {
previousFlowletNodes.add(flowNode);
}
protected List getPreviousFlowletNodes() {
return previousFlowletNodes;
}
public void visit(IFlowVisitor visitor) {
if (followingFlowletNode != null)
followingFlowletNode.visit(visitor);
}
}
public class JumpFlowletNode extends AbstractFlowletNode {
IFlowNode previousFlowletNode;
public JumpFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
public void addPreviousNode(IFlowNode flowletNode) {
previousFlowletNode = flowletNode;
}
protected IFlowNode getPreviousFlowletNode() {
return previousFlowletNode;
}
public void visit(IFlowVisitor visitor) {
}
}
public class TemplateFlowletNode extends AbstractFlowletNode {
IFlowNode previousFlowletNode;
public TemplateFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
public void addPreviousNode(IFlowNode flowletNode) {
previousFlowletNode = flowletNode;
}
protected IFlowNode getPreviousFlowletNode() {
return previousFlowletNode;
}
public void visit(IFlowVisitor visitor) {
}
}
public class EndFlowletNode extends AbstractFlowletNode {
IFlowNode previousFlowletNode;
public EndFlowletNode(IFlowletBind flowletBind, FlowModelBind flowModelBind) {
super(flowletBind, flowModelBind);
}
public void addPreviousNode(IFlowNode flowletNode) {
previousFlowletNode = flowletNode;
}
protected IFlowNode getPreviousFlowletNode() {
return previousFlowletNode;
}
public void visit(IFlowVisitor visitor) {
}
}
/* (non-Javadoc)
* @see net.orthanc.flow4j.model.AbstractModelDigester#digestBooleanTransition(net.orthanc.flow4j.model.bind.BooleanTransitionBind, net.orthanc.flow4j.model.bind.IFlowletBind, net.orthanc.flow4j.model.bind.IFlowletBind, net.orthanc.flow4j.model.bind.FlowModelBind)
*/
protected void digestBooleanTransition(
BooleanTransitionBind booleanTransitionBind,
IFlowletBind sourceFlowletBind,
IFlowletBind targetFlowletBind,
FlowModelBind flowModelBind) {
DecisionFlowletNode sourceNode =
(DecisionFlowletNode) flowletId2NodeMap.get(sourceFlowletBind.getId(flowModelBind));
IFlowNode targetNode =
(IFlowNode) flowletId2NodeMap.get(targetFlowletBind.getId(flowModelBind));
sourceNode.addFollowingNode(targetNode, booleanTransitionBind.getValue());
targetNode.addPreviousNode(sourceNode);
}
/* (non-Javadoc)
* @see net.orthanc.flow4j.model.AbstractModelDigester#digestTransition(net.orthanc.flow4j.model.bind.TransitionBind, net.orthanc.flow4j.model.bind.IFlowletBind, net.orthanc.flow4j.model.bind.IFlowletBind, net.orthanc.flow4j.model.bind.FlowModelBind)
*/
protected void digestTransition(
TransitionBind transitionBind,
IFlowletBind sourceFlowletBind,
IFlowletBind targetFlowletBind,
FlowModelBind flowModelBind) {
IFlowNode sourceNode =
(IFlowNode) flowletId2NodeMap.get(sourceFlowletBind.getId(flowModelBind));
IFlowNode targetNode =
(IFlowNode) flowletId2NodeMap.get(targetFlowletBind.getId(flowModelBind));
sourceNode.addFollowingNode(targetNode);
targetNode.addPreviousNode(sourceNode);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -