1 package org.apache.maven.project.path; 2 3 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 ; 24 import java.util.ArrayList ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 28 public class DefaultPathTranslator 29 implements PathTranslator 30 { 31 private String FILE_SEPARATOR = "/"; 32 33 public void alignToBaseDirectory( Model model, File 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 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 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 filters = new ArrayList (); 62 for ( Iterator i = build.getFilters().iterator(); i.hasNext(); ) 63 { 64 String filter = (String ) 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 alignToBaseDirectory( String path, File basedir ) 78 { 79 String s = stripBasedirToken( path ); 80 81 if ( requiresBaseDirectoryAlignment( s ) ) 82 { 83 s = new File ( basedir, s ).getAbsolutePath(); 84 } 85 86 return s; 87 } 88 89 private String stripBasedirToken( String s ) 90 { 91 if ( s != null ) 92 { 93 s = s.trim(); 94 95 if ( s.startsWith( "${basedir}" ) ) 96 { 97 s = s.substring( 11 ); 99 } 100 } 101 102 return s; 103 } 104 105 private boolean requiresBaseDirectoryAlignment( String s ) 106 { 107 if ( s != null ) 108 { 109 File f = new File ( 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 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 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 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 filters = new ArrayList (); 153 for ( Iterator i = build.getFilters().iterator(); i.hasNext(); ) 154 { 155 String filter = (String ) 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 unalignFromBaseDirectory( String directory, File basedir ) 169 { 170 String 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 |