/**
* @author liuchunxia
*/
package net.ms.designer.editors.workflow.editparts;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Collections;
import java.util.List;
import net.ms.designer.editors.workflow.WorkflowImages;
import net.ms.designer.editors.workflow.models.EndNode;
import net.ms.designer.editors.workflow.models.RouteOnlyActivity;
import net.ms.designer.editors.workflow.models.StartNode;
import net.ms.designer.editors.workflow.models.SubFlowActivity;
import net.ms.designer.editors.workflow.models.SystemAppActivity;
import net.ms.designer.editors.workflow.models.UserAppActivity;
import net.ms.designer.editors.workflow.models.WorkflowDiagram;
import net.ms.designer.editors.workflow.models.WorkflowSubPart;
import net.ms.designer.editors.workflow.policies.WorkflowElementEditPolicy;
import net.ms.designer.editors.workflow.policies.WorkflowTreeEditPolicy;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class WorkflowTreeEditPart
extends org.eclipse.gef.editparts.AbstractTreeEditPart
implements PropertyChangeListener
{
public WorkflowTreeEditPart(Object model) {
super (model);
}
public void activate(){
super.activate();
getLogicSubpart().addPropertyChangeListener(this);
}
protected void createEditPolicies() {
EditPolicy component;
component = new WorkflowElementEditPolicy();
installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new WorkflowTreeEditPolicy());
installEditPolicy(EditPolicy.COMPONENT_ROLE, component);
}
public void deactivate(){
getLogicSubpart().removePropertyChangeListener(this);
super.deactivate();
}
protected WorkflowSubPart getLogicSubpart() {
return (WorkflowSubPart)getModel();
}
protected List getModelChildren() {
return Collections.EMPTY_LIST;
}
public void propertyChange(PropertyChangeEvent change){
if (change.getPropertyName().equals(WorkflowDiagram.PROP_CHILDREN)) {
if (change.getOldValue() instanceof Integer)
// new child
addChild(createChild(change.getNewValue()), ((Integer)change.getOldValue()).intValue());
else
// remove child
removeChild((EditPart)getViewer().getEditPartRegistry().get(change.getOldValue()));
} else if(change.getPropertyName().equals(WorkflowDiagram.STATUS)){
refreshStatus();
}else
refreshVisuals();
}
protected void refreshStatus(){
EditPolicy component;
component = new WorkflowElementEditPolicy();
if(getLogicSubpart().ifEditAble()){
installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new WorkflowTreeEditPolicy());
installEditPolicy(EditPolicy.COMPONENT_ROLE, component);
}else{
removeEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE);
removeEditPolicy(EditPolicy.COMPONENT_ROLE);
}
refreshDiagramStatus();
}
protected void refreshDiagramStatus(){
}
protected void refreshVisuals(){
if (getWidget() instanceof Tree)
return;
Image image = getLogicSubpart().getIconImage();
if(getLogicSubpart() instanceof RouteOnlyActivity)
image = WorkflowImages.getImage(WorkflowImages.ROUTE_16);
else if(getLogicSubpart() instanceof SystemAppActivity)
image = WorkflowImages.getImage(WorkflowImages.JAVAAPPLICATION_16);
else if(getLogicSubpart() instanceof UserAppActivity)
image = WorkflowImages.getImage(WorkflowImages.WEBBAPPLICATION_16);
else if(getLogicSubpart() instanceof SubFlowActivity)
image = WorkflowImages.getImage(WorkflowImages.SUBFLOW_16);
else if(getLogicSubpart() instanceof StartNode)
image = WorkflowImages.getImage(WorkflowImages.STARTNODE_16);
else if(getLogicSubpart() instanceof EndNode)
image = WorkflowImages.getImage(WorkflowImages.ENDNODE_16);
TreeItem item = (TreeItem)getWidget();
if (image != null)
image.setBackground(item.getParent().getBackground());
setWidgetImage(image);
setWidgetText(getLogicSubpart().toString());
}
}