/*
* ###
* Android Maven Plugin - android-maven-plugin
*
* Copyright (C) 1999 - 2012 Photon Infotech Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ###
*/
/*
* Copyright (C) 2009 Jayway AB
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.photon.maven.plugins.android.standalonemojos;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.model.Build;
import org.apache.maven.model.Model;
import org.apache.maven.model.Resource;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
import org.junit.Assert;
/**
* Basic MavenProject implementation that can be used for testing.
*/
public class MojoProjectStub extends MavenProjectStub {
private File basedir;
private Build build;
private Properties props = new Properties();
public MojoProjectStub(File projectDir) {
this.basedir = projectDir;
props.setProperty("basedir", this.basedir.getAbsolutePath());
File pom = new File(getBasedir(), "plugin-config.xml");
MavenXpp3Reader pomReader = new MavenXpp3Reader();
Model model = null;
FileReader fileReader = null;
try {
fileReader = new FileReader(pom);
model = pomReader.read(fileReader);
setModel(model);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
IOUtils.closeQuietly(fileReader);
}
setGroupId(model.getGroupId());
setArtifactId(model.getArtifactId());
setVersion(model.getVersion());
setName(model.getName());
setUrl(model.getUrl());
setPackaging(model.getPackaging());
setFile(pom);
build = model.getBuild();
if(build == null) {
build = new Build();
}
File srcDir = getStandardDir(getBuild().getSourceDirectory(), "src/main/java");
getBuild().setSourceDirectory(srcDir.getAbsolutePath());
File targetDir = getStandardDir(getBuild().getDirectory(), "target");
getBuild().setDirectory(targetDir.getAbsolutePath());
File outputDir = getStandardDir(getBuild().getOutputDirectory(), "target/classes");
getBuild().setOutputDirectory(outputDir.getAbsolutePath());
List<Resource> resources = new ArrayList<Resource>();
resources.addAll(getBuild().getResources());
if (resources.isEmpty()) {
resources = new ArrayList<Resource>();
Resource resource = new Resource();
File resourceDir = normalize("src/main/resources");
resource.setDirectory(resourceDir.getAbsolutePath());
makeDirs(resourceDir);
resources.add(resource);
} else {
// Make this project work on windows ;-)
for (Resource resource : resources) {
File dir = normalize(resource.getDirectory());
resource.setDirectory(dir.getAbsolutePath());
}
}
getBuild().setResources(resources);
}
@Override
public Properties getProperties() {
return props;
}
@Override
public Build getBuild() {
return this.build;
}
private File getStandardDir(String dirPath, String defaultPath) {
File dir;
if (StringUtils.isBlank(dirPath)) {
dir = normalize(defaultPath);
} else {
dir = normalize(dirPath);
}
makeDirs(dir);
return dir;
}
/**
* Normalize a path.
* <p>
* Ensure path is absolute, and has proper system file separators.
*
* @param path the raw path.
* @return
*/
private File normalize(final String path) {
String ospath = FilenameUtils.separatorsToSystem(path);
File file = new File(ospath);
if(file.isAbsolute()) {
return file;
} else {
return new File(getBasedir(), ospath);
}
}
private void makeDirs(File dir) {
if (dir.exists()) {
return;
}
Assert.assertTrue("Unable to make directories: " + dir, dir.mkdirs());
}
@Override
public File getBasedir() {
return this.basedir;
}
}