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      public void alignToBaseDirectory(Model model, File basedir) {
43          if (basedir == null) {
44              return;
45          }
46  
47          Build build = model.getBuild();
48  
49          if (build != null) {
50              build.setDirectory(alignToBaseDirectory(build.getDirectory(), basedir));
51  
52              build.setSourceDirectory(alignToBaseDirectory(build.getSourceDirectory(), basedir));
53  
54              build.setTestSourceDirectory(alignToBaseDirectory(build.getTestSourceDirectory(), basedir));
55  
56              for (Resource resource : build.getResources()) {
57                  resource.setDirectory(alignToBaseDirectory(resource.getDirectory(), basedir));
58              }
59  
60              for (Resource resource : build.getTestResources()) {
61                  resource.setDirectory(alignToBaseDirectory(resource.getDirectory(), basedir));
62              }
63  
64              if (build.getFilters() != null) {
65                  List<String> filters = new ArrayList<>();
66                  for (String filter : build.getFilters()) {
67                      filters.add(alignToBaseDirectory(filter, basedir));
68                  }
69                  build.setFilters(filters);
70              }
71  
72              build.setOutputDirectory(alignToBaseDirectory(build.getOutputDirectory(), basedir));
73  
74              build.setTestOutputDirectory(alignToBaseDirectory(build.getTestOutputDirectory(), basedir));
75          }
76  
77          Reporting reporting = model.getReporting();
78  
79          if (reporting != null) {
80              reporting.setOutputDirectory(alignToBaseDirectory(reporting.getOutputDirectory(), basedir));
81          }
82      }
83  
84      public String alignToBaseDirectory(String path, File basedir) {
85          if (basedir == null) {
86              return path;
87          }
88  
89          if (path == null) {
90              return null;
91          }
92  
93          String s = stripBasedirToken(path);
94  
95          File file = new File(s);
96          if (file.isAbsolute()) {
97              
98              s = file.getPath();
99          } else if (file.getPath().startsWith(File.separator)) {
100             
101             s = file.getAbsolutePath();
102         } else {
103             
104             s = new File(new File(basedir, s).toURI().normalize()).getAbsolutePath();
105         }
106 
107         return s;
108     }
109 
110     private String stripBasedirToken(String s) {
111         if (s != null) {
112             String basedirExpr = null;
113             for (String expression : BASEDIR_EXPRESSIONS) {
114                 if (s.startsWith(expression)) {
115                     basedirExpr = expression;
116                     break;
117                 }
118             }
119 
120             if (basedirExpr != null) {
121                 if (s.length() > basedirExpr.length()) {
122                     
123                     s = chopLeadingFileSeparator(s.substring(basedirExpr.length()));
124                 } else {
125                     s = ".";
126                 }
127             }
128         }
129 
130         return s;
131     }
132 
133     
134 
135 
136 
137 
138 
139 
140     private String chopLeadingFileSeparator(String path) {
141         if (path != null) {
142             if (path.startsWith("/") || path.startsWith("\\")) {
143                 path = path.substring(1);
144             }
145         }
146         return path;
147     }
148 
149     public void unalignFromBaseDirectory(Model model, File basedir) {
150         if (basedir == null) {
151             return;
152         }
153 
154         Build build = model.getBuild();
155 
156         if (build != null) {
157             build.setDirectory(unalignFromBaseDirectory(build.getDirectory(), basedir));
158 
159             build.setSourceDirectory(unalignFromBaseDirectory(build.getSourceDirectory(), basedir));
160 
161             build.setTestSourceDirectory(unalignFromBaseDirectory(build.getTestSourceDirectory(), basedir));
162 
163             for (Resource resource : build.getResources()) {
164                 resource.setDirectory(unalignFromBaseDirectory(resource.getDirectory(), basedir));
165             }
166 
167             for (Resource resource : build.getTestResources()) {
168                 resource.setDirectory(unalignFromBaseDirectory(resource.getDirectory(), basedir));
169             }
170 
171             if (build.getFilters() != null) {
172                 List<String> filters = new ArrayList<>();
173                 for (String filter : build.getFilters()) {
174                     filters.add(unalignFromBaseDirectory(filter, basedir));
175                 }
176                 build.setFilters(filters);
177             }
178 
179             build.setOutputDirectory(unalignFromBaseDirectory(build.getOutputDirectory(), basedir));
180 
181             build.setTestOutputDirectory(unalignFromBaseDirectory(build.getTestOutputDirectory(), basedir));
182         }
183 
184         Reporting reporting = model.getReporting();
185 
186         if (reporting != null) {
187             reporting.setOutputDirectory(unalignFromBaseDirectory(reporting.getOutputDirectory(), basedir));
188         }
189     }
190 
191     public String unalignFromBaseDirectory(String path, File basedir) {
192         if (basedir == null) {
193             return path;
194         }
195 
196         if (path == null) {
197             return null;
198         }
199 
200         path = path.trim();
201 
202         String base = basedir.getAbsolutePath();
203         if (path.startsWith(base)) {
204             path = chopLeadingFileSeparator(path.substring(base.length()));
205         }
206 
207         if (path.isEmpty()) {
208             path = ".";
209         }
210 
211         if (!new File(path).isAbsolute()) {
212             path = path.replace('\\', '/');
213         }
214 
215         return path;
216     }
217 }