/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.activiti.designer.eclipse.navigator.diagram;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.Lane;
import org.activiti.bpmn.model.Process;
import org.activiti.designer.eclipse.navigator.TreeNode;
/**
* @author Tiese Barrell
*/
public abstract class AbstractProcessDiagramTreeNode extends AbstractDiagramTreeNode<Process> {
public AbstractProcessDiagramTreeNode(final Object parent, final Process process) {
super(parent, process, process.getName());
}
@Override
protected void extractChildren() {
final Collection<FlowElement> allFlowElements = getModelObject().getFlowElements();
final List<Lane> lanes = getModelObject().getLanes();
final List<FlowElement> orphanedFlowElements = new ArrayList<FlowElement>();
for (final FlowElement flowElement : allFlowElements) {
boolean orphaned = true;
for (final Lane lane : lanes) {
if (lane.getFlowReferences().contains(flowElement.getId())) {
orphaned = false;
}
}
if (orphaned) {
orphanedFlowElements.add(flowElement);
}
}
final List<TreeNode> flowElementChildren = createChildNodesForFlowElements(orphanedFlowElements);
for (final TreeNode flowElementChild : flowElementChildren) {
addChildNode(flowElementChild);
}
final List<TreeNode> laneChildren = createChildNodesForLanes(lanes);
for (final TreeNode laneChild : laneChildren) {
addChildNode(laneChild);
}
}
protected abstract List<TreeNode> createChildNodesForFlowElements(List<FlowElement> flowElements);
protected abstract List<TreeNode> createChildNodesForLanes(List<Lane> lanes);
}