Blame | Last modification | View Log | RSS feed
package com.erggroup.mass.ant;import java.io.File;import java.util.Collection;import java.util.Date;import java.util.Iterator;import org.apache.tools.ant.BuildException;import org.apache.tools.ant.Project;import org.apache.tools.ant.taskdefs.Copy;import org.apache.tools.ant.taskdefs.Echo;import org.apache.tools.ant.taskdefs.Mkdir;import org.apache.tools.ant.types.FileSet;public class ReleaseElement implements JatsElement{public static final String TASK_NAME = "release";private Project project;/*** The version, used if type='force'*/private String version;/*** Specifies the type of release (default=force; all other types are deprecated).*/private String type = "force";/*** Specifies the label used when building this release (optional)*/private String label;/****/private PackageVersion releaseVersion = null;private Jats parent;public ReleaseElement(){}public String getElementType(){return TASK_NAME;}public void setType(String type){this.type = type;}public void setVersion(String value){this.version = value;}public void setLabel( String value ){this.label = value;}public void execute(Jats parent){this.parent = parent;this.project = parent.getProject();if ( "force".equalsIgnoreCase(type) ){if ( version == null ){throw new BuildException("Release 'version' attribute is mandatory.");}releaseVersion = new PackageVersion(version);}else{throw new BuildException("Release type can only be 'force'; all other types are deprecated.");}updateDescpkgFile();releasePackage();}private void updateDescpkgFile(){StringBuffer buffer = new StringBuffer();buffer.append("Package Name: ").append(parent.getPackage());buffer.append("\nVersion: ").append(releaseVersion.toString());buffer.append("\nReleased By: ").append(project.replaceProperties("${user.name}"));buffer.append("\nReleased On: ").append(new Date());// Build label (if specified)if ( label != null ){buffer.append("\nLabel: ").append(project.replaceProperties(label));}// Path to source of build (vob-relative)File baseDirectory = project.getBaseDir();String buildPath = baseDirectory.getAbsolutePath();int cpos = buildPath.indexOf(":");if ( cpos > -1 ){buildPath = buildPath.substring(cpos+1);}buffer.append("\nPath: ").append(buildPath);buffer.append("\n\nBuild Dependencies:\n");Collection sandbox = SandboxElement.getSandboxElements();for (Iterator i = sandbox.iterator() ; i.hasNext() ; ){SandboxElement element = (SandboxElement)i.next();if ( ! element.isRuntime() )buffer.append("\n<sandbox name=\"").append(element.getName()).append("\" version=\"").append(element.getVersion()).append("\"/>");}Echo echo = new Echo();echo.setTaskName(TASK_NAME);echo.setProject(project);String descpkgFilename = project.replaceProperties("${basedir}") + "/pkg/descpkg";echo.setFile(new File(descpkgFilename));echo.setMessage(buffer.toString());echo.execute();}/*** Attempts to copy the 'pkg' files into dpkg_archive.*/private void releasePackage(){String packageName = parent.getPackage();String version = releaseVersion.toString();// Check for the existance of the package directory in dpkg_archive, and if// it exists, then throw an exception.File dpkgArchivePackageDir = validatePackageDirectory(packageName);File dpkgArchiveVersionDir = validatePackageVersionDirectory(dpkgArchivePackageDir, version);// Copy the files from the pkg directory into// dpkg_archive/${jats.package.name}/${major}.${minor}.${patch}.${project}Copy copy = new Copy();copy.setProject(project);copy.setTaskName(this.getElementType());copy.setTodir(dpkgArchiveVersionDir);File basedir = new File(project.replaceProperties("${basedir}"));File pkgdir = new File(basedir, "pkg");FileSet fileSet = new FileSet();fileSet.setDir(pkgdir);fileSet.setIncludes("**/*");copy.addFileset(fileSet);copy.perform();}/**** @param directoryName* @return*/private File validatePackageDirectory(String directoryName){File dir = new File(parent.getFromdir(), directoryName);if (dir.exists() == false){makeDirectory(dir);}if (dir.isDirectory() == false){throw new BuildException(dir.toString() + " is not a directory.");}return dir;}/**** @param fromdir* @param directoryName* @return*/private File validatePackageVersionDirectory(File fromdir, String directoryName){File dir = new File(fromdir, directoryName);if (dir.exists() == false){makeDirectory(dir);}else{String packageName = parent.getPackage();throw new BuildException("Cannot release package \'"+ packageName + "\' version \'"+ releaseVersion + "\' as it has already been released.");}return dir;}/**** @param dir*/private void makeDirectory(File dir){Mkdir mkdir = new Mkdir();mkdir.setProject(this.project);mkdir.setTaskName(this.getElementType());mkdir.setDir(dir);mkdir.perform();}}