KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > maven > project > path > DefaultPathTranslator


1 package org.apache.maven.project.path;
2
3 /*
4  * Copyright 2001-2005 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18
19 import org.apache.maven.model.Build;
20 import org.apache.maven.model.Model;
21 import org.apache.maven.model.Resource;
22
23 import java.io.File JavaDoc;
24 import java.util.ArrayList JavaDoc;
25 import java.util.Iterator JavaDoc;
26 import java.util.List JavaDoc;
27
28 public class DefaultPathTranslator
29     implements PathTranslator
30 {
31     private String JavaDoc FILE_SEPARATOR = "/";
32
33     public void alignToBaseDirectory( Model model, File JavaDoc basedir )
34     {
35         Build build = model.getBuild();
36
37         if ( build != null )
38         {
39             build.setDirectory( alignToBaseDirectory( build.getDirectory(), basedir ) );
40
41             build.setSourceDirectory( alignToBaseDirectory( build.getSourceDirectory(), basedir ) );
42
43             build.setTestSourceDirectory( alignToBaseDirectory( build.getTestSourceDirectory(), basedir ) );
44
45             for ( Iterator JavaDoc i = build.getResources().iterator(); i.hasNext(); )
46             {
47                 Resource resource = (Resource) i.next();
48
49                 resource.setDirectory( alignToBaseDirectory( resource.getDirectory(), basedir ) );
50             }
51
52             for ( Iterator JavaDoc i = build.getTestResources().iterator(); i.hasNext(); )
53             {
54                 Resource resource = (Resource) i.next();
55
56                 resource.setDirectory( alignToBaseDirectory( resource.getDirectory(), basedir ) );
57             }
58
59             if ( build.getFilters() != null )
60             {
61                 List JavaDoc filters = new ArrayList JavaDoc();
62                 for ( Iterator JavaDoc i = build.getFilters().iterator(); i.hasNext(); )
63                 {
64                     String JavaDoc filter = (String JavaDoc) i.next();
65
66                     filters.add( alignToBaseDirectory( filter, basedir ) );
67                 }
68                 build.setFilters( filters );
69             }
70
71             build.setOutputDirectory( alignToBaseDirectory( build.getOutputDirectory(), basedir ) );
72
73             build.setTestOutputDirectory( alignToBaseDirectory( build.getTestOutputDirectory(), basedir ) );
74         }
75     }
76
77     public String JavaDoc alignToBaseDirectory( String JavaDoc path, File JavaDoc basedir )
78     {
79         String JavaDoc s = stripBasedirToken( path );
80
81         if ( requiresBaseDirectoryAlignment( s ) )
82         {
83             s = new File JavaDoc( basedir, s ).getAbsolutePath();
84         }
85
86         return s;
87     }
88
89     private String JavaDoc stripBasedirToken( String JavaDoc s )
90     {
91         if ( s != null )
92         {
93             s = s.trim();
94
95             if ( s.startsWith( "${basedir}" ) )
96             {
97                 // Take out ${basedir} and the leading slash
98
s = s.substring( 11 );
99             }
100         }
101
102         return s;
103     }
104
105     private boolean requiresBaseDirectoryAlignment( String JavaDoc s )
106     {
107         if ( s != null )
108         {
109             File JavaDoc f = new File JavaDoc( s );
110
111             if ( s.startsWith( FILE_SEPARATOR ) || f.isAbsolute() )
112             {
113                 return false;
114             }
115             else
116             {
117                 return true;
118             }
119         }
120
121         return false;
122     }
123
124     public void unalignFromBaseDirectory( Model model, File JavaDoc basedir )
125     {
126         Build build = model.getBuild();
127
128         if ( build != null )
129         {
130             build.setDirectory( unalignFromBaseDirectory( build.getDirectory(), basedir ) );
131
132             build.setSourceDirectory( unalignFromBaseDirectory( build.getSourceDirectory(), basedir ) );
133
134             build.setTestSourceDirectory( unalignFromBaseDirectory( build.getTestSourceDirectory(), basedir ) );
135
136             for ( Iterator JavaDoc i = build.getResources().iterator(); i.hasNext(); )
137             {
138                 Resource resource = (Resource) i.next();
139
140                 resource.setDirectory( unalignFromBaseDirectory( resource.getDirectory(), basedir ) );
141             }
142
143             for ( Iterator JavaDoc i = build.getTestResources().iterator(); i.hasNext(); )
144             {
145                 Resource resource = (Resource) i.next();
146
147                 resource.setDirectory( unalignFromBaseDirectory( resource.getDirectory(), basedir ) );
148             }
149
150             if ( build.getFilters() != null )
151             {
152                 List JavaDoc filters = new ArrayList JavaDoc();
153                 for ( Iterator JavaDoc i = build.getFilters().iterator(); i.hasNext(); )
154                 {
155                     String JavaDoc filter = (String JavaDoc) i.next();
156
157                     filters.add( unalignFromBaseDirectory( filter, basedir ) );
158                 }
159                 build.setFilters( filters );
160             }
161
162             build.setOutputDirectory( unalignFromBaseDirectory( build.getOutputDirectory(), basedir ) );
163
164             build.setTestOutputDirectory( unalignFromBaseDirectory( build.getTestOutputDirectory(), basedir ) );
165         }
166     }
167
168     public String JavaDoc unalignFromBaseDirectory( String JavaDoc directory, File JavaDoc basedir )
169     {
170         String JavaDoc path = basedir.getPath();
171         if ( directory.startsWith( path ) )
172         {
173             directory = directory.substring( path.length() + 1 ).replace( '\\', '/' );
174         }
175         return directory;
176     }
177
178 }
179
180
Popular Tags