1 package org.apache.maven.multiproject.harmonizer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.HashMap;
24 import java.util.Iterator;
25 import java.util.List;
26 import java.util.Map;
27 import org.apache.maven.project.Dependency;
28 import org.apache.maven.project.Project;
29
30 /**
31 * Helper Bean which helps to generate a dependency report for given list of projects
32 * @author <a href="mailto:michal.maczka@dimatics.com">Michal Maczka</a>
33 * @version $Id: DependencyHarmonizer.java 532339 2007-04-25 12:28:56Z ltheussl $
34 */
35 public class DependencyHarmonizer
36 {
37 private Map deps = new HashMap();
38 private int numberOfProjects;
39 private final static int NOT_SET = -1;
40 private int numOfArtifacts = NOT_SET;
41
42
43 /**
44 * @return
45 */
46 public Iterator getDependencies()
47 {
48
49 List list = new ArrayList();
50 list.addAll(deps.values());
51 Collections.sort(list);
52 return list.iterator();
53 }
54 public void build(List projects)
55 {
56 numberOfProjects = projects.size();
57 for (Iterator projectIter = projects.iterator();
58 projectIter.hasNext();
59 )
60 {
61 Project project = (Project) projectIter.next();
62 for (Iterator depIter = project.getDependencies().iterator();
63 depIter.hasNext();
64 )
65 {
66 Dependency dep = (Dependency) depIter.next();
67 String id = dep.getId();
68 MultiDependency multiDep = null;
69 if (deps.containsKey(id))
70 {
71 multiDep = (MultiDependency) deps.get(id);
72 }
73 else
74 {
75 multiDep = new MultiDependency();
76 multiDep.setId(id);
77 deps.put(id, multiDep);
78 }
79 multiDep.add(project, dep.getVersion());
80 }
81 }
82 }
83 /**
84 *
85 * @return
86 */
87 public int getNumberOfProjects()
88 {
89 return numberOfProjects;
90 }
91 /**
92 *
93 * @return
94 */
95 public int getNumberOfDependencies()
96 {
97 return deps.size();
98 }
99 /**
100 *
101 * @return
102 */
103 public int getNumberOfArtifacts()
104 {
105 if (numOfArtifacts != NOT_SET)
106 {
107 return numOfArtifacts;
108 }
109 numOfArtifacts = 0;
110 for (Iterator iter = deps.keySet().iterator(); iter.hasNext();)
111 {
112 String key = (String)iter.next();
113 MultiDependency dep = (MultiDependency) deps.get(key) ;
114 numOfArtifacts += dep.getNumberOfVersions();
115 }
116 return numOfArtifacts;
117 }
118 public double getConvergence()
119 {
120 if (getNumberOfArtifacts() > 0)
121 {
122 return (double)getNumberOfDependencies()/getNumberOfArtifacts();
123 }
124 return 100d;
125 }
126 }