View Javadoc

1   package org.apache.maven.multiproject.harmonizer;
2   
3   /* ====================================================================
4    *   Licensed to the Apache Software Foundation (ASF) under one or more
5    *   contributor license agreements.  See the NOTICE file distributed with
6    *   this work for additional information regarding copyright ownership.
7    *   The ASF licenses this file to You under the Apache License, Version 2.0
8    *   (the "License"); you may not use this file except in compliance with
9    *   the License.  You may obtain a copy of the License at
10   *
11   *       http://www.apache.org/licenses/LICENSE-2.0
12   *
13   *   Unless required by applicable law or agreed to in writing, software
14   *   distributed under the License is distributed on an "AS IS" BASIS,
15   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   *   See the License for the specific language governing permissions and
17   *   limitations under the License.
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          // convert map values to list 
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 }