1 |
| |
2 |
| |
3 |
| |
4 |
| |
5 |
| |
6 |
| |
7 |
| |
8 |
| |
9 |
| |
10 |
| |
11 |
| |
12 |
| |
13 |
| |
14 |
| |
15 |
| |
16 |
| |
17 |
| |
18 |
| |
19 |
| |
20 |
| |
21 |
| |
22 |
| |
23 |
| |
24 |
| |
25 |
| |
26 |
| |
27 |
| |
28 |
| |
29 |
| |
30 |
| |
31 |
| |
32 |
| |
33 |
| package com.jeantessier.dependency; |
34 |
| |
35 |
| import java.util.*; |
36 |
| |
37 |
| import org.apache.log4j.*; |
38 |
| import org.apache.oro.text.perl.*; |
39 |
| |
40 |
| public class NodeFactory { |
41 |
| private static final Perl5Util perl = new Perl5Util(); |
42 |
| |
43 |
| private Map<String, PackageNode> packages = new HashMap<String, PackageNode>(); |
44 |
| private Map<String, ClassNode> classes = new HashMap<String, ClassNode>(); |
45 |
| private Map<String, FeatureNode> features = new HashMap<String, FeatureNode>(); |
46 |
| |
47 |
1173
| public PackageNode createPackage(String packageName) {
|
48 |
1173
| return createPackage(packageName, false);
|
49 |
| } |
50 |
| |
51 |
4536
| public PackageNode createPackage(String packageName, boolean confirmed) {
|
52 |
4536
| Logger.getLogger(getClass()).debug("Create package \"" + packageName + "\"");
|
53 |
| |
54 |
4536
| PackageNode result = packages.get(packageName);
|
55 |
| |
56 |
4536
| if (result == null) {
|
57 |
2747
| result = new PackageNode(packageName, confirmed);
|
58 |
2747
| packages.put(packageName, result);
|
59 |
2747
| Logger.getLogger(getClass()).debug("Added package \"" + packageName + "\"");
|
60 |
| } |
61 |
| |
62 |
4536
| if (confirmed && !result.isConfirmed()) {
|
63 |
8
| result.setConfirmed(confirmed);
|
64 |
8
| Logger.getLogger(getClass()).debug("Package \"" + packageName + "\" is confirmed");
|
65 |
| } |
66 |
| |
67 |
4536
| return result;
|
68 |
| } |
69 |
| |
70 |
| |
71 |
18
| void deletePackage(PackageNode node) {
|
72 |
18
| Logger.getLogger(getClass()).debug("Delete package \"" + node + "\"");
|
73 |
| |
74 |
18
| packages.remove(node.getName());
|
75 |
| } |
76 |
| |
77 |
1838
| public Map<String, PackageNode> getPackages() {
|
78 |
1838
| return Collections.unmodifiableMap(packages);
|
79 |
| } |
80 |
| |
81 |
1246
| public ClassNode createClass(String className) {
|
82 |
1246
| return createClass(className, false);
|
83 |
| } |
84 |
| |
85 |
4046
| public ClassNode createClass(String className, boolean confirmed) {
|
86 |
4046
| Logger.getLogger(getClass()).debug("Create class \"" + className + "\"");
|
87 |
| |
88 |
4046
| ClassNode result = classes.get(className);
|
89 |
| |
90 |
4046
| if (result == null) {
|
91 |
2401
| String packageName = "";
|
92 |
2401
| int pos = className.lastIndexOf('.');
|
93 |
2401
| if (pos != -1) {
|
94 |
2236
| packageName = className.substring(0, pos);
|
95 |
| } |
96 |
2401
| PackageNode parent = createPackage(packageName, confirmed);
|
97 |
2401
| result = new ClassNode(parent, className, confirmed);
|
98 |
2401
| parent.addClass(result);
|
99 |
2401
| classes.put(className, result);
|
100 |
2401
| Logger.getLogger(getClass()).debug("Added class \"" + className + "\"");
|
101 |
| } |
102 |
| |
103 |
4046
| if (confirmed && !result.isConfirmed()) {
|
104 |
18
| result.setConfirmed(confirmed);
|
105 |
18
| Logger.getLogger(getClass()).debug("Class \"" + className + "\" is confirmed");
|
106 |
| } |
107 |
| |
108 |
4046
| return result;
|
109 |
| } |
110 |
| |
111 |
| |
112 |
14
| void deleteClass(ClassNode node) {
|
113 |
14
| Logger.getLogger(getClass()).debug("Delete class \"" + node + "\"");
|
114 |
| |
115 |
14
| node.getPackageNode().removeClass(node);
|
116 |
14
| classes.remove(node.getName());
|
117 |
| } |
118 |
| |
119 |
1086
| public Map<String, ClassNode> getClasses() {
|
120 |
1086
| return Collections.unmodifiableMap(classes);
|
121 |
| } |
122 |
| |
123 |
1633
| public FeatureNode createFeature(String featureName) {
|
124 |
1633
| return createFeature(featureName, false);
|
125 |
| } |
126 |
| |
127 |
2461
| public FeatureNode createFeature(String featureName, boolean confirmed) {
|
128 |
2461
| Logger.getLogger(getClass()).debug("Create feature \"" + featureName + "\"");
|
129 |
| |
130 |
2461
| FeatureNode result = features.get(featureName);
|
131 |
| |
132 |
2461
| if (result == null) {
|
133 |
2099
| String parentName;
|
134 |
| |
135 |
2099
| if (perl.match("/^(.*)\\.[^\\.]*\\(.*\\)$/", featureName)) {
|
136 |
663
| parentName = perl.group(1);
|
137 |
1436
| } else if (perl.match("/^(.*)\\.[^\\.]*$/", featureName)) {
|
138 |
1433
| parentName = perl.group(1);
|
139 |
| } else { |
140 |
3
| parentName = "";
|
141 |
| } |
142 |
| |
143 |
2099
| ClassNode parent = createClass(parentName, confirmed);
|
144 |
2099
| result = new FeatureNode(parent, featureName, confirmed);
|
145 |
2099
| parent.addFeature(result);
|
146 |
2099
| features.put(featureName, result);
|
147 |
2099
| Logger.getLogger(getClass()).debug("Added feature \"" + featureName + "\"");
|
148 |
| } |
149 |
| |
150 |
2461
| if (confirmed && !result.isConfirmed()) {
|
151 |
13
| result.setConfirmed(confirmed);
|
152 |
13
| Logger.getLogger(getClass()).debug("Feature \"" + featureName + "\" is confirmed");
|
153 |
| } |
154 |
| |
155 |
2461
| return result;
|
156 |
| } |
157 |
| |
158 |
| |
159 |
11
| void deleteFeature(FeatureNode node) {
|
160 |
11
| Logger.getLogger(getClass()).debug("Delete feature \"" + node + "\"");
|
161 |
| |
162 |
11
| node.getClassNode().removeFeature(node);
|
163 |
11
| features.remove(node.getName());
|
164 |
| } |
165 |
| |
166 |
776
| public Map<String, FeatureNode> getFeatures() {
|
167 |
776
| return Collections.unmodifiableMap(features);
|
168 |
| } |
169 |
| } |