From: <jpi...@us...> - 2011-11-28 16:23:30
|
Revision: 3703 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3703&view=rev Author: jpilgrim Date: 2011-11-28 16:23:20 +0000 (Mon, 28 Nov 2011) Log Message: ----------- Fixed a bug in the update site build script. Wrong class name of LWJGL plugin activator was specified (org.lwjgl.eclipse.Activator, but correct is org.lwjgl.Activator). Now, the current date/time string is added as a qualifier to the LWJGL version, e.g., org.lwjgl_2.8.2.v20111128-1653 instead of org.lwjgl_2.8.2. This simplifies testing and discouples LWJGL versions from plugin versions. Modified Paths: -------------- trunk/LWJGL/eclipse-update/org.lwjgl.build/.classpath trunk/LWJGL/eclipse-update/org.lwjgl.build/META-INF/MANIFEST.MF trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/NormalizeVersion.java trunk/LWJGL/eclipse-update/org.lwjgl.build/test/java/org/lwjgl/ant/NormalizeVersionTest.java Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/.classpath =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/.classpath 2011-11-17 21:41:24 UTC (rev 3702) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/.classpath 2011-11-28 16:23:20 UTC (rev 3703) @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="src" path="src/java"/> <classpathentry kind="src" path="test/java"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> <classpathentry kind="output" path="anttasks"/> </classpath> Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/META-INF/MANIFEST.MF =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/META-INF/MANIFEST.MF 2011-11-17 21:41:24 UTC (rev 3702) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/META-INF/MANIFEST.MF 2011-11-28 16:23:20 UTC (rev 3703) @@ -9,5 +9,6 @@ org.apache.tools.ant.types, org.apache.tools.ant.types.selectors, org.apache.tools.ant.util, - org.junit;version="4.8.1" + org.junit;version="4" Bundle-Vendor: Lightweight Java Game Library Project +Require-Bundle: org.junit;bundle-version="4.8.1" Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml 2011-11-17 21:41:24 UTC (rev 3702) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml 2011-11-28 16:23:20 UTC (rev 3703) @@ -54,7 +54,7 @@ <target name="init"> - <normalizeversion version="${version}" property="normversion" /> + <normalizeversion version="${version}" property="normversion" addDateQualifier="yes" /> <echo>Building plugins for version ${version}, normalized version ${normversion}</echo> </target> @@ -209,7 +209,7 @@ Bundle-SymbolicName: org.lwjgl Bundle-Version: ${normversion} Bundle-Vendor: ${bundle.vendor} -Bundle-Activator: org.lwjgl.eclipse.Activator +Bundle-Activator: org.lwjgl.Activator Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime Bundle-ActivationPolicy: lazy Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/NormalizeVersion.java =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/NormalizeVersion.java 2011-11-17 21:41:24 UTC (rev 3702) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/NormalizeVersion.java 2011-11-28 16:23:20 UTC (rev 3703) @@ -11,6 +11,9 @@ ******************************************************************************/ package org.lwjgl.ant; +import java.text.SimpleDateFormat; +import java.util.Date; + import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; @@ -24,7 +27,11 @@ */ public class NormalizeVersion extends Task { - + public final static String SEGMENTS[] = { "major", "minor", "service", + "qualifier" }; + + public final static String VERSION_QUALIFIER_PATTERN = "yyyyMMdd-HHmm"; + /** * name of the property to set */ @@ -32,7 +39,23 @@ protected String version; + protected boolean addDateQualifier = false; + /** + * @return the addQualifier + */ + public boolean isAddDateQualifier() { + return addDateQualifier; + } + + /** + * @param i_addQualifier the addQualifier to set + */ + public void setAddDateQualifier(boolean i_addDateQualifier) { + addDateQualifier = i_addDateQualifier; + } + + /** * @return the property */ public String getProperty() { @@ -57,7 +80,7 @@ * @param i_versionNumber the versionNumber to set */ public void setVersion(String version) { - this.version =version; + this.version = version; } /** @@ -72,6 +95,30 @@ if (version == null) { throw new BuildException("attribute version missing"); } + String s = getVersion().trim(); + int sn = 0; + boolean qualifier = false; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '.') { + sn++; + } else { + + qualifier = !Character.isDigit(s.charAt(i)); + if (sn < 1 && !Character.isDigit(s.charAt(i))) { + + throw new BuildException( + "Wrong version format, must contain only digits in the " + + SEGMENTS[sn] + " segment, was " + + s.substring(0, i) + ">>" + s.charAt(i) + + "<<" + s.substring(i + 1)); + + } + } + } + if ((sn > 2 || qualifier) && isAddDateQualifier()) { + throw new BuildException( + "Cannot add date qualifier, qualifier already specified"); + } } /** @@ -147,11 +194,11 @@ } n.append(c); } - } + if (!qualifier) { - if (digits.length()>0) { + if (digits.length() > 0) { if (snIndex > 0) n.append('.'); n.append(digits); @@ -166,8 +213,25 @@ case 2: // e.g. "1.2.beta n.append(".0"); } + if (isAddDateQualifier()) + n.append(createDateQualifier()); + } else { + if (isAddDateQualifier()) { + throw new BuildException( + "Cannot add date qualifier, qualifier already specified"); + } } + return n.toString(); } + /** + * @return + */ + private String createDateQualifier() { + return ".v" + + new SimpleDateFormat(VERSION_QUALIFIER_PATTERN) + .format(new Date()); + } + } Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/test/java/org/lwjgl/ant/NormalizeVersionTest.java =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/test/java/org/lwjgl/ant/NormalizeVersionTest.java 2011-11-17 21:41:24 UTC (rev 3702) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/test/java/org/lwjgl/ant/NormalizeVersionTest.java 2011-11-28 16:23:20 UTC (rev 3703) @@ -67,5 +67,42 @@ } + @Test + public void testQualifier() { + NormalizeVersion t = new NormalizeVersion(); + t.setProperty("normalized"); + t.setAddDateQualifier(true); + + t.setVersion("1"); + String s = t.doExecute(); + Assert.assertEquals(20, s.length()); + Assert.assertTrue(s.startsWith("1.0.0")); + + t.setVersion("1.2"); + s = t.doExecute(); + Assert.assertEquals(20, s.length()); + Assert.assertTrue(s.startsWith("1.2.0")); + + t.setVersion("1.2.3"); + s = t.doExecute(); + Assert.assertEquals(20, s.length()); + Assert.assertTrue(s.startsWith("1.2.3")); + + t.setVersion("2.8.2"); + s = t.doExecute(); + Assert.assertEquals(20, s.length()); + Assert.assertTrue(s.startsWith("2.8.2")); + } + + @Test(expected= BuildException.class) public void dateQualifierWithQualifier() { + NormalizeVersion t = new NormalizeVersion(); + t.setProperty("normalized"); + t.setAddDateQualifier(true); + t.setVersion("1.2.beta"); + t.doExecute(); + } + + + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jpi...@us...> - 2011-12-05 12:41:53
|
Revision: 3706 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3706&view=rev Author: jpilgrim Date: 2011-12-05 12:41:45 +0000 (Mon, 05 Dec 2011) Log Message: ----------- Added new Eclipse update site build script to be imported from main LWJGL build script. See org.lwjgl.build/README for details. Removed old build script depending on pre-build LWJGL archives. Modified Paths: -------------- trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME Added Paths: ----------- trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml trunk/LWJGL/eclipse-update/org.lwjgl.build/buildEclipseClasses.xml trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/ trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.info.zip trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.tools.zip trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.zip Removed Paths: ------------- trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml trunk/LWJGL/eclipse-update/org.lwjgl.build/lwjgl-archives/ Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME 2011-12-03 11:10:44 UTC (rev 3705) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME 2011-12-05 12:41:45 UTC (rev 3706) @@ -1,3 +1,33 @@ +How to build the Eclipse update site +------------------------------------ + +Building the Eclipse update site is fully integrated into the main LWJGL build script. +Here is how to build the update site: + +Run main lwjgl ant script (LWJGL/build.xml) with target "eclipse-updatesite" + +You will find the updatesite in + LWJGL/eclipse-update/org.lwjgl.build/build/plugins/org.lwjgl.updatesite + +Note that there are two targets: eclipse-updatesite and +eclipse-updatesite-simple. The first one depends from the target "release", +defined in the main build file. However, if you are sure the relase target has +been called before, you may want to only create the update site without +building the release target again. In that case, you can all +eclipse-update-simple. + +The update site build requires some Java classes to be precompiled. These classes +can be found in some zip archives in folder plugin-classes and anttasks.jar. +Building these classes requires Eclipse dependencies (in case of the +plugin-classes) or they define anttasks required to be present when running ant. +In order to build these classes, open all projects found in subfolder +LWJGL/eclipse-update in Eclipse: this way, all Eclipse classes will get +automatically compiled. Then run the ant script buildEclipseClasses.xml from +within Eclipse. Actually, this is rarely necessary as the archives are all +committed to the LWJGL SVN and will be present if you check out everything. You +only need to run that build if the Eclise plugin classes (or the anttasks) were +changed. + The build plugin is part of the LWJGL Eclipse plugins. The following plugins are required: @@ -46,35 +76,11 @@ This is the build script project. Although it is an Eclipse project, you can simply run the build script with ant from command line. See later on. -Everything is created in org.lwjgl.build/build. -Here is how to build the update site: +Everything is created in LWJGL/eclipse-update/org.lwjgl.build/build. -1) Create a new folder in org.lwjgl.build/lwjgl-archives , use the version - number as folder name. E.g., for version 2.6 create a folder "2.6", - for version 2.6.1 "2.6.1" and so on. -2) Copy the lwjgl, lwjgl-docs and lwjgl-source zips into that folder. E.g., - for version 2.6, this folder must contain the following files: - org.lwjgl.build/lwjgl-archives - + 2.6 - - lwjgl-2.6.zip - - lwjgl-docs-2.6.zip - - lwjgl-source-2.6.zip -3) In order to run the build script, change to folder org.lwjgl.build and run - ant with a parameter indicating the appropriate LWJGL version, e.g. - ant -Dversion=2.6 dist - -You will find the updatesite in - org.lwjgl.build/build/plugins/org.lwjgl.updatesite - -You may note that the jars are all signed. I have added a temporary keystore -with a dummy alias. In order to use your key, simply edit the properties -(line 11-14) in the build script. If you do not want to store the password in -the build script, simply define it via "-Dstorepass=****" in the command line. - Some additional remarks: - The version number is automatically "normalized" to Eclipse standards, - that is 2.6 will become 2.6.0. You do not have to rename the initial archives, - you can use 2.6. Or 2.6.1 ;-) + that is 2.6 will become 2.6.0 with the current date and time added. - The lwjgl-debug.jar is not added to the org.lwjgl plugin, as I do not know how to select one or the other. But I have not further investigated in that direction. @@ -85,4 +91,5 @@ to the Eclipse P2 system, which caches a lot of things. Simply uninstalling a plugin does not remove the plugins from the Eclipse installation. When the very same version is re-installed, instead of loading new files from the - update site these pre-installed versions are reused! \ No newline at end of file + update site these pre-installed versions are reused! Since the date and time + is added to the plugin version number, this should cause no problems. \ No newline at end of file Added: trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar =================================================================== (Binary files differ) Property changes on: trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml (rev 0) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml 2011-12-05 12:41:45 UTC (rev 3706) @@ -0,0 +1,482 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Called from main build script. +Expects + lwjgl.version +to be set. + +(C) 2011 LWJGL-Project +Author: Jens von Pilgrim, dev...@je... +--> + +<project default="eclipse-updatesite" basedir="." name="eclipse.antscript" xmlns:ant4eclipse="antlib:org.ant4eclipse" xmlns:antcontrib="antlib:net.sf.antcontrib"> + + <dirname property="eclipse.antscript.basedir" file="${ant.file.eclipse.antscript}" /> + + <property name="keystore" value="teststore" /> + <property name="alias" value="tester" /> + <property name="password" value="tester" /> + <property name="keypass" value="${password}" /> + + <property name="eclipse.updatesite" value="http://www.lwjgl.org/update/" /> + <property name="eclipse.bundle.vendor" value="lwjgl.org" /> + + <taskdef name="packagelist" classname="org.lwjgl.ant.PackageList"> + <classpath> + <pathelement location="eclipse-update/org.lwjgl.build/anttasks.jar" /> + </classpath> + </taskdef> + <taskdef name="normalizeversion" classname="org.lwjgl.ant.NormalizeVersion"> + <classpath> + <pathelement location="eclipse-update/org.lwjgl.build/anttasks.jar" /> + </classpath> + </taskdef> + + <!-- properties imported from build-definitions.xml: + <property name="lwjgl.temp" location="temp" /> + <property name="lwjgl.src" location="src" /> + <property name="lwjgl.version" value="2.8.3" /> + --> + + <!-- where to build the update site and temporary build files --> + <property name="eclipse.build.path" value="${eclipse.antscript.basedir}/build" /> + <property name="eclipse.build.temp" value="${eclipse.build.path}/temp" /> + <property name="eclipse.build.plugins" value="${eclipse.build.path}/plugins" /> + <property name="eclipse.prebuild-plugin-classes" value="${eclipse.antscript.basedir}/plugin-classes" /> + + + <!-- from where to retrieve LWJGL files --> + <property name="eclipse.skeletons.dir" value="${eclipse.antscript.basedir}/.." /> + + <!-- base: ${lwjgl.temp} : <patternset refid="lwjgl_applet"/> + doc: basedir="${lwjgl.docs}" includes="javadoc/**" + source: refid="lwjgl.source.fileset" + + --> + + + <property name="NL" value=" " /> + + + <target name="eclipse-updatesite" depends="release"> + <antcall target="eclipse-updatesite-simple" /> + </target> + + + <target name="eclipse-updatesite-simple"> + <normalizeversion version="${lwjgl.version}" property="eclipse.normversion" addDateQualifier="yes" /> + <echo>Building plugins for version ${lwjgl.version}, normalized version ${eclipse.normversion}</echo> + + <mkdir dir="${eclipse.build.temp}" /> + + + <!-- ******************************************************************* + * + * Assemble plugins + * + ******************************************************************** --> + + <!-- Main plugin: lwjgl.org --> + <!-- Copy plugin skeletons --> + <mkdir dir="${eclipse.build.plugins}" /> + <copy todir="${eclipse.build.plugins}/org.lwjgl"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl" casesensitive="yes"> + <exclude name="**/src/**" /> + <exclude name="**/*.jar" /> + <!-- do not copy jars used for development --> + <exclude name="**/build/**" /> + <exclude name="**/build.properties" /> + <!-- do not copy development settings --> + <exclude name="**/.settings/**" /> + <exclude name="**/.classpath" /> + <exclude name="**/.project" /> + <!-- do not copy native libraries --> + <exclude name="**/native/**" /> + </fileset> + </copy> + <!-- Copy LWJGL native files and classes --> + <copy todir="${eclipse.build.plugins}/org.lwjgl"> + <fileset dir="${lwjgl.temp}"> + <patternset refid="lwjgl_base"/> + </fileset> + </copy> + <move todir="${eclipse.build.plugins}/org.lwjgl"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl/jar"> + <include name="**" /> + <exclude name="lwjgl-debug.jar" /> + </fileset> + </move> + <delete dir="${eclipse.build.plugins}/org.lwjgl/jar" /> + <!-- unzip Eclipse dependent classes, + have to be previously built by buildEclipseClasses.xml, but + are also contained in SVN + --> + <unzip dest="${eclipse.build.plugins}/org.lwjgl" src="${eclipse.prebuild-plugin-classes}/org.lwjgl.zip" /> + + + <!-- Sources plugin: lwjgl.org.source --> + <!-- Copy plugin skeletons --> + <copy todir="${eclipse.build.plugins}/org.lwjgl.source"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.source" casesensitive="yes"> + <exclude name="**/build.properties" /> + <exclude name="**/.settings/**" /> + <exclude name="**/.classpath" /> + <exclude name="**/.project" /> + </fileset> + </copy> + <!-- Create zip files containing the source --> + <property name="eclipse.org.lwjgl.src.dir" value="${eclipse.build.plugins}/org.lwjgl.source/src/org.lwjgl_${eclipse.normversion}" /> + <mkdir dir="${eclipse.org.lwjgl.src.dir}" /> + <!-- Build src zips for plugin org.lwjgl --> + <!-- lwjgl sources (only Java sources) --> + <zip destfile="${eclipse.org.lwjgl.src.dir}/lwjglsrc.zip"> + <fileset dir="${lwjgl.src}/generated" /> + <fileset dir="${lwjgl.src}/java"> + <exclude name="org/lwjgl/util/**" /> + </fileset> + </zip> + <zip destfile="${eclipse.org.lwjgl.src.dir}/lwjgl_utilsrc.zip"> + <fileset dir="${lwjgl.src}/java"> + <include name="org/lwjgl/util/**" /> + <exclude name="org/lwjgl/util/applet/**" /> + </fileset> + </zip> + <zip destfile="${eclipse.org.lwjgl.src.dir}/lwjgl_util_applet.zip"> + <fileset dir="${lwjgl.src}/java"> + <include name="org/lwjgl/util/applet/**" /> + </fileset> + </zip> + <!-- and the Eclipse related sources --> + <zip destfile="${eclipse.org.lwjgl.src.dir}/lwjgl_eclipse.zip"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl/src/java" casesensitive="yes"> + <include name="org/lwjgl/**" /> + </fileset> + </zip> + <zip destfile="${eclipse.org.lwjgl.src.dir}/lwjgl_tools.zip"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.tools/src/java" casesensitive="yes"> + <include name="org/lwjgl/**" /> + </fileset> + </zip> + <zip destfile="${eclipse.org.lwjgl.src.dir}/lwjgl_info.zip"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.info/src/java" casesensitive="yes"> + <include name="org/lwjgl/**" /> + </fileset> + </zip> + + <!-- Documentation plugin: lwjgl.org.doc --> + <!-- Copy plugin skeletons including Eclipse documentation--> + <copy todir="${eclipse.build.plugins}/org.lwjgl.doc"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.doc" casesensitive="yes"> + <exclude name="**/build.properties" /> + <exclude name="**/.settings/**" /> + <exclude name="**/.classpath" /> + <exclude name="**/.project" /> + </fileset> + </copy> + <copy todir="${eclipse.build.plugins}/org.lwjgl.doc"> + <fileset dir="${lwjgl.docs}"> + <exclude name="javadoc/**" /> + </fileset> + </copy> + <!-- create JavaDoc archive --> + <zip destfile="${eclipse.build.plugins}/org.lwjgl.doc/doc.zip" basedir="${lwjgl.docs}" includes="javadoc/**" /> + + + <!-- Information view plugin: org.lwjgl.info --> + <copy todir="${eclipse.build.plugins}/org.lwjgl.info"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.info" casesensitive="yes"> + <exclude name="**/src/**" /> + <exclude name="**/build/**" /> + <exclude name="**/build.properties" /> + <exclude name="**/.settings/**" /> + <exclude name="**/.classpath" /> + <exclude name="**/.project" /> + </fileset> + </copy> + <!-- unzip Eclipse dependent classes, + have to be previously built by buildEclipseClasses.xml, but + are also contained in SVN + --> + <unzip dest="${eclipse.build.plugins}/org.lwjgl.info" src="${eclipse.prebuild-plugin-classes}/org.lwjgl.info.zip" /> + + <!-- Tools plugin: org.lwjgl.tools --> + <copy todir="${eclipse.build.plugins}/org.lwjgl.tools"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.tools" casesensitive="yes"> + <exclude name="**/src/**" /> + <exclude name="**/build/**" /> + <exclude name="**/build.properties" /> + <exclude name="**/.settings/**" /> + <exclude name="**/.classpath" /> + <exclude name="**/.project" /> + </fileset> + </copy> + <!-- unzip Eclipse dependent classes, + have to be previously built by buildEclipseClasses.xml, but + are also contained in SVN +--> + <unzip dest="${eclipse.build.plugins}/org.lwjgl.tools" src="${eclipse.prebuild-plugin-classes}/org.lwjgl.tools.zip" /> + + <!-- Feature --> + <copy todir="${eclipse.build.plugins}/org.lwjgl.feature"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.feature" casesensitive="yes"> + <exclude name="**/build.properties" /> + <exclude name="**/.settings/**" /> + <exclude name="**/.classpath" /> + <exclude name="**/.project" /> + <exclude name="**/*.template" /> + </fileset> + </copy> + + <!-- Update Site --> + <copy todir="${eclipse.build.plugins}/org.lwjgl.updatesite"> + <fileset dir="${eclipse.skeletons.dir}/org.lwjgl.updatesite" casesensitive="yes"> + <exclude name="**/.settings/**" /> + <exclude name="**/.classpath" /> + <exclude name="**/.project" /> + <exclude name="**/*.template" /> + </fileset> + </copy> + + + <!-- ******************************************************************* + * + * Build manifest files + * + ******************************************************************** --> + + <!-- Calculate package export and bundle class paths --> + <packagelist property="eclipse.bundle.export-package" pathsep=",${NL} "> + <fileset dir="${lwjgl.temp}/jar"> + <exclude name="**/lwjgl-debug.jar" /> + </fileset> + <patternset> + <exclude name="**/test/**" /> + <exclude name="**/examples/**" /> + </patternset> + </packagelist> + <pathconvert property="eclipse.bundle.classpath.jars" pathsep=",${NL} "> + <map from="${lwjgl.temp}/jar/" to="" /> + <fileset dir="${lwjgl.temp}/jar"> + <exclude name="**/lwjgl-debug.jar" /> + <exclude name="**/lwjgl_test.jar" /> + </fileset> + </pathconvert> + + + + + <!-- ******************************************************************* + * + * org.lwjgl + * + * Build manifest files, not using manifest task, since manifest wraps + * at the wrong positions (at least ant 1.7) + * + ******************************************************************** --> + <echo file="${eclipse.build.plugins}/org.lwjgl/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: LWJGL Lightweight Java Game Library +Bundle-SymbolicName: org.lwjgl +Bundle-Version: ${eclipse.normversion} +Bundle-Vendor: ${eclipse.bundle.vendor} +Bundle-Activator: org.lwjgl.Activator +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime +Bundle-ActivationPolicy: lazy +Export-Package: org.lwjgl.eclipse,${NL} ${eclipse.bundle.export-package} +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-ClassPath: .,${NL} ${eclipse.bundle.classpath.jars} +</echo> + + <!-- ******************************************************************* + * + * org.lwjgl.doc + * + * Build manifest files, not using manifest task, since manifest wraps + * at the wrong positions (at least ant 1.7) + * + ******************************************************************** --> + + <echo file="${eclipse.build.plugins}/org.lwjgl.doc/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 +Bundle-Vendor: ${eclipse.bundle.vendor} +Bundle-Version: ${eclipse.normversion} +Bundle-SymbolicName: org.lwjgl.doc;singleton:=true +Bundle-Localization: plugin +Require-Bundle: org.eclipse.help;bundle-version="3.2.0" +Eclipse-LazyStart: true +</echo> + + + <!-- ******************************************************************* + * + * org.lwjgl.source + * + * Build manifest files, not using manifest task, since manifest wraps + * at the wrong positions (at least ant 1.7) + * + ******************************************************************** --> + + <!-- Build manfest --> + <!-- not using manifest task, since manifest wraps at the wrong positions --> + <echo file="${eclipse.build.plugins}/org.lwjgl.source/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: LWJGL Sources +Bundle-Vendor: ${eclipse.bundle.vendor} +Bundle-Version: ${eclipse.normversion} +Bundle-SymbolicName: org.lwjgl.source;singleton:=true +Bundle-Localization: plugin +</echo> + + <!-- ******************************************************************* + * + * org.lwjgl.info + * + * Build manifest files, not using manifest task, since manifest wraps + * at the wrong positions (at least ant 1.7) + * + ******************************************************************** --> + <echo file="${eclipse.build.plugins}/org.lwjgl.info/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: LWJGL Test and Info View +Bundle-Vendor: ${eclipse.bundle.vendor} +Bundle-Version: ${eclipse.normversion} +Bundle-SymbolicName: org.lwjgl.info;singleton:=true +Bundle-Localization: plugin +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.ui.views, + org.eclipse.core.resources, + org.lwjgl +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +</echo> + <!-- Files are already in place --> + + <!-- ******************************************************************* + * + * org.lwjgl.tools + * + * Build manifest files, not using manifest task, since manifest wraps + * at the wrong positions (at least ant 1.7) + * + ******************************************************************** --> + <!-- Build plugin org.lwjgl.tools --> + <echo file="${eclipse.build.plugins}/org.lwjgl.tools/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: LWJGL Tools Plug-in +Bundle-SymbolicName: org.lwjgl.tools;singleton:=true +Bundle-Version: ${eclipse.normversion} +Bundle-Vendor: ${eclipse.bundle.vendor} +Bundle-Activator: org.lwjgl.tools.Activator +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.core.resources;bundle-version="3.4.0", + org.eclipse.jdt.core;bundle-version="3.4.0", + org.eclipse.jdt.ui;bundle-version="3.4.0", + org.lwjgl;bundle-version="${eclipse.normversion}", + org.eclipse.jdt.launching;bundle-version="3.4.0" +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +</echo> + <!-- Files are already in place --> + + + <!-- Create features --> + + <!-- ******************************************************************* + * + * org.lwjgl.feature + * + ******************************************************************** --> + <!-- Build org.lwjgl.feature --> + <copy file="${eclipse.skeletons.dir}/org.lwjgl.feature/feature.xml.template" tofile="${eclipse.build.plugins}/org.lwjgl.feature/feature.xml" encoding="UTF-8" overwrite="true"> + <filterset> + <filter token="VERSION" value="${eclipse.normversion}" /> + <filter token="PROVIDERNAME" value="${eclipse.bundle.vendor}" /> + <filter token="UPDATEURL" value="${eclipse.updatesite}" /> + </filterset> + </copy> + + + <!-- ******************************************************************* + * + * org.lwjgl.feature.sdk + * + ******************************************************************** --> + <!-- Build org.lwjgl.feature --> + <copy file="${eclipse.skeletons.dir}/org.lwjgl.feature.sdk/feature.xml.template" tofile="${eclipse.build.plugins}/org.lwjgl.feature.sdk/feature.xml" encoding="UTF-8" overwrite="true"> + <filterset> + <filter token="VERSION" value="${eclipse.normversion}" /> + <filter token="PROVIDERNAME" value="${eclipse.bundle.vendor}" /> + <filter token="UPDATEURL" value="${eclipse.updatesite}" /> + </filterset> + </copy> + + + <!-- ******************************************************************* + * + * Build update site, i.e. zip all plugins and feature with version + * number to appropriate place + * + ******************************************************************** --> + <!-- Build update site --> + <copy file="${eclipse.skeletons.dir}/org.lwjgl.updatesite/site.xml.template" tofile="${eclipse.build.plugins}/org.lwjgl.updatesite/site.xml" encoding="UTF-8" overwrite="true"> + <filterset> + <filter token="VERSION" value="${eclipse.normversion}" /> + <filter token="PROVIDERNAME" value="${eclipse.bundle.vendor}" /> + <filter token="UPDATEURL" value="${eclipse.updatesite}" /> + </filterset> + </copy> + <mkdir dir="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins" /> + <mkdir dir="${eclipse.build.plugins}/org.lwjgl.updatesite/features" /> + <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl_${eclipse.normversion}.jar" manifest="${eclipse.build.plugins}/org.lwjgl/META-INF/MANIFEST.MF"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl" casesensitive="yes" /> + </jar> + <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.doc_${eclipse.normversion}.jar" manifest="${eclipse.build.plugins}/org.lwjgl.doc/META-INF/MANIFEST.MF"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl.doc" casesensitive="yes" /> + </jar> + <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.source_${eclipse.normversion}.jar" manifest="${eclipse.build.plugins}/org.lwjgl.source/META-INF/MANIFEST.MF"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl.source" casesensitive="yes" /> + </jar> + <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.info_${eclipse.normversion}.jar" manifest="${eclipse.build.plugins}/org.lwjgl.info/META-INF/MANIFEST.MF"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl.info" casesensitive="yes" /> + </jar> + <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.tools_${eclipse.normversion}.jar" manifest="${eclipse.build.plugins}/org.lwjgl.tools/META-INF/MANIFEST.MF"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl.tools" casesensitive="yes" /> + </jar> + <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/features/org.lwjgl_${eclipse.normversion}.jar"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl.feature" casesensitive="yes" /> + </jar> + <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/features/org.lwjgl.sdk_${eclipse.normversion}.jar"> + <fileset dir="${eclipse.build.plugins}/org.lwjgl.feature.sdk" casesensitive="yes" /> + </jar> + + <!-- ******************************************************************* + * + * Sign plugins and feature + * + ******************************************************************** --> + + <signjar jar="${eclipse.build.plugins}/org.lwjgl.updatesite/features/org.lwjgl_${eclipse.normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${password}" keypass="${keypass}" /> + <signjar jar="${eclipse.build.plugins}/org.lwjgl.updatesite/features/org.lwjgl.sdk_${eclipse.normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${password}" keypass="${keypass}" /> + <signjar jar="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl_${eclipse.normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${password}" keypass="${keypass}" /> + <signjar jar="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.doc_${eclipse.normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${password}" keypass="${keypass}" /> + <signjar jar="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.source_${eclipse.normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${password}" keypass="${keypass}" /> + <signjar jar="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.info_${eclipse.normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${password}" keypass="${keypass}" /> + <signjar jar="${eclipse.build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.tools_${eclipse.normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${password}" keypass="${keypass}" /> + + + <echo>Created Eclipse update site: ${eclipse.build.plugins}/org.lwjgl.updatesite</echo> + </target> + + <target name="eclipse-clean"> + <delete dir="${eclipse.build.path}" /> + </target> + + <target name="eclipse-help"> + <echo>This plugin is to be called from main LWJGL build.xml file.</echo> + <echo>It creates the update site, the result will be found in</echo> + <echo>${eclipse.build.plugins}/org.lwjgl.updatesite</echo> + </target> + +</project> \ No newline at end of file Deleted: trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml 2011-12-03 11:10:44 UTC (rev 3705) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/build.xml 2011-12-05 12:41:45 UTC (rev 3706) @@ -1,446 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<!-- -Call with - ant -Dversion=1.9.1 dist -(C) 2011 LWJGL-Project -Author: Jens von Pilgrim, dev...@je... ---> - -<project default="help" basedir="." name="" xmlns:ant4eclipse="antlib:org.ant4eclipse" xmlns:antcontrib="antlib:net.sf.antcontrib"> - - <property name="keystore" value="teststore" /> - <property name="alias" value="tester" /> - <property name="storepass" value="tester" /> - <property name="keypass" value="${storepass}" /> - - <property name="eclipse.updatesite" value="http://www.lwjgl.org/update/" /> - <property name="bundle.vendor" value="lwjgl.org" /> - - <taskdef name="packagelist" classname="org.lwjgl.ant.PackageList"> - <classpath> - <pathelement location="./anttasks" /> - </classpath> - </taskdef> - <taskdef name="normalizeversion" classname="org.lwjgl.ant.NormalizeVersion"> - <classpath> - <pathelement location="./anttasks" /> - </classpath> - </taskdef> - - <property name="version" value="unknown" /> - <property name="archives.dir" value="lwjgl-archives/${version}" /> - <property name="skeletons.dir" value=".." /> - - <property name="build.path" value="build" /> - <property name="build.temp" value="${build.path}/temp" /> - <property name="build.plugins" value="${build.path}/plugins" /> - - <property name="lwjgl.zip" value="lwjgl-${version}.zip" /> - <property name="lwjgl_docs.zip" value="lwjgl-docs-${version}.zip" /> - <property name="lwjgl_source.zip" value="lwjgl-source-${version}.zip" /> - - <property name="lwjgl.dir" value="${build.temp}/lwjgl-${version}" /> - <property name="lwjgl_docs.dir" value="${build.temp}/javadoc" /> - <property name="lwjgl_source.dir" value="${build.temp}/src" /> - - <property name="NL" value=" " /> - - - - <!-- -<property name="" value="" /> ---> - - - <target name="init"> - <normalizeversion version="${version}" property="normversion" addDateQualifier="yes" /> - <echo>Building plugins for version ${version}, normalized version ${normversion}</echo> - </target> - - - <target name="dist" depends="init"> - <mkdir dir="${build.temp}" /> - - - <!-- ******************************************************************* - * - * Copy original plugins to build folder. Copy source to source plugin - * only, move classes into place. - * - ******************************************************************** --> - <mkdir dir="${build.plugins}" /> - <copy todir="${build.plugins}/org.lwjgl"> - <fileset dir="${skeletons.dir}/org.lwjgl" casesensitive="yes"> - <exclude name="**/src/**" /> - <exclude name="**/*.jar" /> - <!-- do not copy jars used for development --> - <exclude name="**/build/**" /> - <exclude name="**/build.properties" /> - <!-- do not copy development settings --> - <exclude name="**/.settings/**" /> - <exclude name="**/.classpath" /> - <exclude name="**/.project" /> - <!-- do not copy native libraries --> - <exclude name="**/native/**" /> - </fileset> - </copy> - <copy todir="${build.plugins}/org.lwjgl"> - <fileset dir="${skeletons.dir}/org.lwjgl/build/classes" casesensitive="yes"> - </fileset> - </copy> - - <copy todir="${build.plugins}/org.lwjgl.source"> - <fileset dir="${skeletons.dir}/org.lwjgl.source" casesensitive="yes"> - <exclude name="**/build.properties" /> - <exclude name="**/.settings/**" /> - <exclude name="**/.classpath" /> - <exclude name="**/.project" /> - </fileset> - </copy> - <copy todir="${build.plugins}/org.lwjgl.doc"> - <fileset dir="${skeletons.dir}/org.lwjgl.doc" casesensitive="yes"> - <exclude name="**/build.properties" /> - <exclude name="**/.settings/**" /> - <exclude name="**/.classpath" /> - <exclude name="**/.project" /> - </fileset> - </copy> - - <copy todir="${build.plugins}/org.lwjgl.info"> - <fileset dir="${skeletons.dir}/org.lwjgl.info" casesensitive="yes"> - <exclude name="**/src/**" /> - <exclude name="**/build/**" /> - <exclude name="**/build.properties" /> - <exclude name="**/.settings/**" /> - <exclude name="**/.classpath" /> - <exclude name="**/.project" /> - </fileset> - </copy> - <copy todir="${build.plugins}/org.lwjgl.info"> - <fileset dir="${skeletons.dir}/org.lwjgl.info/build/classes" casesensitive="yes"> - </fileset> - </copy> - - <copy todir="${build.plugins}/org.lwjgl.tools"> - <fileset dir="${skeletons.dir}/org.lwjgl.tools" casesensitive="yes"> - <exclude name="**/src/**" /> - <exclude name="**/build/**" /> - <exclude name="**/build.properties" /> - <exclude name="**/.settings/**" /> - <exclude name="**/.classpath" /> - <exclude name="**/.project" /> - </fileset> - </copy> - <copy todir="${build.plugins}/org.lwjgl.tools"> - <fileset dir="${skeletons.dir}/org.lwjgl.tools/build/classes" casesensitive="yes"> - </fileset> - </copy> - - <copy todir="${build.plugins}/org.lwjgl.feature"> - <fileset dir="${skeletons.dir}/org.lwjgl.feature" casesensitive="yes"> - <exclude name="**/build.properties" /> - <exclude name="**/.settings/**" /> - <exclude name="**/.classpath" /> - <exclude name="**/.project" /> - <exclude name="**/*.template" /> - </fileset> - </copy> - <copy todir="${build.plugins}/org.lwjgl.updatesite"> - <fileset dir="${skeletons.dir}/org.lwjgl.updatesite" casesensitive="yes"> - <exclude name="**/.settings/**" /> - <exclude name="**/.classpath" /> - <exclude name="**/.project" /> - <exclude name="**/*.template" /> - </fileset> - </copy> - - - <!-- ******************************************************************* - * - * Unzip archives and move content into approriate plugins - * - ******************************************************************** --> - <unzip src="${archives.dir}/${lwjgl.zip}" dest="${build.temp}" /> - <copy todir="${build.plugins}/org.lwjgl/native"> - <fileset dir="${lwjgl.dir}/native" /> - </copy> - <copy todir="${build.plugins}/org.lwjgl/"> - <fileset dir="${lwjgl.dir}/jar"> - <exclude name="**/lwjgl-debug.jar" /> - </fileset> - </copy> - <copy todir="${build.plugins}/org.lwjgl/doc"> - <fileset dir="${lwjgl.dir}/doc" /> - </copy> - <packagelist property="bundle.export-package" pathsep=",${NL} "> - <fileset dir="${lwjgl.dir}/jar"> - <exclude name="**/lwjgl-debug.jar" /> - </fileset> - <patternset> - <exclude name="**/test/**" /> - <exclude name="**/examples/**" /> - </patternset> - </packagelist> - <pathconvert property="bundle.classpath.jars" pathsep=",${NL} "> - <map from="${basedir}/${lwjgl.dir}/jar/" to="" /> - <fileset dir="${lwjgl.dir}/jar"> - <exclude name="**/lwjgl-debug.jar" /> - <exclude name="**/lwjgl_test.jar" /> - </fileset> - </pathconvert> - - - <!-- ******************************************************************* - * - * Build plugins - * - ******************************************************************** --> - - <!-- ******************************************************************* - * - * org.lwjgl - * - * Build manifest files, not using manifest task, since manifest wraps - * at the wrong positions (at least ant 1.7) - * - ******************************************************************** --> - <echo file="${build.plugins}/org.lwjgl/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: LWJGL Lightweight Java Game Library -Bundle-SymbolicName: org.lwjgl -Bundle-Version: ${normversion} -Bundle-Vendor: ${bundle.vendor} -Bundle-Activator: org.lwjgl.Activator -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime -Bundle-ActivationPolicy: lazy -Export-Package: org.lwjgl.eclipse,${NL} ${bundle.export-package} -Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Bundle-ClassPath: .,${NL} ${bundle.classpath.jars} -</echo> - - <!-- ******************************************************************* - * - * org.lwjgl.doc - * - * Build manifest files, not using manifest task, since manifest wraps - * at the wrong positions (at least ant 1.7) - * - ******************************************************************** --> - <copy file="${archives.dir}/${lwjgl_docs.zip}" tofile="${build.plugins}/org.lwjgl.doc/doc.zip" /> - <echo file="${build.plugins}/org.lwjgl.doc/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 -Bundle-Vendor: ${bundle.vendor} -Bundle-Version: ${normversion} -Bundle-SymbolicName: org.lwjgl.doc;singleton:=true -Bundle-Localization: plugin -Require-Bundle: org.eclipse.help;bundle-version="3.2.0" -Eclipse-LazyStart: true -</echo> - - - <!-- ******************************************************************* - * - * org.lwjgl.source - * - * Build manifest files, not using manifest task, since manifest wraps - * at the wrong positions (at least ant 1.7) - * - ******************************************************************** --> - <unzip src="${archives.dir}/${lwjgl_source.zip}" dest="${build.temp}" /> - <!-- Build src zips for plugin org.lwjgl --> - <property name="org.lwjgl.src.dir" value="${build.plugins}/org.lwjgl.source/src/org.lwjgl_${normversion}" /> - <mkdir dir="${org.lwjgl.src.dir}" /> - <zip destfile="${org.lwjgl.src.dir}/lwjglsrc.zip"> - <fileset dir="${lwjgl_source.dir}/generated" /> - <fileset dir="${lwjgl_source.dir}/java"> - <exclude name="org/lwjgl/util/**" /> - </fileset> - </zip> - <zip destfile="${org.lwjgl.src.dir}/lwjgl_utilsrc.zip"> - <fileset dir="${lwjgl_source.dir}/java"> - <include name="org/lwjgl/util/**" /> - <exclude name="org/lwjgl/util/applet/**" /> - </fileset> - </zip> - <!-- - <zip destfile="${org.lwjgl.src.dir}/lwjgl_util_applet.zip"> - <fileset dir="${lwjgl_source.dir}/java"> - <include name="org/lwjgl/util/applet/**" /> - </fileset> - </zip> - --> - <zip destfile="${org.lwjgl.src.dir}/lwjgl_eclipse.zip"> - <fileset dir="${skeletons.dir}/org.lwjgl/src/java" casesensitive="yes"> - <include name="org/lwjgl/**" /> - </fileset> - </zip> - <zip destfile="${org.lwjgl.src.dir}/lwjgl_tools.zip"> - <fileset dir="${skeletons.dir}/org.lwjgl.tools/src/java" casesensitive="yes"> - <include name="org/lwjgl/**" /> - </fileset> - </zip> - <zip destfile="${org.lwjgl.src.dir}/lwjgl_info.zip"> - <fileset dir="${skeletons.dir}/org.lwjgl.info/src/java" casesensitive="yes"> - <include name="org/lwjgl/**" /> - </fileset> - </zip> - - <!-- Build manfest --> - <!-- not using manifest task, since manifest wraps at the wrong positions --> - <echo file="${build.plugins}/org.lwjgl.source/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: LWJGL Sources -Bundle-Vendor: ${bundle.vendor} -Bundle-Version: ${normversion} -Bundle-SymbolicName: org.lwjgl.source;singleton:=true -Bundle-Localization: plugin -</echo> - - <!-- ******************************************************************* - * - * org.lwjgl.info - * - * Build manifest files, not using manifest task, since manifest wraps - * at the wrong positions (at least ant 1.7) - * - ******************************************************************** --> - <echo file="${build.plugins}/org.lwjgl.info/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: LWJGL Test and Info View -Bundle-Vendor: ${bundle.vendor} -Bundle-Version: ${normversion} -Bundle-SymbolicName: org.lwjgl.info;singleton:=true -Bundle-Localization: plugin -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.ui.views, - org.eclipse.core.resources, - org.lwjgl -Bundle-RequiredExecutionEnvironment: J2SE-1.5 -</echo> - <!-- Files are already in place --> - - <!-- ******************************************************************* - * - * org.lwjgl.tools - * - * Build manifest files, not using manifest task, since manifest wraps - * at the wrong positions (at least ant 1.7) - * - ******************************************************************** --> - <!-- Build plugin org.lwjgl.tools --> - <echo file="${build.plugins}/org.lwjgl.tools/META-INF/MANIFEST.MF" encoding="UTF-8">Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: LWJGL Tools Plug-in -Bundle-SymbolicName: org.lwjgl.tools;singleton:=true -Bundle-Version: ${normversion} -Bundle-Vendor: ${bundle.vendor} -Bundle-Activator: org.lwjgl.tools.Activator -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.core.resources;bundle-version="3.4.0", - org.eclipse.jdt.core;bundle-version="3.4.0", - org.eclipse.jdt.ui;bundle-version="3.4.0", - org.lwjgl;bundle-version="${normversion}", - org.eclipse.jdt.launching;bundle-version="3.4.0" -Bundle-ActivationPolicy: lazy -Bundle-RequiredExecutionEnvironment: J2SE-1.5 -</echo> - <!-- Files are already in place --> - - <!-- ******************************************************************* - * - * org.lwjgl.feature - * - ******************************************************************** --> - <!-- Build org.lwjgl.feature --> - <copy file="${skeletons.dir}/org.lwjgl.feature/feature.xml.template" tofile="${build.plugins}/org.lwjgl.feature/feature.xml" encoding="UTF-8" overwrite="true"> - <filterset> - <filter token="VERSION" value="${normversion}" /> - <filter token="PROVIDERNAME" value="${bundle.vendor}" /> - <filter token="UPDATEURL" value="${eclipse.updatesite}" /> - </filterset> - </copy> - - - - <!-- ******************************************************************* - * - * org.lwjgl.feature.sdk - * - * - ******************************************************************** --> - <!-- Build org.lwjgl.feature --> - <copy file="${skeletons.dir}/org.lwjgl.feature.sdk/feature.xml.template" tofile="${build.plugins}/org.lwjgl.feature.sdk/feature.xml" encoding="UTF-8" overwrite="true"> - <filterset> - <filter token="VERSION" value="${normversion}" /> - <filter token="PROVIDERNAME" value="${bundle.vendor}" /> - <filter token="UPDATEURL" value="${eclipse.updatesite}" /> - </filterset> - </copy> - - <!-- ******************************************************************* - * - * Build update site, i.e. zip all plugins and feature with version - * number to appropriate place - * - ******************************************************************** --> - <!-- Build update site --> - <copy file="${skeletons.dir}/org.lwjgl.updatesite/site.xml.template" tofile="${build.plugins}/org.lwjgl.updatesite/site.xml" encoding="UTF-8" overwrite="true"> - <filterset> - <filter token="VERSION" value="${normversion}" /> - <filter token="PROVIDERNAME" value="${bundle.vendor}" /> - <filter token="UPDATEURL" value="${eclipse.updatesite}" /> - </filterset> - </copy> - <mkdir dir="${build.plugins}/org.lwjgl.updatesite/plugins" /> - <mkdir dir="${build.plugins}/org.lwjgl.updatesite/features" /> - <jar destfile="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl_${normversion}.jar" manifest="${build.plugins}/org.lwjgl/META-INF/MANIFEST.MF"> - <fileset dir="${build.plugins}/org.lwjgl" casesensitive="yes" /> - </jar> - <jar destfile="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.doc_${normversion}.jar" manifest="${build.plugins}/org.lwjgl.doc/META-INF/MANIFEST.MF"> - <fileset dir="${build.plugins}/org.lwjgl.doc" casesensitive="yes" /> - </jar> - <jar destfile="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.source_${normversion}.jar" manifest="${build.plugins}/org.lwjgl.source/META-INF/MANIFEST.MF"> - <fileset dir="${build.plugins}/org.lwjgl.source" casesensitive="yes" /> - </jar> - <jar destfile="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.info_${normversion}.jar" manifest="${build.plugins}/org.lwjgl.info/META-INF/MANIFEST.MF"> - <fileset dir="${build.plugins}/org.lwjgl.info" casesensitive="yes" /> - </jar> - <jar destfile="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.tools_${normversion}.jar" manifest="${build.plugins}/org.lwjgl.tools/META-INF/MANIFEST.MF"> - <fileset dir="${build.plugins}/org.lwjgl.tools" casesensitive="yes" /> - </jar> - <jar destfile="${build.plugins}/org.lwjgl.updatesite/features/org.lwjgl_${normversion}.jar"> - <fileset dir="${build.plugins}/org.lwjgl.feature" casesensitive="yes" /> - </jar> - <jar destfile="${build.plugins}/org.lwjgl.updatesite/features/org.lwjgl.sdk_${normversion}.jar"> - <fileset dir="${build.plugins}/org.lwjgl.feature.sdk" casesensitive="yes" /> - </jar> - - <!-- ******************************************************************* - * - * Sign plugins and feature - * - ******************************************************************** --> - - <signjar jar="${build.plugins}/org.lwjgl.updatesite/features/org.lwjgl_${normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${storepass}" keypass="${keypass}" /> - <signjar jar="${build.plugins}/org.lwjgl.updatesite/features/org.lwjgl.sdk_${normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${storepass}" keypass="${keypass}" /> - <signjar jar="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl_${normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${storepass}" keypass="${keypass}" /> - <signjar jar="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.doc_${normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${storepass}" keypass="${keypass}" /> - <signjar jar="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.source_${normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${storepass}" keypass="${keypass}" /> - <signjar jar="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.info_${normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${storepass}" keypass="${keypass}" /> - <signjar jar="${build.plugins}/org.lwjgl.updatesite/plugins/org.lwjgl.tools_${normversion}.jar" keystore="${keystore}" alias="${alias}" storepass="${storepass}" keypass="${keypass}" /> - - </target> - - <target name="clean"> - <delete dir="${build.path}" /> - </target> - - <target name="help"> - <echo>Call this build with version number and target dist, e.g.</echo> - <echo> ant -Dversion=1.1.2 dist</echo> - </target> - -</project> \ No newline at end of file Added: trunk/LWJGL/eclipse-update/org.lwjgl.build/buildEclipseClasses.xml =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/buildEclipseClasses.xml (rev 0) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/buildEclipseClasses.xml 2011-12-05 12:41:45 UTC (rev 3706) @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + ant +(C) 2011 LWJGL-Project +Author: Jens von Pilgrim, dev...@je... +--> + +<project default="buildClasses" basedir="." name="Build Eclipse classes" xmlns:ant4eclipse="antlib:org.ant4eclipse" xmlns:antcontrib="antlib:net.sf.antcontrib"> + + <property name="plugin.lwjgl.org" value="org.lwjgl" /> + <property name="plugin.lwjgl.org.info" value="org.lwjgl.info" /> + <property name="plugin.lwjgl.org.tools" value="org.lwjgl.tools" /> + <property name="classes.folder" value="build/classes" /> + + <property name="plugin.build.folder" value="plugin-classes" /> + + + + <!-- +<property name="" value="" /> +--> + + + <target name="init"> + <echo></echo> + </target> + + <target name="buildClasses" depends="init"> + <mkdir dir="${plugin.build.folder}" /> + <zip basedir="../${plugin.lwjgl.org}/${classes.folder}" destfile="${plugin.build.folder}/${plugin.lwjgl.org}.zip" /> + <zip basedir="../${plugin.lwjgl.org.info}/${classes.folder}" destfile="${plugin.build.folder}/${plugin.lwjgl.org.info}.zip" /> + <zip basedir="../${plugin.lwjgl.org.tools}/${classes.folder}" destfile="${plugin.build.folder}/${plugin.lwjgl.org.tools}.zip" /> + + <jar basedir="anttasks" destfile="anttasks.jar" /> + </target> + + + <target name="clean"> + <delete dir="${plugin.build.folder}" /> + </target> + + <target name="help"> + <echo>Call this ant script in order to create archives containing the classes of all</echo> + <echo>Eclipes plugin related classes, such as Activors.</echo> + <echo>This build file removes the burden of building Eclipse dependent classes from</echo> + <echo>within the main build script</echo> + </target> + +</project> \ No newline at end of file Added: trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.info.zip =================================================================== (Binary files differ) Property changes on: trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.info.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.tools.zip =================================================================== (Binary files differ) Property changes on: trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.tools.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.zip =================================================================== (Binary files differ) Property changes on: trunk/LWJGL/eclipse-update/org.lwjgl.build/plugin-classes/org.lwjgl.zip ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jpi...@us...> - 2011-12-15 17:32:18
|
Revision: 3710 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3710&view=rev Author: jpilgrim Date: 2011-12-15 17:32:08 +0000 (Thu, 15 Dec 2011) Log Message: ----------- Added new ant task creating p2 metadata file for update site. Modified Paths: -------------- trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar Added Paths: ----------- trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar =================================================================== (Binary files differ) Added: trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java (rev 0) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java 2011-12-15 17:32:08 UTC (rev 3710) @@ -0,0 +1,1205 @@ +/******************************************************************************* + * Copyright (c) 2011 Jens von Pilgrim and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Jens von Pilgrim - initial implementation + ******************************************************************************/ + +package org.lwjgl.ant; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.math.BigInteger; +import java.security.MessageDigest; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Properties; +import java.util.jar.JarEntry; +import java.util.jar.JarInputStream; +import java.util.jar.Manifest; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpression; +import javax.xml.xpath.XPathFactory; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** + * Ant task creating p2 metadata files "content.xml" and "artifact.xml" based + * on existent plugins and features within an update site. + * <p> + * This task is a lighweight (and quick and dirty) version of the ant task + * "p2.publish.featuresAndBundles" + * provided by the Eclipse p2 plugin. However, it does not depend on any + * Eclipse related classes! + * </p> + * <p><b>Warning: </b>This task is only tested with the LWJGL update site, + * if you have a different update site, you better test it by comparing its + * output with the files created by the original p2 tools.</p> + * + * @author Jens von Pilgrim (dev...@je...) + * @since Dec 9, 2011 + * @see org.eclipse.equinox.p2.publisher.Publisher + */ +public class StandalonePublisher extends Task { + + public final static int BUFFERSIZE = 2048; + + public final static FileFilter JAR_FILTER = new FileFilter() { + + public boolean accept(File i_pathname) { + return i_pathname.isFile() && i_pathname.getName().endsWith(".jar"); + } + }; + + protected String updateSiteFolder; + + protected String repositoryName; + + protected String repositoryURI; + + protected Document currentDoc; + + protected boolean compressed = false; + + protected final XPath xpath = XPathFactory.newInstance().newXPath(); + + public class FeatureInfo { + + public String getClassifier() { + return "org.eclipse.update.feature"; + } + + public String getContentType() { + return "application/zip"; + } + + public String getRootElementName() { + return "feature"; + } + + public Document doc; + + public int size; + + public File jarFile; + + public String xpath(String path) { + if (path.startsWith("/")) + return StandalonePublisher.this.xpath(doc, path); + else + return StandalonePublisher.this.xpath(doc, "//" + + getRootElementName() + "/" + path); + } + + public List<Node> xpathNods(String path) { + try { + XPathExpression expression = xpath.compile(path); + NodeList nodes = (NodeList) expression.evaluate(doc, + XPathConstants.NODESET); + + List<Node> list = new ArrayList<Node>(nodes.getLength()); + for (int i = 0; i < nodes.getLength(); i++) { + list.add(nodes.item(i)); + } + + return list; + } catch (Exception ex) { + System.err.println(ex); + return Collections.emptyList(); + } + } + + /** + * @return + */ + public String getID() { + return xpath("@id"); + } + + /** + * @return + */ + public String getVersion() { + return xpath("@version"); + } + } + + public class BundleInfo extends FeatureInfo { + + @Override + public String getID() { + return mfval("Bundle-SymbolicName"); + } + + @Override + public String getVersion() { + return mfval("Bundle-Version"); + } + + @Override + public String getClassifier() { + return "osgi.bundle"; + }; + + @Override + public String getContentType() { + return null; + } + + @Override + public String getRootElementName() { + return "plugin"; + } + + public Manifest manifest; + + public String mf(String attrib) { + return manifest.getMainAttributes().getValue(attrib); + } + + public String mfval(String attrib) { + return mfval(attrib, ""); + } + + /** + * @param i_value + * @param i_string + * @return + */ + public String mfval(String attrib, String key) { + String value = manifest.getMainAttributes().getValue(attrib); + if (value == null || value.isEmpty()) + return ""; + for (String s : value.split(";")) { + + if ("".equals(key)) + return s; + int l = 2; + int p = s.indexOf(":="); + if (p < 0) { + p = s.indexOf("="); + l = 1; + } + if (p > 0) { + String k = s.substring(0, p); + String v = s.substring(p + l); + if (key.equals(k)) { + v = v.trim(); + v = v.replaceAll("^\"([^\"]*)\"$", "\\1"); + return v; + } + } + + } + + return ""; + } + + public String valIndex(String[] attribValues, int index, String key) { + + if (attribValues.length <= index) + return ""; + String value = attribValues[index]; + for (String s : value.split(";")) { + + if ("".equals(key)) + return s; + int l = 2; + int p = s.indexOf(":="); + if (p < 0) { + p = s.indexOf("="); + l = 1; + } + if (p > 0) { + String k = s.substring(0, p); + String v = s.substring(p + l); + if (key.equals(k)) { + v = v.trim(); + v = v.replaceAll("^\"\\s*", ""); + v = v.replaceAll("\\s*\"$", ""); + return v; + } + } + + } + + return ""; + } + + public String mfval(String attrib, String key, String def) { + String v = mfval(attrib, key); + if (v == null || v.isEmpty()) + return def; + return v; + } + + public String valIndex(String[] attribValues, int index, String key, + String def) { + String v = valIndex(attribValues, index, key); + if (v == null || v.isEmpty()) + return def; + return v; + } + } + + protected String xpath(Node node, String path) { + try { + XPathExpression expression = xpath.compile(path); + NodeList nodes = (NodeList) expression.evaluate(node, + XPathConstants.NODESET); + String s = nodes.item(0).getNodeValue(); + s = s.replaceAll("^\\s+", ""); + s = s.replaceAll("\\s+$", ""); + return s; + } catch (Exception ex) { + System.err.println(ex); + return null; + } + } + + protected FeatureInfo readFeature(File featureArchive) + throws ParserConfigurationException { + + FeatureInfo info = new FeatureInfo(); + info.jarFile = featureArchive; + info.size = (int) featureArchive.length(); + + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + + JarInputStream jis = null; + try { + jis = new JarInputStream(new FileInputStream(featureArchive)); + + JarEntry jarEntry; + while ((jarEntry = jis.getNextJarEntry()) != null) { + if (!jarEntry.isDirectory() + && "feature.xml".equals(jarEntry.getName())) { + + Document doc = readXMLinJar(docBuilder, jis, jarEntry); + info.doc = doc; + jis.closeEntry(); + break; + } + } + + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + if (jis != null) + try { + jis.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + return info; + + } + + protected BundleInfo readBundle(File location) + throws ParserConfigurationException { + BundleInfo info = new BundleInfo(); + info.jarFile = location; + info.size = (int) location.length(); + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + JarInputStream jis = null; + try { + jis = new JarInputStream(new FileInputStream(location)); + info.manifest = jis.getManifest(); + + JarEntry jarEntry; + while ((jarEntry = jis.getNextJarEntry()) != null) { + if (!jarEntry.isDirectory() + && "plugin.xml".equals(jarEntry.getName())) { + + Document doc = readXMLinJar(docBuilder, jis, jarEntry); + info.doc = doc; + jis.closeEntry(); + break; + } + + } + + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + if (jis != null) + try { + jis.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + return info; + + } + + /** + * @param docBuilder + * @param jis + * @param jarEntry + * @return + * @throws IOException + * @throws SAXException + */ + protected Document readXMLinJar(DocumentBuilder docBuilder, + JarInputStream jis, JarEntry jarEntry) throws IOException, + SAXException { + byte[] buffer = new byte[(int) jarEntry.getSize()]; + int count; + int pos = 0; + byte data[] = new byte[BUFFERSIZE]; + while ((count = jis.read(data, 0, BUFFERSIZE)) != -1) { + System.arraycopy(data, 0, buffer, pos, count); + pos += count; + } + ByteArrayInputStream bis = new ByteArrayInputStream(buffer); + Document doc = docBuilder.parse(bis); + return doc; + } + + protected static void dump(Node doc) { + System.out.println(doDump(doc)); + } + + protected static String doDump(Node doc) { + StringWriter stringWriter = new StringWriter(); + StreamResult sr = new StreamResult(stringWriter); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer t = null; + Properties oprops = new Properties(); + oprops.put(OutputKeys.METHOD, "xml"); + oprops.put(OutputKeys.STANDALONE, "yes"); + oprops.put(OutputKeys.INDENT, "yes"); + try { + t = tf.newTransformer(); + t.setOutputProperties(oprops); + t.transform(new DOMSource(doc), sr); + } catch (Exception e) { + } + return stringWriter.toString(); + + } + + protected static void dump(Manifest manifest) { + System.out.println(doDump(manifest)); + } + + protected static String doDump(Manifest manifest) { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try { + manifest.write(os); + return os.toString(); + } catch (IOException ex) { + ex.printStackTrace(); + return ""; + } + } + + protected static String escapeToXMLAttrib(String s) { + return s.replaceAll("\r", "").replaceAll("\n\\s+", ""); + //.replaceAll("\"", """); + } + + public void doExecute() throws Exception { + File f = new File(updateSiteFolder + File.separator + "features"); + + File[] locations = f.listFiles(JAR_FILTER); + FeatureInfo[] featureInfos = new FeatureInfo[locations.length]; + for (int i = 0; i < locations.length; i++) { + featureInfos[i] = readFeature(locations[i]); + } + + f = new File(updateSiteFolder + File.separator + "plugins"); + locations = f.listFiles(JAR_FILTER); + BundleInfo[] bundleInfos = new BundleInfo[locations.length]; + for (int i = 0; i < locations.length; i++) { + bundleInfos[i] = readBundle(locations[i]); + } + + writeContent(featureInfos, bundleInfos); + writeArtifacts(featureInfos, bundleInfos); + + } + + /** + * @param i_featureInfos + * @param i_bundleInfos + * @throws Exception + */ + protected void writeContent(FeatureInfo[] i_featureInfos, + BundleInfo[] i_bundleInfos) throws Exception { + + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + // <?xml version='1.0' encoding='UTF-8'?> + Document content = docBuilder.newDocument(); + content.setXmlStandalone(false); + content.setTextContent(repositoryName); + currentDoc = content; + // <?metadataRepository version='1.1.0'?> + + content.appendChild(content.createProcessingInstruction( + "metadataRepository", "version='1.1.0'")); + Element repository = addElement( + content, + "repository", // + "name", + repositoryName, // + "type", + "org.eclipse.equinox.internal.p2.metadata.repository.LocalMetadataRepository", // + "version", "1"); + + addList(repository, + "properties", + createElement("property", "name", "p2.timestamp", "value", + String.valueOf(System.currentTimeMillis())), + createElement("property", "name", "p2.compressed", "value", + String.valueOf(compressed))); + + addList(repository, + "references", + createElement("repository", "uri", repositoryURI, "type", "0", + "options", "0")); + + List<Element> units = new ArrayList<Element>(); + + for (FeatureInfo featureInfo : i_featureInfos) { + units.add(createUnitForFeature(featureInfo)); + units.add(createUnitForFeatureGroups(featureInfo)); + } + for (BundleInfo bundleInfo : i_bundleInfos) { + units.add(createUnitForBundle(bundleInfo)); + } + addList(repository, "units", units); + + //dump(content); + + writeDocument(content, updateSiteFolder + File.separator + + "content.xml"); + + currentDoc = null; + } + + /** + * @param i_featureInfos + * @param i_bundleInfos + * @throws Exception + */ + protected void writeArtifacts(FeatureInfo[] i_featureInfos, + BundleInfo[] i_bundleInfos) throws Exception { + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + // <?xml version='1.0' encoding='UTF-8'?> + Document artifact = docBuilder.newDocument(); + artifact.setXmlStandalone(false); + currentDoc = artifact; + + // <?metadataRepository version='1.1.0'?> + + artifact.appendChild(artifact.createProcessingInstruction( + "artifactRepository", "version='1.1.0'")); + Element repository = addElement(artifact, + "repository", // + "name", + repositoryName + " - artifacts", // + "type", + "org.eclipse.equinox.p2.artifact.repository.simpleRepository", // + "version", "1"); + + addList(repository, + "properties", + createElement("property", "name", "p2.timestamp", "value", + String.valueOf(System.currentTimeMillis())), + createElement("property", "name", "p2.compressed", "value", + String.valueOf(compressed))); + addList(repository, + "mappings", + createElement("rule", "filter", "(& (classifier=osgi.bundle))", + "output", "${repoUrl}/plugins/${id}_${version}.jar"), + createElement("rule", "filter", "(& (classifier=binary))", + "output", "${repoUrl}/binary/${id}_${version}"), + createElement("rule", "filter", + "(& (classifier=org.eclipse.update.feature))", + "output", "${repoUrl}/features/${id}_${version}.jar")); + + List<Element> artifacts = new ArrayList<Element>(); + + for (BundleInfo bundleInfo : i_bundleInfos) { + artifacts.add(createArtifact(bundleInfo)); + } + for (FeatureInfo featureInfo : i_featureInfos) { + artifacts.add(createArtifact(featureInfo)); + } + addList(repository, "artifacts", artifacts); + + //dump(artifact); + + writeDocument(artifact, updateSiteFolder + File.separator + + "artifacts.xml"); + + currentDoc = null; + + } + + /** + * @param i_featureInfo + * @return + * @throws Exception + */ + protected Element createArtifact(FeatureInfo info) throws Exception { + Element artifact = createElement("artifact", "classifier", + info.getClassifier(), "id", info.getID(), "version", + info.getVersion()); + + List<Element> properties = new ArrayList<Element>(); + properties.add(createElement("property", "name", "artifact.size", + "value", String.valueOf(info.jarFile.length()))); + properties.add(createElement("property", "name", "download.size", + "value", String.valueOf(info.jarFile.length()))); + properties.add(createElement("property", "name", "download.md5", + "value", String.valueOf(md5(info.jarFile)))); + String contentType = info.getContentType(); + if (contentType != null && !contentType.isEmpty()) { + properties.add(createElement("property", "name", + "download.contentType", "value", contentType)); + } + addList(artifact, "properties", properties); + + return artifact; + } + + /** + * @param i_jarFile + * @return + * @throws Exception + */ + protected String md5(File file) throws Exception { + + MessageDigest md = MessageDigest.getInstance("MD5"); + FileInputStream fis = new FileInputStream(file); + byte data[] = new byte[BUFFERSIZE]; + int count; + while ((count = fis.read(data, 0, BUFFERSIZE)) != -1) { + md.update(data, 0, count); + } + byte[] digest = md.digest(); + BigInteger bigInt = new BigInteger(1, digest); + String hashtext = bigInt.toString(16); + + return hashtext; + + } + + /** + * @param content + * @throws TransformerFactoryConfigurationError + * @throws TransformerConfigurationException + * @throws TransformerException + */ + protected void writeDocument(Document content, String targetFile) + throws TransformerFactoryConfigurationError, + TransformerConfigurationException, TransformerException { + StreamResult sr = new StreamResult(new File(targetFile)); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer t = tf.newTransformer(); + Properties oprops = new Properties(); + oprops.put(OutputKeys.METHOD, "xml"); + oprops.put(OutputKeys.INDENT, "yes"); + t.setOutputProperties(oprops); + t.transform(new DOMSource(content), sr); + } + + /** + * @param i_site + * @return + */ + protected Element createUnitForFeatureGroups(FeatureInfo info) { + String version = info.xpath("@version"); + // <unit id='org.lwjgl.sdk.feature.group' version='2.8.2.v20111128-1752' singleton='false'> + Element unit = createElement("unit", // + "id", info.xpath("@id") + ".feature.group", // + "version", version, "singleton", "false"); + + // <update id='org.lwjgl.sdk.feature.group' range='[0.0.0,2.8.2.v20111128-1752)' severity='0'/> + addElement(unit, "update", "id", info.xpath("@id") + ".feature.group", + "range", "[0.0.0," + version + ")", "severity", "0"); + + /* <properties size='5'> + <property name='org.eclipse.equinox.p2.name' value='Lightweight Java Game Library (LWJGL) SDK'/> + <property name='org.eclipse.equinox.p2.description' value='This feature provides easy access to the
Lightweight Java Game Library (LWJGL) SDK
for Eclipse plugin developers. It includes
- source code
- javadoc
- info plugin (Test and Info View)
- library tool (Library configuration for plain Java development)'/> + <property name='org.eclipse.equinox.p2.description.url' value='http://lwjgl.org'/> + <property name='org.eclipse.equinox.p2.provider' value='Lightweight Java Game Library Project'/> + <property name='org.eclipse.equinox.p2.type.group' value='true'/> + </properties> + */ + addList(unit, + "properties", + createElement("property", "name", + "org.eclipse.equinox.p2.name", "value", + info.xpath("@label")), + createElement("property", "name", + "org.eclipse.equinox.p2.description", "value", + info.xpath("description/text()")), + createElement("property", "name", + "org.eclipse.equinox.p2.description.url", "value", + info.xpath("description/@url")), + createElement("property", "name", + "org.eclipse.equinox.p2.provider", "value", + info.xpath("@provider-name")), + createElement("property", "name", + "org.eclipse.equinox.p2.type.group", "value", "true")); + + /* + <provides size='1'> + <provided namespace='org.eclipse.equinox.p2.iu' name='org.lwjgl.sdk.feature.group' version='2.8.2.v20111128-1752'/> + </provides> + */ + addList(unit, + "provides", + createElement("provided", "namespace", + "org.eclipse.equinox.p2.iu", "name", info.xpath("@id") + + ".feature.group", "version", version)); + /* + <requires size='6'> + <required namespace='org.eclipse.equinox.p2.iu' name='org.lwjgl.feature.group' range='0.0.0'/> + */ + List<Element> requires = new ArrayList<Element>(); + for (Node n : info.xpathNods("//feature//import")) { + requires.add(createElement("required", "namespace", + "org.eclipse.equinox.p2.iu", "name", xpath(n, "@feature") + + ".feature.group", "range", + "[" + xpath(n, "@version") + "," + xpath(n, "@version") + + "]")); + } + // <required namespace='org.eclipse.equinox.p2.iu' name='org.lwjgl.doc' range='[2.8.2.v20111128-1752,2.8.2.v20111128-1752]'/> + for (Node n : info.xpathNods("//feature//plugin")) { + requires.add(createElement("required", "namespace", + "org.eclipse.equinox.p2.iu", "name", xpath(n, "@id"), + "range", + "[" + xpath(n, "@version") + "," + xpath(n, "@version") + + "]")); + } + /* + <required namespace='org.eclipse.equinox.p2.iu' name='org.lwjgl.sdk.feature.jar' range='[2.8.2.v20111128-1752,2.8.2.v20111128-1752]'> + <filter> + (org.eclipse.update.install.features=true) + </filter> + </required> + */ + Element reqFeature = createElement("required", "namespace", + "org.eclipse.equinox.p2.iu", "name", info.xpath("@id") + + ".feature.jar", "range", "[" + version + "," + + version + "]"); + addElement(reqFeature, "filter").setTextContent( + "(org.eclipse.update.install.features=true)"); + requires.add(reqFeature); + addList(unit, "requires", requires); + + // <touchpoint id='null' version='0.0.0'/> + addElement(unit, "touchpoint", "id", "null", "version", "0.0.0"); + + /* + <licenses size='1'> + <license uri='http://lwjgl.org/license.php' url='http://lwjgl.org/license.php'> + Copyright (c) 2002-2011 Lightweight Java Game Library Project
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
 notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright
 notice, this list of conditions and the following disclaimer in the
 documentation and/or other materials provided with the distribution.

* Neither the name of 'Light Weight Java Game Library' nor the names of
 its contributors may be used to endorse or promote products derived
 from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + </license> + </licenses> + */ + List<Element> list = new ArrayList<Element>(); + for (Node n : info.xpathNods("//feature//license")) { + Element l = createElement("license", "uri", xpath(n, "@url"), + "url", xpath(n, "@url")); + l.setTextContent(escapeToXMLAttrib(xpath(n, "text()"))); + list.add(l); + } + addList(unit, "licenses", list); + + /* + <copyright uri='http://lwjgl.org/credits.php' url='http://lwjgl.org/credits.php'> + Copyright (c) 2002-2011 Lightweight Java Game Library Project
All rights reserved.

LWJGL is available under a BSD license, which means it's open
source and freely available at no charge.

Eclipse feature and plugins, plugin specific code made available under a 
BSD license and Eclipse Public License (EPL). + </copyright> + </unit> + */ + Element l = createElement("copyright", "uri", + info.xpath("copyright/@url"), "url", + info.xpath("copyright/@url")); + l.setTextContent(escapeToXMLAttrib(info.xpath("copyright/text()"))); + unit.appendChild(l); + + return unit; + } + + /** + * @param i_bundleInfo + * @return + * @throws Exception + */ + protected Element createUnitForFeature(FeatureInfo info) throws Exception { + + String version = info.xpath("@version"); + + // <unit id='org.lwjgl.sdk.feature.jar' version='2.8.2.v20111128-1752'> + Element unit = createElement("unit", // + "id", info.xpath("@id") + ".feature.jar", // + "version", version); + + /* <properties size='4'> + <property name='org.eclipse.equinox.p2.name' value='Lightweight Java Game Library (LWJGL) SDK'/> + <property name='org.eclipse.equinox.p2.description' value='This feature provides easy access to the
Lightweight Java Game Library (LWJGL) SDK
for Eclipse plugin developers. It includes
- source code
- javadoc
- info plugin (Test and Info View)
- library tool (Library configuration for plain Java development)'/> + <property name='org.eclipse.equinox.p2.description.url' value='http://lwjgl.org'/> + <property name='org.eclipse.equinox.p2.provider' value='Lightweight Java Game Library Project'/> + </properties> + */ + addList(unit, + "properties", + createElement("property", "name", + "org.eclipse.equinox.p2.name", "value", + info.xpath("@label")), + createElement("property", "name", + "org.eclipse.equinox.p2.description", "value", + info.xpath("description/text()")), + createElement("property", "name", + "org.eclipse.equinox.p2.description.url", "value", + info.xpath("description/@url")), + createElement("property", "name", + "org.eclipse.equinox.p2.provider", "value", + info.xpath("@provider-name"))); + /* + <provides size='3'> + <provided namespace='org.eclipse.equinox.p2.iu' name='org.lwjgl.sdk.feature.jar' version='2.8.2.v20111128-1752'/> + <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='feature' version='1.0.0'/> + <provided namespace='org.eclipse.update.feature' name='org.lwjgl.sdk' version='2.8.2.v20111128-1752'/> + </provides> + */ + addList(unit, + "provides", + createElement("provided", "namespace", + "org.eclipse.equinox.p2.iu", "name", info.xpath("@id") + + ".feature.jar", "version", version), + createElement("provided", "namespace", + "org.eclipse.equinox.p2.eclipse.type", "name", + "feature", "version", "1.0.0"), + createElement("provided", "namespace", + "org.eclipse.update.feature", "name", + info.xpath("@id"), "version", version)); + /* + <filter> + (org.eclipse.update.install.features=true) + </filter> + */ + addElement(unit, "filter").setTextContent( + "(org.eclipse.update.install.features=true)"); + + /* + <artifacts size='1'> + <artifact classifier='org.eclipse.update.feature' id='org.lwjgl.sdk' version='2.8.2.v20111128-1752'/> + </artifacts> + */ + addList(unit, + "artifacts", + createElement("artifact", "classifier", + "org.eclipse.update.feature", "id", info.xpath("@id"), + "version", version)); + + // <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/> + addElement(unit, "touchpoint", "id", "org.eclipse.equinox.p2.osgi", + "version", "1.0.0"); + + /* + <touchpointData size='1'> + <instructions size='1'> + <instruction key='zipped'> + true + </instruction> + </instructions> + </touchpointData> + */ + Element valueZipped = createElement("instruction", "key", "zipped"); + valueZipped.setTextContent("true"); + addList(unit, "touchpointData", createList("instructions", valueZipped)); + + /* + <licenses size='1'> + <license uri='http://lwjgl.org/license.php' url='http://lwjgl.org/license.php'> + Copyright (c) 2002-2011 Lightweight Java Game Library Project
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
 notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright
 notice, this list of conditions and the following disclaimer in the
 documentation and/or other materials provided with the distribution.

* Neither the name of 'Light Weight Java Game Library' nor the names of
 its contributors may be used to endorse or promote products derived
 from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + </license> + </licenses> + */ + List<Element> list = new ArrayList<Element>(); + for (Node n : info.xpathNods("//feature//license")) { + Element l = createElement("license", "uri", xpath(n, "@url"), + "url", xpath(n, "@url")); + l.setTextContent(escapeToXMLAttrib(xpath(n, "text()"))); + list.add(l); + } + addList(unit, "licenses", list); + + /* + <copyright uri='http://lwjgl.org/credits.php' url='http://lwjgl.org/credits.php'> + Copyright (c) 2002-2011 Lightweight Java Game Library Project
All rights reserved.

LWJGL is available under a BSD license, which means it's open
source and freely available at no charge.

Eclipse feature and plugins, plugin specific code made available under a 
BSD license and Eclipse Public License (EPL). + </copyright> + </unit> + */ + Element l = createElement("copyright", "uri", + info.xpath("copyright/@url"), "url", + info.xpath("copyright/@url")); + l.setTextContent(escapeToXMLAttrib(info.xpath("copyright/text()"))); + unit.appendChild(l); + + return unit; + } + + /** + * @param i_bundleInfo + * @return + */ + protected Element createUnitForBundle(BundleInfo info) { + + String version = info.mfval("Bundle-Version"); + /* + <unit id='org.lwjgl' version='2.8.2.v20111128-1752' singleton='false'> + */ + Element unit = createElement("unit", "id", + info.mfval("Bundle-SymbolicName"), "version", version, + "singleton", + info.mfval("Bundle-SymbolicName", "singleton", "false")); + + // <update id='org.lwjgl' range='[0.0.0,2.8.2.v20111128-1752)' severity='0'/> + addElement(unit, "update", "id", info.mfval("Bundle-SymbolicName"), + "range", "[0.0.0," + version + ")", "severity", "0"); + + /* + <properties size='2'> + <property name='org.eclipse.equinox.p2.name' value='LWJGL Lightweight Java Game Library'/> + <property name='org.eclipse.equinox.p2.provider' value='lwjgl.org'/> + </properties> + */ + List<Element> properties = new ArrayList<Element>(); + mf2properties(info, properties, "Bundle-Name", + "org.eclipse.equinox.p2.name", "Bundle-Vendor", + "org.eclipse.equinox.p2.provider", "Bundle-Localization", + "org.eclipse.equinox.p2.bundle.localization"); + addList(unit, "properties", properties); + + /* + <provides size='32'> + <provided namespace='org.eclipse.equinox.p2.iu' name='org.lwjgl' version='2.8.2.v20111128-1752'/> + <provided namespace='osgi.bundle' name='org.lwjgl' version='2.8.2.v20111128-1752'/> + <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/> + + <provided namespace='java.package' name='org.lwjgl.eclipse' version='0.0.0'/> + ... + + </provides> + */ + + List<Element> elements = new ArrayList<Element>(); + elements.add(createElement("provided", "namespace", + "org.eclipse.equinox.p2.iu", "name", + info.mfval("Bundle-SymbolicName"), "version", version)); + elements.add(createElement("provided", "namespace", "osgi.bundle", + "name", info.mfval("Bundle-SymbolicName"), "version", version)); + elements.add(createElement("provided", "namespace", + "org.eclipse.equinox.p2.eclipse.type", "name", "bundle", + "version", "1.0.0")); + + String expPackages = info.mf("Export-Package"); + if (expPackages != null) { + String[] ps = expPackages.split("\\s*,\\s*"); + for (int i = 0; i < ps.length; i++) { + String name = info.valIndex(ps, i, ""); + elements.add(createElement("provided", "namespace", + "java.package", "name", name, "version", "0.0.0")); + } + } + addList(unit, "provides", elements); + + /* + <requires size='2'> + <required namespace='osgi.bundle' name='org.eclipse.ui' range='0.0.0'/> + <required namespace='osgi.bundle' name='org.eclipse.core.runtime' range='0.0.0'/> + </requires> + */ + /* + Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.core.resources;bundle-version="3.4.0", + org.eclipse.jdt.core;bundle-version="3.4.0", + org.eclipse.jdt.ui;bundle-version="3.4.0", + org.eclipse.jdt.launching;bundle-version="3.4.0", + org.lwjgl;bundle-version="2.0.0" + */ + String reqBundles = info.mf("Require-Bundle"); + if (reqBundles != null) { + elements = new ArrayList<Element>(); + String[] ps = reqBundles.split("\\s*,\\s*"); + for (int i = 0; i < ps.length; i++) { + String name = info.valIndex(ps, i, ""); + String range = info.valIndex(ps, i, "bundle-version"); + if (range == null || range.isEmpty()) + range = "0.0.0"; + elements.add(createElement("required", "namespace", + "osgi.bundle", "name", name, "range", range)); + } + addList(unit, "requires", elements); + } + + /* + <artifacts size='1'> + <artifact classifier='osgi.bundle' id='org.lwjgl' version='2.8.2.v20111128-1752'/> + </artifacts> + */ + addList(unit, + "artifacts", + createElement("artifact", "classifier", "osgi.bundle", "id", + info.mfval("Bundle-SymbolicName"), "version", version)); + + /* + <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/> + */ + addElement(unit, "touchpoint", "id", "org.eclipse.equinox.p2.osgi", + "version", "1.0.0"); + + /* + <touchpointData size='1'> + <instructions size='2'> + <instruction key='manifest'> + Bundle-Name: LWJGL Lightweight Java Game Library
Bundle-ClassPath: .,AppleJavaExtensions.jar,asm-debug-all.jar,jinput.jar,lwjgl.jar,lwjgl_util.jar,lwjgl_util_applet.jar,lzma.jar
Bundle-Version: 2.8.2.v20111128-1752
Bundle-Activator: org.lwjgl.Activator
Created-By: 20.1-b02-384 (Apple Inc.)
Bundle-Vendor: lwjgl.org
Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime
Export-Package: org.lwjgl.eclipse,LZMA,com.apple.eawt,com.apple.eio,net.java.games.input,net.java.games.util,net.java.games.util.plugins,org.lwjgl,org.lwjgl.input,org.lwjgl.openal,org.lwjgl.opencl,org.lwjgl.opencl.api,org.lwjgl.opengl,org.lwjgl.opengles,org.lwjgl.util,org.lwjgl.util.applet,org.lwjgl.util.glu,org.lwjgl.util.glu.tessellation,org.lwjgl.util.input,org.lwjgl.util.jinput,org.lwjgl.util.mapped,org.lwjgl.util.vector,org.objectweb.asm,org.objectweb.asm.commons,org.objectweb.asm.signature,org.objectweb.asm.tree,org.objectweb.asm.tree.analysis,org.objectweb.asm.util,org.objectweb.asm.xml
Bundle-SymbolicName: org.lwjgl
Ant-Version: Apache Ant 1.7.1
Manifest-Version: 1.0
Bundle-ActivationPolicy: lazy
Bundle-ManifestVersion: 2
Bundle-RequiredExecutionEnvironment: J2SE-1.5
 + </instruction> + <instruction key='zipped'> + true + </instruction> + </instructions> + </touchpointData> + */ + /* + <touchpointData size='1'> + <instructions size='1'> + <instruction key='zipped'> + true + </instruction> + </instructions> + </touchpointData> + */ + Element valueZipped = createElement("instruction", "key", "zipped"); + valueZipped.setTextContent("true"); + Element manifest = createElement("instruction", "key", "manifest"); + manifest.setTextContent(escapeToXMLAttrib(doDump(info.manifest))); + addList(unit, "touchpointData", + createList("instructions", manifest, valueZipped)); + + return unit; + } + + /** + * + */ + protected void mf2properties(BundleInfo info, List<Element> o_properties, + String... propName) { + for (int i = 0; i < propName.length; i += 2) { + String value = info.mfval(propName[i]); + if (value != null && !value.isEmpty()) { + o_properties.add(createElement("property", "name", + propName[i + 1], "value", value)); + } + } + } + + /** + * @param i_content + * @param i_string + * @param i_createElement + * @param i_createElement2 + */ + protected Element addList(Element parent, String listName, + Element... content) { + return addList(parent, listName, Arrays.asList(content)); + } + + /** + * @param i_content + * @param i_string + * @param i_createElement + * @param i_createElement2 + */ + protected Element addList(Element parent, String listName, + List<Element> content) { + Element list = createList(listName, content); + parent.appendChild(list); + return list; + } + + protected Element createList(String listName, Element... content) { + return createList(listName, Arrays.asList(content)); + } + + /** + * @param listName + * @param content + * @return + */ + protected Element createList(String listName, List<Element> content) { + Element list = createElement(listName, "size", + String.valueOf(content.size())); + for (Element e : content) { + list.appendChild(e); + } + return list; + } + + /** + * @param i_content + * @param i_repository + * @return + */ + protected Element addElement(Node parent, String name, + String... propName_Values) { + + Element child = createElement(name, propName_Values); + parent.appendChild(child); + return child; + } + + protected Element createElement(String name, String... propName_Values) { + if (propName_Values.length % 2 != 0) { + throw new IllegalArgumentException("expected key values pairs"); + } + Element element = currentDoc.createElement(name); + for (int i = 0; i < propName_Values.length; i += 2) { + if (propName_Values[i + 1] != null) + element.setAttribute(propName_Values[i], propName_Values[i + 1]); + } + return element; + } + + + + /** + * @return the updateSiteFolder + */ + public String getUpdateSiteFolder() { + return updateSiteFolder; + } + + /** + * @param i_updateSiteFolder the updateSiteFolder to set + */ + public void setUpdateSiteFolder(String i_updateSiteFolder) { + updateSiteFolder = i_updateSiteFolder; + } + + /** + * @return the repositoryName + */ + public String getRepositoryName() { + return repositoryName; + } + + /** + * @param i_repositoryName the repositoryName to set + */ + public void setRepositoryName(String i_repositoryName) { + repositoryName = i_repositoryName; + } + + /** + * @return the repositoryURI + */ + public String getRepositoryURI() { + return repositoryURI; + } + + /** + * @param i_repositoryURI the repositoryURI to set + */ + public void setRepositoryURI(String i_repositoryURI) { + repositoryURI = i_repositoryURI; + } + + /** + * @return the compressed + */ + public boolean isCompressed() { + return compressed; + } + + /** + * @param i_compressed the compressed to set + */ + public void setCompressed(boolean i_compressed) { + compressed = i_compressed; + } + + /** + * Basically for testing. + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + StandalonePublisher publisher = new StandalonePublisher(); + publisher.updateSiteFolder = "build/plugins/org.lwjgl.updatesite"; + publisher.repositoryName = "org.lwjgl"; + publisher.repositoryURI = "http://lwjgl.org/update"; + publisher.execute(); + } + + /** + * {@inheritDoc} + * @see org.apache.tools.ant.Task#execute() + */ + @Override + public void execute() throws BuildException { + if (updateSiteFolder==null) { + throw new BuildException("attribute updateSiteFolder missing"); + } + if (repositoryName==null) { + throw new BuildException("attribute repositoryName missing"); + } + if (repositoryURI==null) { + throw new BuildException("attribute repositoryURI missing"); + } + try { + doExecute(); + } catch (Exception ex) { + throw new BuildException(ex); + } + + } + + + +} Property changes on: trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java ___________________________________________________________________ Added: svn:keywords + Date Revision Author HeadURL Id This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jpi...@us...> - 2011-12-15 19:01:05
|
Revision: 3712 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3712&view=rev Author: jpilgrim Date: 2011-12-15 19:00:59 +0000 (Thu, 15 Dec 2011) Log Message: ----------- Fixed problems in update site build. Update site is now build including Eclipse p2 metadata (content.jar and artifact.jar). These files are required by some tools, such as Tycho (a maven plugin making p2 update sites available as maven repositories, see http://eclipse.org/tycho). Modified Paths: -------------- trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME 2011-12-15 17:40:06 UTC (rev 3711) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/READ.ME 2011-12-15 19:00:59 UTC (rev 3712) @@ -1,5 +1,6 @@ How to build the Eclipse update site ------------------------------------ +Author: Jens von Pilgrim <dev...@je...> Building the Eclipse update site is fully integrated into the main LWJGL build script. Here is how to build the update site: @@ -92,4 +93,6 @@ a plugin does not remove the plugins from the Eclipse installation. When the very same version is re-installed, instead of loading new files from the update site these pre-installed versions are reused! Since the date and time - is added to the plugin version number, this should cause no problems. \ No newline at end of file + is added to the plugin version number, this should cause no problems. +- default values for keystore, alias and passphrase are the same as in + lwjgl-applet Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar =================================================================== (Binary files differ) Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml 2011-12-15 17:40:06 UTC (rev 3711) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml 2011-12-15 19:00:59 UTC (rev 3712) @@ -14,9 +14,9 @@ <dirname property="eclipse.antscript.basedir" file="${ant.file.eclipse.antscript}" /> - <property name="keystore" value="teststore" /> - <property name="alias" value="tester" /> - <property name="password" value="tester" /> + <property name="keystore" value="applet/lwjglkeystore" /> + <property name="alias" value="lwjgl" /> + <property name="password" value="123456" /> <property name="eclipse.updatesite" value="http://www.lwjgl.org/update/" /> <property name="eclipse.bundle.vendor" value="lwjgl.org" /> @@ -505,6 +505,7 @@ <echo>This plugin is to be called from main LWJGL build.xml file.</echo> <echo>It creates the update site, the result will be found in</echo> <echo>${eclipse.build.plugins}/org.lwjgl.updatesite</echo> + <echo>For more information, read READ.ME</echo> </target> </project> \ No newline at end of file Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java 2011-12-15 17:40:06 UTC (rev 3711) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java 2011-12-15 19:00:59 UTC (rev 3712) @@ -19,6 +19,7 @@ import java.io.IOException; import java.io.StringWriter; import java.math.BigInteger; +import java.nio.ByteBuffer; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; @@ -308,7 +309,6 @@ Document doc = readXMLinJar(docBuilder, jis, jarEntry); info.doc = doc; - jis.closeEntry(); break; } } @@ -346,7 +346,6 @@ Document doc = readXMLinJar(docBuilder, jis, jarEntry); info.doc = doc; - jis.closeEntry(); break; } @@ -378,17 +377,13 @@ protected Document readXMLinJar(DocumentBuilder docBuilder, JarInputStream jis, JarEntry jarEntry) throws IOException, SAXException { - byte[] buffer = new byte[(int) jarEntry.getSize()]; - int count; - int pos = 0; - byte data[] = new byte[BUFFERSIZE]; - while ((count = jis.read(data, 0, BUFFERSIZE)) != -1) { - System.arraycopy(data, 0, buffer, pos, count); - pos += count; + try { + Document doc = docBuilder.parse(jis); + return doc; + } catch (IOException ex) { + System.err.println("Error reading jar entry " + jarEntry + ": ex"); + throw ex; } - ByteArrayInputStream bis = new ByteArrayInputStream(buffer); - Document doc = docBuilder.parse(bis); - return doc; } protected static void dump(Node doc) { @@ -1105,8 +1100,6 @@ } return element; } - - /** * @return the updateSiteFolder @@ -1176,20 +1169,20 @@ publisher.repositoryURI = "http://lwjgl.org/update"; publisher.execute(); } - + /** * {@inheritDoc} * @see org.apache.tools.ant.Task#execute() */ @Override public void execute() throws BuildException { - if (updateSiteFolder==null) { + if (updateSiteFolder == null) { throw new BuildException("attribute updateSiteFolder missing"); } - if (repositoryName==null) { + if (repositoryName == null) { throw new BuildException("attribute repositoryName missing"); } - if (repositoryURI==null) { + if (repositoryURI == null) { throw new BuildException("attribute repositoryURI missing"); } try { @@ -1197,9 +1190,7 @@ } catch (Exception ex) { throw new BuildException(ex); } - + } - - } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jpi...@us...> - 2011-12-20 11:05:00
|
Revision: 3713 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3713&view=rev Author: jpilgrim Date: 2011-12-20 11:04:49 +0000 (Tue, 20 Dec 2011) Log Message: ----------- StandalonePublisher directly creates jars, no need for additional "jarring". - added main method to StandalonePublisher creating artifact.xml/jar and content.xml/jar from given (old) Eclise update site. - when compressed is set to true, artifact.jar and content.jar are created directly. Removed jar task in build script, as these are no longer necessary Modified Paths: -------------- trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar =================================================================== (Binary files differ) Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml 2011-12-15 19:00:59 UTC (rev 3712) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/build-updatesite.xml 2011-12-20 11:04:49 UTC (rev 3713) @@ -482,18 +482,7 @@ updatesitefolder="${eclipse.build.plugins}/org.lwjgl.updatesite" repositoryname="lwjgl.org" repositoryuri="${eclipse.updatesite}" /> - <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/content.jar"> - <fileset file="${eclipse.build.plugins}/org.lwjgl.updatesite/content.xml" /> - </jar> - <jar destfile="${eclipse.build.plugins}/org.lwjgl.updatesite/artifacts.jar"> - <fileset file="${eclipse.build.plugins}/org.lwjgl.updatesite/artifacts.xml" /> - </jar> - <delete> - <fileset file="${eclipse.build.plugins}/org.lwjgl.updatesite/content.xml" /> - <fileset file="${eclipse.build.plugins}/org.lwjgl.updatesite/artifacts.xml" /> - </delete> - - + <echo>Created Eclipse update site: ${eclipse.build.plugins}/org.lwjgl.updatesite</echo> </target> Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java 2011-12-15 19:00:59 UTC (rev 3712) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java 2011-12-20 11:04:49 UTC (rev 3713) @@ -11,15 +11,14 @@ package org.lwjgl.ant; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.StringWriter; import java.math.BigInteger; -import java.nio.ByteBuffer; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; @@ -28,6 +27,7 @@ import java.util.Properties; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; +import java.util.jar.JarOutputStream; import java.util.jar.Manifest; import javax.xml.parsers.DocumentBuilder; @@ -626,9 +626,48 @@ * @throws TransformerException */ protected void writeDocument(Document content, String targetFile) + throws Exception { + + if (compressed) { + String jarFileNameString = targetFile; + int pos = jarFileNameString.lastIndexOf('.'); + if (pos > 0) { + jarFileNameString = jarFileNameString.substring(0, pos) + ".jar"; + } else { + jarFileNameString += ".jar"; + } + + JarOutputStream target = new JarOutputStream(new FileOutputStream( + jarFileNameString)); + + pos = targetFile.lastIndexOf(File.separatorChar); + if (pos>0) { + targetFile = targetFile.substring(pos+1); + } + + JarEntry entry = new JarEntry(targetFile); + target.putNextEntry(entry); + + StreamResult sr = new StreamResult(target); + doWriteDocument(content, sr); + target.closeEntry(); + target.close(); + } else { + StreamResult sr = new StreamResult(new File(targetFile)); + doWriteDocument(content, sr); + } + } + + /** + * @param content + * @param sr + * @throws TransformerFactoryConfigurationError + * @throws TransformerConfigurationException + * @throws TransformerException + */ + private void doWriteDocument(Document content, StreamResult sr) throws TransformerFactoryConfigurationError, TransformerConfigurationException, TransformerException { - StreamResult sr = new StreamResult(new File(targetFile)); TransformerFactory tf = TransformerFactory.newInstance(); Transformer t = tf.newTransformer(); Properties oprops = new Properties(); @@ -1164,12 +1203,83 @@ */ public static void main(String[] args) throws Exception { StandalonePublisher publisher = new StandalonePublisher(); - publisher.updateSiteFolder = "build/plugins/org.lwjgl.updatesite"; - publisher.repositoryName = "org.lwjgl"; - publisher.repositoryURI = "http://lwjgl.org/update"; - publisher.execute(); + + if (!publisher.parseArgs(args)) { + help(); + } else { + // publisher.updateSiteFolder = "build/plugins/org.lwjgl.updatesite"; + // publisher.repositoryName = "org.lwjgl"; + // publisher.repositoryURI = "http://lwjgl.org/update"; + try { + publisher.execute(); + System.out.println("Successfull created p2 metadata in " + publisher.updateSiteFolder); + } catch (Exception ex) { + System.err.println("Error creating p2 metadata: "); + System.err.println(ex); + ex.printStackTrace(); + } + } } + /** + * + */ + static void help() { + System.out + .println("StandalonePublisher, (C) Jens von Pilgrim 2011 (EPL and BSD license)"); + System.out + .println("Ant task generating p2 metadata for old style Eclipse update site."); + System.out + .println("Limited support: only bundles and featues are supported, functionality only"); + System.out.println(" tested for LWJGL update site"); + System.out + .println("If run as command line tool, specify update site folder, repository name"); + System.out.println(" and URI as follows:"); + System.out + .println(" >java org.ljgl.ant.StandalonePublisher FOLDER NAME URI"); + System.out + .println("Example (supposed tool is called from updatesite folder):"); + System.out + .println(" >java org.lwjgl.ant.StandalonePublisher . org.lwjgl http://lwjgl.org/update"); + System.out + .println("If content.xml and artfact.xml should be compressed, add 'compress'"); + } + + /** + * @param i_args + * @return + */ + boolean parseArgs(String[] i_args) { + if (i_args == null || i_args.length < 3) { + return false; + } + updateSiteFolder = i_args[0]; + repositoryName = i_args[1]; + repositoryURI = i_args[2]; + + if (updateSiteFolder.isEmpty() || repositoryName.isEmpty() + || repositoryURI.isEmpty()) { + return false; + } + + File f = new File(updateSiteFolder); + if (!f.exists()) { + System.err.println("Update site folder does not exist."); + return false; + } + if (!(repositoryURI.startsWith("http") || repositoryURI + .startsWith("file"))) { + System.out + .println("Warning: Repository URI should start with protocol, e.g., http: or file:"); + } + + if (i_args.length == 4 && "compress".equalsIgnoreCase(i_args[3])) { + compressed = true; + } + + return true; + } + /** * {@inheritDoc} * @see org.apache.tools.ant.Task#execute() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jpi...@us...> - 2011-12-21 14:34:50
|
Revision: 3716 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3716&view=rev Author: jpilgrim Date: 2011-12-21 14:34:39 +0000 (Wed, 21 Dec 2011) Log Message: ----------- Fixed a problem with categories. Categories are now extracted from site.xml. A default category is created if no site.xml is found or if some features are not mapped to any other category. Modified Paths: -------------- trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/anttasks.jar =================================================================== (Binary files differ) Modified: trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java =================================================================== --- trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java 2011-12-20 19:06:52 UTC (rev 3715) +++ trunk/LWJGL/eclipse-update/org.lwjgl.build/src/java/org/lwjgl/ant/StandalonePublisher.java 2011-12-21 14:34:39 UTC (rev 3716) @@ -17,13 +17,19 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.StringWriter; import java.math.BigInteger; import java.security.MessageDigest; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; +import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Properties; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; @@ -94,26 +100,11 @@ protected final XPath xpath = XPathFactory.newInstance().newXPath(); - public class FeatureInfo { - - public String getClassifier() { - return "org.eclipse.update.feature"; - } - - public String getContentType() { - return "application/zip"; - } - - public String getRootElementName() { - return "feature"; - } - + public abstract class XMLBasedInfo { public Document doc; - public int size; + abstract public String getRootElementName(); - public File jarFile; - public String xpath(String path) { if (path.startsWith("/")) return StandalonePublisher.this.xpath(doc, path); @@ -139,7 +130,77 @@ return Collections.emptyList(); } } + } + public class SiteInfo extends XMLBasedInfo { + /** + * {@inheritDoc} + * @see org.lwjgl.ant.StandalonePublisher.XMLBasedInfo#getRootElementName() + */ + @Override + public String getRootElementName() { + return "site"; + } + } + + public static class CategoryInfo { + String id; + + String name; + + String label; + + String description = ""; + + List<FeatureInfo> required = new ArrayList<StandalonePublisher.FeatureInfo>( + 5); + + public String getVersion() { + String version = "0.0.0"; + for (FeatureInfo featureInfo : required) { + String v = featureInfo.getVersion(); + if (version.compareTo(v) < 0) { + version = v; // quick hack, not really correct + } + } + return version; + + } + + String getID() { + if (id == null) { + String timeStamp = new SimpleDateFormat("yyyyMMddHHmm") + .format(new Date()); + id = timeStamp + "." + name; + } + return id; + } + + public String getLabel() { + if (label==null || label.isEmpty()) return name; + return label; + } + + } + + public class FeatureInfo extends XMLBasedInfo { + + public String getClassifier() { + return "org.eclipse.update.feature"; + } + + public String getContentType() { + return "application/zip"; + } + + public String getRootElementName() { + return "feature"; + } + + public int size; + + public File jarFile; + /** * @return */ @@ -366,7 +427,89 @@ } + protected Collection<CategoryInfo> readSite( + DocumentBuilder documentBuilder, FeatureInfo[] featureInfos) + throws Exception { + + File f = new File(updateSiteFolder + File.separator + "site.xml"); + if (!f.exists()) { + f = new File(updateSiteFolder + File.separator + "category.xml"); + } + + Map<String, FeatureInfo> featuresById = new HashMap<String, StandalonePublisher.FeatureInfo>(); + for (FeatureInfo featureInfo : featureInfos) { + featuresById.put(featureInfo.getID(), featureInfo); + } + + Map<String, CategoryInfo> categoryInfos = new HashMap<String, CategoryInfo>(); + Map<String, String> featureToGroup = new HashMap<String, String>(); + + if (f.exists()) { + SiteInfo site = new SiteInfo(); + site.doc = readXML(documentBuilder, new FileInputStream(f)); + + List<Node> categories = site.xpathNods("//site//category-def"); + for (Node category : categories) { + CategoryInfo categoryInfo = new CategoryInfo(); + categoryInfo.name = xpath(category, "@name"); + categoryInfo.label = xpath(category, "@label"); + categoryInfo.description = xpath(category, "description/text()"); + categoryInfos.put(categoryInfo.name, categoryInfo); + } + + List<Node> features = site.xpathNods("//site//feature"); + for (Node feature : features) { + featureToGroup.put(xpath(feature, "@id"), + xpath(feature, "category/@name")); + } + + } + + // sort features to their category: + List<String> sortedFeatures = new ArrayList<String>(); + for (String id : featuresById.keySet()) { + String categoryName = featureToGroup.get(id); + if (categoryName != null) { + CategoryInfo categoryInfo = categoryInfos.get(categoryName); + categoryInfo.required.add(featuresById.get(id)); + sortedFeatures.add(id); + } + } + for (String id : sortedFeatures) { + featuresById.remove(id); + } + + if (!featuresById.isEmpty()) { + CategoryInfo categoryInfo = categoryInfos.get(this.repositoryName); + if (categoryInfo == null) { + categoryInfo = new CategoryInfo(); + categoryInfo.name = this.repositoryName; + categoryInfo.label = this.repositoryName; + categoryInfo.description = ""; + categoryInfos.put(categoryInfo.name, categoryInfo); + } + + for (FeatureInfo featureInfo : featuresById.values()) { + categoryInfo.required.add(featureInfo); + } + + } + + return categoryInfos.values(); + } + /** + * @param i_documentBuilder + * @param i_fileInputStream + * @return + */ + protected Document readXML(DocumentBuilder docBuilder, InputStream is) + throws Exception { + Document doc = docBuilder.parse(is); + return doc; + } + + /** * @param docBuilder * @param jis * @param jarEntry @@ -445,7 +588,12 @@ bundleInfos[i] = readBundle(locations[i]); } - writeContent(featureInfos, bundleInfos); + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + Collection<CategoryInfo> categoryInfos = readSite(docBuilder, + featureInfos); + + writeContent(featureInfos, bundleInfos, categoryInfos); writeArtifacts(featureInfos, bundleInfos); } @@ -453,10 +601,12 @@ /** * @param i_featureInfos * @param i_bundleInfos + * @param i_categoryInfos * @throws Exception */ protected void writeContent(FeatureInfo[] i_featureInfos, - BundleInfo[] i_bundleInfos) throws Exception { + BundleInfo[] i_bundleInfos, Collection<CategoryInfo> i_categoryInfos) + throws Exception { DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() .newDocumentBuilder(); @@ -499,6 +649,11 @@ for (BundleInfo bundleInfo : i_bundleInfos) { units.add(createUnitForBundle(bundleInfo)); } + + + for (CategoryInfo categoryInfo : i_categoryInfos) { + units.add(createUnitForCategory(categoryInfo)); + } addList(repository, "units", units); //dump(content); @@ -632,17 +787,18 @@ String jarFileNameString = targetFile; int pos = jarFileNameString.lastIndexOf('.'); if (pos > 0) { - jarFileNameString = jarFileNameString.substring(0, pos) + ".jar"; + jarFileNameString = jarFileNameString.substring(0, pos) + + ".jar"; } else { jarFileNameString += ".jar"; } - + JarOutputStream target = new JarOutputStream(new FileOutputStream( jarFileNameString)); - + pos = targetFile.lastIndexOf(File.separatorChar); - if (pos>0) { - targetFile = targetFile.substring(pos+1); + if (pos > 0) { + targetFile = targetFile.substring(pos + 1); } JarEntry entry = new JarEntry(targetFile); @@ -798,6 +954,78 @@ } /** + * @param i_categoryInfo + * @return + */ + private Element createUnitForCategory(CategoryInfo info) { + String version = info.getVersion(); + String id = info.getID(); + /* + <unit id="201112211149.GEF3D" version="1.0.0.08-77cLX4vE7UEMMMUUMMMlL"> + */ + Element unit = createElement("unit", // + "id", id, // + "version", version); + /* + <properties size="3"> + <property name="org.eclipse.equinox.p2.name" value="GEF3D"/> + <property name="org.eclipse.equinox.p2.description" value="GEF3D"/> + <property name="org.eclipse.equinox.p2.type.category" value="true"/> + </properties> + */ + addList(unit, + "properties", + createElement("property", "name", + "org.eclipse.equinox.p2.name", "value", + info.getLabel()), + createElement("property", "name", + "org.eclipse.equinox.p2.description", "value", + info.description), + createElement("property", "name", + "org.eclipse.equinox.p2.type.category", "value", + "true")); + /* + <provides size="1"> + <provided namespace="org.eclipse.equinox.p2.iu" name="201112211149.GEF3D" version="1.0.0.08-77cLX4vE7UEMMMUUMMMlL"/> + </provides> + */ + addList(unit, "provides", + createElement("provided", + "namespace", "org.eclipse.equinox.p2.iu", + "name", id, + "version", version)); + + /* + <requires size="4"> + <required namespace="org.eclipse.equinox.p2.iu" name="org.eclipse.gef3d.sdk.feature.group" range="[0.8.1.201112211149,0.8.1.201112211149]"/> + <required namespace="org.eclipse.equinox.p2.iu" name="org.eclipse.gef3d.feature.group" range="[0.8.1.201112211149,0.8.1.201112211149]"/> + ... + </requires> + */ + List<Element> requires = new ArrayList<Element>(); + for (FeatureInfo featureInfo: info.required) { + String featureVersion = featureInfo.xpath("@version"); + String featureName = featureInfo.xpath("@id") + ".feature.group"; + Element required = createElement("required", + "namespace", "org.eclipse.equinox.p2.iu", // + "name", featureName, // + "range", "[" + featureVersion +"," + featureVersion + "]" + ); + requires.add(required); + } + addList(unit, "requires", requires); + + /* + <touchpoint id="null" version="0.0.0"/> + </unit> + */ + addElement(unit, "touchpoint", "id", "null", "version", "0.0.0"); + + return unit; + + } + + /** * @param i_bundleInfo * @return * @throws Exception @@ -1212,7 +1440,8 @@ // publisher.repositoryURI = "http://lwjgl.org/update"; try { publisher.execute(); - System.out.println("Successfull created p2 metadata in " + publisher.updateSiteFolder); + System.out.println("Successfull created p2 metadata in " + + publisher.updateSiteFolder); } catch (Exception ex) { System.err.println("Error creating p2 metadata: "); System.err.println(ex); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |