1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.project.path;
20
21 import javax.inject.Named;
22 import javax.inject.Singleton;
23
24 import java.io.File;
25 import java.util.ArrayList;
26 import java.util.List;
27
28 import org.apache.maven.model.Build;
29 import org.apache.maven.model.Model;
30 import org.apache.maven.model.Reporting;
31 import org.apache.maven.model.Resource;
32
33
34
35
36 @Deprecated
37 @Named
38 @Singleton
39 public class DefaultPathTranslator implements PathTranslator {
40 private static final String[] BASEDIR_EXPRESSIONS = {"${basedir}", "${pom.basedir}", "${project.basedir}"};
41
42 @Override
43 public void alignToBaseDirectory(Model model, File basedir) {
44 if (basedir == null) {
45 return;
46 }
47
48 Build build = model.getBuild();
49
50 if (build != null) {
51 build.setDirectory(alignToBaseDirectory(build.getDirectory(), basedir));
52
53 build.setSourceDirectory(alignToBaseDirectory(build.getSourceDirectory(), basedir));
54
55 build.setTestSourceDirectory(alignToBaseDirectory(build.getTestSourceDirectory(), basedir));
56
57 for (Resource resource : build.getResources()) {
58 resource.setDirectory(alignToBaseDirectory(resource.getDirectory(), basedir));
59 }
60
61 for (Resource resource : build.getTestResources()) {
62 resource.setDirectory(alignToBaseDirectory(resource.getDirectory(), basedir));
63 }
64
65 if (build.getFilters() != null) {
66 List<String> filters = new ArrayList<>();
67 for (String filter : build.getFilters()) {
68 filters.add(alignToBaseDirectory(filter, basedir));
69 }
70 build.setFilters(filters);
71 }
72
73 build.setOutputDirectory(alignToBaseDirectory(build.getOutputDirectory(), basedir));
74
75 build.setTestOutputDirectory(alignToBaseDirectory(build.getTestOutputDirectory(), basedir));
76 }
77
78 Reporting reporting = model.getReporting();
79
80 if (reporting != null) {
81 reporting.setOutputDirectory(alignToBaseDirectory(reporting.getOutputDirectory(), basedir));
82 }
83 }
84
85 @Override
86 public String alignToBaseDirectory(String path, File basedir) {
87 if (basedir == null) {
88 return path;
89 }
90
91 if (path == null) {
92 return null;
93 }
94
95 String s = stripBasedirToken(path);
96
97 File file = new File(s);
98 if (file.isAbsolute()) {
99
100 s = file.getPath();
101 } else if (file.getPath().startsWith(File.separator)) {
102
103 s = file.getAbsolutePath();
104 } else {
105
106 s = new File(new File(basedir, s).toURI().normalize()).getAbsolutePath();
107 }
108
109 return s;
110 }
111
112 private String stripBasedirToken(String s) {
113 if (s != null) {
114 String basedirExpr = null;
115 for (String expression : BASEDIR_EXPRESSIONS) {
116 if (s.startsWith(expression)) {
117 basedirExpr = expression;
118 break;
119 }
120 }
121
122 if (basedirExpr != null) {
123 if (s.length() > basedirExpr.length()) {
124
125 s = chopLeadingFileSeparator(s.substring(basedirExpr.length()));
126 } else {
127 s = ".";
128 }
129 }
130 }
131
132 return s;
133 }
134
135
136
137
138
139
140
141
142 private String chopLeadingFileSeparator(String path) {
143 if (path != null) {
144 if (path.startsWith("/") || path.startsWith("\\")) {
145 path = path.substring(1);
146 }
147 }
148 return path;
149 }
150
151 @Override
152 public void unalignFromBaseDirectory(Model model, File basedir) {
153 if (basedir == null) {
154 return;
155 }
156
157 Build build = model.getBuild();
158
159 if (build != null) {
160 build.setDirectory(unalignFromBaseDirectory(build.getDirectory(), basedir));
161
162 build.setSourceDirectory(unalignFromBaseDirectory(build.getSourceDirectory(), basedir));
163
164 build.setTestSourceDirectory(unalignFromBaseDirectory(build.getTestSourceDirectory(), basedir));
165
166 for (Resource resource : build.getResources()) {
167 resource.setDirectory(unalignFromBaseDirectory(resource.getDirectory(), basedir));
168 }
169
170 for (Resource resource : build.getTestResources()) {
171 resource.setDirectory(unalignFromBaseDirectory(resource.getDirectory(), basedir));
172 }
173
174 if (build.getFilters() != null) {
175 List<String> filters = new ArrayList<>();
176 for (String filter : build.getFilters()) {
177 filters.add(unalignFromBaseDirectory(filter, basedir));
178 }
179 build.setFilters(filters);
180 }
181
182 build.setOutputDirectory(unalignFromBaseDirectory(build.getOutputDirectory(), basedir));
183
184 build.setTestOutputDirectory(unalignFromBaseDirectory(build.getTestOutputDirectory(), basedir));
185 }
186
187 Reporting reporting = model.getReporting();
188
189 if (reporting != null) {
190 reporting.setOutputDirectory(unalignFromBaseDirectory(reporting.getOutputDirectory(), basedir));
191 }
192 }
193
194 @Override
195 public String unalignFromBaseDirectory(String path, File basedir) {
196 if (basedir == null) {
197 return path;
198 }
199
200 if (path == null) {
201 return null;
202 }
203
204 path = path.trim();
205
206 String base = basedir.getAbsolutePath();
207 if (path.startsWith(base)) {
208 path = chopLeadingFileSeparator(path.substring(base.length()));
209 }
210
211 if (path.isEmpty()) {
212 path = ".";
213 }
214
215 if (!new File(path).isAbsolute()) {
216 path = path.replace('\\', '/');
217 }
218
219 return path;
220 }
221 }