/**
* Copyright 2007-2010 非也
* All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License v3 as published by the Free Software
* Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this library; if not, see http://www.gnu.org/licenses/lgpl.html.
*
*/
package org.fireflow.pdl.fpdl.diagram.impl;
import java.util.ArrayList;
import java.util.List;
import org.fireflow.pdl.fpdl.diagram.CommentShape;
import org.fireflow.pdl.fpdl.diagram.DiagramElement;
import org.fireflow.pdl.fpdl.diagram.GroupShape;
import org.fireflow.pdl.fpdl.diagram.ProcessNodeShape;
import org.fireflow.pdl.fpdl.diagram.figure.Rectangle;
import org.fireflow.pdl.fpdl.diagram.figure.impl.RectangleImpl;
/**
*
* @author 非也 nychen2000@163.com
* Fire Workflow 官方网站:www.firesoa.com 或者 www.fireflow.org
*
*/
public class GroupShapeImpl extends AbsNodeShapeImpl implements GroupShape {
// private List<TransitionShape> transitions = new ArrayList<TransitionShape>();
private List<ProcessNodeShape> workflowNodes = new ArrayList<ProcessNodeShape>();
private List<CommentShape> comments = new ArrayList<CommentShape>();
// private List<AssociationShape> associations = new ArrayList<AssociationShape>();
private boolean expand = true;
public GroupShapeImpl(String id){
this.id = id;
Rectangle plane = new RectangleImpl();
plane.getBounds().setWidth(200);
plane.getBounds().setHeight(100);
this.figure= plane;
}
public DiagramElement findChild(String diagramElementId){
for (DiagramElement diagramElm : workflowNodes){
if (diagramElementId.equals(diagramElm.getId())){
return diagramElm;
}
DiagramElement tmp = diagramElm.findChild(diagramElementId);
if (tmp!=null){
return tmp;
}
}
for (DiagramElement diagramElm : comments){
if (diagramElementId.equals(diagramElm.getId())){
return diagramElm;
}
}
return null;
}
public List<DiagramElement> getChildren(){
List<DiagramElement> children = new ArrayList<DiagramElement>();
children.addAll(this.workflowNodes);
children.addAll(comments);
return children;
}
public DiagramElement findChildByWorkflowElementId(String workflowElementId){
for (DiagramElement diagramElm : workflowNodes){
if (diagramElm.getWorkflowElementRef()==null){
continue;
}
if (workflowElementId.equals(diagramElm.getWorkflowElementRef().getId())){
return diagramElm;
}
}
return null;
}
/* (non-Javadoc)
* @see org.fireflow.pdl.fpdl.diagram.GroupShape#isExpand()
*/
public boolean isExpand() {
return expand;
}
public void setExpand(Boolean expand){
this.expand = expand;
}
/* (non-Javadoc)
* @see org.fireflow.pdl.fpdl.diagram.GroupShape#getWorkflowNodeShapes()
*/
public List<ProcessNodeShape> getProcessNodeShapes() {
return workflowNodes;
}
/* (non-Javadoc)
* @see org.fireflow.pdl.fpdl.diagram.GroupShape#addWorkflowNodeShape(org.fireflow.pdl.fpdl.diagram.ProcessNodeShape)
*/
public void addProcessNodeShape(ProcessNodeShape shape) {
workflowNodes.add(shape);
((AbsDiagramElement)shape).setParent(this);
}
// /* (non-Javadoc)
// * @see org.fireflow.pdl.fpdl.diagram.GroupShape#getTransitions()
// */
// public List<TransitionShape> getTransitions() {
// return transitions;
// }
//
// /* (non-Javadoc)
// * @see org.fireflow.pdl.fpdl.diagram.GroupShape#addTransition(org.fireflow.pdl.fpdl.diagram.TransitionShape)
// */
// public void addTransition(TransitionShape transitionShape) {
// transitions.add(transitionShape);
//
// }
public List<CommentShape> getComments(){
return comments;
}
public void addComment(CommentShape commentShape){
this.comments.add(commentShape);
((AbsDiagramElement)commentShape).setParent(this);
}
//
// public List<AssociationShape> getAssociations(){
// return this.associations;
// }
// public void addAssociation(AssociationShape association){
// this.associations.add(association);
// }
}