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
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
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
114
115
116
117
118
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 }