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.List;
021: import javax.swing.tree.TreePath;
022: import org.netbeans.modules.bpel.mapper.model.BpelMapperModel;
023: import org.netbeans.modules.soa.mappercore.Mapper;
024: import org.netbeans.modules.soa.mappercore.RightTree;
025: import org.netbeans.modules.soa.mappercore.model.MapperModel;
026:
027: /**
028: *
029: * @author Vitaly Bychkov
030: * @version 1.0
031: */
032: public class GraphExpandedState implements TreeExpandedState {
033: private Mapper myMapper;
034: private ArrayList<ArrayList<Step>> expanedGraphNodes = new ArrayList<ArrayList<Step>>();
035:
036: public GraphExpandedState(Mapper mapper) {
037: myMapper = mapper;
038: }
039:
040: public void setMapper(Mapper mapper) {
041: myMapper = mapper;
042: }
043:
044: private MapperSwingTreeModel getTreeModel() {
045: if (myMapper == null) {
046: return null;
047: }
048: MapperModel mapperModel = myMapper.getModel();
049: assert mapperModel instanceof BpelMapperModel;
050: return mapperModel != null ? ((BpelMapperModel) mapperModel)
051: .getRightTreeModel() : null;
052: }
053:
054: private RightTree getGraphTree() {
055: return myMapper != null ? myMapper.getRightTree() : null;
056: }
057:
058: public void save() {
059: if (myMapper == null) {
060: return;
061: }
062: List<TreePath> expanded = myMapper.getExpandedGraphsPathes();
063:
064: if (expanded != null) {
065: for (TreePath treePath : expanded) {
066: ArrayList<Step> path = getStepsByTreePath(treePath);
067: expanedGraphNodes.add(path);
068: }
069: }
070:
071: }
072:
073: public void restore() {
074: List<TreePath> paths = new ArrayList<TreePath>();
075: for (ArrayList<Step> steps : expanedGraphNodes) {
076: TreePath tp = getTreePathbySteps(steps);
077: paths.add(tp);
078: }
079:
080: if (paths.size() < 1) {
081: return;
082: }
083:
084: if (myMapper == null) {
085: return;
086: }
087: myMapper.applyExpandedGraphsPathes(paths);
088: }
089:
090: private ArrayList<Step> getStepsByTreePath(TreePath tp) {
091:
092: ArrayList<Step> result = new ArrayList<Step>();
093: MapperSwingTreeModel treeModel = getTreeModel();
094: if (treeModel == null) {
095: return result;
096: }
097:
098: for (int n = 0; n < tp.getPathCount(); n++) {
099: MapperTreeNode node = (MapperTreeNode) tp
100: .getPathComponent(n);
101: String nodeDisplayName = treeModel.getDisplayName(node);
102:
103: Object parent = null;
104:
105: if (n > 0) {
106: parent = tp.getPathComponent(n - 1);
107: }
108:
109: int index = 0;
110:
111: //calculate node index
112: if (parent != null && parent instanceof MapperTreeNode) {
113: List<MapperTreeNode> children = ((MapperTreeNode) parent)
114: .getChildren();
115: for (MapperTreeNode tn : children) {
116: String name1 = treeModel.getDisplayName(tn);
117: if (name1.equals(nodeDisplayName)) {
118: if (node == tn) {
119: break;
120: }
121: index++;
122: }
123: }
124: }
125: result.add(new Step(nodeDisplayName, index));
126: }
127: return result;
128: }
129:
130: private TreePath getTreePathbySteps(ArrayList<Step> steps) {
131: MapperSwingTreeModel treeModel = getTreeModel();
132: if (treeModel == null) {
133: return null;
134: }
135:
136: MapperTreeNode node = (MapperTreeNode) treeModel.getRoot();
137:
138: if (node == null) {
139: return null;
140: }
141:
142: if (steps.size() == 0) {
143: return null;
144: }
145:
146: String nodeDisplayName = treeModel.getDisplayName(node);
147: if (!steps.get(0).getName().equals(nodeDisplayName)) {
148: return null;
149: }
150:
151: TreePath result = new TreePath(node);
152:
153: for (int n = 1; n < steps.size(); n++) {
154: Step step = steps.get(n);
155:
156: List<MapperTreeNode> children = node.getChildren();
157:
158: node = getTreeNodeByStep(treeModel, children, step);
159: if (node == null) {
160: return null;
161: }
162:
163: result = result.pathByAddingChild(node);
164: }
165: return result;
166: }
167:
168: private MapperTreeNode getTreeNodeByStep(
169: MapperSwingTreeModel treeModel,
170: List<MapperTreeNode> children, Step step) {
171: if (treeModel == null || children == null) {
172: return null;
173: }
174: //
175: int index = 0;
176: for (MapperTreeNode tn : children) {
177: String nodeDisplayName = treeModel.getDisplayName(tn);
178: if (step.getName().equals(nodeDisplayName)) {
179: if (index == step.index) {
180: return tn;
181: }
182: index++;
183: }
184: }
185: return null;
186: }
187: }
|