com.photon.maven.plugins.android.standalonemojos.MojoProjectStub.java Source code

Java tutorial

Introduction

Here is the source code for com.photon.maven.plugins.android.standalonemojos.MojoProjectStub.java

Source

/*
 * ###
 * 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;
    }
}