View Javadoc
1   package com.simpligility.maven.plugins.android.standalonemojos;
2   
3   import java.io.File;
4   import java.io.FileReader;
5   import java.util.ArrayList;
6   import java.util.List;
7   import java.util.Properties;
8   
9   import org.apache.commons.io.FilenameUtils;
10  import org.apache.commons.io.IOUtils;
11  import org.apache.commons.lang3.StringUtils;
12  import org.apache.maven.model.Build;
13  import org.apache.maven.model.Model;
14  import org.apache.maven.model.Resource;
15  import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
16  import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
17  import org.junit.Assert;
18  
19  /**
20   * Basic MavenProject implementation that can be used for testing.
21   */
22  public class MojoProjectStub extends MavenProjectStub {
23      private File basedir;
24      private Build build;
25      private Properties props = new Properties();
26  
27      public MojoProjectStub(File projectDir) {
28          this.basedir = projectDir;
29          props.setProperty("basedir", this.basedir.getAbsolutePath());
30  
31          File pom = new File(getBasedir(), "plugin-config.xml");
32          MavenXpp3Reader pomReader = new MavenXpp3Reader();
33          Model model = null;
34          FileReader fileReader = null;
35  
36          try {
37              fileReader = new FileReader(pom);
38              model = pomReader.read(fileReader);
39              setModel(model);
40          } catch (Exception e) {
41              throw new RuntimeException(e);
42          } finally {
43              IOUtils.closeQuietly(fileReader);
44          }
45  
46          setGroupId(model.getGroupId());
47          setArtifactId(model.getArtifactId());
48          setVersion(model.getVersion());
49          setName(model.getName());
50          setUrl(model.getUrl());
51          setPackaging(model.getPackaging());
52          setFile(pom);
53  
54          build = model.getBuild();
55          if(build == null) {
56              build = new Build();
57          }
58  
59          File srcDir = getStandardDir(getBuild().getSourceDirectory(), "src/main/java");
60          getBuild().setSourceDirectory(srcDir.getAbsolutePath());
61  
62          File targetDir = getStandardDir(getBuild().getDirectory(), "target");
63          getBuild().setDirectory(targetDir.getAbsolutePath());
64  
65          File outputDir = getStandardDir(getBuild().getOutputDirectory(), "target/classes");
66          getBuild().setOutputDirectory(outputDir.getAbsolutePath());
67  
68          List<Resource> resources = new ArrayList<Resource>();
69          resources.addAll(getBuild().getResources());
70  
71          if (resources.isEmpty()) {
72              resources = new ArrayList<Resource>();
73              Resource resource = new Resource();
74              File resourceDir = normalize("src/main/resources");
75              resource.setDirectory(resourceDir.getAbsolutePath());
76              makeDirs(resourceDir);
77              resources.add(resource);
78          } else {
79              // Make this project work on windows ;-)
80              for (Resource resource : resources) {
81                  File dir = normalize(resource.getDirectory());
82                  resource.setDirectory(dir.getAbsolutePath());
83              }
84          }
85  
86          getBuild().setResources(resources);
87      }
88      
89      @Override
90      public Properties getProperties() {
91          return props;
92      }
93      
94      @Override
95      public Build getBuild() {
96          return this.build;
97      }
98  
99      private File getStandardDir(String dirPath, String defaultPath) {
100         File dir;
101 
102         if (StringUtils.isBlank(dirPath)) {
103             dir = normalize(defaultPath);
104         } else {
105             dir = normalize(dirPath);
106         }
107 
108         makeDirs(dir);
109         return dir;
110     }
111     
112     /**
113      * Normalize a path.
114      * <p>
115      * Ensure path is absolute, and has proper system file separators.
116      * 
117      * @param path the raw path.
118      * @return
119      */
120     private File normalize(final String path) {
121         String ospath = FilenameUtils.separatorsToSystem(path);
122         File file = new File(ospath);
123         if(file.isAbsolute()) {
124            return file; 
125         } else {
126             return new File(getBasedir(), ospath);
127         }
128     }
129 
130     private void makeDirs(File dir) {
131         if (dir.exists()) {
132             return;
133         }
134 
135         Assert.assertTrue("Unable to make directories: " + dir, dir.mkdirs());
136     }
137 
138     @Override
139     public File getBasedir() {
140         return this.basedir;
141     }
142 }