package net.java.jsip.ant.tasks; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Date; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.output.XMLOutputter; /** * * @author baranowb@dev.java.net * */ public class VersionerTask extends Task { protected File cvsVersionFile = null; protected int version = 1111; protected File pomFile = null; protected File toVersion = null; protected boolean incrementCVSVersion = false; protected boolean parent = false; protected int mainVersionParts = 3; private boolean doPom = false; private boolean doToVersion = false; public void setMainVersionParts(int mainVersionParts) { this.mainVersionParts = mainVersionParts; } public void setParent(boolean parent) { this.parent = parent; } public void setCvsVersionFile(File cvsVersionFile) { this.cvsVersionFile = cvsVersionFile; } public void setVersion(int version) { this.version = version; } public void setPomFile(File pomFile) { this.pomFile = pomFile; } public void setToVersion(File toVersion) { this.toVersion = toVersion; } public void setIncrementCVSVersion(boolean incrementCVSVersion) { this.incrementCVSVersion = incrementCVSVersion; } @Override public void execute() throws BuildException { if (this.cvsVersionFile == null && this.version < 0) { throw new BuildException( "Version file property file is not set and version property is not set - one of them must be used!!!"); } if (toVersion == null) { } else { doToVersion = true; } if(pomFile==null) {}else { doPom=true; } // Check cvsVersionFile if ( this.version < 0 && ( cvsVersionFile==null ||!cvsVersionFile.canRead())) { throw new BuildException("Cant read from " + cvsVersionFile + " - eiher set it or version property!!!"); } if (incrementCVSVersion && !cvsVersionFile.canWrite()) { throw new BuildException("Cant write to " + cvsVersionFile + "!!!"); } if ( doPom && (!pomFile.canRead() || !pomFile.canWrite())) { throw new BuildException("Cant read/write pom file " + cvsVersionFile + "!!!"); } if (doToVersion && !toVersion.canRead()) { throw new BuildException( "Cant read file that is going to be versioned " + cvsVersionFile + "!!!"); } super.execute(); int localVersion = 1111; if (cvsVersionFile != null) { //ObjectInputStream ois = null; BufferedReader br=null; try { //ois = new ObjectInputStream(new FileInputStream(cvsVersionFile)); String versionValue=null; br=new BufferedReader(new FileReader(cvsVersionFile)); versionValue=br.readLine(); localVersion = Math.abs(Integer.valueOf(versionValue)); } catch (Exception e) { log("Failed to fetch version from file!!"); localVersion = this.version; } finally { if (br != null) try { br.close(); } catch (Exception e) { localVersion = this.version; } } super.getProject().setProperty("svnversion", Integer.toString(localVersion)); getProject().setProperty("jain-sip-ri-jar", "jain-sip-ri-1.2." + localVersion + ".jar"); getProject().setProperty("jain-sip-sdp-jar", "jain-sip-sdp-1.2." + localVersion + ".jar"); getProject().setProperty("jain-sip-src-tar", "jain-sip-src-1.2." + localVersion + ".tar.gz"); getProject().setProperty("jain-sip-javadoc-tar", "jain-sip-javadoc-1.2." + localVersion + ".tar.gz"); getProject().setProperty("jain-sip-all-tar", "jain-sip-1.2." + localVersion + ".tar.gz"); getProject().setProperty("jain-sip-tck-jar", "jain-sip-tck-1.2." + localVersion + ".jar"); getProject().setProperty("sdp_jar", "jain-sdp-1.0." + localVersion + ".jar"); getProject().setProperty("sdp-src-jar", "jain-sdp-src-1.0." + localVersion + ".jar"); getProject().setProperty("jain-sip-src-jar", "jain-sip-src-1.2." + localVersion + ".jar"); getProject().setProperty("jain-sip-sctp-jar", "jain-sip-sctp-1.2." + localVersion + ".jar"); getProject().setProperty("unit_test_jar", "jain-sip-unit-test-1.2." + localVersion + ".jar"); String cwd = System.getProperty("user.dir"); getProject().setProperty("top",new File(cwd).getName()); } else { localVersion = this.version; } if(doPom) try { SAXBuilder saxb = new SAXBuilder(); Document doc = saxb.build(pomFile); Element root = doc.getRootElement(); // dont be supripsed - jdom and other work weird - // Element.getChild(Element.getName)==null even though child element // exists... if (parent) { for (Object o : root.getChildren()) { Element current = (Element) o; if (current.getName().equals("parent")) { doVersionChange(current, localVersion); } else { continue; } break; } } else { doVersionChange(root, localVersion); } XMLOutputter outputter = new XMLOutputter(); outputter.output(doc, new FileOutputStream(pomFile)); } catch (Exception e) { throw new BuildException(e); } try{ if(doToVersion) { String name=toVersion.toString(); name=name.substring(0, name.lastIndexOf("."))+localVersion+name.substring( name.lastIndexOf(".")); File outputFile=new File(name); toVersion.renameTo(outputFile); } }catch(Exception e) { log("Failed to rename file!!",e,0); } } private void doVersionChange(Element root, int ver) { log("Doing version injection - version parts:"+this.mainVersionParts); for (Object o : root.getChildren()) { Element current = (Element) o; if (current.getName().equals("version")) { String[] currentVersion = current.getText().split("\\."); log("Version from file:"+current.getText()); String nextV = ""; for (int i = 0; i < currentVersion.length && i < this.mainVersionParts; i++) { nextV = nextV + currentVersion[i] + "."; } nextV = nextV + ver; log("Resulting version:"+nextV); current.setText(nextV); } else { continue; } break; } } @Override public void init() throws BuildException { super.init(); } }