Package org.moxie.ant

Source Code of org.moxie.ant.ProjectHelper

/*
* Copyright 2012 James Moger
*
* 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 org.moxie.ant;

import java.util.ArrayList;
import java.util.List;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Location;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.helper.ProjectHelper2;
import org.apache.tools.ant.taskdefs.Taskdef;
import org.moxie.ArtifactVersion;
import org.moxie.utils.StringUtils;

/**
* Entry point for Ant-classpath-included Moxie (i.e. Moxie + Ant or
* ${user.home}/.ant/lib).
*
*/
public class ProjectHelper extends ProjectHelper2 {

  public ProjectHelper() {
    super();
  }
 
  @Override
  public void parse(Project project, Object source) throws BuildException {
    if (getImportStack().size() == 0) {
      project.log("configuring moxie tasks", Project.MSG_DEBUG);
     
      // automatically define Moxie tasks
      Taskdef def = new Taskdef();
      def.setProject(project);
      def.setURI("antlib:org.moxie");
      def.setResource("org/moxie/antlib.xml");
      def.execute();
     
      // add Moxie targets
      project.log("adding Moxie phases", Project.MSG_DEBUG);
      newInitPhase(project);
      newCompilePhase(project);
      newTestPhase(project);
      newPackagePhase(project);
      newInstallPhase(project);
      newDeployPhase(project);
      newCleanPhase(project);
      newReportPhase(project);
      newRunPhase(project);
      newReleasePhase(project);
    }   
   
    // continue normal parsing
    super.parse(project, source);
  }
 
  private Target newPhase(Project project, String name, String... depends) {
    String prefix = "phase:";
    Target phase = new Target();
    phase.setName(prefix + name);
    phase.setLocation(new Location(prefix + name));
    project.addTarget(phase);
    if (depends != null && depends.length > 0) {
      List<String> list = new ArrayList<String>();
      for (String depend : depends) {
        list.add(prefix + depend);
      }
      phase.setDepends(StringUtils.flattenStrings(list, ","));
    }
    return phase;
  }
 
  private Target newInitPhase(Project project) {
    Target phase = newPhase(project, "init");
    phase.setDescription("validates project configuration, retrieves dependencies, and configures ANT properties");
   
    MxInit task = new MxInit();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }
 
  private Target newCompilePhase(Project project) {
    Target phase = newPhase(project, "compile", "init");   
    phase.setDescription("compile the source code of the project");
       
    MxJavac task = new MxJavac();
    task.setProject(project);   
    phase.addTask(task);
    return phase;
  }

  private Target newTestPhase(Project project) {
    Target phase = newPhase(project, "test", "compile");
    phase.setDescription("compile the source code of the project");
   
    MxTest task = new MxTest();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }

  private Target newPackagePhase(Project project) {
    Target phase = newPhase(project, "package", "compile");
    phase.setDescription("take the compiled code and package it in its distributable format, such as a JAR");
   
    MxPackage task = new MxPackage();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }
 
  private Target newInstallPhase(Project project) {
    Target phase = newPhase(project, "install", "package");
    phase.setDescription("install the package into the local repository, for use as a dependency in other projects locally");

    MxInstall task = new MxInstall();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }
 
  private Target newDeployPhase(Project project) {
    Target phase = newPhase(project, "deploy", "package");
    phase.setDescription("deploys the generated binaries to an external repository");
   
    MxDeploy task = new MxDeploy();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }
 
  private Target newCleanPhase(Project project) {   
    Target phase = newPhase(project, "clean", "init");
    phase.setDescription("clean build and target directories");

    MxPackage task = new MxPackage();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }
 
  private Target newReportPhase(Project project) {
    Target phase = newPhase(project, "report", "init");
    phase.setDescription("generates a dependency report");

    MxReport task = new MxReport();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }
 
  private Target newRunPhase(Project project) {
    Target phase = newPhase(project, "run", "compile");
    phase.setDescription("executes a specified main class");

    MxRun task = new MxRun();
    task.setProject(project);
    phase.addTask(task);
    return phase;
  }
 
  private Target newReleasePhase(Project project) {
    Target phase = newPhase(project, "release", "init");
    phase.setDescription("prepares a new release and begins a new development cycle");

    // drop snapshot from build identifier and stamp the release log
    MxVersion releaseVersion = new MxVersion();
    releaseVersion.setProject(project);
    releaseVersion.setStage("release");
    phase.addTask(releaseVersion);
   
    // commit and tag release identifier change and release log
    MxCommit commitRelease = new MxCommit();
    commitRelease.setProject(project);
    commitRelease.setRequiredGoal(false);
    commitRelease.setShowtitle(false);
    commitRelease.createMessage().setValue("Prepare ${project.version} release");
    Tag tag = commitRelease.createTag();
    tag.setName("v${project.version}");
    tag.createMessage().setValue("${project.version} release");
    phase.addTask(commitRelease);
   
    // change build identifier to next snapshot and inject a release log template
    MxVersion snapshotVersion = new MxVersion();
    snapshotVersion.setProject(project);
    snapshotVersion.setStage("snapshot");
    snapshotVersion.setIncrementNumber(ArtifactVersion.NumberField.incremental.name());
    phase.addTask(snapshotVersion);

    // commit snapshot identifier change and release log template
    MxCommit commitSnapshot = new MxCommit();   
    commitSnapshot.setProject(project);
    commitSnapshot.setRequiredGoal(false);
    commitSnapshot.setShowtitle(false);
    commitSnapshot.createMessage().setValue("Reset build identifiers for next development cycle");
    phase.addTask(commitSnapshot);
   
    return phase;
  }
}
TOP

Related Classes of org.moxie.ant.ProjectHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.