View Javadoc

1   package de.matthias_burbach.deputy.core;
2   
3   import java.util.Iterator;
4   
5   import org.jdom.Document;
6   import org.jdom.Element;
7   import org.jdom.xpath.XPath;
8   
9   import de.matthias_burbach.deputy.core.project.Project;
10  
11  /***
12   * Exports the dependency graph of the project being loaded into Deputy in an
13   * XML format that can be imported into Rational Rose using the add-in Roco
14   * which is packaged with the Deputy distribution.
15   *
16   * @author Matthias Burbach
17   */
18  public class DependencyGraphXmlGenerator
19      extends AbstractDependencyGraphGenerator {
20  
21      /*
22       * (non-Javadoc)
23       * @see de.matthias_burbach.deputy.core.AbstractDependencyGraphGenerator
24       *          #getTemplateFileName()
25       */
26      /***
27       * {@inheritDoc}
28       */
29      protected String getTemplateFileName() {
30          return "dependency-graph-template.xml";
31      }
32  
33      /*
34       * (non-Javadoc)
35       * @see de.matthias_burbach.deputy.core.AbstractDependencyGraphGenerator
36       *          #generateProjectElements(
37       *              de.matthias_burbach.deputy.core.project.Project,
38       *              org.jdom.Document)
39       */
40      /***
41       * {@inheritDoc}
42       */
43      protected void generateProjectElements(
44              final Project topProject,
45              final Document document)
46              throws Exception {
47          Element projectsElement =
48              (Element) XPath.newInstance(
49                  "DependencyGraph/Projects").selectSingleNode(
50                  document);
51          Iterator iter = getNodeIterator(topProject);
52          while (iter.hasNext()) {
53              Project project = (Project) iter.next();
54              Element projectElement = new Element("Project");
55              projectElement.setAttribute(
56                  "ID",
57                  getProjectHashKey(
58                      project.getArtifactId(),
59                      project.getVersion()));
60              projectElement.setAttribute("groupID", project.getGroupId());
61              projectElement.setAttribute("artifactID", project.getArtifactId());
62              projectElement.setAttribute("version", project.getVersion());
63              String url = project.getUrl();
64              if (url == null) {
65                  url = project.getDefaultUrl();
66              }
67              if (url == null) {
68                  url = "";
69              }
70              projectElement.setAttribute("url", url);
71              projectElement.setAttribute(
72                      "isAssembly", "" + project.isAssembly());
73              projectsElement.addContent(projectElement);
74          }
75      }
76  
77      /*
78       * (non-Javadoc)
79       * @see de.matthias_burbach.deputy.core.AbstractDependencyGraphGenerator
80       *          #generateDependencyElements(
81       *              de.matthias_burbach.deputy.core.project.Project,
82       *              org.jdom.Document)
83       */
84      /***
85       * {@inheritDoc}
86       */
87      protected void generateDependencyElements(
88              final Project topProject,
89              final Document document)
90              throws Exception {
91          Element dependenciesElement =
92              (Element) XPath.newInstance(
93                  "DependencyGraph/Dependencies").selectSingleNode(
94                  document);
95          Iterator iter = getNodeIterator(topProject);
96          while (iter.hasNext()) {
97              Project project = (Project) iter.next();
98              Iterator iterator = project.getDependencies();
99              while (iterator.hasNext()) {
100                 Project dependencyProject = (Project) iterator.next();
101                 Element dependencyElement = new Element("Dependency");
102                 String fromID =
103                     getProjectHashKey(
104                         project.getArtifactId(),
105                         project.getVersion());
106                 String toID =
107                     getProjectHashKey(
108                         dependencyProject.getArtifactId(),
109                         dependencyProject.getVersion());
110                 dependencyElement.setAttribute("fromID", fromID);
111                 dependencyElement.setAttribute("toID", toID);
112                 dependenciesElement.addContent(dependencyElement);
113             }
114         }
115     }
116 }