1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.release.transform.jdom2;
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24 import java.util.Properties;
25
26 import org.apache.maven.model.Build;
27 import org.apache.maven.model.Dependency;
28 import org.apache.maven.model.DependencyManagement;
29 import org.apache.maven.model.Model;
30 import org.apache.maven.model.Parent;
31 import org.apache.maven.model.Profile;
32 import org.apache.maven.model.Reporting;
33 import org.apache.maven.model.Scm;
34 import org.jdom2.Document;
35 import org.jdom2.Element;
36 import org.jdom2.Text;
37
38
39
40
41
42
43
44 public class JDomModel extends Model {
45 private final Element project;
46
47 private final JDomModelBase modelBase;
48
49
50
51
52
53
54 public JDomModel(Document document) {
55 this(document.getRootElement());
56 }
57
58
59
60
61
62
63 public JDomModel(Element project) {
64 this.project = project;
65 this.modelBase = new JDomModelBase(project);
66 }
67
68 @Override
69 public Build getBuild() {
70 return modelBase.getBuild();
71 }
72
73 @Override
74 public List<Dependency> getDependencies() {
75 return modelBase.getDependencies();
76 }
77
78 @Override
79 public DependencyManagement getDependencyManagement() {
80 return modelBase.getDependencyManagement();
81 }
82
83 @Override
84 public Parent getParent() {
85 Element elm = getParentElement();
86 if (elm == null) {
87 return null;
88 } else {
89
90 return new JDomParent(elm);
91 }
92 }
93
94 private Element getParentElement() {
95 return project.getChild("parent", project.getNamespace());
96 }
97
98 @Override
99 public List<Profile> getProfiles() {
100 Element profilesElm = project.getChild("profiles", project.getNamespace());
101 if (profilesElm == null) {
102 return Collections.emptyList();
103 } else {
104 List<Element> profileElms = profilesElm.getChildren("profile", project.getNamespace());
105
106 List<Profile> profiles = new ArrayList<>(profileElms.size());
107
108 for (Element profileElm : profileElms) {
109 profiles.add(new JDomProfile(profileElm));
110 }
111
112 return profiles;
113 }
114 }
115
116 @Override
117 public Properties getProperties() {
118 Element properties = project.getChild("properties", project.getNamespace());
119
120 if (properties == null) {
121 return null;
122 } else {
123 return new JDomProperties(properties);
124 }
125 }
126
127 @Override
128 public Reporting getReporting() {
129 Element reporting = project.getChild("reporting", project.getNamespace());
130
131 if (reporting == null) {
132 return null;
133 } else {
134 return new JDomReporting(reporting);
135 }
136 }
137
138 @Override
139 public void setScm(Scm scm) {
140 if (scm == null) {
141 JDomUtils.rewriteElement("scm", null, project, project.getNamespace());
142 } else {
143 Element scmRoot = new Element("scm");
144 scmRoot.addContent("\n ");
145
146
147 Scm jdomScm = new JDomScm(scmRoot);
148 jdomScm.setConnection(scm.getConnection());
149 jdomScm.setDeveloperConnection(scm.getDeveloperConnection());
150 jdomScm.setTag(scm.getTag());
151 jdomScm.setUrl(scm.getUrl());
152
153 project.addContent("\n ").addContent(scmRoot).addContent("\n");
154 }
155 }
156
157 @Override
158 public Scm getScm() {
159 Element elm = project.getChild("scm", project.getNamespace());
160 if (elm == null) {
161 return null;
162 } else {
163
164 return new JDomScm(elm);
165 }
166 }
167
168 @Override
169 public void setVersion(String version) {
170 Element versionElement = project.getChild("version", project.getNamespace());
171
172 String parentVersion;
173 Element parent = getParentElement();
174 if (parent != null) {
175 parentVersion = parent.getChildTextTrim("version", project.getNamespace());
176 } else {
177 parentVersion = null;
178 }
179
180 if (versionElement == null) {
181 if (!version.equals(parentVersion)) {
182
183 Element artifactIdElement = project.getChild("artifactId", project.getNamespace());
184 int index = project.indexOf(artifactIdElement);
185
186 versionElement = new Element("version", project.getNamespace());
187 versionElement.setText(version);
188 project.addContent(index + 1, new Text("\n "));
189 project.addContent(index + 2, versionElement);
190 }
191 } else {
192 JDomUtils.rewriteValue(versionElement, version);
193 }
194 }
195 }