001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * Portions Copyrighted 2007 Sun Microsystems, Inc.
016: */
017: package org.netbeans.modules.bpel.mapper.tree;
018:
019: import java.util.ArrayList;
020: import java.util.Enumeration;
021: import java.util.List;
022: import javax.swing.JTree;
023: import javax.swing.tree.TreePath;
024: import org.netbeans.modules.bpel.mapper.model.BpelMapperModel;
025: import org.netbeans.modules.soa.mappercore.Mapper;
026: import org.netbeans.modules.soa.mappercore.model.MapperModel;
027:
028: /**
029: *
030: * @author Vitaly Bychkov
031: * @author Alexey
032: */
033: public class TreeExpandedStateImpl implements TreeExpandedState {
034:
035: private Mapper myMapper;
036: private ArrayList<ArrayList<Step>> expanedNodes = new ArrayList<ArrayList<Step>>();
037:
038: public TreeExpandedStateImpl(Mapper mapper) {
039: myMapper = mapper;
040: }
041:
042: public void setMapper(Mapper mapper) {
043: myMapper = mapper;
044: }
045:
046: private JTree getLeftTree() {
047: return myMapper != null ? myMapper.getLeftTree() : null;
048: }
049:
050: private MapperSwingTreeModel getTreeModel() {
051: if (myMapper == null) {
052: return null;
053: }
054: MapperModel mapperModel = myMapper.getModel();
055: assert mapperModel instanceof BpelMapperModel;
056: return mapperModel != null ? ((BpelMapperModel) mapperModel)
057: .getLeftTreeModel() : null;
058: }
059:
060: public void save() {
061: JTree tree = getLeftTree();
062: if (tree == null) {
063: return;
064: }
065: Object root = tree.getModel().getRoot();
066: TreePath root_tp = new TreePath(root);
067: //
068: //save the expanded state
069: Enumeration<TreePath> expanded = tree
070: .getExpandedDescendants(root_tp);
071: if (expanded != null) {
072: while (expanded.hasMoreElements()) {
073: TreePath tp = expanded.nextElement();
074: ArrayList<Step> path = getStepsByTreePath(tp);
075: expanedNodes.add(path);
076: }
077: }
078: }
079:
080: public void restore() {
081: JTree tree = getLeftTree();
082: if (tree == null) {
083: return;
084: }
085:
086: for (ArrayList<Step> steps : expanedNodes) {
087: TreePath tp = getTreePathbySteps(steps);
088: if (tp != null) {
089: tree.expandPath(tp);
090: }
091: }
092: }
093:
094: private ArrayList<Step> getStepsByTreePath(TreePath tp) {
095:
096: ArrayList<Step> result = new ArrayList<Step>();
097: MapperSwingTreeModel treeModel = getTreeModel();
098: if (treeModel == null) {
099: return result;
100: }
101:
102: for (int n = 0; n < tp.getPathCount(); n++) {
103: MapperTreeNode node = (MapperTreeNode) tp
104: .getPathComponent(n);
105: String nodeDisplayName = treeModel.getDisplayName(node);
106:
107: Object parent = null;
108:
109: if (n > 0) {
110: parent = tp.getPathComponent(n - 1);
111: }
112:
113: int index = 0;
114:
115: //calculate node index
116: if (parent != null && parent instanceof MapperTreeNode) {
117: List<MapperTreeNode> children = ((MapperTreeNode) parent)
118: .getChildren();
119: for (MapperTreeNode tn : children) {
120: String name1 = treeModel.getDisplayName(tn);
121: if (name1.equals(nodeDisplayName)) {
122: if (node == tn) {
123: break;
124: }
125: index++;
126: }
127: }
128: }
129: result.add(new Step(nodeDisplayName, index));
130: }
131: return result;
132: }
133:
134: private TreePath getTreePathbySteps(ArrayList<Step> steps) {
135: MapperSwingTreeModel treeModel = getTreeModel();
136: if (treeModel == null) {
137: return null;
138: }
139:
140: MapperTreeNode node = (MapperTreeNode) treeModel.getRoot();
141:
142: if (node == null) {
143: return null;
144: }
145:
146: if (steps.size() == 0) {
147: return null;
148: }
149:
150: String nodeDisplayName = treeModel.getDisplayName(node);
151: if (!steps.get(0).getName().equals(nodeDisplayName)) {
152: return null;
153: }
154:
155: TreePath result = new TreePath(node);
156:
157: for (int n = 1; n < steps.size(); n++) {
158: Step step = steps.get(n);
159:
160: List<MapperTreeNode> children = node.getChildren();
161:
162: node = getTreeNodeByStep(treeModel, children, step);
163: if (node == null) {
164: return null;
165: }
166:
167: result = result.pathByAddingChild(node);
168: }
169: return result;
170: }
171:
172: private MapperTreeNode getTreeNodeByStep(
173: MapperSwingTreeModel treeModel,
174: List<MapperTreeNode> children, Step step) {
175: if (children == null) {
176: return null;
177: }
178: //
179: int index = 0;
180: for (MapperTreeNode tn : children) {
181: String nodeDisplayName = treeModel.getDisplayName(tn);
182: if (step.getName().equals(nodeDisplayName)) {
183: if (index == step.index) {
184: return tn;
185: }
186: index++;
187: }
188: }
189: return null;
190: }
191: }
|