package husacct.define.presentation.moduletree; import husacct.define.domain.softwareunit.SoftwareUnitDefinition; import husacct.define.domain.softwareunit.SoftwareUnitDefinition.Type; import husacct.define.task.components.AbstractCombinedComponent; import husacct.define.task.components.AbstractDefineComponent; import husacct.define.task.components.AnalyzedModuleComponent; import java.awt.Component; import java.util.ArrayList; import javax.swing.JTree; import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; public class CombinedModuleTree extends JTree { private static final long serialVersionUID = 1859193273511893860L; private long selectedModuleId; public CombinedModuleTree(AbstractCombinedComponent rootComponent, long selectedModuleId) { super(new CombinedModuleTreeModel(rootComponent)); setSelectedModuleId(selectedModuleId); CombinedModuleCellRenderer moduleCellRenderer = new CombinedModuleCellRenderer(); setCellRenderer(moduleCellRenderer); setDefaultSettings(); } public long getSelectedModuleId() { return selectedModuleId; } public Object getSelectedTreeValue() { TreePath path = getSelectionPath(); Object returnObject = null; if (path != null) { AbstractCombinedComponent selectedComponent = (AbstractCombinedComponent) path.getLastPathComponent(); if (selectedComponent instanceof AbstractDefineComponent) { AbstractDefineComponent defineComponent = (AbstractDefineComponent) selectedComponent; returnObject = defineComponent.getModuleId(); } else if (selectedComponent instanceof AnalyzedModuleComponent) { AnalyzedModuleComponent analyzedComponent = (AnalyzedModuleComponent) selectedComponent; String uniqueName = analyzedComponent.getUniqueName(); String stringType = analyzedComponent.getType(); Type type = Type.valueOf(stringType); SoftwareUnitDefinition su = new SoftwareUnitDefinition(uniqueName, type); returnObject = su; } } return returnObject; } public void setDefaultSettings() { getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); } public void setSelectedModuleId(long selectedModuleId) { this.selectedModuleId = selectedModuleId; } public void setSelectedRow(long moduleId) { ArrayList<Object> pathParts = new ArrayList<Object>(); TreeModel model = getModel(); if (model != null) { Object root = model.getRoot(); pathParts.add(root); walk(root, moduleId, pathParts); } } private void walk(Object o, long moduleId, ArrayList<Object> pathParts) { int childCount; childCount = getModel().getChildCount(o); for (int i = 0; i < childCount; i++) { Component component = (Component) getModel().getChild(o, i); if (component instanceof AbstractDefineComponent) { AbstractDefineComponent child = (AbstractDefineComponent) getModel().getChild(o, i); long childModuleId = child.getModuleId(); if (childModuleId == moduleId) { pathParts.add(child); TreePath path = new TreePath(pathParts.toArray()); setSelectionPath(path); return; } else { if (!getModel().isLeaf(child)) { @SuppressWarnings("unchecked") ArrayList<Object> childPathParts = (ArrayList<Object>) pathParts .clone(); childPathParts.add(child); walk(child, moduleId, childPathParts); } } } } } }