View Javadoc

1   package org.kite9.framework.model;
2   
3   import java.util.Collections;
4   import java.util.HashMap;
5   import java.util.HashSet;
6   import java.util.Map;
7   import java.util.Set;
8   import java.util.TreeSet;
9   
10  
11  public class ProjectModelImpl implements ProjectModel {
12  
13      private Map<MemberHandle, Set<MemberHandle>> calls = new HashMap<MemberHandle, Set<MemberHandle>>(100);
14      private Map<MemberHandle, Set<MemberHandle>> calledBy = new HashMap<MemberHandle, Set<MemberHandle>>(100);
15      private Map<String, Set<String>> annotatedClasses = new HashMap<String, Set<String>>(100);
16      private Map<String, Set<MemberHandle>> annotatedMembers = new HashMap<String, Set<MemberHandle>>(100);
17      private Map<String, Set<String>> subclasses = new HashMap<String, Set<String>>(100);
18      private Map<String, Set<String>> dependsOn = new HashMap<String, Set<String>>(100);
19      private Map<String, Set<String>> dependedOn = new HashMap<String, Set<String>>(100);
20      
21      private Map<String, Set<String>> packageContents = new HashMap<String, Set<String>>(100);
22      private Set<String> classes = new HashSet<String>(100); 
23      
24      public Set<MemberHandle> getCalls(MemberHandle m) {
25  	return checkGet(calls.get(m));
26      }
27  
28      public Set<MemberHandle> getCalledBy(MemberHandle m) {
29  	return checkGet(calledBy.get(m));
30      }
31  
32      public Set<String> getClassesWithAnnotation(String annotationName) {
33  	return checkGet(annotatedClasses.get(annotationName));
34      }
35  
36      public Set<MemberHandle> getMembersWithAnnotation(String annotationName) {
37  	return checkGet(annotatedMembers.get(annotationName));
38      }
39  
40      public Set<String> getSubclasses(String className) {
41  	return checkGet(subclasses.get(className));
42      }
43      
44      public void addSubclass(String superName, String name) {
45  	checkAdd(superName, name, subclasses);
46      }
47      
48      private <X> Set<X> checkGet(Set<X> in) {
49  	if (in==null) {
50  	    return Collections.emptySet();
51  	}
52  	
53  	return in;
54      }
55  
56      private <A, B> void checkAdd(A keyName, B value, Map<A, Set<B>> theMap) {
57  	Set<B> item = theMap.get(keyName);
58  	if (item == null) {
59  	    item = new TreeSet<B>();
60  	    theMap.put(keyName, item);
61  	}
62  	item.add(value);
63      }
64  
65      public void addClassAnnotation(String desc, String className) {
66  	checkAdd(desc, className, annotatedClasses);
67      }
68  
69      public void addMemberAnnotation(String desc, MemberHandle mh) {
70  	checkAdd(desc, mh, annotatedMembers);
71      }
72  
73      public void addCalls(MemberHandle desc, MemberHandle mh) {
74  	checkAdd(desc, mh, calls);
75  	checkAdd(mh, desc, calledBy);
76      }
77      
78      public void addDependency(String from, String on) {
79  	checkAdd(from, on, dependsOn);
80  	checkAdd(on, from, dependedOn);
81      }
82      
83      public void addPackageClass(String packageName, String cl) {
84  	checkAdd(packageName, cl, packageContents);
85      }
86      
87      public void addClass(String name) {
88  	classes.add(name);
89      }
90  
91      public Set<String> getClassesInPackage(String packageName) {
92  	return checkGet(packageContents.get(packageName));
93      }
94  
95      public boolean withinModel(String className) {
96  	return classes.contains(className);
97      }
98      
99      public int getClassCount() {
100 	return classes.size();
101     }
102 
103     public Set<String> getDependedOn(String className) {
104 	return checkGet(dependedOn.get(className));
105     }
106 
107     public Set<String> getDependsOn(String className) {
108 	return checkGet(dependsOn.get(className));
109     }
110 }