/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.ptc.tifworkbench.ui; import com.ptc.tifworkbench.jaxbbinding.ConstraintDefinition; import com.ptc.tifworkbench.jaxbbinding.ConstraintType; import com.ptc.tifworkbench.jaxbbinding.DynamicGroupDefinition; import com.ptc.tifworkbench.jaxbbinding.FieldDefinition; import com.ptc.tifworkbench.jaxbbinding.FieldReference; import com.ptc.tifworkbench.jaxbbinding.GroupDefinition; import com.ptc.tifworkbench.jaxbbinding.ImSolution; import com.ptc.tifworkbench.jaxbbinding.MandatoryFieldReference; import com.ptc.tifworkbench.jaxbbinding.NextState; import com.ptc.tifworkbench.jaxbbinding.ProjectDefinition; import com.ptc.tifworkbench.jaxbbinding.PropertyDefinition; import com.ptc.tifworkbench.jaxbbinding.QueryDefinition; import com.ptc.tifworkbench.jaxbbinding.StateDefinition; import com.ptc.tifworkbench.jaxbbinding.StateReference; import com.ptc.tifworkbench.jaxbbinding.TestManagementRoleType; import com.ptc.tifworkbench.jaxbbinding.TriggerDefinition; import com.ptc.tifworkbench.jaxbbinding.TypeDefinition; import com.ptc.tifworkbench.jaxbbinding.UserDefinition; import java.util.ArrayList; import java.util.List; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; /** * * @author pbowden */ public class TifTreeModel { // TODO: refactor this with generics for the model translation. // Even better, work out how we can get JAXB to wrap the classes with a visitor. public static DefaultTreeModel createTree(ImSolution sol) { DefaultMutableTreeNode top = new DefaultMutableTreeNode("Template"); createNodes(top, sol); return new DefaultTreeModel(top); } protected static void createNodes(DefaultMutableTreeNode top, ImSolution sol) { try { top.add(makeStates(new DefaultMutableTreeNode("States"), sol)); top.add(makeFields(new DefaultMutableTreeNode("Fields"), sol)); top.add(makeTypes(new DefaultMutableTreeNode("Types"), sol)); top.add(makeTriggers(new DefaultMutableTreeNode("Triggers"), sol)); top.add(makeQueries(new DefaultMutableTreeNode("Queries"), sol)); top.add(makeDynamicGroups(new DefaultMutableTreeNode("DynamicGroups"), sol)); top.add(makeUsers(new DefaultMutableTreeNode("Users"), sol)); top.add(makeGroups(new DefaultMutableTreeNode("Groups"), sol)); top.add(makeProjects(new DefaultMutableTreeNode("Projects"), sol)); }catch(Exception e) { System.out.println("Could not create SIF tree."); e.printStackTrace(System.out); } } protected static DefaultMutableTreeNode makeStates(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getStates() == null) return node; TifNodeFactory<StateDefinition> fact = new TifNodeFactory<StateDefinition>(sol.getStates().getState(), sol.getStates().getEditState()) { @Override public String getKey(StateDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, StateDefinition def) { safeAddNode("Description", def.getDescription(), node); } }; fact.createNodes(node); return node; } protected static DefaultMutableTreeNode makeFields(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getFields() == null) return node; TifNodeFactory<FieldDefinition> fact = new TifNodeFactory<FieldDefinition>(sol.getFields().getField(), sol.getFields().getEditField()) { @Override public String getKey(FieldDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, FieldDefinition def) { safeAddNode("Description", def.getDescription(), node); if(def.getType() != null) safeAddNode("Type", def.getType().value(), node); else safeAddNode("Type", "WARNING:UNKNOWN", node); safeAddNode("Editability", def.getEditability(), node); safeAddNode("Relevance", def.getRelevance(), node); safeAddNode("Default", def.getDefault(), node); safeAddNode("Max", def.getMax(), node); safeAddNode("Min", def.getMin(), node); if(def.getComputation() != null) safeAddNode("Computation", def.getComputation().getValue(), node); } }; fact.createNodes(node); return node; } protected static DefaultMutableTreeNode makeTypes(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getTypes() == null) return node; List<TypeDefinition> allTypes = new ArrayList<TypeDefinition>(sol.getTypes().getType()); allTypes.addAll(sol.getTypes().getEditType()); for(TypeDefinition type : allTypes) { DefaultMutableTreeNode typeNode = new DefaultMutableTreeNode(type.getName()); if(type.getProperties() != null) { DefaultMutableTreeNode propsNode = new DefaultMutableTreeNode("properties"); typeNode.add(propsNode); for(PropertyDefinition prop : type.getProperties().getProperty()) { DefaultMutableTreeNode propNode = new DefaultMutableTreeNode(prop.getName()); safeAddNode("Value", prop.getValue(), propNode); safeAddNode("Description", prop.getDescription(), propNode); propsNode.add(propNode); } } if(type.getFields() != null) { DefaultMutableTreeNode fldsNode = new DefaultMutableTreeNode("fields"); typeNode.add(fldsNode); for(FieldReference fld : type.getFields().getField()) { DefaultMutableTreeNode fldNode = new DefaultMutableTreeNode(fld.getName()); safeAddNode("Editability", fld.getEditability(), fldNode); safeAddNode("Relevance", fld.getRelevance(), fldNode); safeAddNode("Description", fld.getDescription(), fldNode); fldsNode.add(fldNode); } } if(type.getStates() != null) { DefaultMutableTreeNode statesNode = new DefaultMutableTreeNode("states"); typeNode.add(statesNode); for(StateReference state : type.getStates().getState()) { DefaultMutableTreeNode stateNode = new DefaultMutableTreeNode(state.getName()); for(NextState nextState : state.getNext()) safeAddNode("Next", nextState.getName() + " [" + nextState.getGroup() + "]", stateNode); if(state.getMandatory() != null) { DefaultMutableTreeNode mandatoryNode = new DefaultMutableTreeNode("Mandatory fields"); stateNode.add(mandatoryNode); for(MandatoryFieldReference mandField : state.getMandatory().getField()) safeAddNode("Mandatory field", mandField.getName(), mandatoryNode); } statesNode.add(stateNode); } } if(type.getDocumentModel() != null) { DefaultMutableTreeNode docmodelNode = new DefaultMutableTreeNode("Document model"); typeNode.add(docmodelNode); DefaultMutableTreeNode roleNode = new DefaultMutableTreeNode("Role: " + type.getDocumentModel().getRole().value()); DefaultMutableTreeNode assocNode = new DefaultMutableTreeNode("Associated type: " + type.getDocumentModel().getAssociatedType()); docmodelNode.add(roleNode); docmodelNode.add(assocNode); } if(type.getTestManagement() != null) { if(type.getTestManagement().getRole() != null && type.getTestManagement().getRole() != TestManagementRoleType.NONE) { DefaultMutableTreeNode tmNode = new DefaultMutableTreeNode("Test Management"); DefaultMutableTreeNode roleNode = new DefaultMutableTreeNode("Role: " + type.getTestManagement().getRole().value()); tmNode.add(roleNode); typeNode.add(tmNode); } } if(type.getConstraints() != null) { DefaultMutableTreeNode constraintsNode = new DefaultMutableTreeNode("Constraints"); typeNode.add(constraintsNode); for(ConstraintDefinition constraint : type.getConstraints().getConstraint()) { StringBuffer buff = new StringBuffer(); buff.append(constraint.getType().value() + " "); if(constraint.getType() == ConstraintType.IBPL || constraint.getType() == ConstraintType.RULE ) buff.append(constraint.getRule() + ":"); else buff.append(constraint.getSource().getName() + "=" + constraint.getSource().getValue() + ":"); buff.append(constraint.getTarget().getName()); if(constraint.getTarget().getValue().size() > 0) buff.append("=" + constraint.getTarget().getValue().toString()); DefaultMutableTreeNode constrNode = new DefaultMutableTreeNode(buff.toString()); constraintsNode.add(constrNode); } } node.add(typeNode); } return node; } protected static DefaultMutableTreeNode makeTriggers(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getTriggers() == null) return node; TifNodeFactory<TriggerDefinition> fact = new TifNodeFactory<TriggerDefinition>(sol.getTriggers().getTrigger(), sol.getTriggers().getEditTrigger()) { @Override public String getKey(TriggerDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, TriggerDefinition def) { safeAddNode("Description", def.getDescription(), node); safeAddNode("Frequency", def.getFrequency(), node); safeAddNode("Parameters", def.getParams(), node); safeAddNode("Query", def.getQuery(), node); safeAddNode("Rule", def.getRule(), node); safeAddNode("Run As", def.getRunAs(), node); safeAddNode("Script", def.getScript(), node); safeAddNode("Timing", def.getScriptTiming(), node); } }; fact.createNodes(node); return node; } protected static DefaultMutableTreeNode makeQueries(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getQueries() == null) return node; TifNodeFactory<QueryDefinition> fact = new TifNodeFactory<QueryDefinition>(sol.getQueries().getQuery(), sol.getQueries().getEditQuery()) { @Override public String getKey(QueryDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, QueryDefinition def) { safeAddNode("Description", def.getDescription(), node); safeAddNode("Definition", def.getDefinition(), node); safeAddNode("Share", def.getShareGroups(), node); } }; fact.createNodes(node); return node; } protected static DefaultMutableTreeNode makeDynamicGroups(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getStates() == null) return node; if(sol.getDynamicGroups() != null) { TifNodeFactory<DynamicGroupDefinition> fact = new TifNodeFactory<DynamicGroupDefinition>(sol.getDynamicGroups().getDynamicGroup(), null) { @Override public String getKey(DynamicGroupDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, DynamicGroupDefinition def) { safeAddNode("Description", def.getDescription(), node); } }; fact.createNodes(node); } return node; } protected static DefaultMutableTreeNode makeUsers(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getStates() == null) return node; TifNodeFactory<UserDefinition> fact = new TifNodeFactory<UserDefinition>(sol.getUsers().getUser(), null) { @Override public String getKey(UserDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, UserDefinition def) { safeAddNode("Description", def.getDescription(), node); safeAddNode("Email", def.getEmail(), node); safeAddNode("FullName", def.getFullName(), node); safeAddNode("NotificationRule", def.getNotificationRule(), node); } }; fact.createNodes(node); return node; } protected static DefaultMutableTreeNode makeGroups(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getStates() == null) return node; TifNodeFactory<GroupDefinition> fact = new TifNodeFactory<GroupDefinition>(sol.getGroups().getGroup(), null) { @Override public String getKey(GroupDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, GroupDefinition def) { safeAddNode("Description", def.getDescription(), node); safeAddNode("Email", def.getEmail(), node); safeAddNode("NotificationRule", def.getNotificationRule(), node); } }; fact.createNodes(node); return node; } protected static DefaultMutableTreeNode makeProjects(DefaultMutableTreeNode node, ImSolution sol) { if(sol.getStates() == null) return node; TifNodeFactory<ProjectDefinition> fact = new TifNodeFactory<ProjectDefinition>(sol.getProjects().getProject(), null) { @Override public String getKey(ProjectDefinition d) { return d.getName(); } @Override public void addAttributes(TifTreeNode node, ProjectDefinition def) { safeAddNode("Description", def.getDescription(), node); safeAddNode("Parent", def.getParent(), node); safeAddNode("PermittedGroups", def.getPermittedGroups(), node); } }; fact.createNodes(node); return node; } protected static void safeAddNode(String prefix, String name, DefaultMutableTreeNode parent) { if(exists(name)) { DefaultMutableTreeNode n = new DefaultMutableTreeNode(prefix + ":" + name); parent.add(n); } } protected static boolean exists(String prop) { return ((prop != null) && (prop.length()>0)); } }