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
23
24
25
26 /***
27 * {@inheritDoc}
28 */
29 protected String getTemplateFileName() {
30 return "dependency-graph-template.xml";
31 }
32
33
34
35
36
37
38
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
79
80
81
82
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 }