package jdepend.metadata.util; import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import jdepend.framework.util.ThreadPool; import jdepend.metadata.CandidateUtil; import jdepend.metadata.JavaClass; import jdepend.metadata.Method; import jdepend.metadata.relationtype.JavaClassRelationTypes; public class JavaClassCollection { private Collection<JavaClass> javaClasses; private Map<String, JavaClass> javaClassesForId; private Map<String, JavaClass> javaClassesForName; private Map<String, Method> httpMethods; private JavaClassRelationTypes javaClassRelationTypes; private Map<String, Collection<JavaClass>> unitJavaClasses; private final static int unitCount = ThreadPool.ThreadCount; public JavaClassCollection(JavaClassRelationTypes javaClassRelationTypes, Collection<JavaClass> javaClasses) { super(); this.javaClassRelationTypes = javaClassRelationTypes; this.javaClasses = javaClasses; javaClassesForId = new HashMap<String, JavaClass>(); javaClassesForName = new HashMap<String, JavaClass>(); for (JavaClass javaClass : javaClasses) { javaClassesForId.put(javaClass.getId(), javaClass); javaClassesForName.put(javaClass.getName(), javaClass); } unitJavaClasses = unitTheadClassCollection(javaClasses); } public Collection<JavaClass> getJavaClasses() { return javaClasses; } public JavaClass getTheClass(String id) { return javaClassesForId.get(id); } public JavaClass getTheClass(String place, String name) { JavaClass javaClass = this.javaClassesForId.get(CandidateUtil.getId(place, name)); if (javaClass == null) { return this.javaClassesForName.get(name); } else { return javaClass; } } public Map<String, Collection<JavaClass>> getUnitJavaClasses() { return unitJavaClasses; } public synchronized Map<String, Method> getHttpMethod() { if (this.httpMethods == null) { this.httpMethods = new HashMap<String, Method>(); for (JavaClass javaClass : javaClasses) { if (javaClass.getDetail().getRequestMapping() != null) { for (Method method : javaClass.getSelfMethods()) { if (method.getRequestMapping() != null) { this.httpMethods.put(method.getRequestMappingValueNoVariable(), method); } } } } } return this.httpMethods; } public JavaClassRelationTypes getJavaClassRelationTypes() { return javaClassRelationTypes; } public static <T> Map<String, Collection<T>> unitTheadClassCollection(Collection<T> javaClasses) { Map<String, Collection<T>> unitJavaClasses = new HashMap<String, Collection<T>>(); for (int unitIndex = 0; unitIndex < unitCount; unitIndex++) { unitJavaClasses.put("unit" + unitIndex, new ArrayList<T>()); } int unitIndex = 0; for (T javaClass : javaClasses) { unitJavaClasses.get("unit" + unitIndex % unitCount).add(javaClass); unitIndex++; } return unitJavaClasses; } }