- added feature to create war archives
- kickstarter will start all bundles on startup
- performance improvements (caching added)
- legal links, privacy statement, terms of use, ... added
- minor bugfixes
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF
index 3220b89..bea95fd 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/META-INF/MANIFEST.MF
@@ -7,7 +7,8 @@
org.eclipse.equinox.http.registry,
org.apache.ant;bundle-version="1.7.0"
Import-Package: javax.servlet;version="2.4.0",
- javax.servlet.http;version="2.4.0"
+ javax.servlet.http;version="2.4.0",
+ org.apache.log4j
Export-Package: org.eclipse.epp.wizard.installerbuilder,
org.eclipse.epp.wizard.jnlpbuilder,
org.eclipse.epp.wizard.util
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java
index 019d926..e52482c 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Activator.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.installerbuilder;
import java.io.FileInputStream;
@@ -5,62 +15,66 @@
import java.io.IOException;
import java.util.Properties;
+import org.apache.log4j.Logger;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
- public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.installerbuilder.configuration";
- public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "installerbuilder.properties";
- private static BundleContext context;
+ static Logger logger = Logger.getLogger( Activator.class );
+ public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.installerbuilder.configuration";
+ public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "installerbuilder.properties";
+ private static BundleContext context;
- public static BundleContext getContext() {
- return context;
- }
+ public static BundleContext getContext() {
+ return context;
+ }
+ private Configuration configuration;
+ private InstallerCache installerCache;
- private Configuration configuration;
- private static Activator plugin;
+ public InstallerCache getInstallerCache() {
+ return installerCache;
+ }
+ private static Activator plugin;
- public Activator() {
- }
+ public Activator() {
+ }
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
- public void start(BundleContext context) throws Exception {
- Activator.context = context;
- plugin = this;
- }
+ public void start( BundleContext context ) throws Exception {
+ Activator.context = context;
+ plugin = this;
+ getConfiguration();
+ installerCache = new InstallerCache( configuration.getInstallerCacheSize() );
+ }
- public void stop(BundleContext context) throws Exception {
- Activator.context = null;
- }
+ public void stop( BundleContext context ) throws Exception {
+ Activator.context = null;
+ }
- public synchronized Configuration getConfiguration() {
- if (configuration == null) {
- String configurationFile = System.getProperty(
- PROPERTY_CONFIGURATION,
- PROPERTY_CONFIGURATION_DEFAULT_VALUE);
- System.out.println("Loading configuration from file: "
- + configurationFile);
- Properties properties = new Properties();
- try {
- properties.load(new FileInputStream(configurationFile));
- configuration = new Configuration(properties);
- } catch (FileNotFoundException exc) {
- // TODO Auto-generated catch block
- exc.printStackTrace();
- } catch (IOException exc) {
- // TODO Auto-generated catch block
- exc.printStackTrace();
- }
- }
- return configuration;
- }
+ public synchronized Configuration getConfiguration() {
+ if( configuration == null ) {
+ String configurationFile = System.getProperty( PROPERTY_CONFIGURATION,
+ PROPERTY_CONFIGURATION_DEFAULT_VALUE );
+ logger.info( "Loading configuration from file: " + configurationFile );
+ Properties properties = new Properties();
+ try {
+ properties.load( new FileInputStream( configurationFile ) );
+ configuration = new Configuration( properties );
+ } catch( FileNotFoundException exc ) {
+ logger.error( "Could not load configuration", exc );
+ } catch( IOException exc ) {
+ logger.error( "Could not load configuration", exc );
+ }
+ }
+ return configuration;
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java
index 4d7a8e3..c19a874 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/BuildInstaller.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.installerbuilder;
import java.io.ByteArrayInputStream;
@@ -41,35 +51,34 @@
private static final String ENCODING = "UTF-8";
private static final int BUFFER = 512;
private static final long serialVersionUID = 1L;
-
+
@Override
protected void doGet( final HttpServletRequest req,
final HttpServletResponse resp )
throws ServletException, IOException
{
-
String os = req.getParameter( "os" );
String iuParam = req.getParameter( "ius" );
String filename = req.getParameter( "filename" );
-
execute( os, iuParam, filename );
-
}
public static void execute( final String os,
final String iuParam,
- final String filename )
- throws IOException
+ final String filename ) throws IOException
{
- File downloadDir = Activator.getDefault().getConfiguration().getDownloadsDirectory();
- IPath outDirPath = new Path( new File(downloadDir, OUTPUT_PATH).getAbsolutePath() );
- IPath rawInstallerDirPath = new Path( new File(downloadDir, INSTALLER_TEMPLATE_PATH).getAbsolutePath() );
+ File downloadDir = Activator.getDefault()
+ .getConfiguration()
+ .getDownloadsDirectory();
+ IPath outDirPath = new Path( new File( downloadDir, OUTPUT_PATH ).getAbsolutePath() );
+ IPath rawInstallerDirPath = new Path( new File( downloadDir,
+ INSTALLER_TEMPLATE_PATH ).getAbsolutePath() );
String[] ius = getIUs( iuParam );
File template = findRawInstallerFile( rawInstallerDirPath, os );
IPath outFilePath = outDirPath.append( filename );
ceateCustomInstaller( os, template, ius, outFilePath.toFile() );
}
-
+
public static String getFileName( final String os, final String[] ids ) {
String hash = ids.toString();
try {
@@ -81,12 +90,11 @@
return "eclipse-" + os + "-" + hash + "." + OsUtil.getArchiveExtension( os );
}
- //////////////////
+ // ////////////////
// helping methods
- //////////////////
-
+ // ////////////////
private static String[] getIUs( final String param ) {
- List<String> result = new ArrayList<String>();
+ List<String> result = new ArrayList<String>();
StringTokenizer tknizr = new StringTokenizer( param, ",", false );
while( tknizr.hasMoreTokens() ) {
String token = tknizr.nextToken();
@@ -99,7 +107,7 @@
final File inFile,
final String ius[],
final File outFile )
- throws IOException //FIXME
+ throws IOException // FIXME
{
InputStream in = null;
OutputStream out = null;
@@ -121,13 +129,11 @@
entry = zis.getNextEntry();
}
zos.putNextEntry( new ZipEntry( "eclipse/installer.properties" ) );
- ByteArrayInputStream confStream
- = new ByteArrayInputStream( bytes );
+ ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
copy( confStream, zos );
zos.closeEntry();
-
} catch( IOException e ) {
- //TODO
+ // TODO
e.printStackTrace();
} finally {
tryClose( zis );
@@ -152,19 +158,17 @@
entry = tis.getNextEntry();
}
String entryName = "eclipse/installer.properties";
- if (os == "macosx") {
+ if( os == "macosx" ) {
entryName = "eclipse/p2installer.app/Contents/MacOS/installer.properties";
}
TarEntry tarEntry = new TarEntry( entryName );
- ByteArrayInputStream confStream
- = new ByteArrayInputStream( bytes );
+ ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
tarEntry.setSize( bytes.length );
tos.putNextEntry( tarEntry );
copy( confStream, tos );
tos.closeEntry();
-
} catch( IOException e ) {
- //TODO
+ // TODO
e.printStackTrace();
} finally {
tryClose( tis );
@@ -182,35 +186,51 @@
}
private static String getInstallerConfiguration( final String ius[] )
- throws IOException //FIXME
+ throws IOException // FIXME
{
String result = "";
- File downloadDir = Activator.getDefault().getConfiguration().getDownloadsDirectory();
- IPath templateDirPath = new Path( new File(downloadDir, INSTALLER_TEMPLATE_PATH).getAbsolutePath() );
+ File downloadDir = Activator.getDefault()
+ .getConfiguration()
+ .getDownloadsDirectory();
+ IPath templateDirPath = new Path( new File( downloadDir,
+ INSTALLER_TEMPLATE_PATH ).getAbsolutePath() );
File inFile = templateDirPath.append( "installer.properties" ).toFile();
InputStream in = null;
try {
- in = new FileInputStream( inFile );
- ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
- copy( in, bufferStream );
- result = customize( bufferStream.toString( ENCODING ), ius );
+ in = new FileInputStream( inFile );
+ ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+ copy( in, bufferStream );
+ result = customize( bufferStream.toString( ENCODING ), ius );
} catch( IOException ioe ) {
- ioe.printStackTrace();
+ ioe.printStackTrace();
} finally {
- tryClose( in );
+ tryClose( in );
}
return result;
}
-
+
private static String customize( final String input, final String[] ius ) {
String result = input;
- result = result.replaceAll( "\\$\\{roots\\}", StringUtil.toCommaList( ius, false ) );
- result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); //FIXME: (jb) get this from initial selection on eclispe.org
+ result = result.replaceAll( "\\$\\{roots\\}",
+ StringUtil.toCommaList( ius, false ) );
+ result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); // FIXME
+ // :
+ // (
+ // jb
+ // )
+ // get
+ // this
+ // from
+ // initial
+ // selection
+ // on
+ // eclispe
+ // .
+ // org
return result;
}
-
- private static File findRawInstallerFile( final IPath path,
- final String os )
+
+ private static File findRawInstallerFile( final IPath path, final String os )
{
File result = null;
File dir = path.toFile();
@@ -222,14 +242,14 @@
}
return result;
}
-
+
private static void tryClose( final InputStream stream ) {
if( stream != null ) {
try {
stream.close();
} catch( IOException e ) {
e.printStackTrace();
- //TODO Activator.log( e );
+ // TODO Activator.log( e );
}
}
}
@@ -240,13 +260,12 @@
stream.close();
} catch( IOException e ) {
e.printStackTrace();
- //TODO Activator.log( e );
+ // TODO Activator.log( e );
}
}
}
- private static void copy( final InputStream in,
- final OutputStream out )
+ private static void copy( final InputStream in, final OutputStream out )
throws IOException
{
byte[] data = new byte[ BUFFER ];
@@ -264,5 +283,4 @@
copy( is, baos );
return new ByteArrayInputStream( baos.toByteArray() );
}
-
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java
index 47fccd9..51031c1 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Configuration.java
@@ -1,46 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.installerbuilder;
import java.io.File;
import java.util.Properties;
+import org.apache.log4j.Logger;
+
public class Configuration {
- final static String DOWNLOADS = "downloads";
- final static String TMPDIR = "tmpdir";
- protected File downloadsDirectory;
- protected File tempDirectory;
- public File getTempDirectory() {
- return tempDirectory;
- }
+ static Logger logger = Logger.getLogger( Configuration.class );
+ final static String DOWNLOADS = "downloads";
+ final static String TMPDIR = "tmpdir";
+ final static String INSTALLER_CACHE_SIZE = "installer.cache.size";
+ final static String INSTALLER_CACHE_SIZE_DEFAULT = "100";
+ protected int installerCacheSize;
- private Properties properties;
+ public int getInstallerCacheSize() {
+ return installerCacheSize;
+ }
+ protected File downloadsDirectory;
+ protected File tempDirectory;
- public Configuration(Properties properties) {
- this.properties = properties;
- downloadsDirectory = createDirectoryObject(DOWNLOADS);
- tempDirectory = createDirectoryObject(TMPDIR);
- }
+ public File getTempDirectory() {
+ return tempDirectory;
+ }
+ private Properties properties;
- private File createDirectoryObject(String key) {
- String value = properties.getProperty(key);
- if (value == null) {
- throw new RuntimeException("Configuration value for '" + key
- + "' not defined in configuration properties");
- }
- File file = new File(value);
- if (!file.canRead()) {
- throw new RuntimeException("Cannot read from file '"
- + file.getAbsolutePath() + "'");
- }
- if (!file.isDirectory()) {
- throw new RuntimeException("'" + file.getAbsolutePath()
- + "' is not a directory");
- }
- return file;
- }
+ public Configuration( Properties properties ) {
+ this.properties = properties;
+ downloadsDirectory = createDirectoryObject( DOWNLOADS );
+ tempDirectory = createDirectoryObject( TMPDIR );
+ installerCacheSize = Integer.parseInt( properties.getProperty( INSTALLER_CACHE_SIZE,
+ INSTALLER_CACHE_SIZE_DEFAULT ) );
+ if( logger.isInfoEnabled() ) {
+ StringBuilder sb = new StringBuilder();
+ sb.append( "EPP Wizard Installer builder configuration:" );
+ sb.append( "\n\t downloadsDirectory: "
+ + downloadsDirectory.getAbsolutePath() );
+ sb.append( "\n\t tempDirectory: " + tempDirectory.getAbsolutePath() );
+ sb.append( "\n\t installerCacheSize: " + installerCacheSize );
+ logger.info( sb );
+ }
+ }
- public File getDownloadsDirectory() {
- return downloadsDirectory;
- }
+ private File createDirectoryObject( String key ) {
+ String value = properties.getProperty( key );
+ if( value == null ) {
+ throw new RuntimeException( "Configuration value for '"
+ + key
+ + "' not defined in configuration properties" );
+ }
+ File file = new File( value );
+ if( !file.canRead() ) {
+ throw new RuntimeException( "Cannot read from file '"
+ + file.getAbsolutePath()
+ + "'" );
+ }
+ if( !file.isDirectory() ) {
+ throw new RuntimeException( "'"
+ + file.getAbsolutePath()
+ + "' is not a directory" );
+ }
+ return file;
+ }
+ public File getDownloadsDirectory() {
+ return downloadsDirectory;
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java
index b1598ac..8a15d49 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Download.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.installerbuilder;
import java.io.BufferedOutputStream;
@@ -27,185 +37,197 @@
*/
public class Download extends HttpServlet {
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doGet(req, resp);
- }
+ @Override
+ protected void doPost( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ doGet( req, resp );
+ }
+ private static final String ENCODING = "UTF-8";
+ private static final long serialVersionUID = 1L;
+ private static final int BUFFER = 1024;
- private static final String ENCODING = "UTF-8";
- private static final long serialVersionUID = 1L;
- private static final int BUFFER = 1024;
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void doGet( final HttpServletRequest req,
+ final HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ resp.setHeader( "Content-Disposition", "attachment; filename="
+ + "out.txt"
+ + ";" );
+ PrintStream printStream = new PrintStream( new BufferedOutputStream( resp.getOutputStream() ) );
+ printStream.print( "foo.bar" );
+ printStream.close();
+ if( true )
+ return;
+ Map<Object, Object> map = req.getParameterMap();
+ String requestedPath = req.getPathInfo();
+ String reqURL = req.getRequestURL().toString();
+ String codebase = reqURL.substring( 0, reqURL.length()
+ - requestedPath.length() );
+ IPath path = new Path( "" );
+ if( requestedPath != null ) {
+ path = new Path( requestedPath );
+ }
+ if( !trySendGeneratedFile( resp, path, codebase ) ) {
+ if( !isTemplateFile( resp, path, codebase ) ) {
+ send404( resp );
+ }
+ }
+ resp.flushBuffer();
+ }
- @SuppressWarnings("unchecked")
- @Override
- protected void doGet(final HttpServletRequest req,
- final HttpServletResponse resp) throws ServletException,
- IOException {
- resp.setHeader("Content-Disposition", "attachment; filename="
- + "out.txt" + ";");
- PrintStream printStream = new PrintStream(new BufferedOutputStream(resp
- .getOutputStream()));
- printStream.print("foo.bar");
- printStream.close();
- if (true)
- return;
+ // ////////////////
+ // helping methods
+ // ////////////////
+ private void send404( final HttpServletResponse resp ) {
+ try {
+ resp.sendError( 404 );
+ } catch( IOException exc ) {
+ // TODO Auto-generated catch block
+ exc.printStackTrace();
+ }
+ resp.addHeader( "Status", "404 Not Found" );
+ }
- Map<Object, Object> map = req.getParameterMap();
- String requestedPath = req.getPathInfo();
- String reqURL = req.getRequestURL().toString();
- String codebase = reqURL.substring(0, reqURL.length()
- - requestedPath.length());
- IPath path = new Path("");
- if (requestedPath != null) {
- path = new Path(requestedPath);
- }
- if (!trySendGeneratedFile(resp, path, codebase)) {
- if (!isTemplateFile(resp, path, codebase)) {
- send404(resp);
- }
- }
- resp.flushBuffer();
- }
+ private boolean isTemplateFile( final HttpServletResponse resp,
+ final IPath path,
+ final String codebase )
+ {
+ boolean result = false;
+ File downloadDir = Activator.getDefault()
+ .getConfiguration()
+ .getDownloadsDirectory();
+ File jnlpDir = new File( downloadDir, "templates/jnlp" );
+ File item = new File( jnlpDir, path.toString() );
+ URL entry = null;
+ try {
+ entry = item.toURI().toURL();
+ } catch( MalformedURLException exc1 ) {
+ exc1.printStackTrace();
+ }
+ if( entry != null ) {
+ try {
+ sendFile( resp, entry, codebase );
+ result = true;
+ } catch( IOException exc ) {
+ // thats ok, will try to satisfy the request later
+ exc.printStackTrace();
+ }
+ }
+ return result;
+ }
- // ////////////////
- // helping methods
- // ////////////////
+ private void sendFile( final HttpServletResponse resp,
+ final File archiveFile,
+ final String codebase )
+ throws FileNotFoundException, IOException
+ {
+ String ext = new Path( archiveFile.toString() ).getFileExtension();
+ sendFile( resp, new FileInputStream( archiveFile ), codebase, ext );
+ }
- private void send404(final HttpServletResponse resp) {
- try {
- resp.sendError(404);
- } catch (IOException exc) {
- // TODO Auto-generated catch block
- exc.printStackTrace();
- }
- resp.addHeader("Status", "404 Not Found");
- }
+ private void sendFile( final HttpServletResponse resp,
+ final URL entry,
+ final String codebase ) throws IOException
+ {
+ String ext = new Path( entry.getFile() ).getFileExtension();
+ ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+ copy( entry.openStream(), bufferStream );
+ sendFile( resp,
+ new ByteArrayInputStream( bufferStream.toByteArray() ),
+ codebase,
+ ext );
+ }
- private boolean isTemplateFile(final HttpServletResponse resp,
- final IPath path, final String codebase) {
- boolean result = false;
- File downloadDir = Activator.getDefault().getConfiguration()
- .getDownloadsDirectory();
- File jnlpDir = new File(downloadDir, "templates/jnlp");
- File item = new File(jnlpDir, path.toString());
- URL entry = null;
- try {
- entry = item.toURI().toURL();
- } catch (MalformedURLException exc1) {
- exc1.printStackTrace();
- }
- if (entry != null) {
- try {
- sendFile(resp, entry, codebase);
- result = true;
- } catch (IOException exc) {
- // thats ok, will try to satisfy the request later
- exc.printStackTrace();
- }
- }
- return result;
- }
+ private void sendFile( final HttpServletResponse resp,
+ final InputStream is,
+ final String codebase,
+ final String ext ) throws IOException
+ {
+ InputStream inputStream = is;
+ if( ext.equals( "jnlp" ) ) {
+ String result = "";
+ try {
+ ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+ copy( is, bufferStream );
+ result = bufferStream.toString( ENCODING )
+ .replaceAll( "\\$\\{codebase\\}", codebase );
+ } catch( IOException ioe ) {
+ ioe.printStackTrace();
+ } finally {
+ tryClose( is );
+ }
+ inputStream = new ByteArrayInputStream( result.getBytes( ENCODING ) );
+ }
+ resp.addHeader( "Content-Type", getContentType( ext ) );
+ resp.addHeader( "Content-Length", String.valueOf( inputStream.available() ) );
+ resp.flushBuffer();
+ OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
+ copy( inputStream, os );
+ os.flush();
+ }
- private void sendFile(final HttpServletResponse resp,
- final File archiveFile, final String codebase)
- throws FileNotFoundException, IOException {
- String ext = new Path(archiveFile.toString()).getFileExtension();
- sendFile(resp, new FileInputStream(archiveFile), codebase, ext);
- }
+ private boolean trySendGeneratedFile( final HttpServletResponse resp,
+ final IPath path,
+ final String codebase )
+ {
+ boolean result = false;
+ File downloadDir = Activator.getDefault()
+ .getConfiguration()
+ .getDownloadsDirectory();
+ Path outPath = new Path( new File( downloadDir, BuildInstaller.OUTPUT_PATH ).getAbsolutePath() );
+ File archiveFile = outPath.append( path.lastSegment() ).toFile();
+ if( archiveFile.isFile() ) {
+ try {
+ sendFile( resp, archiveFile, codebase );
+ result = true;
+ } catch( FileNotFoundException exc ) {
+ // thats ok, will try to satisfy the request later
+ } catch( IOException exc ) {
+ // thats ok, will try to satisfy the request later
+ exc.printStackTrace();
+ }
+ }
+ return result;
+ }
- private void sendFile(final HttpServletResponse resp, final URL entry,
- final String codebase) throws IOException {
- String ext = new Path(entry.getFile()).getFileExtension();
- ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
- copy(entry.openStream(), bufferStream);
- sendFile(resp, new ByteArrayInputStream(bufferStream.toByteArray()),
- codebase, ext);
- }
+ private String getContentType( final String fileExt ) {
+ String result = "application/octet-stream";
+ if( fileExt.equalsIgnoreCase( "zip" ) ) {
+ result = "application/x-zip";
+ } else if( fileExt.equalsIgnoreCase( "gz" ) ) {
+ result = "application/x-gzip";
+ } else if( fileExt.equalsIgnoreCase( "tar" ) ) {
+ result = "application/x-tar";
+ } else if( fileExt.equalsIgnoreCase( "jnlp" ) ) {
+ result = "application/x-java-jnlp-file";
+ } else if( fileExt.equalsIgnoreCase( "jar" ) ) {
+ result = "application/java-archive";
+ }
+ return result;
+ }
- private void sendFile(final HttpServletResponse resp, final InputStream is,
- final String codebase, final String ext) throws IOException {
- InputStream inputStream = is;
- if (ext.equals("jnlp")) {
- String result = "";
- try {
- ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
- copy(is, bufferStream);
- result = bufferStream.toString(ENCODING).replaceAll(
- "\\$\\{codebase\\}", codebase);
- } catch (IOException ioe) {
- ioe.printStackTrace();
- } finally {
- tryClose(is);
- }
- inputStream = new ByteArrayInputStream(result.getBytes(ENCODING));
- }
- resp.addHeader("Content-Type", getContentType(ext));
- resp.addHeader("Content-Length", String
- .valueOf(inputStream.available()));
- resp.flushBuffer();
- OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
- copy(inputStream, os);
- os.flush();
- }
+ private static void copy( final InputStream in, final OutputStream out )
+ throws IOException
+ {
+ byte[] data = new byte[ BUFFER ];
+ int currentByte = in.read( data, 0, BUFFER );
+ while( currentByte != -1 ) {
+ out.write( data, 0, currentByte );
+ currentByte = in.read( data, 0, BUFFER );
+ }
+ }
- private boolean trySendGeneratedFile(final HttpServletResponse resp,
- final IPath path, final String codebase) {
- boolean result = false;
- File downloadDir = Activator.getDefault().getConfiguration()
- .getDownloadsDirectory();
- Path outPath = new Path(new File(downloadDir,
- BuildInstaller.OUTPUT_PATH).getAbsolutePath());
- File archiveFile = outPath.append(path.lastSegment()).toFile();
- if (archiveFile.isFile()) {
- try {
- sendFile(resp, archiveFile, codebase);
- result = true;
- } catch (FileNotFoundException exc) {
- // thats ok, will try to satisfy the request later
- } catch (IOException exc) {
- // thats ok, will try to satisfy the request later
- exc.printStackTrace();
- }
- }
- return result;
- }
-
- private String getContentType(final String fileExt) {
- String result = "application/octet-stream";
- if (fileExt.equalsIgnoreCase("zip")) {
- result = "application/x-zip";
- } else if (fileExt.equalsIgnoreCase("gz")) {
- result = "application/x-gzip";
- } else if (fileExt.equalsIgnoreCase("tar")) {
- result = "application/x-tar";
- } else if (fileExt.equalsIgnoreCase("jnlp")) {
- result = "application/x-java-jnlp-file";
- } else if (fileExt.equalsIgnoreCase("jar")) {
- result = "application/java-archive";
- }
- return result;
- }
-
- private static void copy(final InputStream in, final OutputStream out)
- throws IOException {
- byte[] data = new byte[BUFFER];
- int currentByte = in.read(data, 0, BUFFER);
- while (currentByte != -1) {
- out.write(data, 0, currentByte);
- currentByte = in.read(data, 0, BUFFER);
- }
- }
-
- private static void tryClose(final InputStream stream) {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- e.printStackTrace();
- // TODO Activator.log( e );
- }
- }
- }
-
+ private static void tryClose( final InputStream stream ) {
+ if( stream != null ) {
+ try {
+ stream.close();
+ } catch( IOException e ) {
+ e.printStackTrace();
+ // TODO Activator.log( e );
+ }
+ }
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java
index ae5b992..1654d4e 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/Installer.java
@@ -1,28 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.installerbuilder;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
-import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.tools.tar.TarEntry;
-import org.apache.tools.tar.TarInputStream;
-import org.apache.tools.tar.TarOutputStream;
+import org.apache.log4j.Logger;
import org.eclipse.epp.wizard.util.OsUtil;
/**
@@ -30,265 +30,122 @@
*/
public class Installer extends HttpServlet {
- private static final String INSTALLER_PROPERTIES_FILENAME = "installer.properties";
- private static final String PROPERTY_PLACEHOLDER_MARKER = "%?%";
- private static final char FILE_EXTENSION_SEPARATOR = '.';
- private static final String TEMPFILE_EXTENSION = ".tmp";
- private static final String TEMPFILE_NAME = "installer";
- private static final long serialVersionUID = 1L;
- private static final int BUFFER = 1024;
- private Configuration configuration;
- private HttpServletRequest request;
- private static final String ENCODING = "UTF-8";
- private static final String INSTALLER_TEMPLATE_PATH = "templates/installer";
+ static Logger logger = Logger.getLogger( Installer.class );
+ private static final char FILE_EXTENSION_SEPARATOR = '.';
+ private static final long serialVersionUID = 1L;
+ private static final int BUFFER = 1024;
+ private HttpServletRequest request;
+ private static final String[] P2_PROPERTIES = {
+ "eclipse.p2.roots", "eclipse.p2.metadata", "eclipse.p2.artifacts"
+ };
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- doGet(req, resp);
- }
+ @Override
+ protected void doPost( HttpServletRequest req, HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ doGet( req, resp );
+ }
+ @Override
+ protected void doGet( final HttpServletRequest req,
+ final HttpServletResponse resp )
+ throws ServletException, IOException
+ {
+ try {
+ String os = req.getParameter( "os" );
+ request = req;
+ Properties p2Properties = extractP2Properties();
+ String extension = OsUtil.getArchiveExtension( os );
+ InstallerCache.Entry installerFile = getCustomInstaller( os, p2Properties );
+ try {
+ sendFile( resp,
+ new FileInputStream( installerFile.getFile() ),
+ "eclipse-wizard-installer",
+ extension );
+ } finally {
+ installerFile.release();
+ }
+ } catch( IOException ex ) {
+ // This happens usually when the download is aborted by the client
+ logger.warn( "IO exception handling installer request", ex );
+ throw new RuntimeException( "IO error handling installer request", ex );
+ } catch( Throwable t ) {
+ logger.error( "Internal error handling installer request", t );
+ throw new RuntimeException( "Internal error handling installer request",
+ t );
+ }
+ }
- @Override
- protected void doGet(final HttpServletRequest req,
- final HttpServletResponse resp) throws ServletException,
- IOException {
- configuration = Activator.getDefault().getConfiguration();
- String os = req.getParameter("os");
- request = req;
+ private Properties extractP2Properties() {
+ Properties properties = new Properties();
+ for( String key : P2_PROPERTIES ) {
+ String value = request.getParameter( key );
+ properties.setProperty( key, value );
+ }
+ return properties;
+ }
- File tempFile = createTempFile();
- File rawFile = findRawInstallerFile(new File(configuration
- .getDownloadsDirectory(), "templates/installer"), os);
- String extension = OsUtil.getArchiveExtension(os);
-
- ceateCustomInstaller(os, rawFile, new String[] { "IUS" }, tempFile);
-
- sendFile(resp, new FileInputStream(tempFile),
- "eclipse-wizard-installer", extension);
- tempFile.delete();
- }
+ public static String getExtension( File file ) {
+ String extension = null;
+ String filename = file.getName();
+ int index = filename.lastIndexOf( FILE_EXTENSION_SEPARATOR );
+ if( index > 0 && index < filename.length() - 1 ) {
+ extension = filename.substring( index + 1 ).toLowerCase();
+ }
+ return extension;
+ }
- private File createTempFile() throws IOException {
- File downloadsDirectory = configuration.getTempDirectory();
- File tempFile = File.createTempFile(TEMPFILE_NAME, TEMPFILE_EXTENSION,
- downloadsDirectory);
+ private void sendFile( final HttpServletResponse resp,
+ final InputStream inputStream,
+ final String filename,
+ final String ext ) throws IOException
+ {
+ resp.addHeader( "Content-Type", getContentType( ext ) );
+ resp.addHeader( "Content-Length", String.valueOf( inputStream.available() ) );
+ resp.setHeader( "Content-Disposition", "attachment; filename="
+ + filename
+ + "."
+ + ext
+ + ";" );
+ resp.flushBuffer();
+ OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
+ copy( inputStream, os );
+ os.flush();
+ inputStream.close();
+ }
- return tempFile;
- }
+ private String getContentType( final String fileExt ) {
+ String result = "application/octet-stream";
+ if( fileExt.equalsIgnoreCase( "zip" ) ) {
+ result = "application/x-zip";
+ } else if( fileExt.equalsIgnoreCase( "gz" ) ) {
+ result = "application/x-gzip";
+ } else if( fileExt.equalsIgnoreCase( "tar" ) ) {
+ result = "application/x-tar";
+ } else if( fileExt.equalsIgnoreCase( "jnlp" ) ) {
+ result = "application/x-java-jnlp-file";
+ } else if( fileExt.equalsIgnoreCase( "jar" ) ) {
+ result = "application/java-archive";
+ }
+ return result;
+ }
- public static String getExtension(File file) {
- String extension = null;
- String filename = file.getName();
- int index = filename.lastIndexOf(FILE_EXTENSION_SEPARATOR);
+ private InstallerCache.Entry getCustomInstaller( final String os,
+ Properties properties )
+ {
+ InstallerCache.Key key = new InstallerCache.Key( os, properties );
+ logger.debug( "Request for " + key );
+ return Activator.getDefault().getInstallerCache().getInstaller( key );
+ }
- if (index > 0 && index < filename.length() - 1) {
- extension = filename.substring(index + 1).toLowerCase();
- }
- return extension;
- }
-
- private File findRawInstallerFile(final File dir, final String os) {
- File result = null;
- File[] files = dir.listFiles();
- for (File found : files) {
- if (found.getName().indexOf(os) > -1) {
- result = found;
- }
- }
- return result;
- }
-
- private void sendFile(final HttpServletResponse resp,
- final InputStream inputStream, final String filename,
- final String ext) throws IOException {
- resp.addHeader("Content-Type", getContentType(ext));
- resp.addHeader("Content-Length", String
- .valueOf(inputStream.available()));
- resp.setHeader("Content-Disposition", "attachment; filename="
- + filename + "." + ext + ";");
- resp.flushBuffer();
- OutputStream os = resp.getOutputStream(); // TODO: (jb) errorhandling
- copy(inputStream, os);
- os.flush();
- inputStream.close();
- }
-
- private String getContentType(final String fileExt) {
- String result = "application/octet-stream";
- if (fileExt.equalsIgnoreCase("zip")) {
- result = "application/x-zip";
- } else if (fileExt.equalsIgnoreCase("gz")) {
- result = "application/x-gzip";
- } else if (fileExt.equalsIgnoreCase("tar")) {
- result = "application/x-tar";
- } else if (fileExt.equalsIgnoreCase("jnlp")) {
- result = "application/x-java-jnlp-file";
- } else if (fileExt.equalsIgnoreCase("jar")) {
- result = "application/java-archive";
- }
- return result;
- }
-
- private void ceateCustomInstaller(final String os, final File inFile,
- final String ius[], final File outFile) throws IOException // FIXME
- {
- InputStream in = null;
- OutputStream out = null;
- try {
- out = new FileOutputStream(outFile);
- in = new FileInputStream(inFile);
- String config = getInstallerConfiguration();
- byte[] bytes = config.getBytes(ENCODING);
- if (inFile.getName().endsWith(".zip")) {
- ZipInputStream zis = null;
- ZipOutputStream zos = null;
- try {
- zis = new ZipInputStream(in);
- zos = new ZipOutputStream(out);
- ZipEntry entry = zis.getNextEntry();
- while (entry != null) {
- // Do not store directories explicitly
- if (!entry.isDirectory()) {
- ZipEntry zipEntry = new ZipEntry(entry.getName());
- zos.putNextEntry(zipEntry);
- copy(readSubStream(zis), zos);
- }
- entry = zis.getNextEntry();
- }
- zos.putNextEntry(new ZipEntry(
- "eclipse/installer.properties"));
- ByteArrayInputStream confStream = new ByteArrayInputStream(
- bytes);
- copy(confStream, zos);
- zos.closeEntry();
-
- } catch (IOException e) {
- // TODO
- e.printStackTrace();
- } finally {
- tryClose(zis);
- tryClose(zos);
- }
- } else if (inFile.getName().endsWith(".tar.gz")) {
- GZIPInputStream gzis = null;
- TarInputStream tis = null;
- GZIPOutputStream gzos = null;
- TarOutputStream tos = null;
- try {
- gzis = new GZIPInputStream(in);
- tis = new TarInputStream(gzis);
- gzos = new GZIPOutputStream(out);
- tos = new TarOutputStream(gzos);
- tos.setLongFileMode(TarOutputStream.LONGFILE_GNU);
- TarEntry entry = tis.getNextEntry();
- while (entry != null) {
- tos.putNextEntry(entry);
- copy(readSubStream(tis), tos);
- tos.closeEntry();
- entry = tis.getNextEntry();
- }
- String entryName = "eclipse/installer.properties";
- if (os.equals("macosx")) {
- entryName = "eclipse/p2installer.app/Contents/MacOS/installer.properties";
- }
- TarEntry tarEntry = new TarEntry(entryName);
- ByteArrayInputStream confStream = new ByteArrayInputStream(
- bytes);
- tarEntry.setSize(bytes.length);
- tos.putNextEntry(tarEntry);
- copy(confStream, tos);
- tos.closeEntry();
-
- } catch (IOException e) {
- // TODO
- e.printStackTrace();
- } finally {
- tryClose(tis);
- tryClose(gzis);
- tryClose(tos);
- tryClose(gzos);
- }
- }
- } catch (IOException ioe) {
- ioe.printStackTrace();
- } finally {
- tryClose(in);
- tryClose(out);
- }
- }
-
- private static void copy(final InputStream in, final OutputStream out)
- throws IOException {
- byte[] data = new byte[BUFFER];
- int currentByte = in.read(data, 0, BUFFER);
- while (currentByte != -1) {
- out.write(data, 0, currentByte);
- currentByte = in.read(data, 0, BUFFER);
- }
- }
-
- private String getInstallerConfiguration() throws IOException // FIXME
- {
- String result = "";
- File downloadDir = Activator.getDefault().getConfiguration()
- .getDownloadsDirectory();
- File templateDir = new File(downloadDir, INSTALLER_TEMPLATE_PATH);
- File inFile = new File(templateDir, INSTALLER_PROPERTIES_FILENAME);
- Properties installerProperties = new Properties();
- installerProperties.load(new FileInputStream(inFile));
- for (Object okey : installerProperties.keySet()) {
- String key = (String) okey;
- if (installerProperties.getProperty(key).equals(PROPERTY_PLACEHOLDER_MARKER)) {
- String value = request.getParameter(key);
- if (value != null) {
- installerProperties.setProperty(key, value);
- } else {
- throw new RuntimeException(
- "No value for placeholder parameter in request: "
- + key);
- }
- }
- }
-
- try {
- ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
- installerProperties.store(bufferStream, "");
- result = bufferStream.toString();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- } finally {
- }
- return result;
- }
-
- private static InputStream readSubStream(final InputStream is)
- throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- copy(is, baos);
- return new ByteArrayInputStream(baos.toByteArray());
- }
-
- private static void tryClose(final InputStream stream) {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- e.printStackTrace();
- // TODO Activator.log( e );
- }
- }
- }
-
- private static void tryClose(final OutputStream stream) {
- if (stream != null) {
- try {
- stream.close();
- } catch (IOException e) {
- e.printStackTrace();
- // TODO Activator.log( e );
- }
- }
- }
-
+ private static void copy( final InputStream in, final OutputStream out )
+ throws IOException
+ {
+ byte[] data = new byte[ BUFFER ];
+ int currentByte = in.read( data, 0, BUFFER );
+ while( currentByte != -1 ) {
+ out.write( data, 0, currentByte );
+ currentByte = in.read( data, 0, BUFFER );
+ }
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/InstallerCache.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/InstallerCache.java
new file mode 100644
index 0000000..382c776
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/installerbuilder/InstallerCache.java
@@ -0,0 +1,391 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.installerbuilder;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+import org.apache.log4j.Logger;
+import org.apache.tools.tar.TarEntry;
+import org.apache.tools.tar.TarInputStream;
+import org.apache.tools.tar.TarOutputStream;
+
+/**
+ * Cache for generated installers, uses the filesystem as a backing store
+ *
+ * @author mwoelker
+ */
+public class InstallerCache {
+
+ static Logger logger = Logger.getLogger( InstallerCache.class );
+ public static class Key {
+
+ @Override
+ public String toString() {
+ return "os=" + os + ";" + properties.toString();
+ }
+
+ public String getOs() {
+ return os;
+ }
+
+ public Properties getProperties() {
+ return properties;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ( ( os == null )
+ ? 0
+ : os.hashCode() );
+ result = prime
+ * result
+ + ( ( properties == null )
+ ? 0
+ : properties.hashCode() );
+ return result;
+ }
+
+ @Override
+ public boolean equals( Object obj ) {
+ if( this == obj )
+ return true;
+ if( obj == null )
+ return false;
+ if( getClass() != obj.getClass() )
+ return false;
+ Key other = ( Key )obj;
+ if( os == null ) {
+ if( other.os != null )
+ return false;
+ } else if( !os.equals( other.os ) )
+ return false;
+ if( properties == null ) {
+ if( other.properties != null )
+ return false;
+ } else if( !properties.equals( other.properties ) )
+ return false;
+ return true;
+ }
+ String os;
+
+ public Key( String os, Properties properties ) {
+ super();
+ this.os = os;
+ this.properties = properties;
+ }
+ Properties properties;
+ }
+ /**
+ * Entry in the cache, the actual installer file is created lazily, to reduce
+ * monitor contention on the cacheMap
+ *
+ * @author mwoelker
+ */
+ public class Entry {
+
+ private Key key;
+
+ public Entry( Key key ) {
+ super();
+ this.key = key;
+ }
+ long acquisitionCount = 0;
+
+ public synchronized File getFile() {
+ if( file == null ) {
+ file = createInstaller( key );
+ }
+ return file;
+ }
+ File file;
+ boolean evicted = false;
+ boolean disposed = false;
+
+ public synchronized void acquire() {
+ acquisitionCount++;
+ }
+
+ public synchronized void release() {
+ acquisitionCount--;
+ if( acquisitionCount == 0 && evicted ) {
+ // Perform postponed eviction
+ logger.debug( "Evicting (actual): " + key );
+ deleteFile();
+ }
+ }
+
+ private void deleteFile() {
+ if( file != null ) {
+ file.delete();
+ }
+ }
+
+ public synchronized void evict() {
+ evicted = true;
+ if( acquisitionCount == 0 ) {
+ logger.debug( "Evicting directly: " + key );
+ deleteFile();
+ } else {
+ // File still in use, evict later
+ logger.debug( "Evicting (postponed): " + key );
+ }
+ }
+ }
+ protected class CacheMap extends LinkedHashMap<Key, Entry> {
+
+ private static final long serialVersionUID = 1L;
+ private final int capacity;
+
+ @Override
+ protected boolean removeEldestEntry( Map.Entry<Key, org.eclipse.epp.wizard.installerbuilder.InstallerCache.Entry> eldest )
+ {
+ boolean remove = false;
+ if( this.size() > this.capacity ) {
+ // remove Least recently used entry, and evict value from cache
+ remove = true;
+ eldest.getValue().evict();
+ }
+ return remove;
+ }
+
+ public CacheMap( int capacity, float loadFactor, boolean accessOrder ) {
+ super( capacity, loadFactor, accessOrder );
+ this.capacity = capacity;
+ }
+ }
+ final CacheMap cacheMap;
+ Configuration configuration = Activator.getDefault().getConfiguration();
+ private static final String INSTALLER_PROPERTIES_FILENAME = "installer.properties";
+ private static final String INSTALLER_TEMPLATE_PATH = "templates/installer";
+ private static final String PROPERTY_PLACEHOLDER_MARKER = "%?%";
+ private static final String ENCODING = "UTF-8";
+ private static final String TEMPFILE_EXTENSION = ".tmp";
+ private static final String TEMPFILE_NAME = "installer";
+ private static final int BUFFER = 1024;
+
+ public InstallerCache( int installerCacheSize ) {
+ cacheMap = new CacheMap( installerCacheSize, 1.75f, true );
+ }
+
+ public Entry getInstaller( Key key ) {
+ Entry entry;
+ synchronized( cacheMap ) {
+ entry = cacheMap.get( key );
+ if( entry == null ) {
+ entry = new Entry( key );
+ cacheMap.put( key, entry );
+ }
+ entry.acquire();
+ }
+ return entry;
+ }
+
+ protected File createInstaller( Key key ) {
+ File outFile = createTempFile();
+ File inFile = findRawInstallerFile( new File( configuration.getDownloadsDirectory(),
+ "templates/installer" ),
+ key.getOs() );
+ InputStream in = null;
+ OutputStream out = null;
+ try {
+ out = new FileOutputStream( outFile );
+ in = new FileInputStream( inFile );
+ String config = getInstallerConfiguration( key.getOs(),
+ key.getProperties() );
+ byte[] bytes = config.getBytes( ENCODING );
+ if( inFile.getName().endsWith( ".zip" ) ) {
+ ZipInputStream zis = null;
+ ZipOutputStream zos = null;
+ try {
+ zis = new ZipInputStream( in );
+ zos = new ZipOutputStream( out );
+ ZipEntry entry = zis.getNextEntry();
+ while( entry != null ) {
+ // Do not store directories explicitly
+ if( !entry.isDirectory() ) {
+ ZipEntry zipEntry = new ZipEntry( entry.getName() );
+ zos.putNextEntry( zipEntry );
+ copy( readSubStream( zis ), zos );
+ }
+ entry = zis.getNextEntry();
+ }
+ zos.putNextEntry( new ZipEntry( "eclipse/installer.properties" ) );
+ ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
+ copy( confStream, zos );
+ zos.closeEntry();
+ } catch( IOException e ) {
+ logger.error( "Could not create installer", e );
+ } finally {
+ tryClose( zis );
+ tryClose( zos );
+ }
+ } else if( inFile.getName().endsWith( ".tar.gz" ) ) {
+ GZIPInputStream gzis = null;
+ TarInputStream tis = null;
+ GZIPOutputStream gzos = null;
+ TarOutputStream tos = null;
+ try {
+ gzis = new GZIPInputStream( in );
+ tis = new TarInputStream( gzis );
+ gzos = new GZIPOutputStream( out );
+ tos = new TarOutputStream( gzos );
+ tos.setLongFileMode( TarOutputStream.LONGFILE_GNU );
+ TarEntry entry = tis.getNextEntry();
+ while( entry != null ) {
+ tos.putNextEntry( entry );
+ copy( readSubStream( tis ), tos );
+ tos.closeEntry();
+ entry = tis.getNextEntry();
+ }
+ String entryName = "eclipse/installer.properties";
+ if( key.getOs().equals( "macosx" ) ) {
+ entryName = "eclipse/p2installer.app/Contents/MacOS/installer.properties";
+ }
+ TarEntry tarEntry = new TarEntry( entryName );
+ ByteArrayInputStream confStream = new ByteArrayInputStream( bytes );
+ tarEntry.setSize( bytes.length );
+ tos.putNextEntry( tarEntry );
+ copy( confStream, tos );
+ tos.closeEntry();
+ } catch( IOException e ) {
+ logger.error( "Could not create installer", e );
+ } finally {
+ tryClose( tis );
+ tryClose( gzis );
+ tryClose( tos );
+ tryClose( gzos );
+ }
+ }
+ } catch( IOException ioe ) {
+ logger.error( "Could not create installer", ioe );
+ } finally {
+ tryClose( in );
+ tryClose( out );
+ }
+ return outFile;
+ }
+
+ private File findRawInstallerFile( final File dir, final String os ) {
+ File result = null;
+ File[] files = dir.listFiles();
+ for( File found : files ) {
+ if( found.getName().indexOf( os ) > -1 ) {
+ result = found;
+ }
+ }
+ return result;
+ }
+
+ private String getInstallerConfiguration( String os, Properties p2Properties )
+ throws IOException // FIXME
+ {
+ String result = "";
+ File downloadDir = Activator.getDefault()
+ .getConfiguration()
+ .getDownloadsDirectory();
+ File templateDir = new File( downloadDir, INSTALLER_TEMPLATE_PATH );
+ File inFile = new File( templateDir, INSTALLER_PROPERTIES_FILENAME );
+ Properties installerProperties = new Properties();
+ installerProperties.load( new FileInputStream( inFile ) );
+ for( Object okey : installerProperties.keySet() ) {
+ String key = ( String )okey;
+ if( installerProperties.getProperty( key )
+ .equals( PROPERTY_PLACEHOLDER_MARKER ) )
+ {
+ String value = p2Properties.getProperty( key );
+ if( value != null ) {
+ installerProperties.setProperty( key, value );
+ } else {
+ throw new RuntimeException( "No value for placeholder parameter in request: "
+ + key );
+ }
+ }
+ }
+ try {
+ ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
+ installerProperties.store( bufferStream, "" );
+ result = bufferStream.toString();
+ } catch( IOException e ) {
+ logger.error( "Could not create installer", e );
+ } finally {
+ }
+ return result;
+ }
+
+ private static InputStream readSubStream( final InputStream is )
+ throws IOException
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ copy( is, baos );
+ return new ByteArrayInputStream( baos.toByteArray() );
+ }
+
+ private static void tryClose( final InputStream stream ) {
+ if( stream != null ) {
+ try {
+ stream.close();
+ } catch( IOException e ) {
+ logger.error( "Could not create installer", e );
+ }
+ }
+ }
+
+ private static void tryClose( final OutputStream stream ) {
+ if( stream != null ) {
+ try {
+ stream.close();
+ } catch( IOException e ) {
+ logger.error( "Could not create installer", e );
+ }
+ }
+ }
+
+ private File createTempFile() {
+ File downloadsDirectory = configuration.getTempDirectory();
+ File tempFile;
+ try {
+ tempFile = File.createTempFile( TEMPFILE_NAME,
+ TEMPFILE_EXTENSION,
+ downloadsDirectory );
+ } catch( IOException e ) {
+ throw new RuntimeException( "Unable to create installer temp file", e );
+ }
+ return tempFile;
+ }
+
+ private static void copy( final InputStream in, final OutputStream out )
+ throws IOException
+ {
+ byte[] data = new byte[ BUFFER ];
+ int currentByte = in.read( data, 0, BUFFER );
+ while( currentByte != -1 ) {
+ out.write( data, 0, currentByte );
+ currentByte = in.read( data, 0, BUFFER );
+ }
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java
index 9b48c0e..9944cfd 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/jnlpbuilder/CustomJnlp.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.jnlpbuilder;
import java.io.ByteArrayOutputStream;
@@ -28,50 +38,60 @@
*/
public class CustomJnlp extends HttpServlet {
-// public static final String OUT_PATH = "/opt/epp/htdocs";
-// public static final String OUT_PATH = "C:/opt/epp/htdocs";
+ // public static final String OUT_PATH = "/opt/epp/htdocs";
+ // public static final String OUT_PATH = "C:/opt/epp/htdocs";
public static final String JNLP_TEMPLATE_PATH = "templates/jnlp/epp.jnlp";
private static final String ENCODING = "UTF-8";
private static final int BUFFER = 512;
private static final long serialVersionUID = 1L;
-
+
@Override
protected void doGet( final HttpServletRequest req,
final HttpServletResponse resp )
throws ServletException, IOException
{
-
- String codebase = "http://" + req.getServerName() + ":" + req.getServerPort() + "/download";
+ String codebase = "http://"
+ + req.getServerName()
+ + ":"
+ + req.getServerPort()
+ + "/download";
String iuParam = req.getParameter( "ius" );
-
- String href = req.getRequestURL().append( "?" + req.getQueryString() ).toString();
+ String href = req.getRequestURL()
+ .append( "?" + req.getQueryString() )
+ .toString();
resp.addHeader( "Content-Type", "application/x-java-jnlp-file" );
execute( codebase, iuParam, href );
resp.flushBuffer();
}
public static void execute( final String codebase,
- final String iuParam,
- final String filename ) throws IOException
+ final String iuParam,
+ final String filename ) throws IOException
{
- File downloadDir = Activator.getDefault().getConfiguration().getDownloadsDirectory();
- IPath outDirPath = new Path( new File(downloadDir, BuildInstaller.OUTPUT_PATH).getAbsolutePath() );
+ File downloadDir = Activator.getDefault()
+ .getConfiguration()
+ .getDownloadsDirectory();
+ IPath outDirPath = new Path( new File( downloadDir,
+ BuildInstaller.OUTPUT_PATH ).getAbsolutePath() );
String[] ius = getIUs( iuParam );
-// URL template = Activator.getContext().getBundle().getEntry(TEMPLATE_PATH);
+ // URL template =
+ // Activator.getContext().getBundle().getEntry(TEMPLATE_PATH);
IPath outFilePath = outDirPath.append( filename );
- File templateFile = new File(downloadDir, JNLP_TEMPLATE_PATH );
- String jnlp = ceateCustomJnlp( templateFile.toURI().toURL(), ius, codebase, filename );
+ File templateFile = new File( downloadDir, JNLP_TEMPLATE_PATH );
+ String jnlp = ceateCustomJnlp( templateFile.toURI().toURL(),
+ ius,
+ codebase,
+ filename );
OutputStream os = new FileOutputStream( outFilePath.toFile() );
os.write( jnlp.getBytes( ENCODING ) );
tryClose( os );
}
-
- //////////////////
- // helping methods
- //////////////////
+ // ////////////////
+ // helping methods
+ // ////////////////
private static String[] getIUs( final String param ) {
- List<String> result = new ArrayList<String>();
+ List<String> result = new ArrayList<String>();
StringTokenizer tknizr = new StringTokenizer( param, ",", false );
while( tknizr.hasMoreTokens() ) {
String token = tknizr.nextToken();
@@ -81,9 +101,9 @@
}
private static String ceateCustomJnlp( final URL template,
- final String ius[],
- final String codebase,
- final String filename )
+ final String ius[],
+ final String codebase,
+ final String filename )
{
String result = "";
InputStream in = null;
@@ -92,9 +112,9 @@
ByteArrayOutputStream bufferStream = new ByteArrayOutputStream();
copy( in, bufferStream );
result = customize( bufferStream.toString( ENCODING ),
- ius,
- codebase,
- filename );
+ ius,
+ codebase,
+ filename );
} catch( IOException ioe ) {
ioe.printStackTrace();
} finally {
@@ -106,12 +126,27 @@
private static String customize( final String input,
final String[] ius,
final String codebase,
- final String href ) {
+ final String href )
+ {
String result = input;
result = result.replaceAll( "\\$\\{codebase\\}", codebase );
result = result.replaceAll( "\\$\\{href\\}", href );
- result = result.replaceAll( "\\$\\{roots\\}", StringUtil.toCommaList( ius, false ) );
- result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); //FIXME: (jb) get this from initial selection on eclispe.org
+ result = result.replaceAll( "\\$\\{roots\\}",
+ StringUtil.toCommaList( ius, false ) );
+ result = result.replaceAll( "\\$\\{profileName\\}", "ProfileNameHere" ); // FIXME
+ // :
+ // (
+ // jb
+ // )
+ // get
+ // this
+ // from
+ // initial
+ // selection
+ // on
+ // eclispe
+ // .
+ // org
return result;
}
@@ -121,7 +156,7 @@
stream.close();
} catch( IOException e ) {
e.printStackTrace();
- //TODO Activator.log( e );
+ // TODO Activator.log( e );
}
}
}
@@ -132,13 +167,12 @@
stream.close();
} catch( IOException e ) {
e.printStackTrace();
- //TODO Activator.log( e );
+ // TODO Activator.log( e );
}
}
}
- private static void copy( final InputStream in,
- final OutputStream out )
+ private static void copy( final InputStream in, final OutputStream out )
throws IOException
{
byte[] data = new byte[ BUFFER ];
@@ -159,5 +193,4 @@
}
return "startinstaller-" + hash + ".jnlp";
}
-
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java
index 2652463..7e4e193 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/Crypt.java
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java
index 6e455ff..e487d38 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/OsUtil.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.util;
import java.util.HashMap;
@@ -8,25 +18,21 @@
*/
public class OsUtil {
- private static final String[] PLATFORMS
- = new String[] { "win32", "linux",
- "macosx" };
+ private static final String[] PLATFORMS = new String[]{
+ "win32", "linux", "macosx"
+ };
private static final Map<String, String> EXTS = new HashMap<String, String>();
-
static {
EXTS.put( "win32", "zip" );
EXTS.put( "linux", "tar.gz" );
- EXTS.put("macosx", "tar.gz");
+ EXTS.put( "macosx", "tar.gz" );
}
-
+
public static String[] getPlatforms() {
return PLATFORMS;
}
-
+
public static String getArchiveExtension( final String os ) {
return EXTS.get( os );
}
-
-
-
}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StressTest.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StressTest.java
new file mode 100644
index 0000000..3d0aa76
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StressTest.java
@@ -0,0 +1,104 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.util;
+
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.util.Random;
+
+public class StressTest implements Runnable {
+
+ private static final int THREADS = 10;
+ private static final int TIMES = 10;
+ private static final int SPREAD = 10;
+ static Random random = new Random();
+
+ /**
+ * @param args
+ */
+ public static void main( String[] args ) {
+ for( int i = 0; i < THREADS; i++ ) {
+ Thread thread = new Thread( new StressTest() );
+ thread.setName( String.format( "Stresser %3d", i ) );
+ thread.start();
+ }
+ }
+ static double total = 0;
+ static double count = 0;
+
+ private static synchronized double getAverage( double datapoint ) {
+ total += datapoint;
+ count++;
+ return total / count;
+ }
+
+ private static void runTest() {
+ try {
+ int value = Math.abs( ( int )( SPREAD * random.nextGaussian() ) );
+ long start = System.nanoTime();
+ // Construct data
+ String data = URLEncoder.encode( "os", "UTF-8" )
+ + "="
+ + URLEncoder.encode( "linux", "UTF-8" );
+ data += "&"
+ + URLEncoder.encode( "eclipse.p2.roots", "UTF-8" )
+ + "="
+ + URLEncoder.encode( "value2", "UTF-8" );
+ data += "&"
+ + URLEncoder.encode( "eclipse.p2.metadata", "UTF-8" )
+ + "="
+ + URLEncoder.encode( "value2", "UTF-8" );
+ data += "&"
+ + URLEncoder.encode( "eclipse.p2.artifacts", "UTF-8" )
+ + "="
+ + URLEncoder.encode( "value" + value, "UTF-8" );
+ // Send data
+ URL url = new URL( "http://localhost:8888/installer/" );
+ URLConnection conn = url.openConnection();
+ conn.setDoOutput( true );
+ OutputStreamWriter wr = new OutputStreamWriter( conn.getOutputStream() );
+ wr.write( data );
+ wr.flush();
+ // Get the response
+ if( true ) {
+ // FileOutputStream fos = new FileOutputStream("out.tar.gz");
+ InputStream is = conn.getInputStream();
+ byte[] buffer = new byte[ 1024 ];
+ @SuppressWarnings("unused")
+ int bytes;
+ while( -1 != ( bytes = is.read( buffer ) ) ) {
+ // fos.write(buffer, 0, bytes);
+ }
+ is.close();
+ // fos.close();
+ }
+ wr.close();
+ long end = System.nanoTime();
+ double average = getAverage( ( end - start ) / 1000 );
+ System.out.println( String.format( "%s Time [%5d] %20d (avg: %12.3f)",
+ Thread.currentThread().getName(),
+ value,
+ ( end - start ) / 1000,
+ average ) );
+ } catch( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+
+ public void run() {
+ for( int i = 0; i < TIMES; i++ ) {
+ runTest();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java
index c4399e9..0caa98b 100644
--- a/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java
+++ b/plugins/org.eclipse.epp.wizard.installerbuilder/src/org/eclipse/epp/wizard/util/StringUtil.java
@@ -1,14 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.util;
import java.security.NoSuchAlgorithmException;
-
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
public class StringUtil {
- public static String toCommaList( final String[] items, final boolean space ) {
+ public static String toCommaList( final String[] items, final boolean space )
+ {
StringBuilder result = new StringBuilder();
for( int i = 0; i < items.length; i++ ) {
if( i > 0 ) {
@@ -33,5 +43,4 @@
{
return Crypt.md5encrypt( value );
}
-
}
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.classpath b/plugins/org.eclipse.epp.wizard.kickstarter/.classpath
new file mode 100644
index 0000000..2d1a430
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.gitignore b/plugins/org.eclipse.epp.wizard.kickstarter/.gitignore
new file mode 100644
index 0000000..215520f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.gitignore
@@ -0,0 +1 @@
+org.eclipse.equinox.servletbridge/
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.project b/plugins/org.eclipse.epp.wizard.kickstarter/.project
new file mode 100644
index 0000000..cba8fc2
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.epp.wizard.kickstarter</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.epp.wizard.kickstarter/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ef25a09
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Fri Aug 15 09:35:06 CEST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.kickstarter/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..d190c76
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Kickstarter Plug-in
+Bundle-SymbolicName: org.eclipse.epp.wizard.kickstarter
+Bundle-Version: 1.0.0
+Bundle-Activator: org.eclipse.epp.wizard.kickstarter.Activator
+Require-Bundle: org.eclipse.core.runtime
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Import-Package: org.apache.log4j
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/build.properties b/plugins/org.eclipse.epp.wizard.kickstarter/build.properties
new file mode 100644
index 0000000..41eb6ad
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/plugins/org.eclipse.epp.wizard.kickstarter/src/org/eclipse/epp/wizard/kickstarter/Activator.java b/plugins/org.eclipse.epp.wizard.kickstarter/src/org/eclipse/epp/wizard/kickstarter/Activator.java
new file mode 100644
index 0000000..e2719e8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.kickstarter/src/org/eclipse/epp/wizard/kickstarter/Activator.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.kickstarter;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.osgi.framework.internal.core.BundleFragment;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+@SuppressWarnings("restriction")
+public class Activator extends Plugin implements FrameworkListener {
+ static Logger logger = Logger.getLogger(Activator.class);
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.epp.wizard.kickstarter";
+
+ // The shared instance
+ private static Activator plugin;
+
+ private BundleContext context;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ context.addFrameworkListener(this);
+ plugin = this;
+ this.context = context;
+ kickstartBundles();
+ }
+
+ private void kickstartBundles() {
+ for (Bundle bundle : context.getBundles()) {
+ try {
+ // Do not start fragments & already starting bundles
+ if (!(bundle instanceof BundleFragment)
+ && (bundle.getState() != Bundle.STARTING)) {
+ logger.info("Kickstarting "
+ + String.format("%-45s", bundle.getSymbolicName()) + " "
+ + bundle.getHeaders().get("Bundle-Version"));
+ bundle.start();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ logger.info("Kickstart completed");
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ public void frameworkEvent(FrameworkEvent event) {
+ }
+
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF
index 87577c6..c39cb34 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/META-INF/MANIFEST.MF
@@ -7,8 +7,13 @@
Require-Bundle: org.eclipse.core.runtime
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Import-Package: org.eclipse.epp.wizard.internal,
+Import-Package: org.apache.log4j,
org.eclipse.epp.wizard.model,
+ org.eclipse.equinox.internal.p2.core.helpers,
+ org.eclipse.equinox.internal.p2.metadata,
+ org.eclipse.equinox.internal.p2.metadata.repository,
+ org.eclipse.equinox.internal.p2.metadata.repository.io,
+ org.eclipse.equinox.internal.p2.persistence,
org.eclipse.equinox.internal.provisional.p2.core,
org.eclipse.equinox.internal.provisional.p2.metadata,
org.eclipse.equinox.internal.provisional.p2.metadata.repository,
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch b/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch
index a503269..78b97c3 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/Metadata generator.launch
@@ -1,24 +1,24 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
-<booleanAttribute key="append.args" value="true"/>
-<booleanAttribute key="automaticAdd" value="true"/>
-<booleanAttribute key="automaticValidate" value="false"/>
-<stringAttribute key="bootstrap" value=""/>
-<stringAttribute key="checked" value="[NONE]"/>
-<booleanAttribute key="clearConfig" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Metadata generator"/>
-<booleanAttribute key="default_auto_start" value="true"/>
-<intAttribute key="default_start_level" value="4"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.eclipse.epp.wizard.p2.generator,org.eclipse.rap.ui.forms,org.mortbay.jetty,org.eclipse.equinox.http.jetty,org.apache.commons.logging"/>
-<booleanAttribute key="includeOptional" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consoleLog"/>
-<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true"/>
-<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:org.eclipse.epp.wizard}"/>
-<stringAttribute key="pde.version" value="3.3"/>
-<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="javax.xml@default:default,org.apache.xerces@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.equinox.security.win32.x86@default:false,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.apache.xml.serializer@default:default,org.eclipse.ecf@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.ui@default:default,org.eclipse.core.variables@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.runtime@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.junit@default:default,com.ibm.icu@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.osgi@:,org.eclipse.osgi.services@default:default,org.eclipse.help@default:default,org.eclipse.equinox.app@default:default,org.eclipse.core.jobs@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.equinox.common@default:default,org.eclipse.core.databinding@default:default,org.apache.ant@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.security@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.swt.win32.win32.x86@default:false,org.eclipse.equinox.registry@default:default,org.eclipse.ant.core@default:default,org.apache.xml.resolver@default:default,org.eclipse.swt@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jface@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.frameworkadmin@default:default"/>
-<booleanAttribute key="tracing" value="false"/>
-<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.eclipse.rap.rwt.q07@default:false,org.eclipse.equinox.p2.metadata.generator@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,org.eclipse.epp.wizard.model@default:default,javax.servlet@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.rap.jface@default:default,org.eclipse.epp.wizard.metadata.generator@default:true,org.jdom@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.epp.wizard@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.rap.ui@default:default"/>
-</launchConfiguration>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.EquinoxLauncher">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Metadata generator"/>
+<booleanAttribute key="default_auto_start" value="true"/>
+<intAttribute key="default_start_level" value="4"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.apache.commons.logging,org.eclipse.rap.ui.forms,org.mortbay.jetty,org.eclipse.equinox.http.jetty"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:org.eclipse.epp.wizard}"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="target_bundles" value="org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.ui.workbench@default:default,org.apache.xerces*2.9.0.v200805270400@default:default,org.eclipse.help@default:default,com.ibm.icu@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.jface@default:default,org.eclipse.core.commands@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.app@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.ecf@default:default,org.eclipse.core.databinding@default:default,org.apache.xml.resolver*1.2.0.v200806030312@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.core.jobs@default:default,org.apache.xml.resolver*1.1.0.20080508-1430PRD@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ant.core@default:default,org.apache.ant@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.equinox.frameworkadmin@default:default,org.eclipse.osgi@:,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ui@default:default,org.eclipse.core.expressions@default:default,org.eclipse.equinox.security@default:default,org.eclipse.swt@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.osgi.services@default:default,org.eclipse.core.runtime@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.apache.xml.serializer@default:default,org.apache.xerces*2.8.0.20080508-1430PRD@default:default,org.eclipse.core.variables@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.equinox.common@default:default,javax.xml@default:default,org.junit@default:default"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<stringAttribute key="workspace_bundles" value="org.eclipse.equinox.http.registry@default:default,p2test@default:default,org.eclipse.epp.wizard.kickstarter@default:default,org.eclipse.equinox.servletbridge@default:default,org.eclipse.rap.rwt.q07@default:false,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.rap.jface@default:default,org.eclipse.epp.wizard@default:default,org.eclipse.rap.ui@default:default,org.apache.log4j@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.epp.wizard.metadata.generator@default:true,org.eclipse.equinox.p2.director@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,javax.servlet@default:default,org.jdom@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.equinox.p2.installer@default:default,org.eclipse.equinox.http.servletbridge@default:default,org.eclipse.equinox.p2.tools@default:default,org.eclipse.equinox.p2.updatechecker@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.epp.wizard.model@default:default"/>
+</launchConfiguration>
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties b/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties
index ec3c586..b5a94d5 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/build.properties
@@ -1,5 +1,6 @@
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
- .
-
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
+
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/plugin.xml b/plugins/org.eclipse.epp.wizard.metadata.generator/plugin.xml
new file mode 100644
index 0000000..7148895
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/plugin.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+ <extension
+ id="id1"
+ point="org.eclipse.core.runtime.applications">
+ <application
+ cardinality="singleton-global"
+ thread="main"
+ visible="true">
+ <run
+ class="org.eclipse.epp.wizard.metadata.generator.Application">
+ </run>
+ </application>
+ </extension>
+
+</plugin>
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java
index c275bb6..98ef210 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Activator.java
@@ -1,69 +1,59 @@
-/*******************************************************************************
- * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
- * 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:
- * Innoopract Informationssysteme GmbH - initial API and implementation
- ******************************************************************************/
-package org.eclipse.epp.wizard.metadata.generator;
-
-import java.io.File;
-
-import org.eclipse.core.runtime.Plugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends Plugin {
-
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.epp.wizard.metadata.generator";
-
- // The shared instance
- private static Activator plugin;
-
- /**
- * The constructor
- */
- public Activator() {
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
- */
- public void start(BundleContext context) throws Exception {
- super.start(context);
- System.out.println("=== Generating metadata");
- plugin = this;
- File in = new File("../org.eclipse.epp.wizard/data/model/IUs");
- File out = new File("../org.eclipse.epp.wizard/data/metadata");
- MetadataGenerator metadataGenerator = new MetadataGenerator(in, out);
- metadataGenerator.run();
-
- System.out.println("=== done");
- }
-
- /*
- * (non-Javadoc)
- * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
- */
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
-
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.epp.wizard.metadata.generator";
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
+ * org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
+ */
+ public void start( BundleContext context ) throws Exception {
+ super.start( context );
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop( BundleContext context ) throws Exception {
+ plugin = null;
+ super.stop( context );
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Application.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Application.java
new file mode 100644
index 0000000..53e62d1
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Application.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.File;
+
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+
+public class Application implements IApplication {
+
+ public Object start( IApplicationContext context ) throws Exception {
+ File in = new File( "data/model/IUs" );
+ File out = new File( "data/metadata" );
+ MetadataGenerator metadataGenerator = new MetadataGenerator( in, out );
+ metadataGenerator.run();
+ return null;
+ }
+
+ public void stop() {
+ // TODO Auto-generated method stub
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java
index 6f8dfc4..1976443 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/MetadataGenerator.java
@@ -1,65 +1,72 @@
-/*******************************************************************************
- * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
- * 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:
- * Innoopract Informationssysteme GmbH - initial API and implementation
- ******************************************************************************/
-package org.eclipse.epp.wizard.metadata.generator;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.net.URL;
-import java.util.Properties;
-
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.epp.wizard.internal.P2MetadataReader;
-import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
-import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
-import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.SimpleMetadataRepositoryFactory;
-
-@SuppressWarnings("restriction")
-public class MetadataGenerator {
-
- private static final String IU_EXTENSION = ".iu";
- private File out;
- private File in;
- private String repositoryTitle = "EPP Wizard Metadata repository";
-
- public MetadataGenerator(File in, File out) {
- this.in = in;
- this.out = out;
- }
-
- public void run() {
- try {
- File contentFile = out;
- File[] files = in.listFiles(new FilenameFilter() {
-
- public boolean accept(File dir, String name) {
- return name.endsWith(IU_EXTENSION);
- }
-
- });
-
- IMetadataRepository metadataRepository = new SimpleMetadataRepositoryFactory()
- .create(contentFile.toURI().toURL(),
- repositoryTitle, "",
- new Properties());
- for (File file : files) {
- URL url = file.toURI().toURL();
- IInstallableUnit unit = P2MetadataReader.readInstallableUnit(
- url, url.openStream(), new NullProgressMonitor());
- metadataRepository
- .addInstallableUnits(new IInstallableUnit[] { unit });
- }
- } catch (Throwable e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.net.URL;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
+import org.eclipse.equinox.internal.provisional.spi.p2.metadata.repository.SimpleMetadataRepositoryFactory;
+
+@SuppressWarnings("restriction")
+public class MetadataGenerator {
+
+ static Logger logger = Logger.getLogger( MetadataGenerator.class );
+ private static final String IU_EXTENSION = ".iu";
+ private File out;
+ private File in;
+ private String repositoryTitle = "EPP Wizard Metadata repository";
+
+ public MetadataGenerator( File in, File out ) {
+ this.in = in;
+ this.out = out;
+ }
+
+ public void run() {
+ try {
+ File contentFile = out;
+ logger.info( "Finding IUs in directory : " + in.getAbsolutePath() );
+ File[] files = in.listFiles( new FilenameFilter() {
+
+ public boolean accept( File dir, String name ) {
+ return name.endsWith( IU_EXTENSION );
+ }
+ } );
+ logger.info( "Creating metadata repository: "
+ + contentFile.getAbsolutePath() );
+ IMetadataRepository metadataRepository = new SimpleMetadataRepositoryFactory().create( contentFile.toURI()
+ .toURL(),
+ repositoryTitle,
+ "",
+ new Properties() );
+ for( File file : files ) {
+ logger.info( "Reading iu from file: " + file.getAbsolutePath() );
+ URL url = file.toURI().toURL();
+ IInstallableUnit unit = P2MetadataReader.readInstallableUnit( url,
+ url.openStream(),
+ new NullProgressMonitor() );
+ metadataRepository.addInstallableUnits( new IInstallableUnit[]{
+ unit
+ } );
+ logger.info( "Added IU \"" + unit.getId() + "\" to repository" );
+ }
+ logger.info( "Finished generating repository" );
+ } catch( Throwable e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataConstants.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataConstants.java
new file mode 100644
index 0000000..8ea2f8a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataConstants.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2008
+ * 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:
+ * Henrik Lindberg
+ ******************************************************************************/
+
+package org.eclipse.epp.wizard.metadata.generator;
+
+/**
+ * @author Henrik Lindberg
+ *
+ */
+public interface P2MetadataConstants
+{
+
+ static final String IU_METADATA_FORMAT = "InstallableUnit"; //$NON-NLS-1$
+
+ static final String INSTALLABLE_ELEMENT = "installable"; //$NON-NLS-1$
+
+ static final String INSTALLABLE_VERSION = "1.0.0"; //$NON-NLS-1$
+
+ static final String IU_METADATA_FORMAT_VERSION = "1.0.0"; //$NON-NLS-1$
+
+ static final String DEFAULT_IU_VERSION_STRING = "1.0.0"; //$NON-NLS-1$
+
+ static final String DEFAULT_IU_LICENSE_TEMPLATE = "The code, documentation and other materials contained herein have been"
+ + " licensed under the NAMEOFLICENSE - VERSION by the copyright holder(s)"
+ + " listed in the Copyright section.";
+
+ static final String DEFAULT_IU_COPYRIGHT_TEMPLATE = "Annotation to copyright URL, or the actual copyright text.";
+
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataReader.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataReader.java
new file mode 100644
index 0000000..d274363
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/P2MetadataReader.java
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * Copyright (c) 2008
+ * 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:
+ * Henrik Lindberg
+ ******************************************************************************/
+
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
+import org.eclipse.equinox.internal.p2.metadata.repository.Activator;
+import org.eclipse.equinox.internal.p2.metadata.repository.Messages;
+import org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataParser;
+import org.eclipse.equinox.internal.p2.persistence.XMLWriter;
+import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
+import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.InstallableUnitDescription;
+import org.eclipse.osgi.service.resolver.VersionRange;
+import org.eclipse.osgi.util.NLS;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Version;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * P2 Metadata Reader used to centralize reading of P2 metadata as API is likely to change.
+ * The InstallableUnit reader reuses the MetadataRepository handler for InstallableUnit but in an
+ * ugly way.
+ *
+ * TODO: The format, parser and writer should either be private, and use its own impl of
+ * the IInstallableUnit interface for the sole purpose of editing, or the Metadata API should
+ * allow creation of mutable instances.
+ *
+ * @author Henrik Lindberg
+ */
+@SuppressWarnings("restriction")
+public class P2MetadataReader implements P2MetadataConstants
+{
+
+ /**
+ * Reads metadata from the given stream, and returns the contained array
+ * of abstract metadata repositories.
+ * This method performs buffering, and closes the stream when finished.
+ */
+ public static InstallableUnit readInstallableUnit(URL location, InputStream input, IProgressMonitor monitor) throws ProvisionException {
+ BufferedInputStream bufferedInput = null;
+ try {
+ try {
+ bufferedInput = new BufferedInputStream(input);
+
+ Parser repositoryParser = new Parser(Activator.getContext(), Activator.ID);
+ repositoryParser.parse(input, monitor);
+ IStatus result = repositoryParser.getStatus();
+ switch (result.getSeverity()) {
+ case IStatus.CANCEL :
+ throw new OperationCanceledException();
+ case IStatus.ERROR :
+ throw new ProvisionException(result);
+ case IStatus.WARNING :
+ case IStatus.INFO :
+ LogHelper.log(result);
+ }
+ return repositoryParser.getInstallableUnit();
+ }
+ catch(Exception e)
+ {
+ e.printStackTrace(); // REMOVE ENTIRE CATCH
+ return null;
+ }
+ finally {
+ if (bufferedInput != null)
+ bufferedInput.close();
+ }
+ } catch (IOException ioe) {
+ String msg = NLS.bind(Messages.io_failedRead, location);
+ throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, ioe));
+ }
+ }
+
+ private interface XMLConstants extends org.eclipse.equinox.internal.p2.metadata.repository.io.XMLConstants {
+
+ // Constants defining the structure of the XML for a MetadataRepository
+
+ // A format version number for metadata repository XML.
+ public static final String XML_VERSION = "1.0.0"; //$NON-NLS-1$
+ public static final Version CURRENT_VERSION = new Version(XML_VERSION);
+ public static final VersionRange XML_TOLERANCE = new VersionRange(CURRENT_VERSION, true, new Version(2, 0, 0), false);
+
+ // Constants for processing Instructions
+ public static final String PI_IU_TARGET = "InstallableUnit"; //$NON-NLS-1$
+
+ // Constants for metadata IU elements
+ public static final String IU_ELEMENT = "installable"; //$NON-NLS-1$
+
+ }
+
+ @SuppressWarnings("unchecked")
+ protected XMLWriter.ProcessingInstruction[] createPI(Class iuClass) {
+ //TODO We should remove this processing instruction, but currently old clients rely on this. See bug 210450.
+ return new XMLWriter.ProcessingInstruction[] {XMLWriter.ProcessingInstruction.makeClassVersionInstruction(XMLConstants.PI_IU_TARGET, iuClass, XMLConstants.CURRENT_VERSION)};
+ }
+
+
+ /*
+ * Parser for the contents of a installable unit,
+ * as written by the Writer class.
+ */
+ private static class Parser extends MetadataParser implements XMLConstants {
+
+ private InstallableUnit theInstallableUnit = null;
+
+ public Parser(BundleContext context, String bundleId) {
+ super(context, bundleId);
+ }
+
+ public synchronized void parse(InputStream stream, IProgressMonitor monitor) throws IOException {
+ this.status = null;
+ setProgressMonitor(monitor);
+ monitor.beginTask("Loading installable unit", IProgressMonitor.UNKNOWN);
+ try {
+ // TODO: currently not caching the parser since we make no assumptions
+ // or restrictions on concurrent parsing
+ getParser();
+ IUHandler iuHandler = new IUHandler();
+ xmlReader.setContentHandler(new IUDocHandler(IU_ELEMENT, iuHandler));
+ xmlReader.parse(new InputSource(stream));
+ if (isValidXML()) {
+ theInstallableUnit = iuHandler.getInstallableUnit();
+ }
+ } catch (SAXException e) {
+ throw new IOException(e.getMessage());
+ } catch (ParserConfigurationException e) {
+ throw new IOException(e.getMessage());
+ } finally {
+ monitor.done();
+ stream.close();
+ }
+ }
+
+ public InstallableUnit getInstallableUnit() {
+ return theInstallableUnit;
+ }
+
+ @Override
+ protected Object getRootObject() {
+ return getInstallableUnit();
+ }
+
+ private final class IUDocHandler extends DocHandler {
+
+ public IUDocHandler(String rootName, RootHandler rootHandler) {
+ super(rootName, rootHandler);
+ }
+
+ @Override
+ public void processingInstruction(String target, String data) throws SAXException {
+ if (PI_IU_TARGET.equals(target)) {
+ Version repositoryVersion = extractPIVersion(target, data);
+ if (!P2MetadataReader.XMLConstants.XML_TOLERANCE.isIncluded(repositoryVersion)) {
+ throw new SAXException(NLS.bind(Messages.io_IncompatibleVersion, repositoryVersion, P2MetadataReader.XMLConstants.XML_TOLERANCE));
+ }
+ }
+ }
+
+ }
+
+ private final class IUHandler extends RootHandler {
+ private InstallableUnitHandler unitHandler = null;
+ ArrayList<InstallableUnitDescription> units = null;
+
+ private InstallableUnit installableUnit = null;
+
+ public IUHandler() {
+ super();
+ }
+
+ public InstallableUnit getInstallableUnit() {
+ return this.installableUnit;
+ }
+
+ @Override
+ protected void handleRootAttributes(Attributes attributes) {
+ // root element *is* the Installable Unit - the default parser is from
+ // the meta data repository parser, and it expects to parse a number of
+ // units, returning InstallableUnitDescription instances in a List.
+ }
+
+ @Override
+ public void startElement(String name, Attributes attributes) {
+ checkCancel();
+ if (name.equals(INSTALLABLE_UNIT_ELEMENT)) {
+ this.units = new ArrayList<InstallableUnitDescription>(1);
+ this.unitHandler = new InstallableUnitHandler(this, attributes, units);
+ } else {
+ invalidElement(name, attributes);
+ }
+ }
+
+ @Override
+ protected void finished() {
+ if (isValidXML()) {
+ // TODO: This is an Ugly cast because the unit handler returns an interface rather than the mutable instance.
+ //
+ this.installableUnit = (InstallableUnit) this.unitHandler.getInstallableUnit();
+ }
+ }
+ }
+
+ @Override
+ protected String getErrorMessage() {
+ return Messages.io_parseError;
+ }
+
+ @Override
+ public String toString() {
+ // TODO:
+ return null;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java
index 397835a..668c4a4 100644
--- a/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java
+++ b/plugins/org.eclipse.epp.wizard.metadata.generator/src/org/eclipse/epp/wizard/metadata/generator/Package2IU.java
@@ -1,104 +1,90 @@
-/*******************************************************************************
- * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
- * 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:
- * Innoopract Informationssysteme GmbH - initial API and implementation
- ******************************************************************************/
-package org.eclipse.epp.wizard.metadata.generator;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-
-public class Package2IU {
-
- /**
- * Converts EPP package definition
- * (http://wiki.eclipse.org/EPP/Configuration_File_Format) to IU format
- *
- * @param args
- */
- public static void main(String[] args) {
-
- File packageDirectory = new File(
- "../org.eclipse.epp.wizard/data/model/packages");
- File xsltFile = new File(
- "../org.eclipse.epp.wizard/data/model/packages/package2iu.xslt");
- File[] files = packageDirectory.listFiles(new FilenameFilter() {
-
- public boolean accept(File dir, String name) {
- return name.endsWith(".xml");
- }
-
- });
- Source xsltSource = new javax.xml.transform.stream.StreamSource(
- xsltFile);
-
- // create an instance of TransformerFactory
- javax.xml.transform.TransformerFactory transFact = javax.xml.transform.TransformerFactory
- .newInstance();
- transFact.setAttribute("indent-number", 4);
- try {
- javax.xml.transform.Transformer trans = transFact.newTransformer(xsltSource);
- trans.setOutputProperty(OutputKeys.INDENT, "yes");
- Pattern pattern = Pattern.compile("eclipse_([a-z]+)_340.xml");
- for (File file : files) {
- Matcher matcher = pattern.matcher(file.getName());
- String pkg = null;
- if(matcher.find())
- {
- System.out.println(matcher.group(1));
- pkg = matcher.group(1);
- }
- else
- {
- continue;
- }
- try {
- File xmlFile = file;
- File outFile = new File(packageDirectory,pkg +".iu");
-
- Source xmlSource = new javax.xml.transform.stream.StreamSource(
- xmlFile);
- Result result = new javax.xml.transform.stream.StreamResult(
- new OutputStreamWriter(
- new FileOutputStream(outFile), "UTF-8"));
- trans.setParameter("epp.name", "epp."+pkg);
- trans.setParameter("epp.version", "3.4.0.qualifier");
- trans.transform(xmlSource, result);
- } catch (TransformerConfigurationException e) {
- // TODO h block
- e.printStackTrace();
- } catch (TransformerException e) {
- // TODO Auto-generatedAuto-generated catc catch block
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- } catch (TransformerConfigurationException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
-
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.metadata.generator;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+
+public class Package2IU {
+
+ /**
+ * Converts EPP package definition
+ * (http://wiki.eclipse.org/EPP/Configuration_File_Format) to IU format
+ *
+ * @param args
+ */
+ public static void main( String[] args ) {
+ File packageDirectory = new File( "../org.eclipse.epp.wizard/data/model/packages" );
+ File xsltFile = new File( "../org.eclipse.epp.wizard/data/model/packages/package2iu.xslt" );
+ File[] files = packageDirectory.listFiles( new FilenameFilter() {
+
+ public boolean accept( File dir, String name ) {
+ return name.endsWith( ".xml" );
+ }
+ } );
+ Source xsltSource = new javax.xml.transform.stream.StreamSource( xsltFile );
+ // create an instance of TransformerFactory
+ javax.xml.transform.TransformerFactory transFact = javax.xml.transform.TransformerFactory.newInstance();
+ transFact.setAttribute( "indent-number", 4 );
+ try {
+ javax.xml.transform.Transformer trans = transFact.newTransformer( xsltSource );
+ trans.setOutputProperty( OutputKeys.INDENT, "yes" );
+ Pattern pattern = Pattern.compile( "eclipse_([a-z]+)_340.xml" );
+ for( File file : files ) {
+ Matcher matcher = pattern.matcher( file.getName() );
+ String pkg = null;
+ if( matcher.find() ) {
+ System.out.println( matcher.group( 1 ) );
+ pkg = matcher.group( 1 );
+ } else {
+ continue;
+ }
+ try {
+ File xmlFile = file;
+ File outFile = new File( packageDirectory, pkg + ".iu" );
+ Source xmlSource = new javax.xml.transform.stream.StreamSource( xmlFile );
+ Result result = new javax.xml.transform.stream.StreamResult( new OutputStreamWriter( new FileOutputStream( outFile ),
+ "UTF-8" ) );
+ trans.setParameter( "epp.name", "epp." + pkg );
+ trans.setParameter( "epp.version", "3.4.0.qualifier" );
+ trans.transform( xmlSource, result );
+ } catch( TransformerConfigurationException e ) {
+ // TODO h block
+ e.printStackTrace();
+ } catch( TransformerException e ) {
+ // TODO Auto-generatedAuto-generated catc catch block
+ e.printStackTrace();
+ } catch( UnsupportedEncodingException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch( FileNotFoundException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ } catch( TransformerConfigurationException e1 ) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF
index 354f196..0f2b98e 100644
--- a/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard.model/META-INF/MANIFEST.MF
@@ -4,13 +4,14 @@
Bundle-SymbolicName: org.eclipse.epp.wizard.model
Bundle-Version: 0.0.1.qualifier
Bundle-ClassPath: jdom.jar, eppmodel.jar
-Require-Bundle: org.junit;resolution:=optional,
- org.jdom,
+Require-Bundle: org.jdom,
org.eclipse.equinox.p2.metadata.repository,
- org.eclipse.equinox.p2.metadata
+ org.eclipse.equinox.p2.metadata,
+ org.junit;bundle-version="3.8.2";resolution:=optional
Export-Package: org.eclipse.epp.wizard.model
Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Import-Package: org.eclipse.core.runtime;version="3.4.0",
+Import-Package: org.apache.log4j,
+ org.eclipse.core.runtime;version="3.4.0",
org.eclipse.equinox.internal.p2.metadata.repository,
org.eclipse.equinox.internal.provisional.p2.core,
org.eclipse.equinox.internal.provisional.p2.metadata.query,
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java
index a534254..876b313 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModel.java
@@ -12,30 +12,42 @@
import java.io.IOException;
import java.net.URL;
+import java.util.HashMap;
+import java.util.List;
+import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
import org.jdom.JDOMException;
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
+@SuppressWarnings("restriction")
public class EPPModel {
- public EPPModel(Structure structure) {
- super();
- this.structure = structure;
- }
+ public EPPModel( Structure structure ) {
+ super();
+ this.structure = structure;
+ }
+ private Structure structure;
- private Structure structure;
+ public Structure getStructure() {
+ return structure;
+ }
- public Structure getStructure() {
- return structure;
- }
+ public List<IURef> getAllRefs( IURef ref ) {
+ return refMap.get( ref.getIU() );
+ }
+ private HashMap<InstallableUnit, List<IURef>> refMap = new HashMap<InstallableUnit, List<IURef>>();
- public static EPPModel read(final URL modelLocation, final URL metadataRepository)
- throws IOException,
- JDOMException {
- return (new EPPModelDeserializer()).deserialize(modelLocation,
- metadataRepository);
- }
+ public HashMap<InstallableUnit, List<IURef>> getRefMap() {
+ return refMap;
+ }
+ public static EPPModel read( final URL modelLocation,
+ final URL metadataRepository )
+ throws IOException, JDOMException
+ {
+ return ( new EPPModelDeserializer() ).deserialize( modelLocation,
+ metadataRepository );
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java
index 9d1dd4e..de38545 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/EPPModelDeserializer.java
@@ -33,104 +33,113 @@
@SuppressWarnings("restriction")
public class EPPModelDeserializer {
- private static final String TAG_INFO = "info";
- private static final String TAG_SCREEN = "screen";
- private static final String TAG_GROUP = "group";
- private static final String TAG_IUREF = "iuref";
- private static final String TAG_REFID = "refid";
- private static final String TAG_LABEL = "label";
- private static final String TAG_ICON = "icon";
- private static final String TAG_ALIAS = "alias";
- private static final String TAG_STRUCTURE = "structure";
- private IMetadataRepository repository;
+ private static final String TAG_INFO = "info";
+ private static final String TAG_SCREEN = "screen";
+ private static final String TAG_GROUP = "group";
+ private static final String TAG_IUREF = "iuref";
+ private static final String TAG_REFID = "refid";
+ private static final String TAG_LABEL = "label";
+ private static final String TAG_ICON = "icon";
+ private static final String TAG_ALIAS = "alias";
+ private static final String TAG_STRUCTURE = "structure";
+ private IMetadataRepository repository;
- public EPPModel deserialize(final URL modelUrl, final URL metadataURL)
- throws JDOMException, IOException {
- InputStream input = new BufferedInputStream(modelUrl.openStream());
- SAXBuilder builder = new SAXBuilder();
- Document document = builder.build(input);
- Element root = document.getRootElement();
- EPPModel model = readModel(root);
- MetadataRepositoryManager repositoryManager = new MetadataRepositoryManager();
- try {
- repository = repositoryManager.loadRepository(metadataURL,
- new NullProgressMonitor());
- resolveReferences(model);
- } catch (ProvisionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return model;
- }
+ public EPPModel deserialize( final URL modelUrl, final URL metadataURL )
+ throws JDOMException, IOException
+ {
+ InputStream input = new BufferedInputStream( modelUrl.openStream() );
+ SAXBuilder builder = new SAXBuilder();
+ Document document = builder.build( input );
+ Element root = document.getRootElement();
+ EPPModel model = readModel( root );
+ MetadataRepositoryManager repositoryManager = new MetadataRepositoryManager();
+ try {
+ repository = repositoryManager.loadRepository( metadataURL,
+ new NullProgressMonitor() );
+ resolveReferences( model );
+ } catch( ProvisionException e ) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return model;
+ }
- @SuppressWarnings("unchecked")
- private InstallableUnit findIU(String id) {
- Collector collector = new Collector();
- repository.query(new InstallableUnitQuery(id), collector,
- new NullProgressMonitor());
- Collection<Object> results = collector.toCollection();
- if (results.size() != 1) {
- throw new RuntimeException("Unexpected number of results for IU "
- + id + "(" + results.size() + ")");
- }
- return (InstallableUnit) results.iterator().next();
- }
+ @SuppressWarnings("unchecked")
+ private InstallableUnit findIU( String id ) {
+ Collector collector = new Collector();
+ repository.query( new InstallableUnitQuery( id ),
+ collector,
+ new NullProgressMonitor() );
+ Collection<Object> results = collector.toCollection();
+ if( results.size() != 1 ) {
+ throw new RuntimeException( "Unexpected number of results for IU "
+ + id
+ + "("
+ + results.size()
+ + ")" );
+ }
+ return ( InstallableUnit )results.iterator().next();
+ }
- private void resolveReferences(EPPModel model) {
- for (Screen screen : model.getStructure().getScreens()) {
- for (Group group : screen.getGroups()) {
- for (IURef iuRef : group.getIURefs()) {
- InstallableUnit iu = findIU(iuRef.getRefId());
- iuRef.setIU(iu);
- }
- }
- }
- }
+ private void resolveReferences( EPPModel model ) {
+ for( Screen screen : model.getStructure().getScreens() ) {
+ for( Group group : screen.getGroups() ) {
+ for( IURef iuRef : group.getIURefs() ) {
+ InstallableUnit iu = findIU( iuRef.getRefId() );
+ iuRef.setIU( iu );
+ List<IURef> refList = model.getRefMap().get( iu );
+ if( refList == null ) {
+ refList = new ArrayList<IURef>();
+ model.getRefMap().put( iu, refList );
+ }
+ refList.add( iuRef );
+ }
+ }
+ }
+ }
- private EPPModel readModel(Element root) {
- Element structureElement = root.getChild(TAG_STRUCTURE);
- Structure structure = readStructure(structureElement);
- EPPModel model = new EPPModel(structure);
- return model;
- }
+ private EPPModel readModel( Element root ) {
+ Element structureElement = root.getChild( TAG_STRUCTURE );
+ Structure structure = readStructure( structureElement );
+ EPPModel model = new EPPModel( structure );
+ return model;
+ }
- private Structure readStructure(Element structureElement) {
- List<Screen> screenList = new ArrayList<Screen>();
- for (Object screenObject : structureElement.getChildren(TAG_SCREEN)) {
- Element screenElement = (Element) screenObject;
- screenList.add(readScreen(screenElement));
- }
- return new Structure(screenList);
- }
+ private Structure readStructure( Element structureElement ) {
+ List<Screen> screenList = new ArrayList<Screen>();
+ for( Object screenObject : structureElement.getChildren( TAG_SCREEN ) ) {
+ Element screenElement = ( Element )screenObject;
+ screenList.add( readScreen( screenElement ) );
+ }
+ return new Structure( screenList );
+ }
- private Screen readScreen(Element screenElement) {
- List<Group> groupList = new ArrayList<Group>();
- for (Object groupObject : screenElement.getChildren(TAG_GROUP)) {
- Element groupElement = (Element) groupObject;
- groupList.add(readGroup(groupElement));
- }
- String screenLabel = screenElement.getAttributeValue(TAG_LABEL);
- return new Screen(screenLabel, groupList);
- }
+ private Screen readScreen( Element screenElement ) {
+ List<Group> groupList = new ArrayList<Group>();
+ for( Object groupObject : screenElement.getChildren( TAG_GROUP ) ) {
+ Element groupElement = ( Element )groupObject;
+ groupList.add( readGroup( groupElement ) );
+ }
+ String screenLabel = screenElement.getAttributeValue( TAG_LABEL );
+ return new Screen( screenLabel, groupList );
+ }
- private Group readGroup(Element groupElement) {
- List<IURef> iuRefList = new ArrayList<IURef>();
- for (Object iuRefObject : groupElement.getChildren(TAG_IUREF)) {
- Element iuRefElement = (Element) iuRefObject;
- iuRefList.add(readIURef(iuRefElement));
- }
- String groupLabel = groupElement.getAttributeValue(TAG_LABEL);
- String groupAlias = groupElement.getAttributeValue(TAG_ALIAS);
- String groupIcon = groupElement.getAttributeValue(TAG_ICON);
- String description = groupElement.getChildTextTrim(TAG_INFO);
- return new Group(groupLabel, groupAlias, groupIcon, description,
- iuRefList);
- }
+ private Group readGroup( Element groupElement ) {
+ List<IURef> iuRefList = new ArrayList<IURef>();
+ for( Object iuRefObject : groupElement.getChildren( TAG_IUREF ) ) {
+ Element iuRefElement = ( Element )iuRefObject;
+ iuRefList.add( readIURef( iuRefElement ) );
+ }
+ String groupLabel = groupElement.getAttributeValue( TAG_LABEL );
+ String groupAlias = groupElement.getAttributeValue( TAG_ALIAS );
+ String groupIcon = groupElement.getAttributeValue( TAG_ICON );
+ String description = groupElement.getChildTextTrim( TAG_INFO );
+ return new Group( groupLabel, groupAlias, groupIcon, description, iuRefList );
+ }
- private IURef readIURef(Element iuRefElement) {
- String refid = iuRefElement.getAttributeValue(TAG_REFID);
- String alias = iuRefElement.getAttributeValue(TAG_ALIAS);
- return new IURef(refid, alias);
- }
-
+ private IURef readIURef( Element iuRefElement ) {
+ String refid = iuRefElement.getAttributeValue( TAG_REFID );
+ String alias = iuRefElement.getAttributeValue( TAG_ALIAS );
+ return new IURef( refid, alias );
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java
index 44f9f51..166ccd6 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Feature.java
@@ -10,33 +10,30 @@
******************************************************************************/
package org.eclipse.epp.wizard.model;
-
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
public class Feature {
- public Feature(String id, String label, String description) {
- super();
- this.description = description;
- this.id = id;
- this.label = label;
- }
+ public Feature( String id, String label, String description ) {
+ super();
+ this.description = description;
+ this.id = id;
+ this.label = label;
+ }
+ private final String id;
+ private final String label;
- private final String id;
- private final String label;
+ public String getId() {
+ return id;
+ }
- public String getId() {
- return id;
- }
+ public String getLabel() {
+ return label;
+ }
- public String getLabel() {
- return label;
- }
-
- public String getDescription() {
- return description;
- }
-
- private final String description;
+ public String getDescription() {
+ return description;
+ }
+ private final String description;
}
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java
index afe45fb..6741cea 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/FeatureRef.java
@@ -10,46 +10,43 @@
******************************************************************************/
package org.eclipse.epp.wizard.model;
-
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
public class FeatureRef {
- private Group parent;
- private Feature feature;
+ private Group parent;
+ private Feature feature;
- public FeatureRef(String id, String alias) {
- super();
- this.id = id;
- this.alias = alias;
- }
+ public FeatureRef( String id, String alias ) {
+ super();
+ this.id = id;
+ this.alias = alias;
+ }
- public void setParent(Group parent) {
- this.parent = parent;
- }
+ public void setParent( Group parent ) {
+ this.parent = parent;
+ }
+ private final String id;
+ private final String alias;
- private final String id;
- private final String alias;
+ public Group getParent() {
+ return parent;
+ }
- public Group getParent() {
- return parent;
- }
+ public String getId() {
+ return id;
+ }
- public String getId() {
- return id;
- }
+ public String getAlias() {
+ return alias;
+ }
- public String getAlias() {
- return alias;
- }
+ public void setFeature( Feature feature ) {
+ this.feature = feature;
+ }
- public void setFeature(Feature feature) {
- this.feature = feature;
- }
-
- public Feature getFeature() {
- return feature;
- }
-
+ public Feature getFeature() {
+ return feature;
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java
index 8a9fd65..fd2a8e6 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Features.java
@@ -17,18 +17,18 @@
*/
public class Features {
- private final List<Feature> features;
+ private final List<Feature> features;
- public Features(List<Feature> features) {
- super();
- this.features = features;
- }
+ public Features( List<Feature> features ) {
+ super();
+ this.features = features;
+ }
- public Feature[] getFeatures() {
- return features.toArray(new Feature[features.size()]);
- }
+ public Feature[] getFeatures() {
+ return features.toArray( new Feature[ features.size() ] );
+ }
- public Feature getFeature(FeatureRef featureRef) {
- return featureRef.getFeature();
- }
+ public Feature getFeature( FeatureRef featureRef ) {
+ return featureRef.getFeature();
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java
index 26703ab..12ee4ff 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Group.java
@@ -27,7 +27,6 @@
private final String icon;
private final String info;
-
public String getInfo() {
return info;
}
@@ -59,7 +58,9 @@
this.label = label;
this.alias = alias;
this.icon = icon;
- this.info = info == null?"":info;
+ this.info = info == null
+ ? ""
+ : info;
this.iuRefs = iuRefs;
for( IURef iuRef : iuRefs ) {
iuRef.setParent( this );
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java
index eae4b01..29d95ac 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/IURef.java
@@ -12,47 +12,44 @@
import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
-
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
@SuppressWarnings("restriction")
public class IURef {
- private Group parent;
- private InstallableUnit feature;
+ private Group parent;
+ private InstallableUnit feature;
- public IURef(String refid, String alias) {
- super();
- this.refid = refid;
- this.alias = alias;
- }
+ public IURef( String refid, String alias ) {
+ super();
+ this.refid = refid;
+ this.alias = alias;
+ }
- public void setParent(Group parent) {
- this.parent = parent;
- }
+ public void setParent( Group parent ) {
+ this.parent = parent;
+ }
+ private final String refid;
+ private final String alias;
- private final String refid;
- private final String alias;
+ public Group getParent() {
+ return parent;
+ }
- public Group getParent() {
- return parent;
- }
+ public String getRefId() {
+ return refid;
+ }
- public String getRefId() {
- return refid;
- }
+ public String getAlias() {
+ return alias;
+ }
- public String getAlias() {
- return alias;
- }
+ public void setIU( InstallableUnit feature ) {
+ this.feature = feature;
+ }
- public void setIU(InstallableUnit feature) {
- this.feature = feature;
- }
-
- public InstallableUnit getIU() {
- return feature;
- }
-
+ public InstallableUnit getIU() {
+ return feature;
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java
index 5978abb..5eb6ef6 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Screen.java
@@ -17,25 +17,22 @@
*/
public class Screen {
+ public Group[] getGroups() {
+ return groups.toArray( new Group[ groups.size() ] );
+ }
- public Group[] getGroups() {
- return groups.toArray(new Group[groups.size()]);
- }
+ public String getLabel() {
+ return label;
+ }
- public String getLabel() {
- return label;
- }
-
- public Screen(String label, List<Group> groups) {
- super();
- this.groups = groups;
- this.label = label;
- for (Group group : groups) {
- group.setParent(this);
- }
- }
-
- private final List<Group> groups;
- private final String label;
-
+ public Screen( String label, List<Group> groups ) {
+ super();
+ this.groups = groups;
+ this.label = label;
+ for( Group group : groups ) {
+ group.setParent( this );
+ }
+ }
+ private final List<Group> groups;
+ private final String label;
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java
index d07b6bf..9c230d8 100644
--- a/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java
+++ b/plugins/org.eclipse.epp.wizard.model/src/org/eclipse/epp/wizard/model/Structure.java
@@ -17,14 +17,13 @@
*/
public class Structure {
- protected List<Screen> screens;
+ protected List<Screen> screens;
- public Structure(final List<Screen> screens) {
- this.screens = screens;
- }
+ public Structure( final List<Screen> screens ) {
+ this.screens = screens;
+ }
- public Screen[] getScreens() {
- return screens.toArray(new Screen[screens.size()]);
- }
-
+ public Screen[] getScreens() {
+ return screens.toArray( new Screen[ screens.size() ] );
+ }
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java b/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java
index 330a33b..f717ca8 100644
--- a/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java
+++ b/plugins/org.eclipse.epp.wizard.model/test/org/eclipse/epp/wizard/model/Model_Test.java
@@ -19,43 +19,38 @@
*/
public class Model_Test extends TestCase {
- public void testModel() throws Exception {
- URL url = getFile("eppmodel.xml");
- URL urlmetadata = new URL("file:test/org/eclipse/epp/wizard/model");
- EPPModel model = EPPModel.read(url, urlmetadata);
- assertNotNull(model);
+ public void testModel() throws Exception {
+ URL url = getFile( "eppmodel.xml" );
+ URL urlmetadata = new URL( "file:test/org/eclipse/epp/wizard/model" );
+ EPPModel model = EPPModel.read( url, urlmetadata );
+ assertNotNull( model );
+ Structure structure = model.getStructure();
+ assertNotNull( structure );
+ Screen[] screens = structure.getScreens();
+ assertEquals( 3, screens.length );
+ Group[] groups = screens[ 0 ].getGroups();
+ assertEquals( 2, groups.length );
+ assertEquals( "group.png", groups[ 0 ].getIcon() );
+ assertEquals( "Classic info", groups[ 0 ].getInfo() );
+ assertEquals( "", groups[ 1 ].getInfo() );
+ assertEquals( "Screen 1", screens[ 0 ].getLabel() );
+ IURef[] featureRefs = groups[ 0 ].getIURefs();
+ assertEquals( 3, featureRefs.length );
+ }
- Structure structure = model.getStructure();
- assertNotNull(structure);
- Screen[] screens = structure.getScreens();
- assertEquals(3, screens.length);
+ private URL getFile( final String name ) {
+ return getClass().getResource( name );
+ }
- Group[] groups = screens[0].getGroups();
- assertEquals(2, groups.length);
- assertEquals("group.png", groups[0].getIcon());
- assertEquals("Classic info", groups[0].getInfo());
- assertEquals("", groups[1].getInfo());
-
- assertEquals("Screen 1", screens[0].getLabel());
-
- IURef[] featureRefs = groups[0].getIURefs();
- assertEquals(3, featureRefs.length);
-
- }
-
- private URL getFile(final String name) {
- return getClass().getResource(name);
- }
-
- public void testParents() throws Exception {
- URL url = getFile("eppmodel.xml");
- URL urlmetadata = new URL("file:test/org/eclipse/epp/wizard/model");
- EPPModel model = EPPModel.read(url, urlmetadata);
- assertNotNull(model);
- Screen screen = model.getStructure().getScreens()[0];
- Group group = screen.getGroups()[0];
- IURef featureRef = group.getIURefs()[0];
- assertSame(screen, group.getParent());
- assertSame(group, featureRef.getParent());
- }
+ public void testParents() throws Exception {
+ URL url = getFile( "eppmodel.xml" );
+ URL urlmetadata = new URL( "file:test/org/eclipse/epp/wizard/model" );
+ EPPModel model = EPPModel.read( url, urlmetadata );
+ assertNotNull( model );
+ Screen screen = model.getStructure().getScreens()[ 0 ];
+ Group group = screen.getGroups()[ 0 ];
+ IURef featureRef = group.getIURefs()[ 0 ];
+ assertSame( screen, group.getParent() );
+ assertSame( group, featureRef.getParent() );
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf b/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf
index e3c04c1..eb26866 100644
--- a/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf
+++ b/plugins/org.eclipse.epp.wizard.releng/eppwizard.psf
@@ -3,13 +3,16 @@
<provider id="org.eclipse.team.cvs.core.cvsnature">
<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/tools,org.eclipse.orbit/javax.servlet,javax.servlet,v2_4"/>
<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/tools,org.eclipse.orbit/org.apache.commons.logging,org.apache.commons.logging,v1_0_4"/>
+<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/tools,org.eclipse.orbit/org.apache.log4j,org.apache.log4j,v1_2_13"/>
<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/releng/org.eclipse.epp.config,org.eclipse.epp.config"/>
<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard,org.eclipse.epp.wizard"/>
<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.installer.jnlp.feature,org.eclipse.epp.wizard.installer.jnlp.feature"/>
<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.installerbuilder,org.eclipse.epp.wizard.installerbuilder"/>
+<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.kickstarter,org.eclipse.epp.wizard.kickstarter"/>
<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.metadata.generator,org.eclipse.epp.wizard.metadata.generator"/>
<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.model,org.eclipse.epp.wizard.model"/>
<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.releng,org.eclipse.epp.wizard.releng"/>
+<project reference="1.0,:extssh:dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/plugins/org.eclipse.epp.wizard.war.feature,org.eclipse.epp.wizard.war.feature"/>
<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.equinox.http.jetty,org.eclipse.equinox.http.jetty"/>
<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.equinox.http.registry,org.eclipse.equinox.http.registry"/>
<project reference="1.0,:pserver:dev.eclipse.org:/cvsroot/eclipse,org.eclipse.equinox.http.servlet,org.eclipse.equinox.http.servlet"/>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.classpath b/plugins/org.eclipse.epp.wizard.war.feature/.classpath
new file mode 100644
index 0000000..d171cd4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.project b/plugins/org.eclipse.epp.wizard.war.feature/.project
new file mode 100644
index 0000000..c79d1f8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.epp.wizard.war.feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.resources.prefs b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..bc8f45b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+#Tue Dec 04 14:46:45 CET 2007
+eclipse.preferences.version=1
+encoding/<project>=ISO-8859-1
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.runtime.prefs b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..eca65dd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,3 @@
+#Tue Dec 04 14:46:31 CET 2007
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..47b0de7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Thu Aug 14 09:32:14 CEST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/bare feature.xml b/plugins/org.eclipse.epp.wizard.war.feature/bare feature.xml
new file mode 100644
index 0000000..3035d46
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/bare feature.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.epp.wizard.war.feature"
+ label="RAP Demo Deployment Feature"
+ version="1.1.0.qualifier"
+ provider-name="eclipse.org">
+
+ <description url="http://www.example.com/description">
+ [Enter Feature Description here.]
+ </description>
+
+ <copyright url="http://www.example.com/copyright">
+ [Enter Copyright Description here.]
+ </copyright>
+
+ <license url="http://www.example.com/license">
+ [Enter License Description here.]
+ </license>
+
+ <plugin
+ id="org.eclipse.core.commands"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.contenttype"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.jobs"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.runtime"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.common"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.registry"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.servlet"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.servletbridge"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.preferences"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.registry"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi.services"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.jface"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.rwt"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.ui.workbench"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.expressions"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.app"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.rwt.q07"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.jface.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="com.ibm.icu"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.ui.views"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.update.configurator"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.core.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build.properties b/plugins/org.eclipse.epp.wizard.war.feature/build.properties
new file mode 100644
index 0000000..82ab19c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/.eclipseproduct b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/.eclipseproduct
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/.eclipseproduct
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/configuration/config.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/configuration/config.ini
new file mode 100644
index 0000000..7874020
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/configuration/config.ini
@@ -0,0 +1,3 @@
+#Eclipse Runtime Configuration File
+osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.rap.ui@4:start, org.eclipse.epp.wizard.kickstarter@5:start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@startosgi.bundles.default
+StartLevel=4
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/features/org.eclipse.epp.wizard.war.feature_1.1.0.200809191530/feature.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/features/org.eclipse.epp.wizard.war.feature_1.1.0.200809191530/feature.xml
new file mode 100644
index 0000000..c85d4db
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/features/org.eclipse.epp.wizard.war.feature_1.1.0.200809191530/feature.xml
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.epp.wizard.war.feature"
+ label="RAP Demo Deployment Feature"
+ version="1.1.0.200809191530"
+ provider-name="eclipse.org">
+
+ <description url="http://www.example.com/description">
+ [Enter Feature Description here.]
+ </description>
+
+ <copyright url="http://www.example.com/copyright">
+ [Enter Copyright Description here.]
+ </copyright>
+
+ <license url="http://www.example.com/license">
+ [Enter License Description here.]
+ </license>
+
+ <plugin
+ id="org.eclipse.core.commands"
+ download-size="0"
+ install-size="0"
+ version="3.4.0.I20080509-2000"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.contenttype"
+ download-size="0"
+ install-size="0"
+ version="3.3.0.v20080604-1400"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.jobs"
+ download-size="0"
+ install-size="0"
+ version="3.4.0.v20080512"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.runtime"
+ download-size="0"
+ install-size="0"
+ version="3.4.0.v20080512"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.common"
+ download-size="0"
+ install-size="0"
+ version="3.4.0.v20080421-2006"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.registry"
+ download-size="0"
+ install-size="0"
+ version="1.0.100.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.servlet"
+ download-size="0"
+ install-size="0"
+ version="1.0.100.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.servletbridge"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.preferences"
+ download-size="0"
+ install-size="0"
+ version="3.2.200.v20080421-2006"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.registry"
+ download-size="0"
+ install-size="0"
+ version="3.4.0.v20080516-0950"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi"
+ download-size="0"
+ install-size="0"
+ version="3.4.0.v20080605-1900"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi.services"
+ download-size="0"
+ install-size="0"
+ version="3.1.200.v20071203"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.jface"
+ download-size="0"
+ install-size="0"
+ version="1.1.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.rwt"
+ download-size="0"
+ install-size="0"
+ version="1.1.1.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.ui.workbench"
+ download-size="0"
+ install-size="0"
+ version="1.1.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.expressions"
+ download-size="0"
+ install-size="0"
+ version="3.4.0.v20080603-2000"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.app"
+ download-size="0"
+ install-size="0"
+ version="1.1.0.v20080421-2006"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.ui"
+ download-size="0"
+ install-size="0"
+ version="1.1.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.rwt.q07"
+ download-size="0"
+ install-size="0"
+ version="1.1.1.200809191530"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.databinding"
+ download-size="0"
+ install-size="0"
+ version="1.1.0.I20080527-2000"
+ unpack="false"/>
+
+ <plugin
+ id="com.ibm.icu"
+ download-size="0"
+ install-size="0"
+ version="3.8.1.v20080530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.p2.core"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.p2.metadata"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.v20080514-1900"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.p2.metadata.repository"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.v20080604"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf"
+ download-size="0"
+ install-size="0"
+ version="2.0.0.v20080611-1715"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf.filetransfer"
+ download-size="0"
+ install-size="0"
+ version="2.0.0.v20080611-1715"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf.identity"
+ download-size="0"
+ install-size="0"
+ version="2.0.0.v20080611-1715"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf.provider.filetransfer"
+ download-size="0"
+ install-size="0"
+ version="2.0.0.v20080611-1715"
+ unpack="false"/>
+
+ <plugin
+ id="org.sat4j.core"
+ download-size="0"
+ install-size="0"
+ version="2.0.0.v20080602"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.security"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.v20080512-1800"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard.model"
+ download-size="0"
+ install-size="0"
+ version="0.0.1.200809191530"/>
+
+ <plugin
+ id="org.jdom"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard.installerbuilder"
+ download-size="0"
+ install-size="0"
+ version="1.0.0.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.ant"
+ download-size="0"
+ install-size="0"
+ version="1.7.0.v200803061910"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard.kickstarter"
+ download-size="0"
+ install-size="0"
+ version="1.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.update.configurator"
+ download-size="0"
+ install-size="0"
+ version="3.2.200.v20080417"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.servletbridge"
+ download-size="0"
+ install-size="0"
+ version="1.0.100.200809191530"/>
+
+ <plugin
+ id="org.apache.commons.logging"
+ download-size="0"
+ install-size="0"
+ version="1.0.4.200809191530"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.log4j"
+ download-size="0"
+ install-size="0"
+ version="1.2.13.200809191530"
+ unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/launch.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/launch.ini
new file mode 100644
index 0000000..17af11d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/launch.ini
@@ -0,0 +1,11 @@
+# Eclipse Runtime Configuration Overrides
+# These properties are loaded prior to starting the framework and can also be used to override System Properties
+# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework
+# "*" can be used together with @null to clear System Properties that match a prefix name.
+
+osgi.*=@null
+org.osgi.*=@null
+eclipse.*=@null
+
+osgi.parentClassloader=app
+osgi.contextClassLoaderParent=app
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/com.ibm.icu_3.8.1.v20080530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/com.ibm.icu_3.8.1.v20080530.jar
new file mode 100644
index 0000000..1d8a0a0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/com.ibm.icu_3.8.1.v20080530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.RSA b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.RSA
new file mode 100644
index 0000000..e2cd92a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.RSA
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.SF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.SF
new file mode 100644
index 0000000..6aa1062
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/ECLIPSE.SF
@@ -0,0 +1,179 @@
+Signature-Version: 1.0
+SHA1-Digest-Manifest: 1iePozeNaYedj3pwNanW8CsYGvw=
+Created-By: 1.5.0 (IBM Corporation)
+SHA1-Digest-Manifest-Main-Attributes: sLr0yW4M0a1ipbNr9eD2tqFGL+A=
+
+Name: lib/ant-apache-bsf.jar
+SHA1-Digest: hQfq5SERvd0ZHo1nnWmGcrUSyY0=
+
+Name: lib/ant-trax.jar
+SHA1-Digest: /3LYBFLrHM28/M8HJQUrJMYtINI=
+
+Name: etc/maudit-frames.xsl
+SHA1-Digest: e4NgLEojZEPMlfb+Rg4oS9YefwI=
+
+Name: bin/lcp.bat
+SHA1-Digest: ht7K8egtl8CXVp+7ajDzNNGufuw=
+
+Name: bin/runrc.cmd
+SHA1-Digest: rvTECv/IAtT0qsW991ycr90KTCk=
+
+Name: etc/jdepend.xsl
+SHA1-Digest: KAs0gH/77sXvTGoslrkcojg4kIA=
+
+Name: bin/antenv.cmd
+SHA1-Digest: shibnxJFfkcuU81dMvU6/cIE1HI=
+
+Name: about_files/LICENSE.sax.txt
+SHA1-Digest: CnKqzCUI0E0NUSlVIAfUd8gctxU=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: Z+e4UrhAmTCBR1UpP/RqMf9OX00=
+
+Name: lib/ant-launcher.jar
+SHA1-Digest: 9B4YrLyaddtZv+NIJAyKzT/Z6k0=
+
+Name: lib/ant-apache-bcel.jar
+SHA1-Digest: 9+29TLOJAd/Jj2vlDO+YpRtJU9w=
+
+Name: lib/ant-antlr.jar
+SHA1-Digest: /ql7BNvec8ByEXwcASXAfuAdwRs=
+
+Name: etc/changelog.xsl
+SHA1-Digest: 28VXChLI6W894ez54gbFuV9IsZw=
+
+Name: etc/jdepend-frames.xsl
+SHA1-Digest: i9wZDIiOsZKs2U5TVLNKxIeBMZA=
+
+Name: lib/ant-starteam.jar
+SHA1-Digest: Ym5KP+2A+Lv/5p7odBUr6pT9psw=
+
+Name: about.html
+SHA1-Digest: e3HTMcpkKpSD9bcIsM/rxHFlD2Y=
+
+Name: lib/ant-jai.jar
+SHA1-Digest: YfmZyOIeT7RGgSNUGvRsi6MWuuE=
+
+Name: lib/ant-junit.jar
+SHA1-Digest: oBdtwGu+dnG1qfSQwoHGGLedxw0=
+
+Name: lib/ant-swing.jar
+SHA1-Digest: ifq7a9qUlYlTMBHfXBMxRkqGTh4=
+
+Name: lib/ant-apache-log4j.jar
+SHA1-Digest: klk8wOlr5gmxXrXuOKYyJj025Z0=
+
+Name: bin/ant
+SHA1-Digest: Qyg1i/x7ZcY/p/Qr0WeJ7P4lKHo=
+
+Name: bin/ant.cmd
+SHA1-Digest: 5ozb0JpMH7EoCdFAAb4/pJ/+QRM=
+
+Name: lib/ant-commons-net.jar
+SHA1-Digest: HJuYsYtSgFYwac6oA0NO8AnFCLw=
+
+Name: lib/ant-jsch.jar
+SHA1-Digest: 9qiI7gQSLwMaWT8dqlh9A71PCqQ=
+
+Name: lib/ant-netrexx.jar
+SHA1-Digest: vU/K2kE6qvq/LI0fK0BexEoJR3Q=
+
+Name: etc/checkstyle/checkstyle-text.xsl
+SHA1-Digest: hKiB6TIqYGZ3zfBT8Jceh3rSsIs=
+
+Name: lib/ant-jdepend.jar
+SHA1-Digest: mmDcluY7lsEYIdnw0p/CmwYLTFo=
+
+Name: lib/ant-stylebook.jar
+SHA1-Digest: vsk+ORb4UuyvvuaU5l4Uu/yzbmM=
+
+Name: about_files/NOTICE
+SHA1-Digest: hjhewkratrRFsF9j9NjgMJh0LVM=
+
+Name: etc/coverage-frames.xsl
+SHA1-Digest: 3tYfA3HsFpHXH76TOY1OD8U9TI8=
+
+Name: lib/ant-nodeps.jar
+SHA1-Digest: 9/v6IChWlOo4/fEVWZqCMf6lYU4=
+
+Name: bin/complete-ant-cmd.pl
+SHA1-Digest: qVFTRrqziNcZLUyMnCAgcr4SI04=
+
+Name: about_files/LICENSE.dom.html
+SHA1-Digest: xK0He1PkoQXdHC48ROEqZRNXTL4=
+
+Name: etc/tagdiff.xsl
+SHA1-Digest: X2Mck00J8K5RQTZEnDdBbpsTqXw=
+
+Name: etc/junit-frames.xsl
+SHA1-Digest: 0sVZ2Q5jpuuVNzqQ1WuuzzzycPo=
+
+Name: lib/ant-weblogic.jar
+SHA1-Digest: W/tLpvUl5/E1pp4hJTFTUgZJbnU=
+
+Name: lib/ant-jmf.jar
+SHA1-Digest: 6MH3l709oYnaxoYWWVQACWmTihI=
+
+Name: bin/ant.bat
+SHA1-Digest: Cu2gJzPViS+ab1UsyOjXD5iu+2Y=
+
+Name: plugin.properties
+SHA1-Digest: zYa9huK4G27wnS7xZt6UxArDy80=
+
+Name: etc/checkstyle/checkstyle-xdoc.xsl
+SHA1-Digest: zeO0EeZnwDCV9iVCKfpcnHpcuy4=
+
+Name: lib/ant.jar
+SHA1-Digest: bd0SsHhtAdWP7SwZu7bA6V9iBH8=
+
+Name: lib/ant-javamail.jar
+SHA1-Digest: jdP1khRToEcEk9UNKnrN5wmawHY=
+
+Name: lib/ant-apache-resolver.jar
+SHA1-Digest: LQ/3HXoqUyvQXbp+60FYfizCPqY=
+
+Name: bin/antRun
+SHA1-Digest: 1hZvmZPZ+eZ/sTSIu6/doEfJOyg=
+
+Name: bin/envset.cmd
+SHA1-Digest: 2SicCx0q9QaS8alBCFmBkz6Sm8E=
+
+Name: bin/antRun.pl
+SHA1-Digest: azu4U4NaWUSQWNSb5a5EooQQ6D0=
+
+Name: etc/mmetrics-frames.xsl
+SHA1-Digest: YiWiKi6R1TwSM10uOnBAwLL8oHc=
+
+Name: etc/checkstyle/checkstyle-frames.xsl
+SHA1-Digest: qJOZwLZJwFL+bcITcY38iZgE4dU=
+
+Name: lib/ant-apache-oro.jar
+SHA1-Digest: C+2kMMPZceQiJZalESuu2TqvzLk=
+
+Name: bin/antRun.bat
+SHA1-Digest: 9saks5drsyGIx9eOSn4WD095J+4=
+
+Name: etc/junit-noframes.xsl
+SHA1-Digest: b487cHUaG4THhSYl4sLXDLWGywE=
+
+Name: bin/runant.pl
+SHA1-Digest: oStMMfwbLjoDNhIpO3Un4en43ow=
+
+Name: about_files/asl-v20.txt
+SHA1-Digest: pJO0L/tUizs1vz2W9gV2VmGJsDs=
+
+Name: etc/junit-frames-xalan1.xsl
+SHA1-Digest: VRPo84XRIwm0CcYp0cINVfMEC0E=
+
+Name: etc/log.xsl
+SHA1-Digest: 6OiMllDnscwJUI2k32C8mYSiJH0=
+
+Name: lib/ant-commons-logging.jar
+SHA1-Digest: rGx32tHSaaq5GOz82V0Ig3Vi1+U=
+
+Name: lib/ant-apache-regexp.jar
+SHA1-Digest: Hlb3OGMu5wkDW1wzVWlc5J7UPrY=
+
+Name: bin/runant.py
+SHA1-Digest: o3lgIOKhYBh3OX9nN19wGiPkFIU=
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..431e500
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/MANIFEST.MF
@@ -0,0 +1,234 @@
+Manifest-Version: 1.0
+Bundle-RequiredExecutionEnvironment: J2SE-1.2
+Bundle-SymbolicName: org.apache.ant
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Localization: plugin
+Bundle-Version: 1.7.0.v200803061910
+Bundle-ClassPath: lib/ant.jar,lib/ant-antlr.jar,lib/ant-apache-bcel.ja
+ r,lib/ant-apache-bsf.jar,lib/ant-apache-log4j.jar,lib/ant-apache-oro.
+ jar,lib/ant-apache-regexp.jar,lib/ant-apache-resolver.jar,lib/ant-com
+ mons-logging.jar,lib/ant-commons-net.jar,lib/ant-jai.jar,lib/ant-java
+ mail.jar,lib/ant-jdepend.jar,lib/ant-jmf.jar,lib/ant-jsch.jar,lib/ant
+ -junit.jar,lib/ant-launcher.jar,lib/ant-netrexx.jar,lib/ant-nodeps.ja
+ r,lib/ant-starteam.jar,lib/ant-stylebook.jar,lib/ant-swing.jar,lib/an
+ t-trax.jar,lib/ant-weblogic.jar
+Bundle-Vendor: %providerName
+Export-Package: images,org.apache.tools.ant,org.apache.tools.ant.dispa
+ tch,org.apache.tools.ant.filters,org.apache.tools.ant.filters.util,or
+ g.apache.tools.ant.helper,org.apache.tools.ant.input,org.apache.tools
+ .ant.launch,org.apache.tools.ant.listener,org.apache.tools.ant.loader
+ ,org.apache.tools.ant.taskdefs,org.apache.tools.ant.taskdefs.compiler
+ s,org.apache.tools.ant.taskdefs.condition,org.apache.tools.ant.taskde
+ fs.cvslib,org.apache.tools.ant.taskdefs.email,org.apache.tools.ant.ta
+ skdefs.optional,org.apache.tools.ant.taskdefs.optional.ccm,org.apache
+ .tools.ant.taskdefs.optional.clearcase,org.apache.tools.ant.taskdefs.
+ optional.depend,org.apache.tools.ant.taskdefs.optional.depend.constan
+ tpool,org.apache.tools.ant.taskdefs.optional.dotnet,org.apache.tools.
+ ant.taskdefs.optional.ejb,org.apache.tools.ant.taskdefs.optional.exte
+ nsion,org.apache.tools.ant.taskdefs.optional.extension.resolvers,org.
+ apache.tools.ant.taskdefs.optional.i18n,org.apache.tools.ant.taskdefs
+ .optional.image,org.apache.tools.ant.taskdefs.optional.j2ee,org.apach
+ e.tools.ant.taskdefs.optional.javacc,org.apache.tools.ant.taskdefs.op
+ tional.javah,org.apache.tools.ant.taskdefs.optional.jdepend,org.apach
+ e.tools.ant.taskdefs.optional.jlink,org.apache.tools.ant.taskdefs.opt
+ ional.jsp,org.apache.tools.ant.taskdefs.optional.jsp.compilers,org.ap
+ ache.tools.ant.taskdefs.optional.junit,org.apache.tools.ant.taskdefs.
+ optional.junit.xsl,org.apache.tools.ant.taskdefs.optional.native2asci
+ i,org.apache.tools.ant.taskdefs.optional.net,org.apache.tools.ant.tas
+ kdefs.optional.perforce,org.apache.tools.ant.taskdefs.optional.pvcs,o
+ rg.apache.tools.ant.taskdefs.optional.scm,org.apache.tools.ant.taskde
+ fs.optional.script,org.apache.tools.ant.taskdefs.optional.sos,org.apa
+ che.tools.ant.taskdefs.optional.sound,org.apache.tools.ant.taskdefs.o
+ ptional.splash,org.apache.tools.ant.taskdefs.optional.ssh,org.apache.
+ tools.ant.taskdefs.optional.starteam,org.apache.tools.ant.taskdefs.op
+ tional.unix,org.apache.tools.ant.taskdefs.optional.vss,org.apache.too
+ ls.ant.taskdefs.optional.windows,org.apache.tools.ant.taskdefs.rmic,o
+ rg.apache.tools.ant.types,org.apache.tools.ant.types.conditions,org.a
+ pache.tools.ant.types.mappers,org.apache.tools.ant.types.optional,org
+ .apache.tools.ant.types.optional.depend,org.apache.tools.ant.types.op
+ tional.image,org.apache.tools.ant.types.resolver,org.apache.tools.ant
+ .types.resources,org.apache.tools.ant.types.resources.comparators,org
+ .apache.tools.ant.types.resources.selectors,org.apache.tools.ant.type
+ s.selectors,org.apache.tools.ant.types.selectors.modifiedselector,org
+ .apache.tools.ant.types.spi,org.apache.tools.ant.util,org.apache.tool
+ s.ant.util.depend,org.apache.tools.ant.util.depend.bcel,org.apache.to
+ ols.ant.util.facade,org.apache.tools.ant.util.java15,org.apache.tools
+ .ant.util.optional,org.apache.tools.ant.util.regexp,org.apache.tools.
+ bzip2,org.apache.tools.mail,org.apache.tools.tar,org.apache.tools.zip
+Require-Bundle: org.eclipse.osgi
+
+Name: lib/ant-apache-bsf.jar
+SHA1-Digest: cLbTh5sinbLWGWUDCS84n0i2a0E=
+
+Name: lib/ant-trax.jar
+SHA1-Digest: 3HKcsIRJKPlrfuIaJUDOtGEndrg=
+
+Name: etc/maudit-frames.xsl
+SHA1-Digest: BIZGVBGe+t+oL7NBTtnF6SSR2UI=
+
+Name: bin/lcp.bat
+SHA1-Digest: tVZ9b7fPb0VxK6VtxdbHL/Snslc=
+
+Name: bin/runrc.cmd
+SHA1-Digest: tEBZS6nXZrF77Q5oOO0NyffnU28=
+
+Name: etc/jdepend.xsl
+SHA1-Digest: OMznHreSkSUr+5YOtNAlZZLjZWQ=
+
+Name: bin/antenv.cmd
+SHA1-Digest: 2NIxw+ojKZeK7CNeLtrR7kFNG2E=
+
+Name: about_files/LICENSE.sax.txt
+SHA1-Digest: uLnQn2qwT77aJ6MThuLeWz1I5ek=
+
+Name: META-INF/eclipse.inf
+SHA1-Digest: u+F8j/GAE8tzrDry9+wT3Cvg81Y=
+
+Name: lib/ant-launcher.jar
+SHA1-Digest: GPILSOan10oQR0XsnIUpAkN3hW8=
+
+Name: lib/ant-apache-bcel.jar
+SHA1-Digest: 249vQWKFKUpoY2wsy/gVYRVQA9Y=
+
+Name: lib/ant-antlr.jar
+SHA1-Digest: sUjnJ2scpExnqFt7w3wTrxPBzMw=
+
+Name: etc/changelog.xsl
+SHA1-Digest: qhlQEgDDZI8YGnD/Lo/OLLdpwE4=
+
+Name: etc/jdepend-frames.xsl
+SHA1-Digest: ziSyDJrI6CYzulVP7xbFuMAk62w=
+
+Name: lib/ant-starteam.jar
+SHA1-Digest: /E3ouEPkRPL3WBvefzGRsck5lmc=
+
+Name: about.html
+SHA1-Digest: N0elfKP7uYuYLATOh5XaE1P3nXI=
+
+Name: lib/ant-jai.jar
+SHA1-Digest: MamtbKiOfCYyaKLBsNuL7HdasTA=
+
+Name: lib/ant-junit.jar
+SHA1-Digest: vKM3lSYbY8hlxKv/eh48EzoMr4s=
+
+Name: lib/ant-swing.jar
+SHA1-Digest: h89jil3YSxk/sLy8HZubQDaqZZA=
+
+Name: lib/ant-apache-log4j.jar
+SHA1-Digest: yo4BWxFzGJvFGlwAa9+lqooG+iE=
+
+Name: bin/ant
+SHA1-Digest: 1hZ7I8ryxuQA8ffu95k409JSpxM=
+
+Name: bin/ant.cmd
+SHA1-Digest: YDWS/zHHaPn0kEZm/Az4+vJLzKI=
+
+Name: lib/ant-commons-net.jar
+SHA1-Digest: cW0crWNYgqgbNuezMwOUzY9ysfY=
+
+Name: lib/ant-jsch.jar
+SHA1-Digest: 2cWHrQfYXqJ6Ox5ESC+vnLUmKTQ=
+
+Name: lib/ant-netrexx.jar
+SHA1-Digest: L+voULB0JY9SHKXVQJ1LDHn7bUI=
+
+Name: etc/checkstyle/checkstyle-text.xsl
+SHA1-Digest: v7HDzjT8VIMoo9nbczMpQ4R89OA=
+
+Name: lib/ant-jdepend.jar
+SHA1-Digest: l8MtENBefa2/Xp24qA+J9a93YIM=
+
+Name: lib/ant-stylebook.jar
+SHA1-Digest: uQZ41IjyE1tK965YSxsqP+jqK0c=
+
+Name: about_files/NOTICE
+SHA1-Digest: Mu3gQHJl963VZJ+BCE906ZAhmXY=
+
+Name: etc/coverage-frames.xsl
+SHA1-Digest: CuWmV380G7/H3FRwPp+feAg9d7E=
+
+Name: lib/ant-nodeps.jar
+SHA1-Digest: o5euDnSx3TKUufdhqOcdd85RM20=
+
+Name: bin/complete-ant-cmd.pl
+SHA1-Digest: u8SyqqLh5SyqEPe8brM/glCglQo=
+
+Name: about_files/LICENSE.dom.html
+SHA1-Digest: 9F8cZaCgriCte0T6Mt5hAFumadk=
+
+Name: etc/tagdiff.xsl
+SHA1-Digest: QvXTkg9jgfgCMbm/Idqk/uNf4dI=
+
+Name: etc/junit-frames.xsl
+SHA1-Digest: wSBQFHcXT1XjHPWfk41j8XH1qeQ=
+
+Name: lib/ant-weblogic.jar
+SHA1-Digest: J6F+0H7fONfNWUCwSqb+7IK3Rkc=
+
+Name: lib/ant-jmf.jar
+SHA1-Digest: NGPXYqQRsREHJe8qsEyPAg2RUAM=
+
+Name: bin/ant.bat
+SHA1-Digest: p0LkZEyD/pMRF8Uo9Hxte58B9dI=
+
+Name: plugin.properties
+SHA1-Digest: iQO3hlGZf45g3Y7ajtCmCUjMq30=
+
+Name: etc/checkstyle/checkstyle-xdoc.xsl
+SHA1-Digest: Zkz4ykfgxadN8RCiCtVrI46bzu4=
+
+Name: lib/ant.jar
+SHA1-Digest: AyMypsce7YssTu3t0qKPuArssCw=
+
+Name: lib/ant-javamail.jar
+SHA1-Digest: EYOAc6WEA+Pj8MPPoa1W8neE1DQ=
+
+Name: lib/ant-apache-resolver.jar
+SHA1-Digest: /bhh3PxZKpcm4EmiQRsOw81aHlI=
+
+Name: bin/antRun
+SHA1-Digest: HXlDrtLiLYQs4XkPbksH6PzmiQ4=
+
+Name: bin/envset.cmd
+SHA1-Digest: nJW9gBVUQczlMJmAog4nH2yNp98=
+
+Name: bin/antRun.pl
+SHA1-Digest: 1ZjEo56V249cfnPSBpzjYNRTLys=
+
+Name: etc/mmetrics-frames.xsl
+SHA1-Digest: +ueQIFM6aBe6Ifc8PrZ7F4Migyk=
+
+Name: etc/checkstyle/checkstyle-frames.xsl
+SHA1-Digest: aeITXtUk9Yia5TTVXOd6qfMmPTM=
+
+Name: lib/ant-apache-oro.jar
+SHA1-Digest: WJ++owyMbcVbY3kBJgq2oNNGsCU=
+
+Name: bin/antRun.bat
+SHA1-Digest: d765puLLhb82dE5NC5YNCn6DpeA=
+
+Name: etc/junit-noframes.xsl
+SHA1-Digest: 8O4YCYnt5a6gbrMsIigvW/4GV4g=
+
+Name: bin/runant.pl
+SHA1-Digest: RPsWXDGHzbNBGD/i6pTGtQFJ6oY=
+
+Name: about_files/asl-v20.txt
+SHA1-Digest: K4uBUimqimHkg/tLoFiLi2xJGJA=
+
+Name: etc/junit-frames-xalan1.xsl
+SHA1-Digest: blbb8jE6V2zTzRGjvVaXL5fPicM=
+
+Name: etc/log.xsl
+SHA1-Digest: ulVeGl+WSkbjGbHF7LGA8Csuh/0=
+
+Name: lib/ant-commons-logging.jar
+SHA1-Digest: Vvp4W/tusjWem5gN4Y1cMVAJGck=
+
+Name: lib/ant-apache-regexp.jar
+SHA1-Digest: HQscc3xTxU2HKsoh8YlyUPpsr/Q=
+
+Name: bin/runant.py
+SHA1-Digest: ptbC0mx7ZARrg/FG64aqqikvS2A=
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/eclipse.inf b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/eclipse.inf
new file mode 100644
index 0000000..68d6fa9
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/META-INF/eclipse.inf
@@ -0,0 +1,4 @@
+#Processed using Jarprocessor
+jarprocessor.exclude.children.sign = true
+pack200.args = -E4
+pack200.conditioned = true
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about.html b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about.html
new file mode 100644
index 0000000..29d484e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 7, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+
+<p>The Content includes items that have been sourced from third parties as set out below. If you
+did not receive this Content directly from the Eclipse Foundation, the following is provided
+for informational purposes only, and you should look to the Redistributor’s license for
+terms and conditions of use.</p>
+
+<h4>Ant 1.7.0</h4>
+<p>The plug-in includes software developed by The Apache Software Foundation as part of the Ant project.</p>
+
+<p>Your use of the Ant code subject to the terms and conditions of the Apache License, Version 2.0. A copy of the license is contained
+in the file <a href="about_files/asl-v20.txt" target="_blank">asl-v20.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.
+
+<p>The Apache attribution <a href="about_files/NOTICE" target="_blank">NOTICE</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p>
+
+<p>Ant includes the following software:</p>
+
+<blockquote>
+ <h4>DOM</h4>
+ <p>DOM is developed by the World Wide Web Consortium. Your use of DOM is subject to the terms and conditions of the license found in the
+ file <a href="about_files/LICENSE.dom.html" target="_blank">LICENSE.dom.html</a> which is included with this plug-in and can also be found at
+ <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720" target="_blank">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a>.</p>
+
+ <h4>SAX</h4>
+
+ <p>SAX is developed by the SAX project (<a href="http://www.saxproject.org" target="_blank">http://www.saxproject.org</a>). Your use of SAX is subject to the
+ terms and conditions of the license found in the file <a href="about_files/LICENSE.sax.txt" target="_blank">LICENSE.sax.txt</a> which is included with this plug-in.</p>
+</blockquote>
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.dom.html b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.dom.html
new file mode 100644
index 0000000..97e7898
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.dom.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<title>License</title>
+<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
+</head>
+<body lang="EN-US">
+<p>This license came from:<br>
+<a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">http://www.w3.org/Consortium/Legal/copyright-software-19980720</a></p>
+
+<p>
+W3C® SOFTWARE NOTICE AND LICENSE<br>
+Copyright © 1994-2001 <a href="http://www.w3.org/">World Wide Web Consortium</a>, (<a href="http://www.lcs.mit.edu/">Massachusetts Institute of Technology</a>,
+<a href="http://www.inria.fr/">Institut National de Recherche en Informatique et en Automatique</a>, <a href="http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved.<br>
+<a href="http://www.w3.org/Consortium/Legal/">http://www.w3.org/Consortium/Legal/</a></p>
+
+<p>
+This W3C work (including software, documents, or other related<br>
+items) is being provided by the copyright holders under the<br>
+following license. By obtaining, using and/or copying this work,<br>
+you (the licensee) agree that you have read, understood, and will<br>
+comply with the following terms and conditions:<br>
+Permission to use, copy, modify, and distribute this software<br>
+and its documentation, with or without modification, for any<br>
+purpose and without fee or royalty is hereby granted, provided that<br>
+you include the following on ALL copies of the software and<br>
+documentation or portions thereof, including modifications, that<br>
+you make:</p>
+
+<p>
+The full text of this NOTICE in a location viewable to users of<br>
+the redistributed or derivative work.</p>
+
+<p>
+Any pre-existing intellectual property disclaimers, notices, or<br>
+terms and conditions. If none exist, a short notice of the<br>
+following form (hypertext is preferred, text is permitted) should<br>
+be used within the body of any redistributed or derivative code:<br>
+"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of<br>
+Technology, Institut National de<br>
+Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.<br>
+http://www.w3.org/Consortium/Legal/"</p>
+
+<p>
+Notice of any changes or modifications to the W3C files,<br>
+including the date changes were made. (We recommend you provide <br>
+URIs to the location from which the code is derived.)</p>
+
+<p>
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND<br>
+COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR<br>
+IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF<br>
+MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE<br>
+USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD<br>
+PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.<br>
+COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,<br>
+SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE<br>
+SOFTWARE OR DOCUMENTATION.</p>
+
+<p>
+The name and trademarks of copyright holders may NOT be used in<br>
+advertising or publicity pertaining to the software without<br>
+specific, written prior permission. Title to copyright in this<br>
+software and any associated documentation will at all times remain<br>
+with copyright holders.</p>
+
+<p>
+____________________________________<br>
+This formulation of W3C's notice and license became active on<br>
+August 14 1998 so as to improve compatibility with GPL. This<br>
+version ensures that W3C software licensing terms are no more<br>
+restrictive than GPL and consequently W3C software may be<br>
+distributed in GPL packages. See the older formulation for the<br>
+policy prior to this date. Please see our Copyright FAQ for common <br>
+questions about using materials from<br>
+our site, including specific terms and conditions for packages like<br>
+libwww, Amaya, and Jigsaw. <br>
+Other questions about this notice can be<br>
+directed to site-policy@w3.org.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.sax.txt b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.sax.txt
new file mode 100644
index 0000000..d46b3dc
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/LICENSE.sax.txt
@@ -0,0 +1,20 @@
+This license came from: http://www.megginson.com/SAX/copying.html
+ However please note future versions of SAX may be covered
+ under http://saxproject.org/?selected=pd
+
+
+This page is now out of date -- see the new SAX site at
+http://www.saxproject.org/ for more up-to-date
+releases and other information. Please change your bookmarks.
+
+
+SAX2 is Free!
+
+I hereby abandon any property rights to SAX 2.0 (the Simple API for
+XML), and release all of the SAX 2.0 source code, compiled code, and
+documentation contained in this distribution into the Public Domain.
+SAX comes with NO WARRANTY or guarantee of fitness for any
+purpose.
+
+David Megginson, david@megginson.com
+2000-05-05
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/NOTICE b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/NOTICE
new file mode 100644
index 0000000..1fb6dde
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/NOTICE
@@ -0,0 +1,15 @@
+ =========================================================================
+ == NOTICE file corresponding to the section 4 d of ==
+ == the Apache License, Version 2.0, ==
+ == in this case for the Apache Ant distribution. ==
+ =========================================================================
+
+ This product includes software developed by
+ The Apache Software Foundation (http://www.apache.org/).
+
+ This product includes also software developed by :
+ - the W3C consortium (http://www.w3c.org) ,
+ - the SAX project (http://www.saxproject.org)
+
+ Please read the different LICENSE files present in the root directory of
+ this distribution.
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/asl-v20.txt b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/asl-v20.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/about_files/asl-v20.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant
new file mode 100644
index 0000000..cf336db
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant
@@ -0,0 +1,299 @@
+#! /bin/sh
+
+# Copyright 2001-2005 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Extract launch and ant arguments, (see details below).
+ant_exec_args=
+no_config=false
+use_jikes_default=false
+ant_exec_debug=false
+show_help=false
+for arg in "$@" ; do
+ if [ "$arg" = "--noconfig" ] ; then
+ no_config=true
+ elif [ "$arg" = "--usejikes" ] ; then
+ use_jikes_default=true
+ elif [ "$arg" = "--execdebug" ] ; then
+ ant_exec_debug=true
+ elif [ my"$arg" = my"--h" -o my"$arg" = my"--help" ] ; then
+ show_help=true
+ ant_exec_args="$ant_exec_args -h"
+ else
+ if [ my"$arg" = my"-h" -o my"$arg" = my"-help" ] ; then
+ show_help=true
+ fi
+ ant_exec_args="$ant_exec_args \"$arg\""
+ fi
+done
+
+# Source/default ant configuration
+if $no_config ; then
+ rpm_mode=false
+ usejikes=$use_jikes_default
+else
+ # load system-wide ant configuration
+ if [ -f "/etc/ant.conf" ] ; then
+ . /etc/ant.conf
+ fi
+
+ # load user ant configuration
+ if [ -f "$HOME/.ant/ant.conf" ] ; then
+ . $HOME/.ant/ant.conf
+ fi
+ if [ -f "$HOME/.antrc" ] ; then
+ . "$HOME/.antrc"
+ fi
+
+ # provide default configuration values
+ if [ -z "$rpm_mode" ] ; then
+ rpm_mode=false
+ fi
+ if [ -z "$usejikes" ] ; then
+ usejikes=$use_jikes_default
+ fi
+fi
+
+# Setup Java environment in rpm mode
+if $rpm_mode ; then
+ if [ -f /usr/share/java-utils/java-functions ] ; then
+ . /usr/share/java-utils/java-functions
+ set_jvm
+ set_javacmd
+ fi
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ Darwin*) darwin=true
+ if [ -z "$JAVA_HOME" ] ; then
+ JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
+ fi
+ ;;
+esac
+
+if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then
+ ## resolve links - $0 may be a link to ant's home
+ PRG="$0"
+ progname=`basename "$0"`
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+ done
+
+ ANT_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ ANT_HOME=`cd "$ANT_HOME" && pwd`
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$ANT_HOME" ] &&
+ ANT_HOME=`cygpath --unix "$ANT_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# set ANT_LIB location
+ANT_LIB="${ANT_HOME}/lib"
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD=`which java 2> /dev/null `
+ if [ -z "$JAVACMD" ] ; then
+ JAVACMD=java
+ fi
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly."
+ echo " We cannot execute $JAVACMD"
+ exit 1
+fi
+
+# Build local classpath using just the launcher in non-rpm mode or
+# use the Jpackage helper in rpm mode with basic and default jars
+# specified in the ant.conf configuration. Because the launcher is
+# used, libraries linked in ANT_HOME will also be include, but this
+# is discouraged as it is not java-version safe. A user should
+# request optional jars and their dependencies via the OPT_JAR_LIST
+# variable
+if $rpm_mode && [ -f /usr/bin/build-classpath ] ; then
+ LOCALCLASSPATH="$(/usr/bin/build-classpath ant ant-launcher jaxp_parser_impl xml-commons-apis)"
+ # If the user requested to try to add some other jars to the classpath
+ if [ -n "$OPT_JAR_LIST" ] ; then
+ _OPTCLASSPATH="$(/usr/bin/build-classpath $OPT_JAR_LIST 2> /dev/null)"
+ if [ -n "$_OPTCLASSPATH" ] ; then
+ LOCALCLASSPATH="$LOCALCLASSPATH:$_OPTCLASSPATH"
+ fi
+ fi
+
+ # Explicitly add javac path to classpath, assume JAVA_HOME set
+ # properly in rpm mode
+ if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
+ LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
+ fi
+ if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
+ LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
+ fi
+
+ # if CLASSPATH_OVERRIDE env var is set, LOCALCLASSPATH will be
+ # user CLASSPATH first and ant-found jars after.
+ # In that case, the user CLASSPATH will override ant-found jars
+ #
+ # if CLASSPATH_OVERRIDE is not set, we'll have the normal behaviour
+ # with ant-found jars first and user CLASSPATH after
+ if [ -n "$CLASSPATH" ] ; then
+ # merge local and specified classpath
+ if [ -z "$LOCALCLASSPATH" ] ; then
+ LOCALCLASSPATH="$CLASSPATH"
+ elif [ -n "$CLASSPATH_OVERRIDE" ] ; then
+ LOCALCLASSPATH="$CLASSPATH:$LOCALCLASSPATH"
+ else
+ LOCALCLASSPATH="$LOCALCLASSPATH:$CLASSPATH"
+ fi
+
+ # remove class path from launcher -cp option
+ CLASSPATH=""
+ fi
+else
+ # not using rpm_mode; use launcher to determine classpaths
+ if [ -z "$LOCALCLASSPATH" ] ; then
+ LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar
+ else
+ LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH
+ fi
+fi
+
+if [ -n "$JAVA_HOME" ] ; then
+ # OSX hack to make Ant work with jikes
+ if $darwin ; then
+ OSXHACK="${JAVA_HOME}/../Classes"
+ if [ -d "${OSXHACK}" ] ; then
+ for i in "${OSXHACK}"/*.jar
+ do
+ JIKESPATH="$JIKESPATH:$i"
+ done
+ fi
+ fi
+fi
+
+# Allow Jikes support (off by default)
+if $usejikes; then
+ ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
+fi
+
+# For Cygwin, switch paths to appropriate format before running java
+# For PATHs convert to unix format first, then to windows format to ensure
+# both formats are supported. Probably this will fail on directories with ;
+# in the name in the path. Let's assume that paths containing ; are more
+# rare than windows style paths on cygwin.
+if $cygwin; then
+ if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
+ format=mixed
+ else
+ format=windows
+ fi
+ ANT_HOME=`cygpath --$format "$ANT_HOME"`
+ ANT_LIB=`cygpath --$format "$ANT_LIB"`
+ JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
+ LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
+ LOCALCLASSPATH=`cygpath --path --$format "$LCP_TEMP"`
+ if [ -n "$CLASSPATH" ] ; then
+ CP_TEMP=`cygpath --path --unix "$CLASSPATH"`
+ CLASSPATH=`cygpath --path --$format "$CP_TEMP"`
+ fi
+ CYGHOME=`cygpath --$format "$HOME"`
+fi
+
+# Show script help if requested
+if $show_help ; then
+ echo $0 '[script options] [options] [target [target2 [target3] ..]]'
+ echo 'Script Options:'
+ echo ' --help, --h print this message and ant help'
+ echo ' --noconfig suppress sourcing of /etc/ant.conf,'
+ echo ' $HOME/.ant/ant.conf, and $HOME/.antrc'
+ echo ' configuration files'
+ echo ' --usejikes enable use of jikes by default, unless'
+ echo ' set explicitly in configuration files'
+ echo ' --execdebug print ant exec line generated by this'
+ echo ' launch script'
+ echo ' '
+fi
+# add a second backslash to variables terminated by a backslash under cygwin
+if $cygwin; then
+ case "$ANT_HOME" in
+ *\\ )
+ ANT_HOME="$ANT_HOME\\"
+ ;;
+ esac
+ case "$CYGHOME" in
+ *\\ )
+ CYGHOME="$CYGHOME\\"
+ ;;
+ esac
+ case "$JIKESPATH" in
+ *\\ )
+ JIKESPATH="$JIKESPATH\\"
+ ;;
+ esac
+ case "$LOCALCLASSPATH" in
+ *\\ )
+ LOCALCLASSPATH="$LOCALCLASSPATH\\"
+ ;;
+ esac
+ case "$CLASSPATH" in
+ *\\ )
+ CLASSPATH="$CLASSPATH\\"
+ ;;
+ esac
+fi
+# Execute ant using eval/exec to preserve spaces in paths,
+# java options, and ant args
+ant_sys_opts=
+if [ -n "$CYGHOME" ]; then
+ if [ -n "$JIKESPATH" ]; then
+ ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\" -Dcygwin.user.home=\"$CYGHOME\""
+ else
+ ant_sys_opts="-Dcygwin.user.home=\"$CYGHOME\""
+ fi
+else
+ if [ -n "$JIKESPATH" ]; then
+ ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\""
+ fi
+fi
+ant_exec_command="exec \"$JAVACMD\" $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\" $ant_exec_args"
+if $ant_exec_debug ; then
+ echo $ant_exec_command
+fi
+eval $ant_exec_command
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.bat b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.bat
new file mode 100644
index 0000000..e2dafab
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.bat
@@ -0,0 +1,126 @@
+@echo off
+
+REM Copyright 2001,2004-2005 The Apache Software Foundation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+
+if exist "%HOME%\antrc_pre.bat" call "%HOME%\antrc_pre.bat"
+
+if "%OS%"=="Windows_NT" @setlocal
+if "%OS%"=="WINNT" @setlocal
+
+rem %~dp0 is expanded pathname of the current script under NT
+set DEFAULT_ANT_HOME=%~dp0..
+
+if "%ANT_HOME%"=="" set ANT_HOME=%DEFAULT_ANT_HOME%
+set DEFAULT_ANT_HOME=
+
+set _USE_CLASSPATH=yes
+
+rem Slurp the command line arguments. This loop allows for an unlimited number
+rem of arguments (up to the command line limit, anyway).
+set ANT_CMD_LINE_ARGS=%1
+if ""%1""=="""" goto doneStart
+shift
+:setupArgs
+if ""%1""=="""" goto doneStart
+if ""%1""==""-noclasspath"" goto clearclasspath
+set ANT_CMD_LINE_ARGS=%ANT_CMD_LINE_ARGS% %1
+shift
+goto setupArgs
+
+rem here is there is a -noclasspath in the options
+:clearclasspath
+set _USE_CLASSPATH=no
+shift
+goto setupArgs
+
+rem This label provides a place for the argument list loop to break out
+rem and for NT handling to skip to.
+
+:doneStart
+rem find ANT_HOME if it does not exist due to either an invalid value passed
+rem by the user or the %0 problem on Windows 9x
+if exist "%ANT_HOME%\lib\ant.jar" goto checkJava
+
+rem check for ant in Program Files
+if not exist "%ProgramFiles%\ant" goto checkSystemDrive
+set ANT_HOME=%ProgramFiles%\ant
+goto checkJava
+
+:checkSystemDrive
+rem check for ant in root directory of system drive
+if not exist %SystemDrive%\ant\lib\ant.jar goto checkCDrive
+set ANT_HOME=%SystemDrive%\ant
+goto checkJava
+
+:checkCDrive
+rem check for ant in C:\ant for Win9X users
+if not exist C:\ant\lib\ant.jar goto noAntHome
+set ANT_HOME=C:\ant
+goto checkJava
+
+:noAntHome
+echo ANT_HOME is set incorrectly or ant could not be located. Please set ANT_HOME.
+goto end
+
+:checkJava
+set _JAVACMD=%JAVACMD%
+
+if "%JAVA_HOME%" == "" goto noJavaHome
+if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
+if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe
+goto checkJikes
+
+:noJavaHome
+if "%_JAVACMD%" == "" set _JAVACMD=java.exe
+
+:checkJikes
+if not "%JIKESPATH%"=="" goto runAntWithJikes
+
+:runAnt
+if "%_USE_CLASSPATH%"=="no" goto runAntNoClasspath
+if not "%CLASSPATH%"=="" goto runAntWithClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntNoClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntWithClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntWithJikes
+if "%_USE_CLASSPATH%"=="no" goto runAntWithJikesNoClasspath
+if not "%CLASSPATH%"=="" goto runAntWithJikesAndClasspath
+
+:runAntWithJikesNoClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% %ANT_CMD_LINE_ARGS%
+goto end
+
+:runAntWithJikesAndClasspath
+"%_JAVACMD%" %ANT_OPTS% -classpath "%ANT_HOME%\lib\ant-launcher.jar" "-Dant.home=%ANT_HOME%" "-Djikes.class.path=%JIKESPATH%" org.apache.tools.ant.launch.Launcher %ANT_ARGS% -cp "%CLASSPATH%" %ANT_CMD_LINE_ARGS%
+goto end
+
+:end
+set _JAVACMD=
+set ANT_CMD_LINE_ARGS=
+
+if "%OS%"=="Windows_NT" @endlocal
+if "%OS%"=="WINNT" @endlocal
+
+:mainEnd
+if exist "%HOME%\antrc_post.bat" call "%HOME%\antrc_post.bat"
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.cmd
new file mode 100644
index 0000000..4bb903f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/ant.cmd
@@ -0,0 +1,92 @@
+/*
+ Copyright 2003-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Run ant
+*/
+
+'@echo off'
+parse arg mode envarg '::' antarg
+
+if mode\='.' & mode\='..' & mode\='/' then do
+ envarg = mode envarg
+ mode = ''
+end
+
+if antarg = '' then do
+ antarg = envarg
+ envarg = ''
+end
+
+x = setlocal()
+
+env="OS2ENVIRONMENT"
+antenv = _getenv_('antenv')
+if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"'
+
+if mode = '' then mode = _getenv_('ANT_MODE' '..')
+if mode \= '/' then do
+ runrc = _getenv_('runrc')
+ antrc = _getenv_('antrc' 'antrc.cmd')
+ if mode = '..' then mode = '-r'
+ else mode = ''
+ interpret 'call "' || runrc || '"' antrc '"' || mode || '"'
+end
+
+if _testenv_() = 0 then do
+ say 'Ant environment is not set properly'
+ x = endlocal()
+ exit 16
+end
+
+settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME
+
+java = _getenv_('javacmd' 'java')
+opts = value('ANT_OPTS',,env)
+args = value('ANT_ARGS',,env)
+lcp = value('LOCALCLASSPATH',,env)
+cp = value('CLASSPATH',,env)
+if value('ANT_USE_CP',,env) \= '' then do
+ if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';'
+ lcp = lcp || cp
+ 'SET CLASSPATH='
+end
+if lcp\='' then lcp = '-classpath' lcp
+
+cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg
+launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists')
+if launcher = '' then entry = 'org.apache.tools.ant.Main'
+else entry = 'org.apache.tools.ant.launch.Launcher'
+java opts lcp entry settings args antarg
+
+x = endlocal()
+
+return rc
+
+_testenv_: procedure expose env ANT_HOME JAVA_HOME
+ANT_HOME = value('ANT_HOME',,env)
+if ANT_HOME = '' then return 0
+JAVA_HOME = value('JAVA_HOME',,env)
+if JAVA_HOME = '' then return 0
+cp = translate(value('CLASSPATH',,env))
+if pos(translate(ANT_HOME), cp) = 0 then return 0
+if pos(translate(JAVA_HOME), cp) = 0 then return 0
+return 1
+
+_getenv_: procedure expose env
+parse arg envar default
+if default = '' then default = envar
+var = value(translate(envar),,env)
+if var = '' then var = default
+return var
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun
new file mode 100644
index 0000000..baddd71
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+#
+# Copyright 2001-2002,2004 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+
+# Args: DIR command
+cd "$1"
+CMD="$2"
+shift
+shift
+
+exec "$CMD" "$@"
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.bat b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.bat
new file mode 100644
index 0000000..289e19b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.bat
@@ -0,0 +1,47 @@
+@echo off
+
+REM
+REM Copyright 2001-2002,2004-2005 The Apache Software Foundation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
+
+if "%OS%"=="Windows_NT" @setlocal
+if "%OS%"=="WINNT" @setlocal
+
+if ""%1""=="""" goto runCommand
+
+rem Change drive and directory to %1
+if "%OS%"=="Windows_NT" cd /d ""%1""
+if not "%OS%"=="Windows_NT" cd ""%1""
+shift
+
+rem Slurp the command line arguments. This loop allows for an unlimited number
+rem of agruments (up to the command line limit, anyway).
+set ANT_RUN_CMD=%1
+if ""%1""=="""" goto runCommand
+shift
+:loop
+if ""%1""=="""" goto runCommand
+set ANT_RUN_CMD=%ANT_RUN_CMD% %1
+shift
+goto loop
+
+:runCommand
+rem echo %ANT_RUN_CMD%
+%ANT_RUN_CMD%
+
+if "%OS%"=="Windows_NT" @endlocal
+if "%OS%"=="WINNT" @endlocal
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.pl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.pl
new file mode 100644
index 0000000..7cdd868
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antRun.pl
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+#
+# Copyright 2001,2003-2004 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#######################################################################
+#
+# antRun.pl
+#
+# wrapper script for invoking commands on a platform with Perl installed
+# this is akin to antRun.bat, and antRun the SH script
+#
+# created: 2001-10-18
+# author: Jeff Tulley jtulley@novell.com
+#######################################################################
+#be fussy about variables
+use strict;
+
+#turn warnings on during dev; generates a few spurious uninitialised var access warnings
+#use warnings;
+
+#and set $debug to 1 to turn on trace info (currently unused)
+my $debug=1;
+
+#######################################################################
+# change drive and directory to "%1"
+my $ANT_RUN_CMD = @ARGV[0];
+
+# assign current run command to "%2"
+chdir (@ARGV[0]) || die "Can't cd to $ARGV[0]: $!\n";
+if ($^O eq "NetWare") {
+ # There is a bug in Perl 5 on NetWare, where chdir does not
+ # do anything. On NetWare, the following path-prefixed form should
+ # always work. (afaict)
+ $ANT_RUN_CMD .= "/".@ARGV[1];
+}
+else {
+ $ANT_RUN_CMD = @ARGV[1];
+}
+
+# dispose of the first two arguments, leaving only the command's args.
+shift;
+shift;
+
+# run the command
+my $returnValue = system $ANT_RUN_CMD, @ARGV;
+if ($returnValue eq 0) {
+ exit 0;
+}
+else {
+ # only 0 and 1 are widely recognized as exit values
+ # so change the exit value to 1
+ exit 1;
+}
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antenv.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antenv.cmd
new file mode 100644
index 0000000..b9b0db4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/antenv.cmd
@@ -0,0 +1,99 @@
+/*
+ Copyright 2003-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Ant environment
+*/
+
+'@echo off'
+call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
+call SysLoadFuncs
+
+/* Prepare the parameters for later use */
+parse arg argv
+mode = ''
+args = ''
+opts = ''
+cp = ''
+lcp = ''
+
+do i = 1 to words(argv)
+ param = word(argv, i)
+ select
+ when param='-lcp' then mode = 'l'
+ when param='-cp' | param='-classpath' then mode = 'c'
+ when abbrev('-opts', param, 4) then mode = 'o'
+ when abbrev('-args', param, 4) then mode = 'a'
+ otherwise
+ select
+ when mode = 'a' then args = space(args param, 1)
+ when mode = 'c' then cp = space(cp param, 1)
+ when mode = 'l' then lcp = space(lcp param, 1)
+ when mode = 'o' then opts = space(opts param, 1)
+ otherwise
+ say 'Option' param 'ignored'
+ end
+ end
+end
+
+env="OS2ENVIRONMENT"
+antconf = _getenv_('antconf' 'antconf.cmd')
+runrc = _getenv_('runrc')
+interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC'
+ANT_HOME = value('ANT_HOME',,env)
+JAVA_HOME = value('JAVA_HOME',,env)
+classpath = value('CLASSPATH',,env)
+classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS")
+if classes \= '' then classpath = prepend(classpath classes)
+classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS")
+if classes \= '' then classpath = prepend(classpath classes)
+
+classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar')
+'SET CLASSPATH=' || classpath
+
+/* Setting classpathes, options and arguments */
+envset = _getenv_('envset')
+if cp\='' then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"'
+if lcp\='' then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"'
+if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"'
+if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"'
+
+exit 0
+
+addpath: procedure
+parse arg path elem
+if elem = '' then do
+ if path\='' & right(path, 1)\=';' then path = path || ';'
+ return path
+end
+if substr(path, length(path)) = ';' then glue = ''
+else glue = ';'
+if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';'
+return path
+
+prepend: procedure
+parse arg path elem
+if elem = '' then do
+ if path\='' & right(path, 1)\=';' then path = path || ';'
+ return path
+end
+if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path
+return path
+
+_getenv_: procedure expose env
+parse arg envar default
+if default = '' then default = envar
+var = value(translate(envar),,env)
+if var = '' then var = default
+return var
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/complete-ant-cmd.pl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/complete-ant-cmd.pl
new file mode 100644
index 0000000..20dd476
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/complete-ant-cmd.pl
@@ -0,0 +1,113 @@
+#!/usr/bin/perl
+#
+# Copyright 2001,2004 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# A script to allow Bash or Z-Shell to complete an Ant command-line.
+#
+# To install for Bash 2.0 or better, add the following to ~/.bashrc:
+#
+# $ complete -C complete-ant-cmd ant build.sh
+#
+# To install for Z-Shell 2.5 or better, add the following to ~/.zshrc:
+#
+# function ant_complete () {
+# local args_line args
+# read -l args_line
+# set -A args $args_line
+# set -A reply $(COMP_LINE=$args_line complete-ant-cmd ${args[1]} $1)
+# }
+# compctl -K ant_complete ant build.sh
+#
+# @author Mike Williams <mikew@cortexebusiness.com.au>
+
+my $cmdLine = $ENV{'COMP_LINE'};
+my $antCmd = $ARGV[0];
+my $word = $ARGV[1];
+
+my @completions;
+if ($word =~ /^-/) {
+ list( restrict( $word, getArguments() ));
+} elsif ($cmdLine =~ /-(f|buildfile)\s+\S*$/) {
+ list( getBuildFiles($word) );
+} else {
+ list( restrict( $word, getTargets() ));
+}
+
+exit(0);
+
+sub list {
+ for (@_) {
+ print "$_\n";
+ }
+}
+
+sub restrict {
+ my ($word, @completions) = @_;
+ grep( /^\Q$word\E/, @completions );
+}
+
+sub getArguments {
+ qw(-buildfile -debug -emacs -f -find -help -listener -logfile
+ -logger -projecthelp -quiet -verbose -version);
+}
+
+
+sub getBuildFiles {
+ my ($word) = @_;
+ grep( /\.xml$/, glob( "$word*" ));
+}
+
+sub getTargets {
+
+ # Look for build-file
+ my $buildFile = 'build.xml';
+ if ($cmdLine =~ /-(f|buildfile)\s+(\S+)/) {
+ $buildFile = $2;
+ }
+ return () unless (-f $buildFile);
+
+ # Run "ant -projecthelp" to list targets. Keep a cache of results in a
+ # cache-file.
+ my $cacheFile = $buildFile;
+ $cacheFile =~ s|(.*/)?(.*)|${1}.ant-targets-${2}|;
+ if ((!-e $cacheFile) || (-M $buildFile) < (-M $cacheFile)) {
+ open( CACHE, '>'.$cacheFile ) || die "can\'t write $cacheFile: $!\n";
+ open( HELP, "$antCmd -projecthelp -f '$buildFile'|" ) || return();
+ my %targets;
+ while( <HELP> ) {
+ if (/^\s+(\S+)/) {
+ $targets{$1}++;
+ }
+ }
+ my @targets = sort keys %targets;
+ for (@targets) { print CACHE "$_\n"; }
+ return @targets;
+ }
+
+ # Read the target-cache
+ open( CACHE, $cacheFile ) || die "can\'t read $cacheFile: $!\n";
+ my @targets;
+ while (<CACHE>) {
+ chop;
+ s/\r$//; # for Cygwin
+ push( @targets, $_ );
+ }
+ close( CACHE );
+ @targets;
+
+}
+
+
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/envset.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/envset.cmd
new file mode 100644
index 0000000..cb91d87
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/envset.cmd
@@ -0,0 +1,130 @@
+/*
+
+ Copyright 2003-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+SET environment variables
+First optional parameter:
+ ; parameters are considered parts of a path variable, semicolons are
+ appended to each element if not already present
+ -D parameters are properties for Java or Makefile etc., -D will be
+ prepended and the parameters will be separated by a space
+ =D the same as above but equal sign is not required
+ , parameters should be comma separated in the environment variable
+ - parameters should be separated by the next parameter
+ Other values mean that the first parameter is missing and the environment
+ variable will be set to the space separated parameters
+
+Second parameter: name of the environment variable
+
+Next parameters: values
+; implies that the equal sign is considered a part of the parameter and is
+not interpreted
+
+-D requires parameters in the form name=value. If the equal sign is not found,
+the parameters are changed to name=expanded_name
+
+Other options have optional equal sign. If it is found, only the part after
+the equal sign will be oprionally expanded.
+
+If the parameter is the minus sign, the next parameter will not be expanded.
+If the parameter is a single dot, it will be replaced with the value of the
+environment variable as it existed before envset was invoked.
+
+For other parameters the batch looks for the environment variable with the
+same name (in uppercase). If it is found, it forms the expanded_name. If
+the environment variable with such a name does not exist, the expanded_name
+will hold the parameter name without case conversion.
+*/
+
+parse arg mode envar args
+
+equal = 0
+sep = ' '
+
+/* Parse command line parameters */
+select
+ when mode='-' then do
+ sep = envar
+ parse var args envar args
+ end
+ when mode=';' then do
+ sep = ''
+ equal = -1
+ end
+ when mode='-D' then equal = 1
+ when mode='=D' then mode = '-D'
+ when mode=',' then sep = ','
+otherwise
+ args = envar args
+ envar = mode
+ mode = ''
+end
+
+env = 'OS2ENVIRONMENT'
+envar = translate(envar)
+orig = value(envar,,env)
+newval = ''
+expand = 1
+
+/* for each parameter... */
+do i = 1 to words(args)
+ if expand > 0 & word(args, i) = '-' then expand = 0
+ else call addval word(args, i)
+end
+
+/* Optionally enclose path variable by quotes */
+if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"'
+
+/* Set the new value, 'SET' cannot be used since it does not allow '=' */
+x = value(envar, newval, env)
+exit 0
+
+addval: procedure expose sep equal orig expand newval mode env
+parse arg var
+
+if var = '.' then expvar = orig
+else do
+ if equal >= 0 then do
+ parse var var name '=' val
+ if val = '' then var = name
+ else var = val
+ end
+ if expand = 0 then expvar = var
+ else expvar = value(translate(var),,env)
+ if expvar = '' then expvar = var
+ if equal >= 0 then do
+ if val = '' then do
+ parse var expvar key '=' val
+ if val <> '' then name = key
+ else do
+ if equal > 0 then val = key
+ else name = key
+ end
+ end
+ else val = expvar
+ if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"'
+ if val = '' then expvar = name
+ else expvar = name || '=' || val
+ end
+ if mode = '-D' then expvar = '-D' || expvar
+ if mode = ';' then do
+ if right(expvar, 1) <> ';' then expvar = expvar || ';'
+ end
+end
+
+if newval = '' then newval = expvar
+else newval = newval || sep || expvar
+expand = 1
+return
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/lcp.bat b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/lcp.bat
new file mode 100644
index 0000000..eed6a82
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/lcp.bat
@@ -0,0 +1,30 @@
+REM
+REM Copyright 2001-2004 The Apache Software Foundation
+REM
+REM Licensed under the Apache License, Version 2.0 (the "License");
+REM you may not use this file except in compliance with the License.
+REM You may obtain a copy of the License at
+REM
+REM http://www.apache.org/licenses/LICENSE-2.0
+REM
+REM Unless required by applicable law or agreed to in writing, software
+REM distributed under the License is distributed on an "AS IS" BASIS,
+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+REM See the License for the specific language governing permissions and
+REM limitations under the License.
+REM
+REM
+
+set _CLASSPATHCOMPONENT=%1
+if ""%1""=="""" goto gotAllArgs
+shift
+
+:argCheck
+if ""%1""=="""" goto gotAllArgs
+set _CLASSPATHCOMPONENT=%_CLASSPATHCOMPONENT% %1
+shift
+goto argCheck
+
+:gotAllArgs
+set LOCALCLASSPATH=%_CLASSPATHCOMPONENT%;%LOCALCLASSPATH%
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.pl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.pl
new file mode 100644
index 0000000..eca4708
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.pl
@@ -0,0 +1,152 @@
+#!/usr/bin/perl
+#
+# Copyright 2000-2004 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#######################################################################
+#
+# runant.pl
+#
+# wrapper script for invoking ant in a platform with Perl installed
+# this may include cgi-bin invocation, which is considered somewhat daft.
+# (slo: that should be a separate file which can be derived from this
+# and returns the XML formatted output)
+#
+# the code is not totally portable due to classpath and directory splitting
+# issues. oops. (NB, use File::Spec::Functions will help and the code is
+# structured for the catfile() call, but because of perl version funnies
+# the code is not included.
+#
+# created: 2000-8-24
+# author: Steve Loughran steve_l@sourceforge.net
+#######################################################################
+#
+# Assumptions:
+#
+# - the "java" executable/script is on the command path
+# - ANT_HOME has been set
+# - target platform uses ":" as classpath separator or perl indicates it is dos/win32
+# - target platform uses "/" as directory separator.
+
+#be fussy about variables
+use strict;
+
+#platform specifics (disabled)
+#use File::Spec::Functions;
+
+#turn warnings on during dev; generates a few spurious uninitialised var access warnings
+#use warnings;
+
+#and set $debug to 1 to turn on trace info
+my $debug=1;
+
+#######################################################################
+#
+# check to make sure environment is setup
+#
+
+my $HOME = $ENV{ANT_HOME};
+if ($HOME eq "")
+ {
+ die "\n\nANT_HOME *MUST* be set!\n\n";
+ }
+
+my $JAVACMD = $ENV{JAVACMD};
+$JAVACMD = "java" if $JAVACMD eq "";
+
+my $onnetware = 0;
+if ($^O eq "NetWare")
+{
+ $onnetware = 1;
+}
+
+my $oncygwin = ($^O eq "cygwin");
+
+#ISSUE: what java wants to split up classpath varies from platform to platform
+#and perl is not too hot at hinting which box it is on.
+#here I assume ":" 'cept on win32, dos, and netware. Add extra tests here as needed.
+my $s=":";
+if(($^O eq "MSWin32") || ($^O eq "dos") || ($^O eq "cygwin") ||
+ ($onnetware == 1))
+ {
+ $s=";";
+ }
+
+#build up standard classpath
+my $localpath = "$HOME/lib/ant-launcher.jar";
+#set JVM options and Ant arguments, if any
+my @ANT_OPTS=split(" ", $ENV{ANT_OPTS});
+my @ANT_ARGS=split(" ", $ENV{ANT_ARGS});
+
+#jikes
+if($ENV{JIKESPATH} ne "")
+ {
+ push @ANT_OPTS, "-Djikes.class.path=$ENV{JIKESPATH}";
+ }
+
+#construct arguments to java
+my @ARGS;
+push @ARGS, @ANT_OPTS;
+
+my $CYGHOME = "";
+
+my $classpath=$ENV{CLASSPATH};
+if ($oncygwin == 1) {
+ $localpath = `cygpath --path --windows $localpath`;
+ chomp ($localpath);
+ if (! $classpath eq "")
+ {
+ $classpath = `cygpath --path --windows "$classpath"`;
+ chomp ($classpath);
+ }
+ $HOME = `cygpath --path --windows $HOME`;
+ chomp ($HOME);
+ $CYGHOME = `cygpath --path --windows $ENV{HOME}`;
+ chomp ($CYGHOME);
+}
+push @ARGS, "-classpath", "$localpath";
+push @ARGS, "-Dant.home=$HOME";
+if ( ! $CYGHOME eq "" )
+{
+ push @ARGS, "-Dcygwin.user.home=\"$CYGHOME\""
+}
+push @ARGS, "org.apache.tools.ant.launch.Launcher", @ANT_ARGS;
+push @ARGS, @ARGV;
+if (! $classpath eq "")
+{
+ if ($onnetware == 1)
+ {
+ # make classpath literally $CLASSPATH
+ # this is to avoid pushing us over the 512 character limit
+ # even skip the ; - that is already in $localpath
+ push @ARGS, "-lib", "\$CLASSPATH";
+ }
+ else
+ {
+ push @ARGS, "-lib", "$classpath";
+ }
+}
+print "\n $JAVACMD @ARGS\n\n" if ($debug);
+
+my $returnValue = system $JAVACMD, @ARGS;
+if ($returnValue eq 0)
+ {
+ exit 0;
+ }
+else
+ {
+ # only 0 and 1 are widely recognized as exit values
+ # so change the exit value to 1
+ exit 1;
+ }
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.py b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.py
new file mode 100644
index 0000000..c7b53b6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runant.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+# Copyright 2001,2003-2004 The Apache Software Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+"""
+
+ runant.py
+
+ This script is a translation of the runant.pl written by Steve Loughran.
+ It runs ant with/out arguments, it should be quite portable (thanks to
+ the python os library)
+ This script has been tested with Python2.0/Win2K
+
+ created: 2001-04-11
+ author: Pierre Dittgen pierre.dittgen@criltelecom.com
+
+ Assumptions:
+
+ - the "java" executable/script is on the command path
+"""
+import os, os.path, string, sys
+
+# Change it to 1 to get extra debug information
+debug = 0
+
+#######################################################################
+
+# If ANT_HOME is not set default to script's parent directory
+if os.environ.has_key('ANT_HOME'):
+ ANT_HOME = os.environ['ANT_HOME']
+else:
+ ANT_HOME = os.path.dirname(os.path.dirname(os.path.abspath(sys.argv[0])))
+
+# set ANT_LIB location
+ANT_LIB = os.path.join(ANT_HOME, 'lib')
+
+# set JAVACMD (check variables JAVACMD and JAVA_HOME)
+JAVACMD = None
+if not os.environ.has_key('JAVACMD'):
+ if os.environ.has_key('JAVA_HOME'):
+ if not os.path.exists(os.environ['JAVA_HOME']):
+ print "Warning: JAVA_HOME is not defined correctly."
+ else:
+ JAVACMD = os.path.join(os.environ['JAVA_HOME'], 'bin', 'java')
+ else:
+ print "Warning: JAVA_HOME not set."
+else:
+ JAVACMD = os.environ['JAVACMD']
+if not JAVACMD:
+ JAVACMD = 'java'
+
+launcher_jar = os.path.join(ANT_LIB, 'ant-launcher.jar')
+if not os.path.exists(launcher_jar):
+ print 'Unable to locate ant-launcher.jar. Expected to find it in %s' % \
+ ANT_LIB
+
+# Build up standard classpath (LOCALCLASSPATH)
+LOCALCLASSPATH = launcher_jar
+if os.environ.has_key('LOCALCLASSPATH'):
+ LOCALCLASSPATH += os.pathsep + os.environ['LOCALCLASSPATH']
+
+ANT_OPTS = ""
+if os.environ.has_key('ANT_OPTS'):
+ ANT_OPTS = os.environ['ANT_OPTS']
+
+OPTS = ""
+if os.environ.has_key('JIKESPATH'):
+ OPTS = '-Djikes.class.path=\"%s\"' % os.environ['JIKESPATH']
+
+ANT_ARGS = ""
+if os.environ.has_key('ANT_ARGS'):
+ ANT_ARGS = os.environ['ANT_ARGS']
+
+CLASSPATH = ""
+if os.environ.has_key('CLASSPATH'):
+ CLASSPATH = os.environ['CLASSPATH']
+
+# Builds the commandline
+cmdline = ('%s %s -classpath %s -Dant.home=%s %s ' + \
+ 'org.apache.tools.ant.launch.Launcher %s -lib %s %s') \
+ % (JAVACMD, ANT_OPTS, LOCALCLASSPATH, ANT_HOME, OPTS, ANT_ARGS, \
+ CLASSPATH, string.join(sys.argv[1:], ' '))
+
+if debug:
+ print '\n%s\n\n' % (cmdline)
+
+# Run the biniou!
+os.system(cmdline)
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runrc.cmd b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runrc.cmd
new file mode 100644
index 0000000..0337a80
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/bin/runrc.cmd
@@ -0,0 +1,59 @@
+/*
+ Copyright 2003-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ Run RC file, name is in the first arg, second arg is either PATH
+ ENV or -r or nothing
+*/
+
+parse arg name path rest
+
+if name = '' then do
+ say 'RC file name is missing'
+ exit 1
+end
+
+if rest \= '' then do
+ say 'Too many parameters'
+ exit 1
+end
+
+call runit name path
+exit 0
+
+runit: procedure
+parse arg name path dir
+
+if path \= '' & path \= '-r' then do
+ dir = value(translate(path),,'OS2ENVIRONMENT')
+ if dir = '' then return
+ dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */
+end
+
+if dir = '' then dir = directory()
+
+if path = '-r' then do /* recursive call */
+ subdir = filespec('path', dir)
+ if subdir \= '\' then do
+ subdir = left(subdir, length(subdir)-1)
+ call runit name path filespec('drive', dir) || subdir
+ end
+end
+
+/* Look for the file and run it */
+if right(dir, 1) \= '\' then dir = dir || '\'
+rcfile = stream(dir || name, 'c', 'query exists')
+if rcfile \= '' then interpret 'call "' || rcfile || '"'
+
+return
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/changelog.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/changelog.xsl
new file mode 100644
index 0000000..cd0d117
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/changelog.xsl
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<xsl:stylesheet
+ xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+ version='1.0'>
+
+<!--
+ Copyright 2002,2004-2005 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+ <xsl:param name="title"/>
+ <xsl:param name="module"/>
+ <xsl:param name="cvsweb"/>
+
+ <xsl:output method="html" indent="yes" encoding="US-ASCII"
+ doctype-public="-//W3C//DTD HTML 4.01//EN"
+ doctype-system="http://www.w3.org/TR/html401/strict.dtd"/>
+
+ <!-- Copy standard document elements. Elements that
+ should be ignored must be filtered by apply-templates
+ tags. -->
+ <xsl:template match="*">
+ <xsl:copy>
+ <xsl:copy-of select="attribute::*[. != '']"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="changelog">
+ <html>
+ <head>
+ <title><xsl:value-of select="$title"/></title>
+ <style type="text/css">
+ body, p {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 80%;
+ color: #000000;
+ background-color: #ffffff;
+ }
+ tr, td {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ background: #eeeee0;
+ }
+ td {
+ padding-left: 20px;
+ }
+ .dateAndAuthor {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-weight: bold;
+ text-align: left;
+ background: #a6caf0;
+ padding-left: 3px;
+ }
+ a {
+ color: #000000;
+ }
+ pre {
+ font-weight: bold;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>
+ <a name="top"><xsl:value-of select="$title"/></a>
+ </h1>
+ <p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p>
+ <hr/>
+ <table border="0" width="100%" cellspacing="1">
+
+ <xsl:apply-templates select=".//entry">
+ <xsl:sort select="date" data-type="text" order="descending"/>
+ <xsl:sort select="time" data-type="text" order="descending"/>
+ </xsl:apply-templates>
+
+ </table>
+
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <tr>
+ <td class="dateAndAuthor">
+ <xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <pre>
+<xsl:apply-templates select="msg"/></pre>
+ <ul>
+ <xsl:apply-templates select="file"/>
+ </ul>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="date">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="time">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="author">
+ <i>
+ <a>
+ <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+ <xsl:value-of select="."/></a>
+ </i>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <li>
+ <a>
+ <xsl:choose>
+ <xsl:when test="string-length(prevrevision) = 0 ">
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/></xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)</a>
+ </li>
+ </xsl:template>
+
+ <!-- Any elements within a msg are processed,
+ so that we can preserve HTML tags. -->
+ <xsl:template match="msg">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-frames.xsl
new file mode 100644
index 0000000..dcaa8b7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-frames.xsl
@@ -0,0 +1,293 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+
+<!--
+ Copyright 2002-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+ <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+ <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+ <xsl:param name="output.dir" select="'.'"/>
+ <xsl:param name="basedir" select="'.'"/>
+
+ <xsl:template match="checkstyle">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-summary.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="overview"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all files -->
+ <xsl:apply-templates select="file[count(error) != 0]"/>
+ </xsl:template>
+
+ <xsl:template name="index.html">
+ <html>
+ <head>
+ <title>CheckStyle Audit</title>
+ </head>
+ <frameset cols="20%,80%">
+ <frame src="allclasses-frame.html" name="fileListFrame"/>
+ <frame src="overview-frame.html" name="fileFrame"/>
+ </frameset>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature.
+ If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="pageHeader">
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="text-align:right"><h2>CheckStyle Audit</h2></td>
+ </tr>
+ <tr>
+ <td class="text-align:right">Designed for use with
+ <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and
+ <a href='http://ant.apache.org/'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="overview">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <!-- page header -->
+ <xsl:call-template name="pageHeader"/>
+
+ <!-- Summary part -->
+ <xsl:apply-templates select="." mode="summary"/>
+ <hr size="1" width="100%" align="left"/>
+
+ <!-- File list part -->
+ <xsl:apply-templates select="." mode="filelist"/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .oddrow td {
+ background: #efefef;
+ }
+ .evenrow td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+ </xsl:template>
+
+ <!--
+ Creates an all-classes.html file that contains a link to all files.
+ -->
+ <xsl:template match="checkstyle" mode="all.classes">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <h2>Files</h2>
+ <p>
+ <table width="100%">
+ <!-- For each file create its part -->
+ <xsl:apply-templates select="file[count(error) != 0]" mode="all.classes">
+ <xsl:sort select="substring-after(@name, $basedir)"/>
+ </xsl:apply-templates>
+ </table>
+ </p>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="filelist">
+ <h3>Files</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Name</th>
+ <th>Errors</th>
+ </tr>
+ <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+ <xsl:sort select="count(error)" order="descending" data-type="number"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:template>
+
+ <xsl:template match="file" mode="filelist">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td nowrap="nowrap">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="substring-after(@name, $basedir)"/>
+ </a>
+ </td>
+ <td><xsl:value-of select="count(error)"/></td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="file" mode="all.classes">
+ <tr>
+ <td nowrap="nowrap">
+ <a target="fileFrame">
+ <xsl:attribute name="href">
+ <xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="substring-after(@name, $basedir)"/>
+ </a>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <!--
+ transform string like a/b/c to ../../../
+ @param path the path to transform into a descending directory path
+ -->
+ <xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'/')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'/')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'/')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <redirect:write file="{$output.dir}/files/{substring-after(@name, $basedir)}.html">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css">
+ <xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="substring-after(@name, $basedir)"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute>
+ </link>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <h3>File <xsl:value-of select="substring-after(@name, $basedir)"/></h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Error Description</th>
+ <th>Line:Column</th>
+ </tr>
+ <xsl:for-each select="error">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+ <td align="center"><xsl:value-of select="@line"/><xsl:if test="@column">:<xsl:value-of select="@column"/></xsl:if></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+ </redirect:write>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="summary">
+ <h3>Summary</h3>
+ <xsl:variable name="fileCount" select="count(file)"/>
+ <xsl:variable name="errorCount" select="count(file/error)"/>
+ <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Total Files</th>
+ <th>Files With Errors</th>
+ <th>Errors</th>
+ </tr>
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><xsl:value-of select="$fileCount"/></td>
+ <td><xsl:value-of select="$fileErrorCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="alternated-row">
+ <xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+ <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+ </xsl:attribute>
+ </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-text.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-text.xsl
new file mode 100644
index 0000000..91d496c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-text.xsl
@@ -0,0 +1,33 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+ Copyright 2003-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+ <xsl:strip-space elements="checkstyle"/>
+ <xsl:preserve-space elements="file"/>
+ <xsl:output method="text"/>
+ <xsl:template match="checkstyle/file/error">
+ <xsl:value-of select="../@name"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@line"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@column"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@message"/>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-xdoc.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-xdoc.xsl
new file mode 100644
index 0000000..d23ac0e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/checkstyle/checkstyle-xdoc.xsl
@@ -0,0 +1,129 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+
+<!--
+ Copyright 2003-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+ <xsl:output method="xml" indent="yes"/>
+ <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+ <xsl:param name="output.dir" select="'.'"/>
+ <xsl:param name="basedir" select="'.'"/>
+
+ <xsl:template match="checkstyle">
+ <document>
+ <properties>
+ <title>Checkstyle Audit</title>
+ </properties>
+
+ <body>
+ <xsl:apply-templates select="." mode="summary"/>
+ <!-- File list part -->
+ <xsl:apply-templates select="." mode="filelist"/>
+ <xsl:apply-templates select="file[count(error) != 0]"/>
+ </body>
+ </document>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="filelist">
+ <section name="Files">
+ <table>
+ <tr>
+ <th>Name</th>
+ <th>Errors</th>
+ </tr>
+ <xsl:apply-templates select="file[count(error) != 0]" mode="filelist">
+ <xsl:sort select="count(error)" order="descending" data-type="number"/>
+ </xsl:apply-templates>
+ </table>
+ </section>
+ </xsl:template>
+
+ <xsl:template match="file" mode="filelist">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td nowrap="nowrap">
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>files</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="substring-after(@name, $basedir)"/>
+ </a>
+ </td>
+ <td><xsl:value-of select="count(error)"/></td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <redirect:write file="{$output.dir}/files{substring-after(@name, $basedir)}.xml">
+ <document>
+ <properties>
+ <title>Checkstyle Audit</title>
+ </properties>
+
+ <body>
+ <section name="Details for {substring-after(@name, $basedir)}">
+ <table>
+ <tr>
+ <th>Error Description</th>
+ <th>Line</th>
+ </tr>
+ <xsl:for-each select="error">
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><a title="{@source}"><xsl:value-of select="@message"/></a></td>
+ <td><xsl:value-of select="@line"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </section>
+ </body>
+ </document>
+ </redirect:write>
+ </xsl:template>
+
+ <xsl:template match="checkstyle" mode="summary">
+ <section name="Summary">
+ <xsl:variable name="fileCount" select="count(file)"/>
+ <xsl:variable name="errorCount" select="count(file/error)"/>
+ <xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/>
+ <table>
+ <tr>
+ <th>Files</th>
+ <th>Files With Errors</th>
+ <th>Errors</th>
+ </tr>
+ <tr>
+ <xsl:call-template name="alternated-row"/>
+ <td><xsl:value-of select="$fileCount"/></td>
+ <td><xsl:value-of select="$fileErrorCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ </tr>
+ </table>
+ </section>
+ </xsl:template>
+
+ <xsl:template name="alternated-row">
+ <xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">oddrow</xsl:if>
+ <xsl:if test="position() mod 2 = 0">evenrow</xsl:if>
+ </xsl:attribute>
+ </xsl:template>
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/coverage-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/coverage-frames.xsl
new file mode 100644
index 0000000..f808908
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/coverage-frames.xsl
@@ -0,0 +1,496 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ Copyright 2001-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+<!--
+
+ Sample stylesheet to be used with JProbe 3.0 XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ It is best used with JProbe Coverage Ant task that gives you the benefit
+ of a reference classpath so that you have the list of classes/methods
+ that are not used at all in a given classpath.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+
+-->
+
+<!-- default output directory is current directory -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- ======================================================================
+ Root element
+ ======================================================================= -->
+<xsl:template match="/snapshot">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:apply-templates select="./package" mode="write"/>
+</xsl:template>
+
+<!-- =======================================================================
+ Frameset definition. Entry point for the report.
+ 3 frames: packageListFrame, classListFrame, classFrame
+ ======================================================================= -->
+<xsl:template name="index.html">
+<html>
+ <head><title>Coverage Results.</title></head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="overview-frame.html" name="packageListFrame"/>
+ <frame src="allclasses-frame.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ </frameset>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+</html>
+</xsl:template>
+
+<!-- =======================================================================
+ Stylesheet CSS used
+ ======================================================================= -->
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+</xsl:template>
+
+<!-- =======================================================================
+ List of all classes in all packages
+ This will be the first page in the classListFrame
+ ======================================================================= -->
+<xsl:template match="snapshot" mode="all.classes">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link"/>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="package/class">
+ <xsl:sort select="@name"/>
+ <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+ <xsl:variable name="link">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:variable>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<!-- list of all packages -->
+<xsl:template match="snapshot" mode="all.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link"/>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:for-each select="package">
+ <xsl:sort select="@name" order="ascending"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<!-- overview of statistics in packages -->
+<xsl:template match="snapshot" mode="overview.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link"/>
+ </head>
+ <body onload="open('allclasses-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Summary</h3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <!--th width="10%" nowrap="nowrap">Date</th>
+ <th width="10%" nowrap="nowrap">Elapsed time</th-->
+ <th width="10%" nowrap="nowrap">Reported Classes</th>
+ <th width="10%" nowrap="nowrap">Methods Hit</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+ <tr class="a">
+ <!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td>
+ <td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td-->
+ <td><xsl:value-of select="count(package/class)"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+ </tr>
+ </table>
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ To ensure accurate test runs on Java applications, developers need to know how much of
+ the code has been tested, and where to find any untested code. Coverage helps you
+ locate untested code, and measure precisely how much code has been exercised.
+ The result is a higher quality application in a shorter period of time.
+ <p/>
+ </td>
+ </tr>
+ </table>
+
+ <h3>Packages</h3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="package[1]" mode="stats.header"/>
+ <!-- display packages and sort them via their coverage rate -->
+ <xsl:for-each select="package">
+ <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </html>
+</xsl:template>
+
+<!--
+ detailed info for a package. It will output the list of classes
+, the summary page, and the info for each class
+-->
+<xsl:template match="package" mode="write">
+ <xsl:variable name="package.dir">
+ <xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if>
+ <xsl:if test="@name = ''">.</xsl:if>
+ </xsl:variable>
+
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:apply-templates select="." mode="classes.list"/>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:apply-templates select="." mode="package.summary"/>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <xsl:for-each select="class">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+ <html>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+ </td>
+ </tr>
+ </table>
+
+ <H2>Classes</H2>
+ <TABLE WIDTH="100%">
+ <xsl:for-each select="class">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </TABLE>
+ </BODY>
+ </html>
+</xsl:template>
+
+<!-- summary of a package -->
+<xsl:template match="package" mode="package.summary">
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <!-- when loading this package, it will open the classes into the frame -->
+ <BODY onload="open('package-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="@name"/></h3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="." mode="stats.header"/>
+ <xsl:apply-templates select="." mode="stats"/>
+ </table>
+
+ <xsl:if test="count(class) > 0">
+ <H3>Classes</H3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="." mode="stats.header"/>
+ <xsl:apply-templates select="class" mode="stats">
+ <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:if>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+<!-- details of a class -->
+<xsl:template match="class" mode="class.details">
+ <xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:call-template name="pageHeader"/>
+ <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+ <!-- class summary -->
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="." mode="stats.header"/>
+ <xsl:apply-templates select="." mode="stats"/>
+ </table>
+
+ <!-- details of methods -->
+ <H3>Methods</H3>
+ <table class="log" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:apply-templates select="method[1]" mode="stats.header"/>
+ <xsl:apply-templates select="method" mode="stats">
+ <xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/>
+ </xsl:apply-templates>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+
+</xsl:template>
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="bannercell" rowspan="2">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right"><h2>Source Code Coverage</h2></td>
+ </tr>
+ <tr>
+ <td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+ <table width="100%">
+ <tr><td><hr noshade="yes" size="1"/></td></tr>
+ <tr><td>
+ <div align="center"><font color="#525D76" size="-1"><em>
+ Copyright © 1999-2001, Apache Software Foundation
+ </em></font></div>
+ </td></tr>
+ </table>
+</xsl:template>
+
+
+<xsl:template name="table.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th width="10%" nowrap="nowrap">Methods Hit</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+</xsl:template>
+
+<xsl:template match="method" mode="stats.header">
+ <tr>
+ <th width="90%">Name</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+</xsl:template>
+<xsl:template match="method" mode="stats">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:value-of select="@name"/></td>
+ <td>
+ <xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/>
+ </td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="package|class" mode="stats.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th width="10%" nowrap="nowrap">Methods Hit</th>
+ <th width="10%" nowrap="nowrap">Lines Hit</th>
+ </tr>
+</xsl:template>
+<xsl:template match="package|class" mode="stats">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:value-of select="@name"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td>
+ <td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td>
+ </tr>
+</xsl:template>
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend-frames.xsl
new file mode 100644
index 0000000..7a2a8ae
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend-frames.xsl
@@ -0,0 +1,485 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+ Copyright 2002-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<!--
+
+ Sample stylesheet to be used with JDepend XML output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+ @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a>
+
+ -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<xsl:template match="JDepend">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-packages.html">
+ <xsl:apply-templates select="." mode="packages.details"/>
+ </redirect:write>
+
+ <!-- create the overview-cycles.html at the root -->
+ <redirect:write file="{$output.dir}/overview-cycles.html">
+ <xsl:apply-templates select="." mode="cycles.details"/>
+ </redirect:write>
+
+ <!-- create the overview-cycles.html at the root -->
+ <redirect:write file="{$output.dir}/overview-explanations.html">
+ <xsl:apply-templates select="." mode="explanations"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/all-packages.html">
+ <xsl:apply-templates select="Packages" mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-cycles.html at the root -->
+ <redirect:write file="{$output.dir}/all-cycles.html">
+ <xsl:apply-templates select="Cycles" mode="all.cycles"/>
+ </redirect:write>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<html>
+ <head>
+ <title>JDepend Analysis</title>
+ </head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="all-packages.html" name="packageListFrame"/>
+ <frame src="all-cycles.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ </frameset>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ margin-left:2em;
+ margin-right:2em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ .Properties {
+ text-align:right;
+ }
+ </style>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="overview.packages">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <table width="100%"><tr align="left"><h2>Summary</h2><td>
+ </td><td align="right">
+ [summary]
+ [<a href="overview-packages.html">packages</a>]
+ [<a href="overview-cycles.html">cycles</a>]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ <table width="100%" class="details">
+ <tr>
+ <th>Package</th>
+ <th>Total Classes</th>
+ <th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th>
+ <th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th>
+ <th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th>
+ <th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th>
+ <th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th>
+ <th><a href="overview-explanations.html#EXinstability">Instability</a></th>
+ <th><a href="overview-explanations.html#EXdistance">Distance</a></th>
+
+ </tr>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <tr>
+ <td align="left">
+ <a>
+ <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+ <td align="right"><xsl:value-of select="Stats/A"/></td>
+ <td align="right"><xsl:value-of select="Stats/I"/></td>
+ <td align="right"><xsl:value-of select="Stats/D"/></td>
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) > 0">
+ <tr>
+ <td align="left">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="packages.details">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <table width="100%"><tr align="left"><h2>Packages</h2><td>
+ </td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [packages]
+ [<a href="overview-cycles.html">cycles</a>]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+ <xsl:value-of select="@name"/></a></h3>
+
+ <table width="100%"><tr>
+ <td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+ <td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+ <td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+ <td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+ <td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+ </tr></table>
+
+ <table width="100%" class="details">
+ <tr>
+ <th>Abstract Classes</th>
+ <th>Concrete Classes</th>
+ <th>Used by Packages</th>
+ <th>Uses Packages</th>
+ </tr>
+ <tr>
+ <td valign="top" width="25%">
+ <xsl:if test="count(AbstractClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="AbstractClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(ConcreteClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="ConcreteClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(UsedBy/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="UsedBy/Package">
+ <a>
+ <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(DependsUpon/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="DependsUpon/Package">
+ <a>
+ <xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ </tr>
+ </table>
+ </xsl:if>
+ </xsl:for-each>
+ <!-- this is often a long listing; provide a lower navigation table also -->
+ <table width="100%"><tr align="left"><td></td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [packages]
+ [<a href="overview-cycles.html">cycles</a>]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="cycles.details">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <table width="100%"><tr align="left"><h2>Cycles</h2><td>
+ </td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [<a href="overview-packages.html">packages</a>]
+ [cycles]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ <!--<table width="100%"><tr><td>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table> -->
+
+ <xsl:if test="count(Cycles/Package) = 0">
+ <p>There are no cyclic dependancies.</p>
+ </xsl:if>
+ <xsl:for-each select="Cycles/Package">
+ <h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p>
+ <xsl:for-each select="Package">
+ <xsl:value-of select="."/><br/>
+ </xsl:for-each></p>
+ </xsl:for-each>
+ <!-- this is often a long listing; provide a lower navigation table also -->
+ <table width="100%"><tr align="left"><td></td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [<a href="overview-packages.html">packages</a>]
+ [cycles]
+ [<a href="overview-explanations.html">explanations</a>]
+ </td></tr></table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend" mode="explanations">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+
+ <table width="100%"><tr align="left"><h2>Explanations</h2><td>
+ </td><td align="right">
+ [<a href="overview-summary.html">summary</a>]
+ [<a href="overview-packages.html">packages</a>]
+ [<a href="overview-cycles.html">cycles</a>]
+ [explanations]
+ </td></tr></table>
+
+ <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+
+ <h3><a name="EXnumber">Number of Classes</a></h3>
+ <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+ <h3><a name="EXafferent">Afferent Couplings</a></h3>
+ <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+ <h3><a name="EXefferent">Efferent Couplings</a></h3>
+ <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+ <h3><a name="EXabstractness">Abstractness</a></h3>
+ <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+ <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+ <h3><a name="EXinstability">Instability</a></h3>
+ <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+ <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+ <h3><a name="EXdistance">Distance</a></h3>
+ <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+ <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+ <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+Creates an html file that contains a link to all package links in overview-packages.html.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages" mode="all.packages">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+ [<a href="overview-summary.html" target="classFrame">summary</a>]
+ [<a href="overview-packages.html" target="classFrame">packages</a>]
+ [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+ [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+ </td></tr></table>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="Package[count(error) > 0]" mode="all.packages.nolink">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.link">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="overview-packages.html#PK{@name}" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+<!--
+I do not know JDepend enough to know if every error results in a non-analyzed package,
+but that is how I am presenting it to the viewer. This may need to change.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink">
+ <tr>
+ <td nowrap="nowrap">
+ Not Analyzed: <xsl:value-of select="@name"/>
+ </td>
+ </tr>
+</xsl:template>
+
+<!--
+Creates an html file that contains a link to all package links in overview-cycles.html.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="JDepend/Cycles" mode="all.cycles">
+ <html>
+ <head>
+ <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
+ </head>
+ <body>
+ <table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right">
+ [<a href="overview-summary.html" target="classFrame">summary</a>]
+ [<a href="overview-packages.html" target="classFrame">packages</a>]
+ [<a href="overview-cycles.html" target="classFrame">cycles</a>]
+ [<a href="overview-explanations.html" target="classFrame">explanations</a>]
+ </td></tr></table>
+ <h2>Cycles</h2>
+ <table width="100%">
+ <xsl:apply-templates select="Package" mode="all.cycles">
+ <xsl:sort select="@Name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="JDepend/Cycles/Package" mode="all.cycles">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a>
+ </td>
+ </tr>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1>JDepend Analysis</h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend.xsl
new file mode 100644
index 0000000..e1e5e2d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/jdepend.xsl
@@ -0,0 +1,275 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<!--
+ Copyright 2002,2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+
+<xsl:template match="JDepend">
+ <html>
+ <head>
+ <title>JDepend Analysis</title>
+
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ margin-left:2em;
+ margin-right:2em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ .Properties {
+ text-align:right;
+ }
+ </style>
+
+
+ </head>
+ <body>
+ <!--h1>JDepend Report</h1>
+ <ul>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:sort select="@name"/>
+ <li><xsl:value-of select="@name"/></li>
+ </xsl:for-each>
+ </ul-->
+
+ <h1><a name="top">JDepend Analysis</a></h1>
+ <p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p>
+ <hr size="2" />
+
+ <table width="100%"><tr><td>
+ <a name="NVsummary"><h2>Summary</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <table width="100%" class="details">
+ <tr>
+ <th>Package</th>
+ <th>Total Classes</th>
+ <th><a href="#EXnumber">Abstract Classes</a></th>
+ <th><a href="#EXnumber">Concrete Classes</a></th>
+ <th><a href="#EXafferent">Afferent Couplings</a></th>
+ <th><a href="#EXefferent">Efferent Couplings</a></th>
+ <th><a href="#EXabstractness">Abstractness</a></th>
+ <th><a href="#EXinstability">Instability</a></th>
+ <th><a href="#EXdistance">Distance</a></th>
+
+ </tr>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <tr>
+ <td align="left">
+ <a>
+ <xsl:attribute name="href">#PK<xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ <td align="right"><xsl:value-of select="Stats/TotalClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ca"/></td>
+ <td align="right"><xsl:value-of select="Stats/Ce"/></td>
+ <td align="right"><xsl:value-of select="Stats/A"/></td>
+ <td align="right"><xsl:value-of select="Stats/I"/></td>
+ <td align="right"><xsl:value-of select="Stats/D"/></td>
+
+
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) > 0">
+ <tr>
+ <td align="left">
+ <xsl:value-of select="@name"/>
+ </td>
+ <td align="left" colspan="8"><xsl:value-of select="error"/></td>
+ </tr>
+ </xsl:if>
+ </xsl:for-each>
+ </table>
+
+ <table width="100%"><tr><td>
+ <a name="NVpackages"><h2>Packages</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <xsl:for-each select="./Packages/Package">
+ <xsl:if test="count(error) = 0">
+ <h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute>
+ <xsl:value-of select="@name"/></a></h3>
+
+ <table width="100%"><tr>
+ <td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td>
+ <td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td>
+ <td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td>
+ <td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td>
+ <td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td>
+ </tr></table>
+
+ <table width="100%" class="details">
+ <tr>
+ <th>Abstract Classes</th>
+ <th>Concrete Classes</th>
+ <th>Used by Packages</th>
+ <th>Uses Packages</th>
+ </tr>
+ <tr>
+ <td valign="top" width="25%">
+ <xsl:if test="count(AbstractClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="AbstractClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(ConcreteClasses/Class)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="ConcreteClasses/Class">
+ <xsl:value-of select="node()"/><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(UsedBy/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="UsedBy/Package">
+ <a>
+ <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ <td valign="top" width="25%">
+ <xsl:if test="count(DependsUpon/Package)=0">
+ <i>None</i>
+ </xsl:if>
+ <xsl:for-each select="DependsUpon/Package">
+ <a>
+ <xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute>
+ <xsl:value-of select="node()"/>
+ </a><br/>
+ </xsl:for-each>
+ </td>
+ </tr>
+ </table>
+ </xsl:if>
+ </xsl:for-each>
+
+ <table width="100%"><tr><td>
+ <a name="NVcycles"><h2>Cycles</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <xsl:if test="count(Cycles/Package) = 0">
+ <p>There are no cyclic dependancies.</p>
+ </xsl:if>
+ <xsl:for-each select="Cycles/Package">
+ <h3><xsl:value-of select="@Name"/></h3><p>
+ <xsl:for-each select="Package">
+ <xsl:value-of select="."/><br/>
+ </xsl:for-each></p>
+ </xsl:for-each>
+
+ <table width="100%"><tr><td>
+ <a name="NVexplanations"><h2>Explanations</h2></a>
+ </td><td align="right">
+ [<a href="#NVsummary">summary</a>]
+ [<a href="#NVpackages">packages</a>]
+ [<a href="#NVcycles">cycles</a>]
+ [<a href="#NVexplanations">explanations</a>]
+ </td></tr></table>
+
+ <p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p>
+
+ <h3><a name="EXnumber">Number of Classes</a></h3>
+ <p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p>
+ <h3><a name="EXafferent">Afferent Couplings</a></h3>
+ <p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p>
+ <h3><a name="EXefferent">Efferent Couplings</a></h3>
+ <p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p>
+ <h3><a name="EXabstractness">Abstractness</a></h3>
+ <p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p>
+ <p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p>
+ <h3><a name="EXinstability">Instability</a></h3>
+ <p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p>
+ <p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p>
+ <h3><a name="EXdistance">Distance</a></h3>
+ <p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p>
+ <p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p>
+ <p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p>
+
+ </body>
+ </html>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames-xalan1.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames-xalan1.xsl
new file mode 100644
index 0000000..114e459
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames-xalan1.xsl
@@ -0,0 +1,716 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+ Copyright 2001-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="testsuites">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:call-template name="package">
+ <xsl:with-param name="name" select="@package"/>
+ </xsl:call-template>
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+ <xsl:param name="name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+ <xsl:if test="$name = ''">.</xsl:if>
+ </xsl:variable>
+ <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:call-template name="classes.list">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:call-template name="package.summary">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ <xsl:if test="string-length(./system-out)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.txt">
+ <xsl:value-of select="./system-out" />
+ </redirect:write>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.txt">
+ <xsl:value-of select="./system-err" />
+ </redirect:write>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+ <head>
+ <title>Unit Test Results.</title>
+ </head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="overview-frame.html" name="packageListFrame"/>
+ <frame src="allclasses-frame.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+ </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+}
+table tr td, table tr th {
+ font-size: 68%;
+}
+table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+}
+table.details tr td{
+ background:#eeeee0;
+}
+
+p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+ font-weight:bold; color:red;
+}
+.Failure {
+ font-weight:bold; color:purple;
+}
+.Properties {
+ text-align:right;
+}
+</xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every testsuite class.
+ It prints a summary of the testsuite and detailed information about
+ testcase methods.
+ ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+ <xsl:variable name="package.name" select="@package"/>
+ <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+ <html>
+ <head>
+ <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ <script type="text/javascript" language="JavaScript">
+ var TestCases = new Array();
+ var cur;
+ <xsl:apply-templates select="properties"/>
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function displayProperties (name) {
+ var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+ var doc = win.document.open();
+ doc.write("<html><head><title>Properties of " + name + "</title>");
+ doc.write("<style type=\"text/css\">");
+ doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+ doc.write("table tr td, table tr th { font-size: 68%; }");
+ doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+ doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+ doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+ doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+ doc.write("</style>");
+ doc.write("</head><body>");
+ doc.write("<h3>Properties of " + name + "</h3>");
+ doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+ doc.write("<table class='properties'>");
+ doc.write("<tr><th>Name</th><th>Value</th></tr>");
+ for (prop in TestCases[name]) {
+ doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+ }
+ doc.write("</table>");
+ doc.write("</body></html>");
+ doc.close();
+ win.focus();
+ }
+ ]]>
+ </script>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="." mode="print.test"/>
+ </table>
+
+ <h2>Tests</h2>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:apply-templates select="./testcase" mode="print.test"/>
+ </table>
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+ Properties »
+ </a>
+ </div>
+ <xsl:if test="string-length(./system-out)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
+ System.out »
+ </a>
+ </div>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
+ System.err »
+ </a>
+ </div>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+ <!--
+ Write properties into a JavaScript data structure.
+ This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+ -->
+ <xsl:template match="properties">
+ cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+ <xsl:for-each select="property">
+ <xsl:sort select="@name"/>
+ cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+ </xsl:for-each>
+ </xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every package.
+ It prints the name of all classes that belongs to this package.
+ @param name the package name to print classes.
+ ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <h2><a href="package-summary.html" target="classFrame">
+ <xsl:value-of select="$name"/>
+ <xsl:if test="$name = ''"><none></xsl:if>
+ </a></h2>
+ </td>
+ </tr>
+ </table>
+
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+ <html>
+ <head>
+ <title>All Unit Test Classes</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite" mode="all.classes">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+ <xsl:variable name="package.name" select="@package"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+ <html>
+ <head>
+ <title>All Unit Test Packages</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+ <xsl:sort select="@package"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''"><none></xsl:if>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+ <html>
+ <head>
+ <title>Unit Test Results: Summary</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h2>Summary</h2>
+ <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$errorCount > 0">Error</xsl:when>
+ <xsl:when test="$failureCount > 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+ </td>
+ </tr>
+ </table>
+
+ <h2>Packages</h2>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package" order="ascending"/>
+ <!-- get the node set containing all testsuites that have the same package -->
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+ <tr valign="top">
+ <!-- display a failure if there is any failure/error in the package -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when>
+ <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''"><none></xsl:if>
+ </a></td>
+ <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:value-of select="$insamepackage/@timestamp"/></td>
+ <td><xsl:value-of select="$insamepackage/@hostname"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="$name"/></h3>
+
+ <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="class.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table-->
+
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+ <xsl:if test="count($insamepackage) > 0">
+ <h2>Classes</h2>
+ <p>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="$insamepackage" mode="print.test">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </p>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1>Unit Test Results</h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ <th nowrap="nowrap">Time Stamp</th>
+ <th>Host</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+ <tr valign="top">
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@errors[.> 0]">Error</xsl:when>
+ <xsl:when test="@failures[.> 0]">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:apply-templates select="@tests"/></td>
+ <td><xsl:apply-templates select="@errors"/></td>
+ <td><xsl:apply-templates select="@failures"/></td>
+ <td><xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ <td><xsl:apply-templates select="@timestamp"/></td>
+ <td><xsl:apply-templates select="@hostname"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="error">Error</xsl:when>
+ <xsl:when test="failure">Failure</xsl:when>
+ <xsl:otherwise>TableRowColor</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="@name"/></td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+ so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <br/><br/>
+ <code>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ <!-- the latter is better but might be problematic for non-21" monitors... -->
+ <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+ <xsl:param name="string"/>
+ <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+ <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
+ <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:param name="br"><br/></xsl:param>
+ <xsl:value-of select='stringutils:replace(string($word),"
",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames.xsl
new file mode 100644
index 0000000..229e8dd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-frames.xsl
@@ -0,0 +1,712 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="http://xml.apache.org/xalan/redirect"
+ xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator=","/>
+<!--
+ Copyright 2001-2005 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a set of HTML files a la javadoc where you can browse easily
+ through all packages and classes.
+
+-->
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="testsuites">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:call-template name="package">
+ <xsl:with-param name="name" select="@package"/>
+ </xsl:call-template>
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+ <xsl:param name="name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+ <xsl:if test="$name = ''">.</xsl:if>
+ </xsl:variable>
+ <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:call-template name="classes.list">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:call-template name="package.summary">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="/testsuites/testsuite[@package = $name]">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ <xsl:if test="string-length(./system-out)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt">
+ <xsl:value-of select="./system-out" />
+ </redirect:write>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt">
+ <xsl:value-of select="./system-err" />
+ </redirect:write>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<html>
+ <head>
+ <title>Unit Test Results.</title>
+ </head>
+ <frameset cols="20%,80%">
+ <frameset rows="30%,70%">
+ <frame src="overview-frame.html" name="packageListFrame"/>
+ <frame src="allclasses-frame.html" name="classListFrame"/>
+ </frameset>
+ <frame src="overview-summary.html" name="classFrame"/>
+ <noframes>
+ <h2>Frame Alert</h2>
+ <p>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </p>
+ </noframes>
+ </frameset>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+}
+table tr td, table tr th {
+ font-size: 68%;
+}
+table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+}
+table.details tr td{
+ background:#eeeee0;
+}
+
+p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+}
+h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+}
+h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+}
+h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+}
+h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+}
+.Error {
+ font-weight:bold; color:red;
+}
+.Failure {
+ font-weight:bold; color:purple;
+}
+.Properties {
+ text-align:right;
+}
+</xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every testsuite class.
+ It prints a summary of the testsuite and detailed information about
+ testcase methods.
+ ====================================================================== -->
+<xsl:template match="testsuite" mode="class.details">
+ <xsl:variable name="package.name" select="@package"/>
+ <xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable>
+ <html>
+ <head>
+ <title>Unit Test Results: <xsl:value-of select="$class.name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ <script type="text/javascript" language="JavaScript">
+ var TestCases = new Array();
+ var cur;
+ <xsl:apply-templates select="properties"/>
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function displayProperties (name) {
+ var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+ var doc = win.document.open();
+ doc.write("<html><head><title>Properties of " + name + "</title>");
+ doc.write("<style type=\"text/css\">");
+ doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+ doc.write("table tr td, table tr th { font-size: 68%; }");
+ doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+ doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+ doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+ doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+ doc.write("</style>");
+ doc.write("</head><body>");
+ doc.write("<h3>Properties of " + name + "</h3>");
+ doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+ doc.write("<table class='properties'>");
+ doc.write("<tr><th>Name</th><th>Value</th></tr>");
+ for (prop in TestCases[name]) {
+ doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+ }
+ doc.write("</table>");
+ doc.write("</body></html>");
+ doc.close();
+ win.focus();
+ }
+ ]]>
+ </script>
+ </head>
+ <body>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Class <xsl:value-of select="$class.name"/></h3>
+
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="." mode="print.test"/>
+ </table>
+
+ <h2>Tests</h2>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:apply-templates select="./testcase" mode="print.test"/>
+ </table>
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+ Properties »
+ </a>
+ </div>
+ <xsl:if test="string-length(./system-out)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-out.txt</xsl:attribute>
+ System.out »
+ </a>
+ </div>
+ </xsl:if>
+ <xsl:if test="string-length(./system-err)!=0">
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-err.txt</xsl:attribute>
+ System.err »
+ </a>
+ </div>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+ <!--
+ Write properties into a JavaScript data structure.
+ This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+ -->
+ <xsl:template match="properties">
+ cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+ <xsl:for-each select="property">
+ <xsl:sort select="@name"/>
+ cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+ </xsl:for-each>
+ </xsl:template>
+
+
+<!-- ======================================================================
+ This page is created for every package.
+ It prints the name of all classes that belongs to this package.
+ @param name the package name to print classes.
+ ====================================================================== -->
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <title>Unit Test Classes: <xsl:value-of select="$name"/></title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <h2><a href="package-summary.html" target="classFrame">
+ <xsl:value-of select="$name"/>
+ <xsl:if test="$name = ''"><none></xsl:if>
+ </a></h2>
+ </td>
+ </tr>
+ </table>
+
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="/testsuites/testsuite[./@package = $name]">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@id}_{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="testsuites" mode="all.classes">
+ <html>
+ <head>
+ <title>All Unit Test Classes</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite" mode="all.classes">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.classes">
+ <xsl:variable name="package.name" select="@package"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@id"/>_<xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="testsuites" mode="all.packages">
+ <html>
+ <head>
+ <title>All Unit Test Packages</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages">
+ <xsl:sort select="@package"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''"><none></xsl:if>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="testsuites" mode="overview.packages">
+ <html>
+ <head>
+ <title>Unit Test Results: Summary</title>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h2>Summary</h2>
+ <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$errorCount > 0">Error</xsl:when>
+ <xsl:when test="$failureCount > 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated.
+ </td>
+ </tr>
+ </table>
+
+ <h2>Packages</h2>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package" order="ascending"/>
+ <!-- get the node set containing all testsuites that have the same package -->
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/>
+ <tr valign="top">
+ <!-- display a failure if there is any failure/error in the package -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when>
+ <xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="./{translate(@package,'.','/')}/package-summary.html">
+ <xsl:value-of select="@package"/>
+ <xsl:if test="@package = ''"><none></xsl:if>
+ </a></td>
+ <td><xsl:value-of select="sum($insamepackage/@tests)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@errors)"/></td>
+ <td><xsl:value-of select="sum($insamepackage/@failures)"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="sum($insamepackage/@time)"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+ <xsl:param name="name"/>
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="$name"/></h3>
+
+ <!--table border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="class.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table-->
+
+ <xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/>
+ <xsl:if test="count($insamepackage) > 0">
+ <h2>Classes</h2>
+ <p>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <xsl:apply-templates select="$insamepackage" mode="print.test">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </p>
+ </xsl:if>
+ </body>
+ </html>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link>
+</xsl:template>
+
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1>Unit Test Results</h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+ <tr valign="top">
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@errors[.> 0]">Error</xsl:when>
+ <xsl:when test="@failures[.> 0]">Failure</xsl:when>
+ <xsl:otherwise>Pass</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="{@id}_{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:apply-templates select="@tests"/></td>
+ <td><xsl:apply-templates select="@errors"/></td>
+ <td><xsl:apply-templates select="@failures"/></td>
+ <td><xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="error">Error</xsl:when>
+ <xsl:when test="failure">Failure</xsl:when>
+ <xsl:otherwise>TableRowColor</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="@name"/></td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!-- Note : the below template error and failure are the same style
+ so just call the same style store in the toolkit template -->
+<xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the testcase template -->
+<xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <br/><br/>
+ <code>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ <!-- the latter is better but might be problematic for non-21" monitors... -->
+ <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+ <xsl:param name="string"/>
+ <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+ <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
+ <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:param name="br"><br/></xsl:param>
+ <xsl:value-of select='stringutils:replace(string($word),"
",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-noframes.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-noframes.xsl
new file mode 100644
index 0000000..25487f8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/junit-noframes.xsl
@@ -0,0 +1,461 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"
+ doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" />
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ Copyright 2001-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with Ant JUnitReport output.
+
+ It creates a non-framed report that can be useful to send via
+ e-mail or such.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+ @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
+
+-->
+<xsl:template match="testsuites">
+ <html>
+ <head>
+ <title>Unit Test Results</title>
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, table tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ .Properties {
+ text-align:right;
+ }
+ </style>
+ <script type="text/javascript" language="JavaScript">
+ var TestCases = new Array();
+ var cur;
+ <xsl:for-each select="./testsuite">
+ <xsl:apply-templates select="properties"/>
+ </xsl:for-each>
+
+ </script>
+ <script type="text/javascript" language="JavaScript"><![CDATA[
+ function displayProperties (name) {
+ var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1');
+ var doc = win.document.open();
+ doc.write("<html><head><title>Properties of " + name + "</title>");
+ doc.write("<style>")
+ doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }");
+ doc.write("table tr td, table tr th { font-size: 68%; }");
+ doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }");
+ doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }");
+ doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }");
+ doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }");
+ doc.write("</style>");
+ doc.write("</head><body>");
+ doc.write("<h3>Properties of " + name + "</h3>");
+ doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>");
+ doc.write("<table class='properties'>");
+ doc.write("<tr><th>Name</th><th>Value</th></tr>");
+ for (prop in TestCases[name]) {
+ doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>");
+ }
+ doc.write("</table>");
+ doc.write("</body></html>");
+ doc.close();
+ win.focus();
+ }
+ ]]>
+ </script>
+ </head>
+ <body>
+ <a name="top"></a>
+ <xsl:call-template name="pageHeader"/>
+
+ <!-- Summary part -->
+ <xsl:call-template name="summary"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- Package List part -->
+ <xsl:call-template name="packagelist"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- For each package create its part -->
+ <xsl:call-template name="packages"/>
+ <hr size="1" width="95%" align="left"/>
+
+ <!-- For each class create the part -->
+ <xsl:call-template name="classes"/>
+
+ </body>
+ </html>
+</xsl:template>
+
+
+
+ <!-- ================================================================== -->
+ <!-- Write a list of all packages with an hyperlink to the anchor of -->
+ <!-- of the package name. -->
+ <!-- ================================================================== -->
+ <xsl:template name="packagelist">
+ <h2>Packages</h2>
+ Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+ <!-- list all packages recursively -->
+ <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package"/>
+ <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
+ <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
+ <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
+ <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
+ <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
+
+ <!-- write a summary for the package -->
+ <tr valign="top">
+ <!-- set a nice color depending if there is an error/failure -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$failureCount > 0">Failure</xsl:when>
+ <xsl:when test="$errorCount > 0">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><a href="#{@package}"><xsl:value-of select="@package"/></a></td>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ </xsl:template>
+
+
+ <!-- ================================================================== -->
+ <!-- Write a package level report -->
+ <!-- It creates a table with values from the document: -->
+ <!-- Name | Tests | Errors | Failures | Time -->
+ <!-- ================================================================== -->
+ <xsl:template name="packages">
+ <!-- create an anchor to this package name -->
+ <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+ <xsl:sort select="@package"/>
+ <a name="{@package}"></a>
+ <h3>Package <xsl:value-of select="@package"/></h3>
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testsuite.test.header"/>
+
+ <!-- match the testsuites of this package -->
+ <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
+ </table>
+ <a href="#top">Back to top</a>
+ <p/>
+ <p/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="classes">
+ <xsl:for-each select="testsuite">
+ <xsl:sort select="@name"/>
+ <!-- create an anchor to this class name -->
+ <a name="{@name}"></a>
+ <h3>TestCase <xsl:value-of select="@name"/></h3>
+
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:apply-templates select="./testcase" mode="print.test"/>
+ </table>
+ <div class="Properties">
+ <a>
+ <xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute>
+ Properties »
+ </a>
+ </div>
+ <p/>
+
+ <a href="#top">Back to top</a>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="summary">
+ <h2>Summary</h2>
+ <xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$failureCount > 0">Failure</xsl:when>
+ <xsl:when test="$errorCount > 0">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <!--
+ Write properties into a JavaScript data structure.
+ This is based on the original idea by Erik Hatcher (ehatcher@apache.org)
+ -->
+ <xsl:template match="properties">
+ cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array();
+ <xsl:for-each select="property">
+ <xsl:sort select="@name"/>
+ cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>';
+ </xsl:for-each>
+ </xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+ <h1>Unit Test Results</h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://jakarta.apache.org/ant'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+ <tr valign="top">
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <!-- set a nice color depending if there is an error/failure -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="@failures[.> 0]">Failure</xsl:when>
+ <xsl:when test="@errors[.> 0]">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+
+ <!-- print testsuite information -->
+ <td><a href="#{@name}"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:value-of select="@tests"/></td>
+ <td><xsl:value-of select="@errors"/></td>
+ <td><xsl:value-of select="@failures"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="failure | error">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="@name"/></td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the tescase template -->
+<xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <code>
+ <br/><br/>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ <!-- the later is better but might be problematic for non-21" monitors... -->
+ <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+ <xsl:param name="string"/>
+ <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+ <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/>
+ <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:param name="br"><br/></xsl:param>
+ <xsl:value-of select='stringutils:replace(string($word),"
",$br)'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/log.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/log.xsl
new file mode 100644
index 0000000..2272790
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/log.xsl
@@ -0,0 +1,210 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<!--
+ Copyright 2000-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+
+<!--
+
+ The purpose have this XSL is to provide a nice way to look at the output
+ from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger )
+
+ @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
+
+-->
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+<xsl:template match="/">
+<html>
+ <head>
+ <style type="text/css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin: 0;
+ font:normal 100% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ table.status {
+ font:bold 80% arial,helvetica,sanserif;
+ background-color:#525D76;
+ color:#ffffff;
+ }
+ table.log tr td, tr th {
+ font-size: 80%;
+ }
+ .error {
+ color:red;
+ }
+ .warn {
+ color:brown;
+ }
+ .info {
+ color:gray;
+ }
+ .debug{
+ color:gray;
+ }
+ .failed {
+ font-size:80%;
+ background-color: red;
+ color:#FFFFFF;
+ font-weight: bold
+ }
+ .complete {
+ font-size:80%;
+ background-color: #525D76;
+ color:#FFFFFF;
+ font-weight: bold
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ border: none
+ }
+ h3 {
+ font:bold 80% arial,helvetica,sanserif;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+ </style>
+ </head>
+ <body>
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td valign="top" class="bannercell">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right;vertical-align:bottom">
+ <a href="http://jakarta.apache.org/ant">Apache Ant</a>
+ </td>
+ </tr>
+ </table>
+
+ <table border="0" width="100%">
+ <tr><td><hr noshade="yes" size="1"/></td></tr>
+ </table>
+
+ <xsl:apply-templates select="build"/>
+
+ <!-- FOOTER -->
+ <table width="100%">
+ <tr><td><hr noshade="yes" size="1"/></td></tr>
+ <tr><td>
+ <div align="center"><font color="#525D76" size="-1"><em>
+ Copyright © 2000-2002, Apache Software Foundation
+ </em></font></div>
+ </td></tr>
+ </table>
+ </body>
+</html>
+</xsl:template>
+
+<xsl:template match="build">
+ <!-- build status -->
+ <table width="100%">
+ <xsl:attribute name="class">
+ <xsl:if test="@error">failed</xsl:if>
+ <xsl:if test="not(@error)">complete</xsl:if>
+ </xsl:attribute>
+ <tr>
+ <xsl:if test="@error">
+ <td nowrap="yes">Build Failed</td>
+ </xsl:if>
+ <xsl:if test="not(@error)">
+ <td nowrap="yes">Build Complete</td>
+ </xsl:if>
+ <td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <xsl:if test="@error">
+ <tt><xsl:value-of select="@error"/></tt><br/>
+ <i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i>
+ </xsl:if>
+ </td>
+ </tr>
+ </table>
+ <table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%">
+ <tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.file')], '->')"/></td></tr>
+ <tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.version')], '->')"/></td></tr>
+ <tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'java.vm.version')], '->')"/></td></tr>
+ <tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(//message[contains(text(),'os.name')], '->')"/></td></tr>
+ </table>
+ <!-- build information -->
+ <h3>Build events</h3>
+ <table class="log" border="1" cellspacing="2" cellpadding="3" width="100%">
+ <tr>
+ <th nowrap="yes" align="left" width="1%">target</th>
+ <th nowrap="yes" align="left" width="1%">task</th>
+ <th nowrap="yes" align="left">message</th>
+ </tr>
+ <xsl:apply-templates select=".//message[@priority != 'debug']"/>
+ </table>
+ <p>
+ <!-- stacktrace -->
+ <xsl:if test="stacktrace">
+ <a name="stacktrace"/>
+ <h3>Error details</h3>
+ <table width="100%">
+ <tr><td>
+ <pre><xsl:value-of select="stacktrace"/></pre>
+ </td></tr>
+ </table>
+ </xsl:if>
+ </p>
+</xsl:template>
+
+<!-- report every message but those with debug priority -->
+<xsl:template match="message[@priority!='debug']">
+ <tr valign="top">
+ <!-- alternated row style -->
+ <xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+ </xsl:attribute>
+ <td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td>
+ <td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td>
+ <td class="{@priority}" nowrap="yes">
+ <xsl:value-of select="text()"/>
+ </td>
+ </tr>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/maudit-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/maudit-frames.xsl
new file mode 100644
index 0000000..eaaf180
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/maudit-frames.xsl
@@ -0,0 +1,510 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ Copyright 2001-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<!--
+
+ Stylesheet to transform an XML file generated by the Ant MAudit task into
+ a set of JavaDoc-like HTML page to make pages more convenient to be browsed.
+
+ It use the Xalan redirect extension to write to multiple output files.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+-->
+
+<xsl:param name="output.dir" select="'.'"/>
+
+
+<xsl:template match="classes">
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]">
+ <xsl:call-template name="package">
+ <xsl:with-param name="name" select="@package"/>
+ </xsl:call-template>
+ </xsl:for-each>
+</xsl:template>
+
+
+<xsl:template name="package">
+ <xsl:param name="name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if>
+ <xsl:if test="$name = ''">.</xsl:if>
+ </xsl:variable>
+ <!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> -->
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:call-template name="classes.list">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:call-template name="package.summary">
+ <xsl:with-param name="name" select="$name"/>
+ </xsl:call-template>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="/classes/class[@package = $name]">
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="index.html">
+<HTML>
+ <HEAD><TITLE>Audit Results.</TITLE></HEAD>
+ <FRAMESET cols="20%,80%">
+ <FRAMESET rows="30%,70%">
+ <FRAME src="overview-frame.html" name="packageListFrame"/>
+ <FRAME src="allclasses-frame.html" name="classListFrame"/>
+ </FRAMESET>
+ <FRAME src="overview-summary.html" name="classFrame"/>
+ </FRAMESET>
+ <noframes>
+ <H2>Frame Alert</H2>
+ <P>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </P>
+ </noframes>
+</HTML>
+</xsl:template>
+
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+</xsl:template>
+
+
+<!-- print the violations of the class -->
+<xsl:template match="class" mode="class.details">
+ <xsl:variable name="package.name" select="@package"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:call-template name="pageHeader"/>
+ <H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.audit.header"/>
+ <xsl:apply-templates select="." mode="print.audit"/>
+ </table>
+
+ <H3>Violations</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="violation.audit.header"/>
+ <xsl:apply-templates select="./violation" mode="print.audit">
+ <xsl:sort data-type="number" select="@line"/>
+ </xsl:apply-templates>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template name="classes.list">
+ <xsl:param name="name"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2>
+ </td>
+ </tr>
+ </table>
+
+ <h2>Classes</h2>
+ <TABLE WIDTH="100%">
+ <xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </TABLE>
+ </BODY>
+ </HTML>
+</xsl:template>
+<!-- the class to list -->
+<xsl:template match="class" mode="classes.list">
+ <tr>
+ <td nowrap="nowrap">
+ <!-- @bug naming to fix for inner classes -->
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="classes" mode="all.classes">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:apply-templates select=".//class" mode="all.classes">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+ <!-- (ancestor::package)[last()] is buggy in MSXML3 ? -->
+ <xsl:variable name="package.name" select="@package"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="classes" mode="all.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages">
+ <xsl:sort select="@package" order="ascending"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@package"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="classes" mode="overview.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name"/>
+ </xsl:call-template>
+ </head>
+ <body onload="open('allclasses-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Summary</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th>Audited classes</th>
+ <th>Reported classes</th>
+ <th>Violations</th>
+ </tr>
+ <tr class="a">
+ <td><xsl:value-of select="@audited"/></td>
+ <td><xsl:value-of select="@reported"/></td>
+ <td><xsl:value-of select="@violations"/></td>
+ </tr>
+ </table>
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: Rules checked have originated from style guidelines suggested by the language designers,
+ experience from the Java development community and insite experience. Violations are generally
+ reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x)
+ and Metamata Audit rules (x.x).
+ Please consult these documents for additional information about violations.
+ <p/>
+ Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta.
+ <p/>
+ One should note that these violations do not necessary underline errors but should be used
+ as an indication for <i>possible</i> errors. As always, use your best judgment and review
+ them carefully, it might save you hours of debugging.
+ </td>
+ </tr>
+ </table>
+
+ <h3>Packages</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.audit.header"/>
+ <xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]">
+ <xsl:sort select="@package" order="ascending"/>
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td>
+ <td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td>
+ </tr>
+ </xsl:for-each>
+ </table>
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </html>
+</xsl:template>
+
+
+<xsl:template name="package.summary">
+ <xsl:param name="name"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute>
+ <xsl:call-template name="pageHeader"/>
+ <h3>Package <xsl:value-of select="$name"/></h3>
+
+ <!--table border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table-->
+
+ <xsl:if test="count(/classes/class[./@package = $name]) > 0">
+ <H3>Classes</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="class.audit.header"/>
+ <xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </xsl:if>
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="bannercell" rowspan="2">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right"><h2>Source Code Audit</h2></td>
+ </tr>
+ <tr>
+ <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageFooter">
+ <table width="100%">
+ <tr><td><hr noshade="yes" size="1"/></td></tr>
+ <tr><td>
+ <div align="center"><font color="#525D76" size="-1"><em>
+ Copyright © 1999-2001, Apache Software Foundation
+ </em></font></div>
+ </td></tr>
+ </table>
+</xsl:template>
+
+
+<!-- class header -->
+<xsl:template name="class.audit.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th>Violations</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="violation.audit.header">
+ <tr>
+ <th>Line</th>
+ <th>Message</th>
+ </tr>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="class" mode="print.audit">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:apply-templates select="@violations"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="violation" mode="print.audit">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:value-of select="@line"/></td>
+ <td><xsl:apply-templates select="@message"/></td>
+ </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/mmetrics-frames.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/mmetrics-frames.xsl
new file mode 100644
index 0000000..f105ea8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/mmetrics-frames.xsl
@@ -0,0 +1,1033 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+ xmlns:lxslt="http://xml.apache.org/xslt"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:redirect="org.apache.xalan.lib.Redirect"
+ exclude-result-prefixes="xalan"
+ extension-element-prefixes="redirect">
+<xsl:output method="html" indent="yes" encoding="US-ASCII"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+ Copyright 2001-2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<!--
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+ -->
+<xsl:param name="output.dir" select="'.'"/>
+
+<!-- default max value for the metrics -->
+<xsl:param name="vg.max" select="10"/>
+<xsl:param name="loc.max" select="1000"/>
+<xsl:param name="dit.max" select="10"/>
+<xsl:param name="noa.max" select="250"/>
+<xsl:param name="nrm.max" select="50"/>
+<xsl:param name="nlm.max" select="250"/>
+<xsl:param name="wmc.max" select="250"/>
+<xsl:param name="rfc.max" select="50"/>
+<xsl:param name="dac.max" select="10"/>
+<xsl:param name="fanout.max" select="10"/>
+<xsl:param name="cbo.max" select="15"/>
+<xsl:param name="lcom.max" select="10"/>
+<xsl:param name="nocl.max" select="10"/>
+
+
+<!-- create a tree fragment to speed up processing -->
+<xsl:variable name="doctree.var">
+ <xsl:element name="classes">
+ <xsl:for-each select=".//class">
+ <xsl:element name="class">
+ <xsl:attribute name="package">
+ <xsl:value-of select="(ancestor::package)[last()]/@name"/>
+ </xsl:attribute>
+ <xsl:copy-of select="@*"/>
+ <xsl:attribute name="name">
+ <xsl:apply-templates select="." mode="class.name"/>
+ </xsl:attribute>
+ <xsl:copy-of select="method"/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+</xsl:variable>
+
+<xsl:variable name="doctree" select="xalan:nodeset($doctree.var)"/>
+
+<xsl:template match="metrics">
+
+ <!-- create the index.html -->
+ <redirect:write file="{$output.dir}/index.html">
+ <xsl:call-template name="index.html"/>
+ </redirect:write>
+
+ <!-- create the stylesheet.css -->
+ <redirect:write file="{$output.dir}/stylesheet.css">
+ <xsl:call-template name="stylesheet.css"/>
+ </redirect:write>
+
+ <redirect:write file="{$output.dir}/metrics-reference.html">
+ <xsl:call-template name="metrics-reference.html"/>
+ </redirect:write>
+
+ <!-- create the overview-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-summary.html">
+ <xsl:apply-templates select="." mode="overview.packages"/>
+ </redirect:write>
+
+ <!-- create the all-packages.html at the root -->
+ <redirect:write file="{$output.dir}/overview-frame.html">
+ <xsl:apply-templates select="." mode="all.packages"/>
+ </redirect:write>
+
+ <!-- create the all-classes.html at the root -->
+ <redirect:write file="{$output.dir}/allclasses-frame.html">
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </redirect:write>
+
+ <!-- process all packages -->
+ <xsl:apply-templates select=".//package"/>
+</xsl:template>
+
+
+<xsl:template match="package">
+ <xsl:variable name="package.name" select="@name"/>
+ <xsl:variable name="package.dir">
+ <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="translate($package.name,'.','/')"/></xsl:if>
+ <xsl:if test="$package.name = 'unnamed package'">.</xsl:if>
+ </xsl:variable>
+ <!-- create a classes-list.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-frame.html">
+ <xsl:apply-templates select="." mode="classes.list"/>
+ </redirect:write>
+
+ <!-- create a package-summary.html in the package directory -->
+ <redirect:write file="{$output.dir}/{$package.dir}/package-summary.html">
+ <xsl:apply-templates select="." mode="package.summary"/>
+ </redirect:write>
+
+ <!-- for each class, creates a @name.html -->
+ <!-- @bug there will be a problem with inner classes having the same name, it will be overwritten -->
+ <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+ <!--Processing <xsl:value-of select="$class.name"/><xsl:text> </xsl:text> -->
+ <redirect:write file="{$output.dir}/{$package.dir}/{@name}.html">
+ <xsl:apply-templates select="." mode="class.details"/>
+ </redirect:write>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- little trick to compute the classname for inner and non inner classes -->
+<!-- this is all in one line to avoid CRLF in the name -->
+<xsl:template match="class" mode="class.name">
+ <xsl:if test="parent::class"><xsl:apply-templates select="parent::class" mode="class.name"/>.<xsl:value-of select="@name"/></xsl:if><xsl:if test="not(parent::class)"><xsl:value-of select="@name"/></xsl:if>
+</xsl:template>
+
+
+<xsl:template name="index.html">
+<HTML>
+ <HEAD><TITLE>Metrics Results.</TITLE></HEAD>
+ <FRAMESET cols="20%,80%">
+ <FRAMESET rows="30%,70%">
+ <FRAME src="overview-frame.html" name="packageListFrame"/>
+ <FRAME src="allclasses-frame.html" name="classListFrame"/>
+ </FRAMESET>
+ <FRAME src="overview-summary.html" name="classFrame"/>
+ </FRAMESET>
+ <noframes>
+ <H2>Frame Alert</H2>
+ <P>
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+ </P>
+ </noframes>
+</HTML>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="metrics-reference.html">
+<html>
+<head>
+<link title="Style" type="text/css" rel="stylesheet" href="stylesheet.css"/>
+</head>
+<body style="text-align:justify;">
+<h2>Metrics Reference</h2>
+<a href="#V(G)">V(G)</a> |
+<a href="#LOC">LOC</a> |
+<a href="#DIT">DIT</a> |
+<a href="#NOA">NOA</a> |
+<a href="#NRM">NRM</a> |
+<a href="#NLM">NLM</a> |
+<a href="#WMC">WMC</a> |
+<a href="#RFC">RFC</a> |
+<a href="#DAC">DAC</a> |
+<a href="#FANOUT">FANOUT</a> |
+<a href="#CBO">CBO</a> |
+<a href="#LCOM">LCOM</a> |
+<a href="#NOC">NOC</a>
+
+<a name="V(G)"/>
+<h3>Cyclomatic Complexity - V(G)</h3>
+This metric was introduced in the 1970s to measure the amount of control
+flow complexity or branching complexity in a module such as a
+subroutine. It gives the number of paths that may be taken through the
+code, and was initially developed to give some measure of the cost of
+producing a test case for the module by executing each path.
+<p/>
+Methods with a high cyclomatic complexity tend to be more difficult to
+understand and maintain. In general the more complex the methods of an
+application, the more difficult it will be to test it, and this will adversely
+affect its reliability.
+<p/>
+V(G) is a measure of the control flow complexity of a method or
+constructor. It counts the number of branches in the body of the method,
+defined as:
+<ul>
+<li>while statements;</li>
+<li>if statements;</li>
+<li>for statements.</li>
+</ul>
+
+The metric can also be configured to count each case of a switch
+statement as well.
+
+<a name="LOC"/>
+<h3>Lines of Code - LOC</h3>
+
+This is perhaps the simplest of all the metrics to define and compute.
+Counting lines has a long history as a software metric dating from before
+the rise of structured programming, and it is still in widespread use today.
+The size of a method affects the ease with which it can be understood, its
+reusability and its maintainability. There are a variety of ways that the size
+can be calculated. These include counting all the lines of code, the number
+of statements, the blank lines of code, the lines of commentary, and the
+lines consisting only of syntax such as block delimiters.
+<p/>
+This metric can also be used for sizing other constructs as well, for
+example, the overall size of a Java class or package can be measured by
+counting the number of source lines it consists of.
+<p/>
+LOC can be used to determine the size of a compilation unit (source file),
+class or interface, method, constructor, or field. It can be configured to
+ignore:
+<ul>
+<li>blank lines;</li>
+<li>lines consisting only of comments;</li>
+<li>lines consisting only of opening and closing braces.</li>
+</ul>
+
+<a name="DIT"/>
+<h3>Depth of Inheritance Hierarchy - DIT</h3>
+
+This metric calculates how far down the inheritance hierarchy a class is
+declared. In Java all classes have java.lang.Object as their ultimate
+superclass, which is defined to have a depth of 1. So a class that
+immediately extends java.lang.Object has a metric value of 2; any of its
+subclasses will have a value of 3, and so on.
+<p/>
+A class that is deep within the tree inherits more methods and state
+variables, thereby increasing its complexity and making it difficult to
+predict its behavior. It can be harder to understand a system with many
+inheritance layers.
+<p/>
+DIT is defined for classes and interfaces:
+<ul>
+<li>all interface types have a depth of 1;</li>
+<li>the class java.lang.Object has a depth of 1;</li>
+<li>all other classes have a depth of 1 + the depth of their super class.</li>
+</ul>
+
+<a name="NOA"/>
+<h3>Number of Attributes - NOA</h3>
+
+The number of distinct state variables in a class serves as one measure of
+its complexity. The more state a class represents the more difficult it is to
+maintain invariants for it. It also hinders comprehensibility and reuse.
+<p/>
+In Java, state can be exposed to subclasses through protected fields, which
+entails that the subclass also be aware of and maintain any invariants. This
+interference with the class's data encapsulation can be a source of defects
+and hidden dependencies between the state variables.
+<p/>
+NOA is defined for classes and interfaces. It counts the number of fields
+declared in the class or interface.
+
+<a name="NRM"/>
+<h3>Number of Remote Methods - NRM</h3>
+
+NRM is defined for classes. A remote method call is defined as an
+invocation of a method that is not declared in any of:
+<ul>
+<li>the class itself;</li>
+<li>a class or interface that the class extends or implements;</li>
+<li>a class or method that extends the class.</li>
+</ul>
+
+The value is the count of all the remote method calls in all of the methods
+and constructors of the class.
+
+<a name="NLM"/>
+<h3>Number of Local Methods - NLM</h3>
+
+NLM is defined for classes and interfaces. A local method is defined as a
+method that is declared in the class or interface. NLM can be configured to
+include the local methods of all of the class's superclasses. Methods with
+public, protected, package and private visibility can be independently
+counted by setting configuration parameters.
+
+<a name="WMC"/>
+<h3>Weighted Methods per Class - WMC</h3>
+
+If the number of methods in a class can be determined during the design
+and modeling phase of a project, it can be used as a predictor of how
+much time and effort is needed to develop, debug and maintain it. This
+metric can be further refined by incorporating a weighting for the
+complexity of each method. The usual weighting is given by the cyclomatic
+complexity of the method.
+<p/>
+The subclasses of a class inherit all of its public and protected methods,
+and possibly its package methods as well, so the number of methods a
+class has directly impacts the complexity of its subclasses. Classes with
+large numbers of methods are often specific to a particular application,
+reducing the ability to reuse them.
+<p/>
+The definition of WMC is based upon NLM, and it provides the same
+configuration parameters for counting inherited methods and of varying
+visibility. The main difference is that NLM always counts each method as 1,
+whereas WMC will weight each method. There are two weighting schemes:
+<ul>
+<li>V(G) the cyclomatic complexity of the method is used as its weight.
+ Methods from class files are given a V(G) of 1.</li>
+<li>the arity, or the number of parameters of the method are used to
+ determine the weight.</li>
+</ul>
+
+<a name="RFC"/>
+<h3>Response For Class - RFC</h3>
+
+The response set of a class is the set of all methods that can be invoked as
+a result of a message sent to an object of the class. This includes methods
+in the class's inheritance hierarchy and methods that can be invoked on
+other objects. The Response For Class metric is defined to be size of the
+response set for the class. A class which provides a larger response set is
+considered to be more complex than one with a smaller response set.
+<p/>
+One reason for this is that if a method call on a class can result in a large
+number of different method calls on the target and other classes, then it
+can be harder to test the behavior of the class and debug problems. It will
+typically require a deeper understanding of the potential interactions that
+objects of the class can have with the rest of the system.
+<p/>
+RFC is defined as the sum of NLM and NRM for the class. The local methods
+include all of the public, protected, package and private methods, but not
+methods declared only in a superclass.
+
+<a name="DAC"/>
+<h3>Data Abstraction Coupling - DAC</h3>
+
+DAC is defined for classes and interfaces. It counts the number of reference
+types that are used in the field declarations of the class or interface. The
+component types of arrays are also counted. Any field with a type that is
+either a supertype or a subtype of the class is not counted.
+
+<a name="FANOUT"/>
+<h3>Fan Out - FANOUT</h3>
+
+FANOUT is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations;</li>
+<li>formal parameters and return types;</li>
+<li>throws declarations;</li>
+<li>local variables.</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="CBO"/>
+<h3>Coupling Between Objects - CBO</h3>
+
+When one object or class uses another object or class they are said to be
+coupled. One major source of coupling is that between a superclass and a
+subclass. A coupling is also introduced when a method or field in another
+class is accessed, or when an object of another class is passed into or out
+of a method invocation. Coupling Between Objects is a measure of the
+non-inheritance coupling between two objects.
+<p/>
+A high value of coupling reduces the modularity of the class and makes
+reuse more difficult. The more independent a class is the more likely it is
+that it will be possible to reuse it in another part of the system. When a
+class is coupled to another class it becomes sensitive to changes in that
+class, thereby making maintenance for difficult. In addition, a class that is
+overly dependent on other classes can be difficult to understand and test in
+isolation.
+<p/>
+CBO is defined for classes and interfaces, constructors and methods. It
+counts the number of reference types that are used in:
+<ul>
+<li>field declarations</li>
+<li>formal parameters and return types</li>
+<li>throws declarations</li>
+<li>local variables</li>
+</ul>
+
+It also counts:
+<ul>
+<li>types from which field and method selections are made</li>
+</ul>
+
+The component types of arrays are also counted. Any type that is either a
+supertype or a subtype of the class is not counted.
+
+<a name="LCOM"/>
+<h3>Lack of Cohesion Of Methods - LCOM</h3>
+
+The cohesion of a class is the degree to which its methods are related to
+each other. It is determined by examining the pattern of state variable
+accesses within the set of methods. If all the methods access the same state
+variables then they have high cohesion; if they access disjoint sets of
+variables then the cohesion is low. An extreme example of low cohesion
+would be if none of the methods accessed any of the state variables.
+
+If a class exhibits low method cohesion it indicates that the design of the
+class has probably been partitioned incorrectly, and could benefit by being
+split into more classes with individually higher cohesion. On the other
+hand, a high value of cohesion (a low lack of cohesion) implies that the
+class is well designed. A cohesive class will tend to provide a high degree
+of encapsulation, whereas a lack of cohesion decreases encapsulation and
+increases complexity.
+<p/>
+Another form of cohesion that is useful for Java programs is cohesion
+between nested and enclosing classes. A nested class that has very low
+cohesion with its enclosing class would probably better designed as a peer
+class rather than a nested class.
+<p/>
+LCOM is defined for classes. Operationally, LCOM takes each pair of
+methods in the class and determines the set of fields they each access. If
+they have disjoint sets of field accesses increase the count P by one. If they
+share at least one field access then increase Q by one. After considering
+each pair of methods,
+LCOM = (P > Q) ? (P - Q) : 0
+<p/>
+Indirect access to fields via local methods can be considered by setting a
+metric configuration parameter.
+
+<a name="NOC"/>
+<h3>Number Of Classes - NOC</h3>
+
+The overall size of the system can be estimated by calculating the number
+of classes it contains. A large system with more classes is more complex
+than a smaller one because the number of potential interactions between
+objects is higher. This reduces the comprehensibility of the system which
+in turn makes it harder to test, debug and maintain.
+<p/>
+If the number of classes in the system can be projected during the initial
+design phase of the project it can serve as a base for estimating the total
+effort and cost of developing, debugging and maintaining the system.
+<p/>
+The NOC metric can also usefully be applied at the package and class level
+as well as the total system.
+<p/>
+NOCL is defined for class and interfaces. It counts the number of classes or
+interfaces that are declared. This is usually 1, but nested class declarations
+will increase this number.
+</body>
+</html>
+</xsl:template>
+
+<!-- this is the stylesheet css to use for nearly everything -->
+<xsl:template name="stylesheet.css">
+ .bannercell {
+ border: 0px;
+ padding: 0px;
+ }
+ body {
+ margin-left: 10;
+ margin-right: 10;
+ font:normal 80% arial,helvetica,sanserif;
+ background-color:#FFFFFF;
+ color:#000000;
+ }
+ .a td {
+ background: #efefef;
+ }
+ .b td {
+ background: #fff;
+ }
+ th, td {
+ text-align: left;
+ vertical-align: top;
+ }
+ th {
+ font-weight:bold;
+ background: #ccc;
+ color: black;
+ }
+ table, th, td {
+ font-size:100%;
+ border: none
+ }
+ table.log tr td, tr th {
+
+ }
+ h2 {
+ font-weight:bold;
+ font-size:140%;
+ margin-bottom: 5;
+ }
+ h3 {
+ font-size:100%;
+ font-weight:bold;
+ background: #525D76;
+ color: white;
+ text-decoration: none;
+ padding: 5px;
+ margin-right: 2px;
+ margin-left: 2px;
+ margin-bottom: 0;
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+
+</xsl:template>
+
+<!-- print the metrics of the class -->
+<xsl:template match="class" mode="class.details">
+ <!--xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/-->
+ <xsl:variable name="package.name" select="@package"/>
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="$package.name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <xsl:call-template name="pageHeader"/>
+
+ <H3>Class <xsl:if test="not($package.name = 'unnamed package')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table>
+
+ <H3>Methods</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="method.metrics.header"/>
+ <xsl:apply-templates select="method" mode="print.metrics"/>
+ </table>
+
+ <xsl:call-template name="pageFooter"/>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!-- list of classes in a package -->
+<xsl:template match="package" mode="classes.list">
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <BODY>
+ <table width="100%">
+ <tr>
+ <td nowrap="nowrap">
+ <H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2>
+ </td>
+ </tr>
+ </table>
+
+ <H2>Classes</H2>
+ <TABLE WIDTH="100%">
+ <!-- xalan-nodeset:nodeset for Xalan 1.2.2 -->
+ <xsl:for-each select="$doctree/classes/class[@package = current()/@name]">
+ <xsl:sort select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </TABLE>
+ </BODY>
+ </HTML>
+</xsl:template>
+
+
+<!--
+ Creates an all-classes.html file that contains a link to all package-summary.html
+ on each class.
+-->
+<xsl:template match="metrics" mode="all.classes">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="''"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2>Classes</h2>
+ <table width="100%">
+ <xsl:for-each select="$doctree/classes/class">
+ <xsl:sort select="@name"/>
+ <xsl:apply-templates select="." mode="all.classes"/>
+ </xsl:for-each>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="class" mode="all.classes">
+ <xsl:variable name="package.name" select="@package"/>
+ <xsl:variable name="class.name" select="@name"/>
+ <tr>
+ <td nowrap="nowrap">
+ <a target="classFrame">
+ <xsl:attribute name="href">
+ <xsl:if test="not($package.name='unnamed package')">
+ <xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$class.name"/><xsl:text>.html</xsl:text>
+ </xsl:attribute>
+ <xsl:value-of select="$class.name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+<!--
+ Creates an html file that contains a link to all package-summary.html files on
+ each package existing on testsuites.
+ @bug there will be a problem here, I don't know yet how to handle unnamed package :(
+-->
+<xsl:template match="metrics" mode="all.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="./package/@name"/>
+ </xsl:call-template>
+ </head>
+ <body>
+ <h2><a href="overview-summary.html" target="classFrame">Home</a></h2>
+ <h2>Packages</h2>
+ <table width="100%">
+ <xsl:apply-templates select=".//package[not(./@name = 'unnamed package')]" mode="all.packages">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </table>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="package" mode="all.packages">
+ <tr>
+ <td nowrap="nowrap">
+ <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ </tr>
+</xsl:template>
+
+
+<xsl:template match="metrics" mode="overview.packages">
+ <html>
+ <head>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="''"/>
+ </xsl:call-template>
+ </head>
+ <body onload="open('allclasses-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <h3>Summary</h3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <tr>
+ <th><a href="metrics-reference.html#V(G)">V(G)</a></th>
+ <th><a href="metrics-reference.html#LOC">LOC</a></th>
+ <th><a href="metrics-reference.html#DIT">DIT</a></th>
+ <th><a href="metrics-reference.html#NOA">NOA</a></th>
+ <th><a href="metrics-reference.html#NRM">NRM</a></th>
+ <th><a href="metrics-reference.html#NLM">NLM</a></th>
+ <th><a href="metrics-reference.html#WMC">WMC</a></th>
+ <th><a href="metrics-reference.html#RFC">RFC</a></th>
+ <th><a href="metrics-reference.html#DAC">DAC</a></th>
+ <th><a href="metrics-reference.html#FANOUT">FANOUT</a></th>
+ <th><a href="metrics-reference.html#CBO">CBO</a></th>
+ <th><a href="metrics-reference.html#LCOM">LCOM</a></th>
+ <th><a href="metrics-reference.html#NOCL">NOCL</a></th>
+ </tr>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table>
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+ various kind of complexity. Complexity is a common source of problems and defects in software.
+ High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+ a program.
+ <p/>
+ The primary use of metrics is to focus your attention on those parts of code that potentially are
+ complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+ actions.
+ For additional information about metrics and their meaning, please consult
+ Metamata Metrics manual.
+ </td>
+ </tr>
+ </table>
+
+ <h3>Packages</h3>
+ <table border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:for-each select=".//package[not(@name = 'unnamed package')]">
+ <xsl:sort select="@name" order="ascending"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </xsl:for-each>
+ </table>
+ <!-- @bug there could some classes at this level (classes in unnamed package) -->
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </html>
+</xsl:template>
+
+<xsl:template match="package" mode="package.summary">
+ <HTML>
+ <HEAD>
+ <xsl:call-template name="create.stylesheet.link">
+ <xsl:with-param name="package.name" select="@name"/>
+ </xsl:call-template>
+ </HEAD>
+ <body onload="open('package-frame.html','classListFrame')">
+ <xsl:call-template name="pageHeader"/>
+ <!-- create an anchor to this package name -->
+ <h3>Package <xsl:value-of select="@name"/></h3>
+
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </table>
+
+ <table border="0" width="100%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: Metrics evaluate the quality of software by analyzing the program source and quantifying
+ various kind of complexity. Complexity is a common source of problems and defects in software.
+ High complexity makes it more difficult to develop, understand, maintain, extend, test and debug
+ a program.
+ <p/>
+ The primary use of metrics is to focus your attention on those parts of code that potentially are
+ complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial
+ actions.
+ For additional information about metrics and their meaning, please consult
+ Metamata Metrics manual.
+ </td>
+ </tr>
+ </table>
+
+ <xsl:variable name="classes-in-package" select="$doctree/classes/class[@package = current()/@name]"/>
+ <xsl:if test="count($classes-in-package) > 0">
+ <H3>Classes</H3>
+ <table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
+ <xsl:call-template name="all.metrics.header"/>
+ <xsl:for-each select="$classes-in-package">
+ <xsl:sort select="@name"/>
+ <xsl:apply-templates select="." mode="print.metrics"/>
+ </xsl:for-each>
+ </table>
+ </xsl:if>
+
+ <xsl:call-template name="pageFooter"/>
+ </body>
+ </HTML>
+</xsl:template>
+
+
+<!--
+ transform string like a.b.c to ../../../
+ @param path the path to transform into a descending directory path
+-->
+<xsl:template name="path">
+ <xsl:param name="path"/>
+ <xsl:if test="contains($path,'.')">
+ <xsl:text>../</xsl:text>
+ <xsl:call-template name="path">
+ <xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="not(contains($path,'.')) and not($path = '')">
+ <xsl:text>../</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+
+<!-- create the link to the stylesheet based on the package name -->
+<xsl:template name="create.stylesheet.link">
+ <xsl:param name="package.name"/>
+ <LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK>
+</xsl:template>
+
+
+<!-- Page Header -->
+<xsl:template name="pageHeader">
+
+ <!-- jakarta logo -->
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td class="bannercell" rowspan="2">
+ <a href="http://jakarta.apache.org/">
+ <img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
+ </a>
+ </td>
+ <td style="text-align:right"><h2>Source Code Metrics</h2></td>
+ </tr>
+ <tr>
+ <td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Metrics</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
+ </tr>
+ </table>
+ <hr size="1"/>
+</xsl:template>
+
+<!-- Page Footer -->
+<xsl:template name="pageFooter">
+ <table width="100%">
+ <tr><td><hr noshade="yes" size="1"/></td></tr>
+ <tr><td>
+ <div align="center"><font color="#525D76" size="-1"><em>
+ Copyright © 1999-2001, Apache Software Foundation
+ </em></font></div>
+ </td></tr>
+ </table>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="all.metrics.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th nowrap="nowrap">V(G)</th>
+ <th>LOC</th>
+ <th>DIT</th>
+ <th>NOA</th>
+ <th>NRM</th>
+ <th>NLM</th>
+ <th>WMC</th>
+ <th>RFC</th>
+ <th>DAC</th>
+ <th>FANOUT</th>
+ <th>CBO</th>
+ <th>LCOM</th>
+ <th>NOCL</th>
+ </tr>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="method.metrics.header">
+ <tr>
+ <th width="80%">Name</th>
+ <th nowrap="nowrap">V(G)</th>
+ <th>LOC</th>
+ <th>FANOUT</th>
+ <th>CBO</th>
+ </tr>
+</xsl:template>
+
+<!-- method information -->
+<xsl:template match="method" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><xsl:apply-templates select="@name"/></td>
+ <td><xsl:apply-templates select="@vg"/></td>
+ <td><xsl:apply-templates select="@loc"/></td>
+ <td><xsl:apply-templates select="@fanout"/></td>
+ <td><xsl:apply-templates select="@cbo"/></td>
+ </tr>
+</xsl:template>
+
+<!-- class information -->
+<xsl:template match="class" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td>
+ <td><xsl:apply-templates select="@vg"/></td>
+ <td><xsl:apply-templates select="@loc"/></td>
+ <td><xsl:apply-templates select="@dit"/></td>
+ <td><xsl:apply-templates select="@noa"/></td>
+ <td><xsl:apply-templates select="@nrm"/></td>
+ <td><xsl:apply-templates select="@nlm"/></td>
+ <td><xsl:apply-templates select="@wmc"/></td>
+ <td><xsl:apply-templates select="@rfc"/></td>
+ <td><xsl:apply-templates select="@dac"/></td>
+ <td><xsl:apply-templates select="@fanout"/></td>
+ <td><xsl:apply-templates select="@cbo"/></td>
+ <td><xsl:apply-templates select="@lcom"/></td>
+ <td><xsl:apply-templates select="@nocl"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="file|package" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <td>
+ <a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame">
+ <xsl:value-of select="@name"/>
+ </a>
+ </td>
+ <td><xsl:apply-templates select="@vg"/></td>
+ <td><xsl:apply-templates select="@loc"/></td>
+ <td><xsl:apply-templates select="@dit"/></td>
+ <td><xsl:apply-templates select="@noa"/></td>
+ <td><xsl:apply-templates select="@nrm"/></td>
+ <td><xsl:apply-templates select="@nlm"/></td>
+ <td><xsl:apply-templates select="@wmc"/></td>
+ <td><xsl:apply-templates select="@rfc"/></td>
+ <td><xsl:apply-templates select="@dac"/></td>
+ <td><xsl:apply-templates select="@fanout"/></td>
+ <td><xsl:apply-templates select="@cbo"/></td>
+ <td><xsl:apply-templates select="@lcom"/></td>
+ <td><xsl:apply-templates select="@nocl"/></td>
+ </tr>
+</xsl:template>
+
+<xsl:template match="metrics" mode="print.metrics">
+ <tr>
+ <xsl:call-template name="alternate-row"/>
+ <!-- the global metrics is the top package metrics -->
+ <td><xsl:apply-templates select="./package/@vg"/></td>
+ <td><xsl:apply-templates select="./package/@loc"/></td>
+ <td><xsl:apply-templates select="./package/@dit"/></td>
+ <td><xsl:apply-templates select="./package/@noa"/></td>
+ <td><xsl:apply-templates select="./package/@nrm"/></td>
+ <td><xsl:apply-templates select="./package/@nlm"/></td>
+ <td><xsl:apply-templates select="./package/@wmc"/></td>
+ <td><xsl:apply-templates select="./package/@rfc"/></td>
+ <td><xsl:apply-templates select="./package/@dac"/></td>
+ <td><xsl:apply-templates select="./package/@fanout"/></td>
+ <td><xsl:apply-templates select="./package/@cbo"/></td>
+ <td><xsl:apply-templates select="./package/@lcom"/></td>
+ <td><xsl:apply-templates select="./package/@nocl"/></td>
+ </tr>
+</xsl:template>
+
+<!-- alternated row style -->
+<xsl:template name="alternate-row">
+<xsl:attribute name="class">
+ <xsl:if test="position() mod 2 = 1">a</xsl:if>
+ <xsl:if test="position() mod 2 = 0">b</xsl:if>
+</xsl:attribute>
+</xsl:template>
+
+
+<!-- how to display the metrics with their max value -->
+<!-- @todo the max values must be external to the xsl -->
+
+ <xsl:template match="@vg">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$vg.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@loc">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$loc.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@dit">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$dit.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@noa">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$noa.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@nrm">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$nrm.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@nlm">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$nlm.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@wmc">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$wmc.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@rfc">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$rfc.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@dac">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$dac.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@fanout">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$fanout.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@cbo">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$cbo.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@lcom">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$lcom.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="@nocl">
+ <xsl:call-template name="display-value">
+ <xsl:with-param name="value" select="current()"/>
+ <xsl:with-param name="max" select="$nocl.max"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template name="display-value">
+ <xsl:param name="value"/>
+ <xsl:param name="max"/>
+ <xsl:if test="$value > $max">
+ <xsl:attribute name="class">Error</xsl:attribute>
+ </xsl:if>
+ <xsl:value-of select="$value"/>
+ </xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/tagdiff.xsl b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/tagdiff.xsl
new file mode 100644
index 0000000..12a1e6f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/etc/tagdiff.xsl
@@ -0,0 +1,177 @@
+<!--
+ Copyright 2004 The Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<!-- a stylesheet to display changelogs ala netbeans -->
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0">
+ <xsl:param name="title"/>
+ <xsl:param name="module"/>
+ <xsl:param name="cvsweb"/>
+
+ <xsl:output method="html" indent="yes"/>
+
+ <!-- Copy standard document elements. Elements that
+ should be ignored must be filtered by apply-templates
+ tags. -->
+ <xsl:template match="*">
+ <xsl:copy>
+ <xsl:copy-of select="attribute::*[. != '']"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="tagdiff">
+ <HTML>
+ <HEAD>
+ <TITLE><xsl:value-of select="$title"/></TITLE>
+ </HEAD>
+ <BODY link="#000000" alink="#000000" vlink="#000000" text="#000000">
+ <style type="text/css">
+ body, p {
+ font-family: verdana,arial,helvetica;
+ font-size: 80%;
+ color:#000000;
+ }
+ .dateAndAuthor {
+ font-family: verdana,arial,helvetica;
+ font-size: 80%;
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ tr, td{
+ font-family: verdana,arial,helvetica;
+ font-size: 80%;
+ background:#eeeee0;
+ }
+ </style>
+ <h1>
+ <a name="top"><xsl:value-of select="$title"/></a>
+ </h1>
+ Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and
+ <xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/>
+ <p align="right">Designed for use with <a href="http://ant.apache.org/">Ant</a>.</p>
+ <hr size="2"/>
+ <a name="TOP"/>
+ <table width="100%">
+ <tr>
+ <td align="right">
+ <a href="#New">New Files</a> |
+ <a href="#Modified">Modified Files</a> |
+ <a href="#Removed">Removed Files</a>
+ </td>
+ </tr>
+ </table>
+ <TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1">
+ <xsl:call-template name="show-entries">
+ <xsl:with-param name="title">New Files</xsl:with-param>
+ <xsl:with-param name="anchor">New</xsl:with-param>
+ <xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="show-entries">
+ <xsl:with-param name="title">Modified Files</xsl:with-param>
+ <xsl:with-param name="anchor">Modified</xsl:with-param>
+ <xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="show-entries">
+ <xsl:with-param name="title">Removed Files</xsl:with-param>
+ <xsl:with-param name="anchor">Removed</xsl:with-param>
+ <xsl:with-param name="entries" select=".//entry[not(file/revision)][not(file/prevrevision)]"/>
+ </xsl:call-template>
+ </TABLE>
+
+ </BODY>
+ </HTML>
+ </xsl:template>
+
+ <xsl:template name="show-entries">
+ <xsl:param name="title"/>
+ <xsl:param name="anchor"/>
+ <xsl:param name="entries"/>
+ <TR>
+ <TD colspan="2" class="dateAndAuthor">
+ <a>
+ <xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute>
+ <xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries
+ </a>
+ <a href="#TOP">(back to top)</a>
+ </TD>
+ </TR>
+ <TR>
+ <TD width="20">
+ <xsl:text> </xsl:text>
+ </TD>
+ <TD>
+ <ul>
+ <xsl:apply-templates select="$entries"/>
+ </ul>
+ </TD>
+ </TR>
+ </xsl:template>
+
+ <xsl:template match="entry">
+ <xsl:apply-templates select="file"/>
+ </xsl:template>
+
+ <xsl:template match="date">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="time">
+ <i><xsl:value-of select="."/></i>
+ </xsl:template>
+
+ <xsl:template match="author">
+ <i>
+ <a>
+ <xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute>
+ <xsl:value-of select="."/>
+ </a>
+ </i>
+ </xsl:template>
+
+ <xsl:template match="file">
+ <li>
+ <a target="_new">
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute>
+ <xsl:value-of select="name" />
+ </a>
+ <xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0">
+ <xsl:text> </xsl:text>
+ <a target="_new">
+ <xsl:choose>
+ <xsl:when test="string-length(prevrevision) = 0 ">
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/>&diff_format=h</xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose> (<xsl:value-of select="revision"/>)
+ </a>
+ </xsl:if>
+ </li>
+ </xsl:template>
+
+ <!-- Any elements within a msg are processed,
+ so that we can preserve HTML tags. -->
+ <xsl:template match="msg">
+ <b><xsl:apply-templates/></b>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-antlr.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-antlr.jar
new file mode 100644
index 0000000..6e192a6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-antlr.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bcel.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bcel.jar
new file mode 100644
index 0000000..7d237b8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bcel.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bsf.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bsf.jar
new file mode 100644
index 0000000..050b8c5
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-bsf.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-log4j.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-log4j.jar
new file mode 100644
index 0000000..9b5edaa
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-log4j.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-oro.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-oro.jar
new file mode 100644
index 0000000..1e99f78
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-oro.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-regexp.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-regexp.jar
new file mode 100644
index 0000000..a24e33c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-regexp.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-resolver.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-resolver.jar
new file mode 100644
index 0000000..ce26e6a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-apache-resolver.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-logging.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-logging.jar
new file mode 100644
index 0000000..c409113
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-logging.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-net.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-net.jar
new file mode 100644
index 0000000..ba49b97
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-commons-net.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jai.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jai.jar
new file mode 100644
index 0000000..b78bca4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jai.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-javamail.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-javamail.jar
new file mode 100644
index 0000000..07cf40e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-javamail.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jdepend.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jdepend.jar
new file mode 100644
index 0000000..33c4f4b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jdepend.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jmf.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jmf.jar
new file mode 100644
index 0000000..623909c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jmf.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jsch.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jsch.jar
new file mode 100644
index 0000000..775ee9a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-jsch.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-junit.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-junit.jar
new file mode 100644
index 0000000..a759112
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-junit.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-launcher.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-launcher.jar
new file mode 100644
index 0000000..e7c8fff
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-launcher.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-netrexx.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-netrexx.jar
new file mode 100644
index 0000000..c33a3da
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-netrexx.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-nodeps.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-nodeps.jar
new file mode 100644
index 0000000..8f213a9
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-nodeps.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-starteam.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-starteam.jar
new file mode 100644
index 0000000..8531e56
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-starteam.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-stylebook.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-stylebook.jar
new file mode 100644
index 0000000..5d9cff6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-stylebook.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-swing.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-swing.jar
new file mode 100644
index 0000000..2e9e472
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-swing.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-trax.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-trax.jar
new file mode 100644
index 0000000..1179097
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-trax.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-weblogic.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-weblogic.jar
new file mode 100644
index 0000000..c7567bc
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant-weblogic.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant.jar
new file mode 100644
index 0000000..99114bd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/lib/ant.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/plugin.properties b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/plugin.properties
new file mode 100644
index 0000000..0b5f8a0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.ant_1.7.0.v200803061910/plugin.properties
@@ -0,0 +1,12 @@
+###############################################################################
+# Copyright (c) 2000, 2005 IBM Corporation 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:
+# IBM Corporation - initial API and implementation
+###############################################################################
+pluginName = Apache Ant
+providerName = Eclipse.org
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.commons.logging_1.0.4.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.commons.logging_1.0.4.200809191530.jar
new file mode 100644
index 0000000..e5f0c2b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.commons.logging_1.0.4.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.log4j_1.2.13.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.log4j_1.2.13.200809191530.jar
new file mode 100644
index 0000000..dbafb23
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.apache.log4j_1.2.13.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar
new file mode 100644
index 0000000..83f50ff
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.commands_3.4.0.I20080509-2000.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
new file mode 100644
index 0000000..9d4c506
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.contenttype_3.3.0.v20080604-1400.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar
new file mode 100644
index 0000000..3bab13b
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.databinding_1.1.0.I20080527-2000.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar
new file mode 100644
index 0000000..12afcaa
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.expressions_3.4.0.v20080603-2000.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar
new file mode 100644
index 0000000..a28874c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.jobs_3.4.0.v20080512.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar
new file mode 100644
index 0000000..49bbc18
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.core.runtime_3.4.0.v20080512.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.filetransfer_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.filetransfer_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..5d5dae0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.filetransfer_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.identity_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.identity_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..ad67e75
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.identity_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.provider.filetransfer_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.provider.filetransfer_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..511d0c7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf.provider.filetransfer_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf_2.0.0.v20080611-1715.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf_2.0.0.v20080611-1715.jar
new file mode 100644
index 0000000..d439258
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.ecf_2.0.0.v20080611-1715.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.installerbuilder_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.installerbuilder_1.0.0.200809191530.jar
new file mode 100644
index 0000000..840cc3c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.installerbuilder_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.kickstarter_1.0.0.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.kickstarter_1.0.0.jar
new file mode 100644
index 0000000..04b0585
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.kickstarter_1.0.0.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2e09e0f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Require-Bundle: org.jdom,org.eclipse.equinox.p2.metadata.repository,or
+ g.eclipse.equinox.p2.metadata,org.junit;bundle-version="3.8.2";resolu
+ tion:=optional
+Export-Package: org.eclipse.epp.wizard.model
+Bundle-ClassPath: jdom.jar, eppmodel.jar
+Bundle-Version: 0.0.1.200809191530
+Bundle-Name: EPP download wizard model
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.epp.wizard.model
+Import-Package: org.apache.log4j,org.eclipse.core.runtime;version="3.4
+ .0",org.eclipse.equinox.internal.p2.metadata.repository,org.eclipse.e
+ quinox.internal.provisional.p2.core,org.eclipse.equinox.internal.prov
+ isional.p2.metadata.query,org.eclipse.equinox.internal.provisional.p2
+ .query
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/eppmodel.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/eppmodel.jar
new file mode 100644
index 0000000..d1c34f7
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/eppmodel.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/jdom.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/jdom.jar
new file mode 100644
index 0000000..f883a26
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard.model_0.0.1.200809191530/jdom.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard_1.0.0.200809191530.jar
new file mode 100644
index 0000000..31bf8d1
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.epp.wizard_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
new file mode 100644
index 0000000..4639bb5
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.app_1.1.0.v20080421-2006.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
new file mode 100644
index 0000000..ecac7a8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.common_3.4.0.v20080421-2006.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.registry_1.0.100.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.registry_1.0.100.200809191530.jar
new file mode 100644
index 0000000..471ca8e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.registry_1.0.100.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servlet_1.0.100.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servlet_1.0.100.200809191530.jar
new file mode 100644
index 0000000..ab35c38
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servlet_1.0.100.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servletbridge_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servletbridge_1.0.0.200809191530.jar
new file mode 100644
index 0000000..d0dd7db
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.http.servletbridge_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.core_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.core_1.0.0.200809191530.jar
new file mode 100644
index 0000000..9e9f33f
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.core_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository_1.0.0.v20080604.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository_1.0.0.v20080604.jar
new file mode 100644
index 0000000..8f93825
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata.repository_1.0.0.v20080604.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata_1.0.0.v20080514-1900.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata_1.0.0.v20080514-1900.jar
new file mode 100644
index 0000000..c42994c
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.p2.metadata_1.0.0.v20080514-1900.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar
new file mode 100644
index 0000000..bae2270
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.preferences_3.2.200.v20080421-2006.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
new file mode 100644
index 0000000..6c45bb9
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.registry_3.4.0.v20080516-0950.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.security_1.0.0.v20080512-1800.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.security_1.0.0.v20080512-1800.jar
new file mode 100644
index 0000000..57737ef
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.security_1.0.0.v20080512-1800.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..050268e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Export-Package: org.eclipse.equinox.servletbridge;version="1.0.0"
+Bundle-Vendor: %bundleProvider
+Bundle-ClassPath: servletbridge.jar
+Bundle-Version: 1.0.100.200809191530
+Bundle-Name: %bundleName
+Bundle-Localization: plugin
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.equinox.servletbridge
+Import-Package: javax.servlet;version="2.3.0",javax.servlet.http;versi
+ on="2.3.0"
+Bundle-RequiredExecutionEnvironment: CDC-1.0/Foundation-1.0,J2SE-1.3
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/about.html b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/about.html
new file mode 100644
index 0000000..d7e1cdf
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>January 30, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/scripts/webappBuilder.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/scripts/webappBuilder.xml
new file mode 100644
index 0000000..e0601b8
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/scripts/webappBuilder.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0"?>
+<project name="project" default="default">
+ <description>
+ Webapp Builder
+ </description>
+
+ <!-- =================================
+ target: default
+ ================================= -->
+ <target name="init">
+ <property name="proj.dir" value="${basedir}/.."/>
+ <!--
+ On windows be cautious about long file names for ${build.dir}
+ These long path problems were resolved in JRE 1.5.0_08
+ -->
+ <property name="build.dir" value="${proj.dir}/build"/>
+ <property name="templates.dir" value="${proj.dir}/templates"/>
+ <property name="webapp.name" value="bridge"/>
+ <!--
+ the servletbridge feature can be found in the eclipse depot
+ Repository Path: /cvsroot/eclipse
+ Module: equinox-incubator/org.eclipse.equinox.servletbridge.feature
+ -->
+ <property name="features" value="org.eclipse.equinox.servletbridge.feature"/>
+ <available file="${proj.dir}/servletbridge.jar" property="servletbridge.jar-present"/>
+ <!--
+ If you are using this script in a head-less build define the following properties:
+ "ignore.pdeExportFeatures" (available only in the IDE - do the feature export with PDE Build)
+ "ignore.servletbridge.jar" (if you're compiling or extracting the jar yourself)
+ -->
+ </target>
+
+ <!-- =================================
+ target: prepare
+ ================================= -->
+ <target name="prepare" depends="init">
+ <delete dir="${build.dir}/${webapp.name}"/>
+ <mkdir dir="${build.dir}/${webapp.name}/WEB-INF/lib"/>
+ </target>
+ <!-- =================================
+ target: default
+ ================================= -->
+ <target name="default" depends="copyResources, servletbridge.jar, pdeExportFeatures"/>
+
+ <!-- =================================
+ target: copyResources
+ ================================= -->
+ <target name="copyResources" depends="prepare">
+ <copy todir="${build.dir}/${webapp.name}">
+ <fileset dir="${templates.dir}"/>
+ </copy>
+ </target>
+
+ <!-- =================================
+ target: servletbridge.jar
+ ================================= -->
+ <target name="servletbridge.jar" depends="prepare" unless="ignore.servletbridge.jar">
+ <antcall target="jar-servletbridge.jar" />
+ <antcall target="copy-servletbridge.jar"/>
+ </target>
+
+ <!-- =================================
+ target: copy-servletbridge.jar
+ ================================= -->
+ <target name="copy-servletbridge.jar" if="servletbridge.jar-present">
+ <copy todir="${build.dir}/${webapp.name}/WEB-INF/lib">
+ <fileset file="${proj.dir}/servletbridge.jar"/>
+ </copy>
+ </target>
+
+ <!-- =================================
+ target: jar-servletbridge.jar
+ ================================= -->
+ <target name="jar-servletbridge.jar" unless="servletbridge.jar-present">
+ <jar destfile="${build.dir}/${webapp.name}/WEB-INF/lib/servletbridge.jar">
+ <fileset dir="${proj.dir}/bin">
+ <include name="**/*.class"/>
+ </fileset>
+ </jar>
+ </target>
+
+ <!-- =================================
+ target: pdeExportFeatures
+ ================================= -->
+ <target name="pdeExportFeatures" depends="prepare" unless="ignore.pdeExportFeatures">
+ <!--
+ Features get built asynchronously but this approach is sometimes convenient.
+ So that the pde.exportFeatures task is available in the IDE select
+ "Run in the same JRE as the workspace" from the JRE tab from "Run Ant.."
+ -->
+ <pde.exportFeatures
+ features="${features}"
+ destination="${build.dir}/${webapp.name}/WEB-INF/eclipse"
+ exportType="directory"
+ useJARFormat="false"
+ exportSource="false"
+ />
+ </target>
+</project>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/servletbridge.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/servletbridge.jar
new file mode 100644
index 0000000..21ceb9a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/servletbridge.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/.eclipseproduct b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/.eclipseproduct
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/.eclipseproduct
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/configuration/config.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/configuration/config.ini
new file mode 100644
index 0000000..e7061ba
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/configuration/config.ini
@@ -0,0 +1,3 @@
+#Eclipse Runtime Configuration File
+osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@start
+osgi.bundles.defaultStartLevel=4
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/launch.ini b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/launch.ini
new file mode 100644
index 0000000..a96f99e
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/eclipse/launch.ini
@@ -0,0 +1,11 @@
+# Eclipse Runtime Configuration Overrides
+# These properties are loaded prior to starting the framework and can also be used to override System Properties
+# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework
+# "*" can be used together with @null to clear System Properties that match a prefix name.
+
+osgi.*=@null
+org.osgi.*=@null
+eclipse.*=@null
+
+osgi.parentClassloader=app
+osgi.contextClassLoaderParent=app
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/web.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/web.xml
new file mode 100644
index 0000000..3f4c3d4
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.equinox.servletbridge_1.0.100.200809191530/templates/WEB-INF/web.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
+<web-app id="WebApp">
+ <servlet id="bridge">
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <display-name>Equinox Bridge Servlet</display-name>
+ <description>Equinox Bridge Servlet</description>
+ <servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>
+ <init-param>
+ <param-name>commandline</param-name>
+ <param-value>-console</param-value>
+ </init-param>
+ <init-param>
+ <param-name>enableFrameworkControls</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <!--
+ org.eclipse.equinox.servletbridge and the Servlet API are exported automatically to the underlying OSGi framework.
+ The extendedFrameworkExports parameter allows the specification of additional java package exports.
+ The format is a comma separated list of exports as specified by the "Export-Package" bundle manifest header.
+ For example: com.mycompany.exports; version=1.0.0, com.mycompany.otherexports; version=1.0.0
+ -->
+ <init-param>
+ <param-name>extendedFrameworkExports</param-name>
+ <param-value></param-value>
+ </init-param>
+
+ <!--
+ You can specify your own framework launcher here.
+ The default is: org.eclipse.equinox.servletbridge.FrameworkLauncher
+ <init-param>
+ <param-name>frameworkLauncherClass</param-name>
+ <param-value>org.eclipse.equinox.servletbridge.FrameworkLauncher</param-value>
+ </init-param>
+ -->
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+ <!--
+ This is required if your application bundles expose JSPs.
+ -->
+ <servlet-mapping>
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <url-pattern>*.jsp</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar
new file mode 100644
index 0000000..fc24c62
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi.services_3.1.200.v20071203.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar
new file mode 100644
index 0000000..402c02d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.osgi_3.4.0.v20080605-1900.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.jface_1.1.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.jface_1.1.0.200809191530.jar
new file mode 100644
index 0000000..131a441
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.jface_1.1.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt.q07_1.1.1.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt.q07_1.1.1.200809191530.jar
new file mode 100644
index 0000000..4debe63
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt.q07_1.1.1.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt_1.1.1.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt_1.1.1.200809191530.jar
new file mode 100644
index 0000000..c7833bd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.rwt_1.1.1.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui.workbench_1.1.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui.workbench_1.1.0.200809191530.jar
new file mode 100644
index 0000000..ce60df0
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui.workbench_1.1.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui_1.1.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui_1.1.0.200809191530.jar
new file mode 100644
index 0000000..ca2c075
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.rap.ui_1.1.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.update.configurator_3.2.200.v20080417.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.update.configurator_3.2.200.v20080417.jar
new file mode 100644
index 0000000..a4cff46
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.eclipse.update.configurator_3.2.200.v20080417.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.jdom_1.0.0.200809191530.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.jdom_1.0.0.200809191530.jar
new file mode 100644
index 0000000..22b5a03
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.jdom_1.0.0.200809191530.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.sat4j.core_2.0.0.v20080602.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.sat4j.core_2.0.0.v20080602.jar
new file mode 100644
index 0000000..84cd3cb
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/eclipse/plugins/org.sat4j.core_2.0.0.v20080602.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/lib/servletbridge.jar b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/lib/servletbridge.jar
new file mode 100644
index 0000000..22eb6c1
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/lib/servletbridge.jar
Binary files differ
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/web.xml b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/web.xml
new file mode 100644
index 0000000..eb2f849
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/build/eppwizard/WEB-INF/web.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
+<web-app id="WebApp">
+ <servlet id="bridge">
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <display-name>Equinox Bridge Servlet</display-name>
+ <description>Equinox Bridge Servlet</description>
+ <servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>
+
+ <!-- the OSGi console is useful for trouble shooting but will fill up your
+ appserver log quickly, so deactivate on production use -->
+ <context-param>
+ <param-name>commandline</param-name>
+ <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
+ </context-param>
+
+ <init-param>
+ <param-name>commandline</param-name>
+ <param-value>-console -consoleLog</param-value>
+ </init-param>
+
+
+ <!-- Framework Controls could be useful for testing purpose, but
+ we disable it in RAP environment per default -->
+ <init-param>
+ <param-name>enableFrameworkControls</param-name>
+ <param-value>false</param-value>
+ </init-param>
+
+ <!--
+ org.eclipse.equinox.servletbridge and the Servlet API are exported automatically to the underlying OSGi framework.
+ The extendedFrameworkExports parameter allows the specification of additional java package exports.
+ The format is a comma separated list of exports as specified by the "Export-Package" bundle manifest header.
+ For example: com.mycompany.exports; version=1.0.0, com.mycompany.otherexports; version=1.0.0
+ -->
+ <init-param>
+ <param-name>extendedFrameworkExports</param-name>
+ <param-value></param-value>
+ </init-param>
+
+<resource-env-ref>
+<description>Test read resource environment variable</description>
+<resource-env-ref-name>simpleValue</resource-env-ref-name>
+<resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
+</resource-env-ref>
+
+ <!--
+ You can specify your own framework launcher here.
+ The default is: org.eclipse.equinox.servletbridge.FrameworkLauncher
+ <init-param>
+ <param-name>frameworkLauncherClass</param-name>
+ <param-value>org.eclipse.equinox.servletbridge.FrameworkLauncher</param-value>
+ </init-param>
+ -->
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+ <!--
+ This is required if your application bundles expose JSPs.
+ -->
+ <servlet-mapping>
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <url-pattern>*.jsp</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/feature.xml b/plugins/org.eclipse.epp.wizard.war.feature/feature.xml
new file mode 100644
index 0000000..7864a8a
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/feature.xml
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.epp.wizard.war.feature"
+ label="RAP Demo Deployment Feature"
+ version="1.1.0.qualifier"
+ provider-name="eclipse.org">
+
+ <description url="http://www.example.com/description">
+ [Enter Feature Description here.]
+ </description>
+
+ <copyright url="http://www.example.com/copyright">
+ [Enter Copyright Description here.]
+ </copyright>
+
+ <license url="http://www.example.com/license">
+ [Enter License Description here.]
+ </license>
+
+ <plugin
+ id="org.eclipse.core.commands"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.contenttype"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.jobs"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.runtime"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.common"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.registry"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.servlet"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.http.servletbridge"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.preferences"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.registry"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.osgi.services"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.jface"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.rwt"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.ui.workbench"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.expressions"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.app"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.rap.rwt.q07"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ fragment="true"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.core.databinding"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="com.ibm.icu"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.p2.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.p2.metadata"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.p2.metadata.repository"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf.filetransfer"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf.identity"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.ecf.provider.filetransfer"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.sat4j.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.security"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard.model"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"/>
+
+ <plugin
+ id="org.jdom"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard.installerbuilder"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.ant"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"/>
+
+ <plugin
+ id="org.eclipse.epp.wizard.kickstarter"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.update.configurator"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.equinox.servletbridge"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"/>
+
+ <plugin
+ id="org.apache.commons.logging"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.apache.log4j"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+</feature>
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/script/webappBuilder.xml b/plugins/org.eclipse.epp.wizard.war.feature/script/webappBuilder.xml
new file mode 100644
index 0000000..3c3f0c6
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/script/webappBuilder.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>
+<project name="project" default="default">
+ <description>
+ Example of a webapplication build script for RAP applications that use
+ the equinox servlet bridge to run in a servlet container.
+ </description>
+
+ <!-- =================================
+ target: init
+ ================================= -->
+ <target name="init">
+ <property name="proj.dir" value="${basedir}/.." />
+ <!--
+ This script assumes that the servlet bridge project is available
+ in the current workspace. Note: The location is hardcoded and must be
+ adjusted to your needs.
+ -->
+ <property name="servletbridge.dir"
+ value="${proj.dir}/../org.eclipse.equinox.servletbridge" />
+ <!--
+ On windows be cautious about long file names for ${build.dir}
+ These long path problems were resolved in JRE 1.5.0_08
+ -->
+ <property name="build.dir" value="${proj.dir}/build" />
+ <property name="templates.dir" value="${proj.dir}/templates" />
+ <property name="webapp.name" value="eppwizard" />
+ <property name="features" value="org.eclipse.epp.wizard.war.feature" />
+ <!--
+ If you are using this script in a head-less build define the following properties:
+ "ignore.pdeExportFeatures" (available only in the IDE - do the feature export with PDE Build)
+ "ignore.servletbridge.jar" (if you're compiling or extracting the jar yourself)
+ -->
+ </target>
+
+ <!-- =================================
+ target: prepare
+ ================================= -->
+ <target name="prepare" depends="init">
+ <delete dir="${build.dir}/${webapp.name}" />
+ <mkdir dir="${build.dir}/${webapp.name}/WEB-INF/lib" />
+ </target>
+
+ <!-- =================================
+ target: default
+ ================================= -->
+ <target name="default"
+ depends="copyResources, servletbridge.jar, pdeExportFeatures" />
+
+ <!-- =================================
+ target: copyResources
+ ================================= -->
+ <target name="copyResources" depends="prepare">
+ <copy todir="${build.dir}/${webapp.name}">
+ <fileset dir="${templates.dir}" />
+ </copy>
+ </target>
+
+ <!-- =================================
+ target: servletbridge.jar
+ ================================= -->
+ <target name="servletbridge.jar"
+ depends="prepare"
+ unless="ignore.servletbridge.jar">
+ <antcall target="jar-servletbridge.jar" />
+ <antcall target="copy-servletbridge.jar" />
+ </target>
+
+ <!-- =================================
+ target: copy-servletbridge.jar
+ ================================= -->
+ <target name="copy-servletbridge.jar" if="servletbridge.jar-present">
+ <copy todir="${build.dir}/${webapp.name}/WEB-INF/lib">
+ <fileset file="${servletbridge.dir}/servletbridge.jar" />
+ </copy>
+ </target>
+
+ <!-- =================================
+ target: jar-servletbridge.jar
+ ================================= -->
+ <target name="jar-servletbridge.jar" unless="servletbridge.jar-present">
+ <jar destfile="${build.dir}/${webapp.name}/WEB-INF/lib/servletbridge.jar">
+ <fileset dir="${servletbridge.dir}/bin">
+ <include name="**/*.class" />
+ </fileset>
+ </jar>
+ </target>
+
+ <!-- =================================
+ target: pdeExportFeatures
+ ================================= -->
+ <target name="pdeExportFeatures"
+ depends="prepare"
+ unless="ignore.pdeExportFeatures">
+ <!--
+ Features get built asynchronously but this approach is sometimes convenient.
+ So that the pde.exportFeatures task is available in the IDE select
+ "Run in the same JRE as the workspace" from the JRE tab from "Run Ant.."
+ -->
+ <pde.exportFeatures features="${features}"
+ destination="${build.dir}/${webapp.name}/WEB-INF/eclipse"
+ exportType="directory"
+ useJARFormat="false"
+ exportSource="false" />
+ </target>
+</project>
+
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/src/org/eclipse/rap/tools/ConfigIniCreator.java b/plugins/org.eclipse.epp.wizard.war.feature/src/org/eclipse/rap/tools/ConfigIniCreator.java
new file mode 100644
index 0000000..de7b598
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/src/org/eclipse/rap/tools/ConfigIniCreator.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2002-2006 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+
+package org.eclipse.rap.tools;
+
+import java.io.File;
+
+
+/**
+ * <p>This tool creates the content of a simple config.ini file.
+ * Run this after the ANT build scripts (webappBuilder.xml and the
+ * pde.exportFeatures) have finished. After that replace the content
+ * of the config.ini file in the build.</p>
+ *
+ * <p>Note: this is not meant to be a high end deployment tool or the only
+ * possibility of how the content of your config.ini should look like if you
+ * are creating a RAP WAR. This should simplify the task to get
+ * a minimalistic runtime configuration that works...</p>
+ */
+public class ConfigIniCreator {
+
+ public static void main( final String[] arx ) {
+ ////////////////////////////////////////////////////////////////////////////
+ // replace this with the absolute path to the plugin directory of
+ // the deployment build for example
+ // File file = new File( "C:\\projects\\org.eclipse.rap\\org.eclipse.rap.demo.feature\\build\\rapdemo\\WEB-INF\\eclipse\\plugins" );
+ File file = new File("build\\eppwizard\\WEB-INF\\eclipse\\plugins");
+ ////////////////////////////////////////////////////////////////////////////
+
+ String[] list = file.list();
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( "#Eclipse Runtime Configuration File\n" );
+
+ buffer.append( "osgi.bundles=" );
+ for( int i = 0; i < list.length; i++ ) {
+ if( list[ i ].endsWith( ".jar" )
+ && !list[ i ].startsWith( "org.eclipse.osgi_" ) )
+ {
+ buffer.append( list[ i ] );
+ if( !list[ i ].startsWith( "org.eclipse.rap.rwt.q07_" ) ) {
+ if( list[ i ].startsWith( "org.eclipse.equinox.common_" ) ) {
+ buffer.append( "@2:start" );
+ } else {
+ buffer.append( "@start" );
+ }
+ }
+ if( i + 1 < list.length ) {
+ buffer.append( "," );
+ } else {
+ buffer.append( ",org.eclipse.equinox.servletbridge.extensionbundle" );
+ }
+ }
+ }
+ buffer.append( "\n" );
+ buffer.append( "osgi.bundles.defaultStartLevel=4\n" );
+
+ // write the content to the console
+ System.out.print( buffer );
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/.eclipseproduct b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/.eclipseproduct
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/.eclipseproduct
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/configuration/config.ini b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/configuration/config.ini
new file mode 100644
index 0000000..7874020
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/configuration/config.ini
@@ -0,0 +1,3 @@
+#Eclipse Runtime Configuration File
+osgi.bundles=org.eclipse.equinox.common@2:start, org.eclipse.update.configurator@start, org.eclipse.rap.ui@4:start, org.eclipse.epp.wizard.kickstarter@5:start, org.eclipse.equinox.http.servletbridge@start, org.eclipse.equinox.http.registry@startosgi.bundles.default
+StartLevel=4
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/launch.ini b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/launch.ini
new file mode 100644
index 0000000..17af11d
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/eclipse/launch.ini
@@ -0,0 +1,11 @@
+# Eclipse Runtime Configuration Overrides
+# These properties are loaded prior to starting the framework and can also be used to override System Properties
+# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework
+# "*" can be used together with @null to clear System Properties that match a prefix name.
+
+osgi.*=@null
+org.osgi.*=@null
+eclipse.*=@null
+
+osgi.parentClassloader=app
+osgi.contextClassLoaderParent=app
diff --git a/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/web.xml b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/web.xml
new file mode 100644
index 0000000..eb2f849
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard.war.feature/templates/WEB-INF/web.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
+<web-app id="WebApp">
+ <servlet id="bridge">
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <display-name>Equinox Bridge Servlet</display-name>
+ <description>Equinox Bridge Servlet</description>
+ <servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>
+
+ <!-- the OSGi console is useful for trouble shooting but will fill up your
+ appserver log quickly, so deactivate on production use -->
+ <context-param>
+ <param-name>commandline</param-name>
+ <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
+ </context-param>
+
+ <init-param>
+ <param-name>commandline</param-name>
+ <param-value>-console -consoleLog</param-value>
+ </init-param>
+
+
+ <!-- Framework Controls could be useful for testing purpose, but
+ we disable it in RAP environment per default -->
+ <init-param>
+ <param-name>enableFrameworkControls</param-name>
+ <param-value>false</param-value>
+ </init-param>
+
+ <!--
+ org.eclipse.equinox.servletbridge and the Servlet API are exported automatically to the underlying OSGi framework.
+ The extendedFrameworkExports parameter allows the specification of additional java package exports.
+ The format is a comma separated list of exports as specified by the "Export-Package" bundle manifest header.
+ For example: com.mycompany.exports; version=1.0.0, com.mycompany.otherexports; version=1.0.0
+ -->
+ <init-param>
+ <param-name>extendedFrameworkExports</param-name>
+ <param-value></param-value>
+ </init-param>
+
+<resource-env-ref>
+<description>Test read resource environment variable</description>
+<resource-env-ref-name>simpleValue</resource-env-ref-name>
+<resource-env-ref-type>java.lang.Integer</resource-env-ref-type>
+</resource-env-ref>
+
+ <!--
+ You can specify your own framework launcher here.
+ The default is: org.eclipse.equinox.servletbridge.FrameworkLauncher
+ <init-param>
+ <param-name>frameworkLauncherClass</param-name>
+ <param-value>org.eclipse.equinox.servletbridge.FrameworkLauncher</param-value>
+ </init-param>
+ -->
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+ <!--
+ This is required if your application bundles expose JSPs.
+ -->
+ <servlet-mapping>
+ <servlet-name>equinoxbridgeservlet</servlet-name>
+ <url-pattern>*.jsp</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch b/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch
index e650726..43c6c10 100644
--- a/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch
+++ b/plugins/org.eclipse.epp.wizard/EPP wizard OSGi.launch
@@ -13,12 +13,12 @@
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -console -consoleLog"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dorg.osgi.service.http.port=8008 -Dorg.eclipse.equinox.http.jetty.context.sessioninactiveinterval=30000 -Xms128m -Xmx512m"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Declipse.ignoreApp=true -Dosgi.noShutdown=true -Dorg.osgi.service.http.port=8888 -Dorg.eclipse.equinox.http.jetty.context.sessioninactiveinterval=120 -Xms128m -Xmx512m -Dlog4j.configuration=file:log4j.properties"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:org.eclipse.epp.wizard}"/>
<stringAttribute key="pde.version" value="3.3"/>
<booleanAttribute key="show_selected_only" value="false"/>
-<stringAttribute key="target_bundles" value="org.eclipse.equinox.security.win32.x86@default:false,org.apache.commons.logging@default:default,org.apache.xml.resolver@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.ecf.filetransfer@default:default,org.apache.xerces@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.common@default:default,org.eclipse.core.databinding@default:default,org.eclipse.jface@default:default,javax.servlet@default:default,org.eclipse.core.net.win32.x86@default:false,javax.xml@default:default,org.eclipse.equinox.app@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.core.runtime@default:default,com.ibm.icu@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.equinox.security@default:default,org.eclipse.core.commands@default:default,org.eclipse.ecf@default:default,org.eclipse.swt@22:default,org.eclipse.jface.databinding@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.core.net@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.contenttype@default:default,org.apache.xml.serializer@default:default,org.eclipse.core.jobs@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.ant@default:default,org.eclipse.osgi@:,org.eclipse.osgi.services@default:default"/>
+<stringAttribute key="target_bundles" value="org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.commons.logging@default:default,org.apache.commons.logging@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.apache.xerces*2.9.0.v200805270400@default:default,com.ibm.icu@default:default,org.eclipse.jface@default:default,org.eclipse.core.commands@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.equinox.app@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.ecf@default:default,org.eclipse.core.databinding@default:default,org.apache.xml.resolver*1.2.0.v200806030312@default:default,javax.servlet@default:default,org.eclipse.core.net@default:default,org.eclipse.core.jobs@default:default,org.apache.xml.resolver*1.1.0.20080508-1430PRD@default:default,org.eclipse.ecf.identity@default:default,org.apache.ant@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.osgi@:,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.core.expressions@default:default,org.eclipse.equinox.security@default:default,org.eclipse.swt@22:default,org.eclipse.osgi.services@default:default,org.eclipse.core.runtime@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.apache.xml.serializer@default:default,org.apache.xerces*2.8.0.20080508-1430PRD@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.equinox.common@default:default,javax.xml@default:default"/>
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useDefaultConfigArea" value="true"/>
-<stringAttribute key="workspace_bundles" value="org.jdom@default:default,org.eclipse.epp.wizard.model@default:default,org.mortbay.jetty@default:default,org.eclipse.rap.ui@default:default,org.eclipse.rap.rwt@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.rap.ui.workbench@default:default,org.apache.commons.logging@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,org.eclipse.rap.rwt.q07@default:false,javax.servlet@default:default,org.eclipse.rap.jface@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.epp.wizard.kickstarter@default:default,org.eclipse.epp.wizard@default:default"/>
+<stringAttribute key="workspace_bundles" value="org.mortbay.jetty@default:default,org.eclipse.equinox.http.registry@default:default,org.eclipse.epp.wizard.kickstarter@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.equinox.servletbridge@default:default,org.eclipse.rap.rwt.q07@default:false,org.eclipse.equinox.http.servlet@default:default,org.eclipse.rap.jface@default:default,org.eclipse.epp.wizard@default:default,org.eclipse.rap.ui@default:default,org.apache.log4j@default:default,org.eclipse.rap.ui.workbench@default:default,org.eclipse.epp.wizard.installerbuilder@default:default,javax.servlet@default:default,org.jdom@default:default,org.eclipse.rap.rwt@default:default,org.apache.commons.logging@default:default,org.eclipse.epp.wizard.model@default:default"/>
</launchConfiguration>
diff --git a/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF b/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF
index 428b48a..d420a4c 100644
--- a/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.epp.wizard/META-INF/MANIFEST.MF
@@ -13,6 +13,7 @@
Bundle-ActivationPolicy: lazy
Import-Package: javax.servlet;version="2.4.0",
javax.servlet.http;version="2.4.0",
+ org.apache.log4j,
org.eclipse.equinox.internal.p2.core.helpers,
org.eclipse.equinox.internal.p2.metadata,
org.eclipse.equinox.internal.p2.metadata.repository,
diff --git a/plugins/org.eclipse.epp.wizard/build.properties b/plugins/org.eclipse.epp.wizard/build.properties
index 7556ac8..a65972b 100644
--- a/plugins/org.eclipse.epp.wizard/build.properties
+++ b/plugins/org.eclipse.epp.wizard/build.properties
@@ -3,6 +3,7 @@
bin.includes = META-INF/,\
plugin.xml,\
.,\
- icons/
+ icons/,\
-src.includes = icons/
+src.includes = icons/,\
+ plugin.xml
diff --git a/plugins/org.eclipse.epp.wizard/epp-wizard.product b/plugins/org.eclipse.epp.wizard/epp-wizard.product
index 8cee77c..028b096 100644
--- a/plugins/org.eclipse.epp.wizard/epp-wizard.product
+++ b/plugins/org.eclipse.epp.wizard/epp-wizard.product
@@ -3,8 +3,8 @@
<product name="EPP Wizard" id="org.eclipse.epp.wizard.product" application="org.eclipse.epp.wizard.application" useFeatures="false">
-
<configIni use="default">
+ <linux>/org.eclipse.epp.wizard/config.ini</linux>
<win32>/org.eclipse.epp.wizard/config.ini</win32>
</configIni>
@@ -14,7 +14,6 @@
<windowImages/>
-
<launcher>
<solaris/>
<win useIco="false">
@@ -22,7 +21,6 @@
</win>
</launcher>
-
<vm>
</vm>
@@ -57,7 +55,6 @@
<plugin id="org.eclipse.equinox.preferences"/>
<plugin id="org.eclipse.equinox.registry"/>
<plugin id="org.eclipse.equinox.security"/>
- <plugin id="org.eclipse.equinox.security.win32.x86" fragment="true"/>
<plugin id="org.eclipse.equinox.servletbridge"/>
<plugin id="org.eclipse.osgi"/>
<plugin id="org.eclipse.osgi.services"/>
diff --git a/plugins/org.eclipse.epp.wizard/eppwizard.properties b/plugins/org.eclipse.epp.wizard/eppwizard.properties
index 1fbc8eb..29d0176 100644
--- a/plugins/org.eclipse.epp.wizard/eppwizard.properties
+++ b/plugins/org.eclipse.epp.wizard/eppwizard.properties
@@ -1,7 +1,7 @@
# model description directory containing "eppmodel.xml" and group images
model=data/model
# outgoing service providers configuration directory, containing "outgoing.properties" and images
-outgoing=data/outgoing
+externalServiceProviders=data/externalServiceProviders
# EPP P2 Metadata repository, used for resolving IU references in "eppmodel.xml"
epp.metadata=file:data/metadata/
#epp.metadata=http://localhost/epp/
@@ -15,4 +15,12 @@
# P2 installer artifact repositories
eclipse.p2.artifacts=http://192.168.6.155/p2g/,http://192.168.6.155/p2u/
-#eclipse.p2.artifacts=http://download.eclipse.org/eclipse/updates/3.4/,http://download.eclipse.org/releases/ganymede/
\ No newline at end of file
+#eclipse.p2.artifacts=http://download.eclipse.org/eclipse/updates/3.4/,http://download.eclipse.org/releases/ganymede/
+
+# URL to Terms of Use
+termsofuse.url=http://www.eclipse.org/legal/termsofuse.php
+# URL to Privacy Policy
+privacy.url=http://www.eclipse.org/legal/privacy.php
+
+# Download/external service provider statistics
+stats.logging.file=statistics.log
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/installerbuilder.properties b/plugins/org.eclipse.epp.wizard/installerbuilder.properties
index c90c6b1..2d25d24 100644
--- a/plugins/org.eclipse.epp.wizard/installerbuilder.properties
+++ b/plugins/org.eclipse.epp.wizard/installerbuilder.properties
@@ -2,3 +2,5 @@
downloads=../org.eclipse.epp.wizard.installerbuilder/opt/epp
# directory used for creating temporary download files
tmpdir=../org.eclipse.epp.wizard.installerbuilder/opt/epp/tmp
+# Number of entries in the installer cache (each entry uses about 5 MB disk space in the tmpdir)
+installer.cache.size=200
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/log4j.properties b/plugins/org.eclipse.epp.wizard/log4j.properties
new file mode 100644
index 0000000..d6a11cf
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/log4j.properties
@@ -0,0 +1,17 @@
+log4j.rootLogger=debug, stdout, R
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %5p [%t] (%F:%L) - %m%n
+
+log4j.appender.R=org.apache.log4j.RollingFileAppender
+log4j.appender.R.File=example.log
+
+log4j.appender.R.MaxFileSize=100KB
+# Keep one backup file
+log4j.appender.R.MaxBackupIndex=1
+
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%d{ISO8601} %p %t %c - %m%n
diff --git a/plugins/org.eclipse.epp.wizard/plugin.xml b/plugins/org.eclipse.epp.wizard/plugin.xml
index 1e5fb89..7af20b2 100644
--- a/plugins/org.eclipse.epp.wizard/plugin.xml
+++ b/plugins/org.eclipse.epp.wizard/plugin.xml
@@ -34,4 +34,14 @@
</run>
</application>
</extension>
+ <extension
+ point="org.eclipse.rap.ui.branding">
+ <branding
+ defaultEntrypointId="org.eclipse.epp.wizard"
+ favicon="icons/classic.png"
+ id="org.eclipse.epp.wizard.branding.eppwizard"
+ servletName="go"
+ title="Eclipse Wizard">
+ </branding>
+ </extension>
</plugin>
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java
index bccc718..ee47fdf 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/Application.java
@@ -18,24 +18,23 @@
@SuppressWarnings("restriction")
public class Application implements IApplication {
- public Object start(IApplicationContext context) throws Exception {
- for (Bundle bundle : context.getBrandingBundle().getBundleContext()
- .getBundles()) {
- try {
- if (!(bundle instanceof BundleFragment))
- {
- bundle.start();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return null;
- }
+ public Object start( IApplicationContext context ) throws Exception {
+ for( Bundle bundle : context.getBrandingBundle()
+ .getBundleContext()
+ .getBundles() )
+ {
+ try {
+ if( !( bundle instanceof BundleFragment ) ) {
+ bundle.start();
+ }
+ } catch( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+ return null;
+ }
- public void stop() {
- // TODO Auto-generated method stub
-
- }
-
+ public void stop() {
+ // TODO Auto-generated method stub
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java
index e5165bc..f7dbe17 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Activator.java
@@ -16,8 +16,8 @@
import java.io.IOException;
import java.util.Properties;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
+import org.apache.log4j.Logger;
+import org.eclipse.epp.wizard.model.EPPModel;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -26,85 +26,98 @@
*/
public class Activator extends AbstractUIPlugin {
- public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.configuration";
- public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "eppwizard.properties";
- // The plug-in ID
- public static final String PLUGIN_ID = "org.eclipse.epp.wizard";
- // The shared instance
- private static Activator plugin;
+ static Logger logger = Logger.getLogger( Activator.class );
+ public static final String PROPERTY_CONFIGURATION = "org.eclipse.epp.wizard.configuration";
+ public static final String PROPERTY_CONFIGURATION_DEFAULT_VALUE = "eppwizard.properties";
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.eclipse.epp.wizard";
+ // The shared instance
+ private static Activator plugin;
- /**
- * The constructor
- */
- public Activator() {
- }
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
- * )
- */
- public void start(BundleContext context) throws Exception {
- super.start(context);
- plugin = this;
- }
+ /*
+ * (non-Javadoc)
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+ * )
+ */
+ public void start( BundleContext context ) throws Exception {
+ super.start( context );
+ // PropertyConfigurator.configure("log4j.properties");
+ plugin = this;
+ modelCache = new ModelCache( getConfiguration() );
+ statsLogger = new StatsLogger( configuration.getStatsLoggingFile() );
+ }
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
- * )
- */
- public void stop(BundleContext context) throws Exception {
- plugin = null;
- super.stop(context);
- }
+ /*
+ * (non-Javadoc)
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+ * )
+ */
+ public void stop( BundleContext context ) throws Exception {
+ plugin = null;
+ super.stop( context );
+ }
- /**
- * Returns the shared instance
- *
- * @return the shared instance
- */
- public static Activator getDefault() {
- return plugin;
- }
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+ /*
+ * public static void log(final Exception exc) { IStatus status = new
+ * Status(IStatus.ERROR, PLUGIN_ID, exc.getMessage(), exc);
+ * getDefault().getLog().log(status); } public static void log(final IStatus
+ * status) { System.err.println(status.getMessage() + "\n" +
+ * status.getException()); getDefault().getLog().log(status); }
+ */
+ private Configuration configuration = null;
+ private ModelCache modelCache;
+ private StatsLogger statsLogger;
- public static void log(final Exception exc) {
- IStatus status = new Status(IStatus.ERROR, PLUGIN_ID, exc.getMessage(),
- exc);
- getDefault().getLog().log(status);
- }
+ public synchronized Configuration getConfiguration() {
+ if( configuration == null ) {
+ String configurationFile = System.getProperty( PROPERTY_CONFIGURATION,
+ PROPERTY_CONFIGURATION_DEFAULT_VALUE );
+ logger.info( "Loading configuration from file: "
+ + new File( configurationFile ).getAbsolutePath() );
+ Properties properties = new Properties();
+ FileInputStream inStream = null;
+ try {
+ inStream = new FileInputStream( configurationFile );
+ properties.load( inStream );
+ configuration = new Configuration( properties );
+ } catch( FileNotFoundException exc ) {
+ logger.error( "Unable to load configuration", exc );
+ } catch( IOException exc ) {
+ logger.error( "Unable to load configuration", exc );
+ } finally {
+ if( inStream != null ) {
+ try {
+ inStream.close();
+ } catch( IOException e ) {
+ logger.warn( "Could not close file '" + configurationFile, e );
+ }
+ }
+ }
+ }
+ return configuration;
+ }
- public static void log(final IStatus status) {
- System.err.println(status.getMessage() + "\n" + status.getException());
- getDefault().getLog().log(status);
- }
+ public EPPModel getModel() throws Exception {
+ return modelCache.getModel();
+ }
- private Configuration configuration = null;
-
- public synchronized Configuration getConfiguration() {
- if (configuration == null) {
- String configurationFile = System.getProperty(
- PROPERTY_CONFIGURATION,
- PROPERTY_CONFIGURATION_DEFAULT_VALUE);
- System.out.println("Loading configuration from file: "
- + new File(configurationFile).getAbsolutePath());
- Properties properties = new Properties();
- try {
- properties.load(new FileInputStream(configurationFile));
- configuration = new Configuration(properties);
- } catch (FileNotFoundException exc) {
- // TODO Auto-generated catch block
- System.err.println();
- exc.printStackTrace();
- } catch (IOException exc) {
- // TODO Auto-generated catch block
- exc.printStackTrace();
- }
- }
- return configuration;
- }
+ public StatsLogger getStatsLogger() {
+ return statsLogger;
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java
index af2441a..4807785 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Configuration.java
@@ -11,98 +11,159 @@
package org.eclipse.epp.wizard.internal;
import java.io.File;
+import java.io.IOException;
import java.util.Properties;
+import org.apache.log4j.Logger;
public class Configuration {
+
+ static Logger logger = Logger.getLogger( Configuration.class );
final static String MODEL = "model";
final static String EXTERNAL_SERVICE_PROVIDERS = "externalServiceProviders";
final static String EPP_METADATA_REPOSITORY = "epp.metadata";
final static String INSTALLER_URL = "installer.url";
final static String BASE_IUS = "baseIUs";
+ final static String TERMS_OF_USE_URL = "termsofuse.url";
+ final static String TERMS_OF_USE_URL_DEFAULT = "http://www.eclipse.org/legal/termsofuse.php";
+ final static String PRIVACY_URL = "privacy.url";
+ final static String PRIVACY_URL_DEFAULT = "http://www.eclipse.org/legal/privacy.php";
+ final static String STATS_LOGGING_FILE = "stats.logging.file";
+ final static String STATS_LOGGING_FILE_DEFAULT = "stats.txt";
final public static String P2_METADATA_REPOSITORIES = "eclipse.p2.metadata";
final public static String P2_ARTIFACT_REPOSITORIES = "eclipse.p2.artifacts";
final public static String P2_ROOTS = "eclipse.p2.roots";
-
protected File modelDirectory;
protected File externalServiceProviderDirectory;
protected String eppMetadataRepository;
protected String installerURL;
protected String baseIUs;
+ protected String termsOfUseURL;
- public String getBaseIUs() {
- return baseIUs;
-}
-
- public String getInstallerURL() {
- return installerURL;
- }
-
- public String getEppMetadataRepository() {
- return eppMetadataRepository;
- }
-
- protected String metadataRepositories;
- protected String artifactRepositories;
- public String getMetadataRepositories() {
- return metadataRepositories;
- }
-
- public String getArtifactRepositories() {
- return artifactRepositories;
- }
-
- protected ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
-
- public ExternalServiceProviderConfiguration getExternalServiceProviderConfiguration() {
- return externalServiceProviderConfiguration;
+ public String getTermsOfUseURL() {
+ return termsOfUseURL;
}
+ public void setTermsOfUseURL( String termsOfUseURL ) {
+ this.termsOfUseURL = termsOfUseURL;
+ }
+
+ public File getStatsLoggingFile() {
+ return statsLoggingFile;
+ }
+
+ public void setStatsLoggingFile( File statsLoggingFile ) {
+ this.statsLoggingFile = statsLoggingFile;
+ }
+ protected File statsLoggingFile;
+
+ public String getBaseIUs() {
+ return baseIUs;
+ }
+
+ public String getInstallerURL() {
+ return installerURL;
+ }
+
+ public String getEppMetadataRepository() {
+ return eppMetadataRepository;
+ }
+ protected String metadataRepositories;
+ protected String artifactRepositories;
+
+ public String getMetadataRepositories() {
+ return metadataRepositories;
+ }
+
+ public String getArtifactRepositories() {
+ return artifactRepositories;
+ }
+ protected ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
+
+ public ExternalServiceProviderConfiguration getExternalServiceProviderConfiguration()
+ {
+ return externalServiceProviderConfiguration;
+ }
private Properties properties;
-
+ private String privacyURL;
+
+ public String getPrivacyURL() {
+ return privacyURL;
+ }
+
public File getModelDirectory() {
return modelDirectory;
}
-
+
public File getExternalServiceProviderDirectory() {
return externalServiceProviderDirectory;
}
-
- public Configuration(Properties properties)
- {
+ public Configuration( Properties properties ) {
this.properties = properties;
- modelDirectory = createDirectoryObject(MODEL);
- externalServiceProviderDirectory = createDirectoryObject(EXTERNAL_SERVICE_PROVIDERS);
+ modelDirectory = createDirectoryObject( MODEL );
+ externalServiceProviderDirectory = createDirectoryObject( EXTERNAL_SERVICE_PROVIDERS );
loadExternalServiceProviderConfiguration();
-
- installerURL = properties.getProperty(INSTALLER_URL);
-
- metadataRepositories = properties.getProperty(P2_METADATA_REPOSITORIES);
- artifactRepositories = properties.getProperty(P2_ARTIFACT_REPOSITORIES);
- eppMetadataRepository = properties.getProperty(EPP_METADATA_REPOSITORY);
- baseIUs = properties.getProperty(BASE_IUS,"");
+ installerURL = properties.getProperty( INSTALLER_URL );
+ metadataRepositories = properties.getProperty( P2_METADATA_REPOSITORIES );
+ artifactRepositories = properties.getProperty( P2_ARTIFACT_REPOSITORIES );
+ eppMetadataRepository = properties.getProperty( EPP_METADATA_REPOSITORY );
+ baseIUs = properties.getProperty( BASE_IUS, "" );
+ termsOfUseURL = properties.getProperty( TERMS_OF_USE_URL,
+ TERMS_OF_USE_URL_DEFAULT );
+ privacyURL = properties.getProperty( PRIVACY_URL, PRIVACY_URL_DEFAULT );
+ statsLoggingFile = new File( properties.getProperty( STATS_LOGGING_FILE,
+ STATS_LOGGING_FILE_DEFAULT ) );
+ try {
+ statsLoggingFile.createNewFile();
+ } catch( IOException e ) {
+ throw new RuntimeException( "Unable to create stats logging file", e );
+ }
+ if( !statsLoggingFile.canWrite() ) {
+ throw new RuntimeException( "Cannot write to stats logging file '"
+ + statsLoggingFile.getAbsolutePath()
+ + "'" );
+ }
+ if( logger.isInfoEnabled() ) {
+ StringBuilder sb = new StringBuilder();
+ sb.append( "EPP Wizard configuration:" );
+ sb.append( "\n\t modelDirectory: "
+ + modelDirectory.getAbsolutePath() );
+ sb.append( "\n\t externalServiceProviderDirectory: "
+ + externalServiceProviderDirectory.getAbsolutePath() );
+ sb.append( "\n\t metadataRepositories: "
+ + metadataRepositories );
+ sb.append( "\n\t artifactRepositories: "
+ + artifactRepositories );
+ sb.append( "\n\t baseIUs: " + baseIUs );
+ sb.append( "\n\t installerURL: " + installerURL );
+ sb.append( "\n\t statsLoggingFile: " + statsLoggingFile );
+ sb.append( "\n\t termsOfUseURL: " + termsOfUseURL );
+ logger.info( sb );
+ }
}
private void loadExternalServiceProviderConfiguration() {
- externalServiceProviderConfiguration = new ExternalServiceProviderConfiguration(externalServiceProviderDirectory);
-
+ externalServiceProviderConfiguration = new ExternalServiceProviderConfiguration( externalServiceProviderDirectory );
}
private File createDirectoryObject( String key ) {
- String value = properties.getProperty( key );
- if(value == null)
- {
- throw new RuntimeException("Configuration value for '"+key +"' not defined in configuration properties");
+ String value = properties.getProperty( key );
+ if( value == null ) {
+ throw new RuntimeException( "Configuration value for '"
+ + key
+ + "' not defined in configuration properties" );
}
- File file = new File(value);
- if(!file.canRead())
- {
- throw new RuntimeException("Cannot read from file '"+file.getAbsolutePath()+"'");
+ File file = new File( value );
+ if( !file.isDirectory() ) {
+ throw new RuntimeException( "'"
+ + file.getAbsolutePath()
+ + "' is not a directory" );
}
- if(!file.isDirectory())
- {
- throw new RuntimeException("'"+file.getAbsolutePath()+"' is not a directory");
+ if( !file.canRead() ) {
+ throw new RuntimeException( "Cannot read from directory '"
+ + file.getAbsolutePath()
+ + "'" );
}
return file;
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java
index 892d0e4..ac74597 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ExternalServiceProviderConfiguration.java
@@ -12,87 +12,106 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import org.apache.log4j.Logger;
+
public class ExternalServiceProviderConfiguration {
- private static final String URL = "url";
- private static final String ICON = "icon";
- private static final String DESCRIPTION = "description";
- private static final String LABEL = "label";
- private static final String PROPERTIES_EXTENSION = ".properties";
- public static class Entry {
- public String label;
- public String description;
- public File icon;
+ static Logger logger = Logger.getLogger( ExternalServiceProviderConfiguration.class );
+ private static final String URL = "url";
+ private static final String ICON = "icon";
+ private static final String DESCRIPTION = "description";
+ private static final String LABEL = "label";
+ private static final String PROPERTIES_EXTENSION = ".properties";
+ public static class Entry {
- public String getLabel() {
- return label;
- }
+ public String label;
+ public String description;
+ public File icon;
- public String getDescription() {
- return description;
- }
+ public String getLabel() {
+ return label;
+ }
- public File getIcon() {
- return icon;
- }
+ public String getDescription() {
+ return description;
+ }
- public String getUrlTemplate() {
- return urlTemplate;
- }
+ public File getIcon() {
+ return icon;
+ }
- public Entry(String label, File icon, String description,
- String urlTemplate) {
- super();
- this.description = description;
- this.icon = icon;
- this.label = label;
- this.urlTemplate = urlTemplate;
- }
+ public String getUrlTemplate() {
+ return urlTemplate;
+ }
- public String urlTemplate;
- }
+ public Entry( String label,
+ File icon,
+ String description,
+ String urlTemplate )
+ {
+ super();
+ this.description = description;
+ this.icon = icon;
+ this.label = label;
+ this.urlTemplate = urlTemplate;
+ }
+ public String urlTemplate;
+ }
+ private List<Entry> entries = new ArrayList<Entry>();
- private List<Entry> entries = new ArrayList<Entry>();
+ public ExternalServiceProviderConfiguration( File externalServiceProviderDirectory )
+ {
+ for( File propertiesFile : externalServiceProviderDirectory.listFiles() ) {
+ if( propertiesFile.getName().endsWith( PROPERTIES_EXTENSION ) ) {
+ FileInputStream inStream = null;
+ try {
+ Properties properties = new Properties();
+ inStream = new FileInputStream( propertiesFile );
+ properties.load( inStream );
+ String label = getMandatoryProperty( properties, LABEL );
+ String description = getMandatoryProperty( properties, DESCRIPTION );
+ String icon = getMandatoryProperty( properties, ICON );
+ String url = getMandatoryProperty( properties, URL );
+ Entry entry = new Entry( label,
+ new File( externalServiceProviderDirectory,
+ icon ),
+ description,
+ url );
+ entries.add( entry );
+ } catch( Exception exc ) {
+ throw new RuntimeException( "Could not load external service provider configuration file'"
+ + propertiesFile.getAbsolutePath()
+ + "'",
+ exc );
+ } finally {
+ if( inStream != null ) {
+ try {
+ inStream.close();
+ } catch( IOException e ) {
+ logger.warn( "Could not close file '" + propertiesFile, e );
+ }
+ }
+ }
+ }
+ }
+ }
- public ExternalServiceProviderConfiguration(File externalServiceProviderDirectory) {
- for (File propertiesFile : externalServiceProviderDirectory.listFiles()) {
- if (propertiesFile.getName().endsWith(PROPERTIES_EXTENSION)) {
- try {
- Properties properties = new Properties();
- properties.load(new FileInputStream(propertiesFile));
+ private String getMandatoryProperty( Properties properties, String string ) {
+ String result = properties.getProperty( string );
+ if( result == null ) {
+ throw new RuntimeException( "External service provider key '"
+ + string
+ + "' not found in properties" );
+ }
+ return result;
+ }
- String label = getMandatoryProperty(properties, LABEL);
- String description = getMandatoryProperty(properties,
- DESCRIPTION);
- String icon = getMandatoryProperty(properties, ICON);
- String url = getMandatoryProperty(properties, URL);
- Entry entry = new Entry(label, new File(externalServiceProviderDirectory,
- icon), description, url);
- entries.add(entry);
- } catch (Exception exc) {
- throw new RuntimeException(
- "Could not load external service provider configuration file'"
- + propertiesFile.getAbsolutePath() + "'",
- exc);
- }
- }
- }
- }
-
- private String getMandatoryProperty(Properties properties, String string) {
- String result = properties.getProperty(string);
- if (result == null) {
- throw new RuntimeException("External service provider key '"
- + string + "' not found in properties");
- }
- return result;
- }
-
- public List<Entry> getEntries() {
- return entries;
- }
+ public List<Entry> getEntries() {
+ return entries;
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java
index b2ad375..dac626a 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/LinkUtil.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
package org.eclipse.epp.wizard.internal;
import org.eclipse.rwt.graphics.Graphics;
@@ -6,13 +16,14 @@
import org.eclipse.swt.widgets.Control;
public class LinkUtil {
- static Cursor handCursor = Graphics.getCursor(SWT.CURSOR_HAND);
- public static void setHandCursor(Control control)
- {
- control.setCursor(handCursor);
- }
- public static void resetCursor(Control control)
- {
- control.setCursor(null);
- }
+
+ static Cursor handCursor = Graphics.getCursor( SWT.CURSOR_HAND );
+
+ public static void setHandCursor( Control control ) {
+ control.setCursor( handCursor );
+ }
+
+ public static void resetCursor( Control control ) {
+ control.setCursor( null );
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ModelCache.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ModelCache.java
new file mode 100644
index 0000000..09ca544
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ModelCache.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.internal;
+
+import java.io.File;
+import java.net.URL;
+
+import org.apache.log4j.Logger;
+import org.eclipse.epp.wizard.model.EPPModel;
+
+/**
+ * Cache for model data, so it does not have to be parsed for each session, but
+ * still is up to date.
+ *
+ * @author mwoelker
+ */
+public class ModelCache {
+
+ private static final String EPPMODEL_XML_FILENAME = "eppmodel.xml";
+ static Logger logger = Logger.getLogger( ModelCache.class );
+ private Object LOCK = new Object();
+ private Configuration configuration;
+ private EPPModel model;
+ private long UPDATE_CHECK_IN_SEC = 10;
+ private long UPDATE_INTERVAL_IN_SEC = 60 * 60; // hourly
+ private long ERROR_UPDATE_INTERVAL_IN_SEC = 1;
+ private long lastUpdate = 0;
+ /**
+ * This updater Thread runs in the background to keep model information
+ * up-to-date during the lifetime of the application Three intervals are used:
+ * UPDATE_CHECK_IN_SEC - used for checking the modification date on the
+ * eppmodel.xml file, model is reload if changed UPDATE_INTERVAL_IN_SEC -
+ * model is reloaded in this interval, regardless of modification timestamps,
+ * picks up changes in the upstream P2 Metadata repositories
+ * ERROR_UPDATE_INTERVAL_IN_SEC - This interval kicks in if the update fails,
+ * e.g. when the network is down
+ *
+ * @author mwoelker
+ */
+ protected class ModelUpdater implements Runnable {
+
+ public void run() {
+ File modelDirectory = configuration.getModelDirectory();
+ File modelXML = new File( modelDirectory, EPPMODEL_XML_FILENAME );
+ long lastModified = 0;
+ while( true ) {
+ try {
+ long newLastModified = modelXML.lastModified();
+ if( lastModified != newLastModified ) {
+ reload();
+ lastModified = newLastModified;
+ }
+ if( lastUpdate + ( UPDATE_INTERVAL_IN_SEC * 1000 ) < System.currentTimeMillis() )
+ {
+ reload();
+ }
+ sleep( UPDATE_CHECK_IN_SEC );
+ } catch( Throwable t ) {
+ logger.error( "Error updating model", t );
+ sleep( ERROR_UPDATE_INTERVAL_IN_SEC );
+ }
+ }
+ }
+
+ /**
+ * reloads the model and updates the internal member variable
+ *
+ * @throws Exception
+ */
+ private void reload() throws Exception {
+ EPPModel tempModel = loadModel();
+ synchronized( LOCK ) {
+ model = tempModel;
+ lastUpdate = System.currentTimeMillis();
+ }
+ logger.info( "Updated model" );
+ }
+
+ private void sleep( long timeInSec ) {
+ try {
+ Thread.sleep( timeInSec * 1000 );
+ } catch( InterruptedException e ) {
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+
+ public ModelCache( Configuration configuration ) {
+ super();
+ this.configuration = configuration;
+ Thread updateThread = new Thread( new ModelUpdater() );
+ updateThread.setName( "EPP Model updater" );
+ updateThread.setDaemon( true );
+ updateThread.start();
+ }
+
+ public EPPModel getModel() throws Exception {
+ long start = System.nanoTime();
+ synchronized( LOCK ) {
+ if( model == null ) {
+ model = loadModel();
+ }
+ long end = System.nanoTime();
+ if( logger.isDebugEnabled() ) {
+ logger.debug( "Cache time: " + ( end - start ) / 1000 );
+ }
+ return model;
+ }
+ }
+
+ protected EPPModel loadModel() throws Exception {
+ File modelDirectory = configuration.getModelDirectory();
+ File modelXML = new File( modelDirectory, EPPMODEL_XML_FILENAME );
+ EPPModel model = null;
+ model = EPPModel.read( modelXML.toURI().toURL(),
+ new URL( configuration.getEppMetadataRepository() ) );
+ return model;
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java
index 5c3f3e3..f918a85 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/OsUtil.java
@@ -10,33 +10,24 @@
******************************************************************************/
package org.eclipse.epp.wizard.internal;
-import java.util.HashMap;
-import java.util.Map;
-
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
public class OsUtil {
- private static final String[] PLATFORMS
- = new String[] { "win32", "linux",
- "macosx" };
- private static final Map<String, String> EXTS = new HashMap<String, String>();
-
- static {
- EXTS.put( "win32", "zip" );
- EXTS.put( "linux", "tar.gz" );
- EXTS.put("macosx", "tar.gz");
+ public static Platform getDefaultOs( String userAgent ) {
+ Platform result = Platform.WIN32;
+ for( Platform platform : Platform.values() ) {
+ String platformHeader = platform.getId().substring( 0, 3 );
+ if( userAgent.indexOf( platformHeader ) > -1
+ || userAgent.indexOf( platformHeader.toUpperCase() ) > -1
+ || userAgent.indexOf( platformHeader.substring( 0, 1 ).toUpperCase()
+ + platformHeader.substring( 1,
+ platformHeader.length() ) ) > -1 )
+ {
+ result = platform;
+ }
+ }
+ return result;
}
-
- public static String[] getPlatforms() {
- return PLATFORMS;
- }
-
- public static String getArchiveExtension( final String os ) {
- return EXTS.get( os );
- }
-
-
-
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataConstants.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataConstants.java
deleted file mode 100644
index 1785a15..0000000
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008
- * 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:
- * Henrik Lindberg
- ******************************************************************************/
-
-package org.eclipse.epp.wizard.internal;
-
-/**
- * @author Henrik Lindberg
- *
- */
-public interface P2MetadataConstants
-{
-
- static final String IU_METADATA_FORMAT = "InstallableUnit"; //$NON-NLS-1$
-
- static final String INSTALLABLE_ELEMENT = "installable"; //$NON-NLS-1$
-
- static final String INSTALLABLE_VERSION = "1.0.0"; //$NON-NLS-1$
-
- static final String IU_METADATA_FORMAT_VERSION = "1.0.0"; //$NON-NLS-1$
-
- static final String DEFAULT_IU_VERSION_STRING = "1.0.0"; //$NON-NLS-1$
-
- static final String DEFAULT_IU_LICENSE_TEMPLATE = "The code, documentation and other materials contained herein have been"
- + " licensed under the NAMEOFLICENSE - VERSION by the copyright holder(s)"
- + " listed in the Copyright section.";
-
- static final String DEFAULT_IU_COPYRIGHT_TEMPLATE = "Annotation to copyright URL, or the actual copyright text.";
-
-}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataReader.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataReader.java
deleted file mode 100644
index 228da5a..0000000
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/P2MetadataReader.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008
- * 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:
- * Henrik Lindberg
- ******************************************************************************/
-
-package org.eclipse.epp.wizard.internal;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
-import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
-import org.eclipse.equinox.internal.p2.metadata.repository.Activator;
-import org.eclipse.equinox.internal.p2.metadata.repository.Messages;
-import org.eclipse.equinox.internal.p2.metadata.repository.io.MetadataParser;
-import org.eclipse.equinox.internal.p2.persistence.XMLWriter;
-import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
-import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.InstallableUnitDescription;
-import org.eclipse.osgi.service.resolver.VersionRange;
-import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.Version;
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-/**
- * P2 Metadata Reader used to centralize reading of P2 metadata as API is likely to change.
- * The InstallableUnit reader reuses the MetadataRepository handler for InstallableUnit but in an
- * ugly way.
- *
- * TODO: The format, parser and writer should either be private, and use its own impl of
- * the IInstallableUnit interface for the sole purpose of editing, or the Metadata API should
- * allow creation of mutable instances.
- *
- * @author Henrik Lindberg
- */
-@SuppressWarnings("restriction")
-public class P2MetadataReader implements P2MetadataConstants
-{
-
- /**
- * Reads metadata from the given stream, and returns the contained array
- * of abstract metadata repositories.
- * This method performs buffering, and closes the stream when finished.
- */
- public static InstallableUnit readInstallableUnit(URL location, InputStream input, IProgressMonitor monitor) throws ProvisionException {
- BufferedInputStream bufferedInput = null;
- try {
- try {
- bufferedInput = new BufferedInputStream(input);
-
- Parser repositoryParser = new Parser(Activator.getContext(), Activator.ID);
- repositoryParser.parse(input, monitor);
- IStatus result = repositoryParser.getStatus();
- switch (result.getSeverity()) {
- case IStatus.CANCEL :
- throw new OperationCanceledException();
- case IStatus.ERROR :
- throw new ProvisionException(result);
- case IStatus.WARNING :
- case IStatus.INFO :
- LogHelper.log(result);
- }
- return repositoryParser.getInstallableUnit();
- }
- catch(Exception e)
- {
- e.printStackTrace(); // REMOVE ENTIRE CATCH
- return null;
- }
- finally {
- if (bufferedInput != null)
- bufferedInput.close();
- }
- } catch (IOException ioe) {
- String msg = NLS.bind(Messages.io_failedRead, location);
- throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_FAILED_READ, msg, ioe));
- }
- }
-
- private interface XMLConstants extends org.eclipse.equinox.internal.p2.metadata.repository.io.XMLConstants {
-
- // Constants defining the structure of the XML for a MetadataRepository
-
- // A format version number for metadata repository XML.
- public static final String XML_VERSION = "1.0.0"; //$NON-NLS-1$
- public static final Version CURRENT_VERSION = new Version(XML_VERSION);
- public static final VersionRange XML_TOLERANCE = new VersionRange(CURRENT_VERSION, true, new Version(2, 0, 0), false);
-
- // Constants for processing Instructions
- public static final String PI_IU_TARGET = "InstallableUnit"; //$NON-NLS-1$
-
- // Constants for metadata IU elements
- public static final String IU_ELEMENT = "installable"; //$NON-NLS-1$
-
- }
-
- @SuppressWarnings("unchecked")
- protected XMLWriter.ProcessingInstruction[] createPI(Class iuClass) {
- //TODO We should remove this processing instruction, but currently old clients rely on this. See bug 210450.
- return new XMLWriter.ProcessingInstruction[] {XMLWriter.ProcessingInstruction.makeClassVersionInstruction(XMLConstants.PI_IU_TARGET, iuClass, XMLConstants.CURRENT_VERSION)};
- }
-
-
- /*
- * Parser for the contents of a installable unit,
- * as written by the Writer class.
- */
- private static class Parser extends MetadataParser implements XMLConstants {
-
- private InstallableUnit theInstallableUnit = null;
-
- public Parser(BundleContext context, String bundleId) {
- super(context, bundleId);
- }
-
- public synchronized void parse(InputStream stream, IProgressMonitor monitor) throws IOException {
- this.status = null;
- setProgressMonitor(monitor);
- monitor.beginTask("Loading installable unit", IProgressMonitor.UNKNOWN);
- try {
- // TODO: currently not caching the parser since we make no assumptions
- // or restrictions on concurrent parsing
- getParser();
- IUHandler iuHandler = new IUHandler();
- xmlReader.setContentHandler(new IUDocHandler(IU_ELEMENT, iuHandler));
- xmlReader.parse(new InputSource(stream));
- if (isValidXML()) {
- theInstallableUnit = iuHandler.getInstallableUnit();
- }
- } catch (SAXException e) {
- throw new IOException(e.getMessage());
- } catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
- } finally {
- monitor.done();
- stream.close();
- }
- }
-
- public InstallableUnit getInstallableUnit() {
- return theInstallableUnit;
- }
-
- @Override
- protected Object getRootObject() {
- return getInstallableUnit();
- }
-
- private final class IUDocHandler extends DocHandler {
-
- public IUDocHandler(String rootName, RootHandler rootHandler) {
- super(rootName, rootHandler);
- }
-
- @Override
- public void processingInstruction(String target, String data) throws SAXException {
- if (PI_IU_TARGET.equals(target)) {
- Version repositoryVersion = extractPIVersion(target, data);
- if (!P2MetadataReader.XMLConstants.XML_TOLERANCE.isIncluded(repositoryVersion)) {
- throw new SAXException(NLS.bind(Messages.io_IncompatibleVersion, repositoryVersion, P2MetadataReader.XMLConstants.XML_TOLERANCE));
- }
- }
- }
-
- }
-
- private final class IUHandler extends RootHandler {
- private InstallableUnitHandler unitHandler = null;
- ArrayList<InstallableUnitDescription> units = null;
-
- private InstallableUnit installableUnit = null;
-
- public IUHandler() {
- super();
- }
-
- public InstallableUnit getInstallableUnit() {
- return this.installableUnit;
- }
-
- @Override
- protected void handleRootAttributes(Attributes attributes) {
- // root element *is* the Installable Unit - the default parser is from
- // the meta data repository parser, and it expects to parse a number of
- // units, returning InstallableUnitDescription instances in a List.
- }
-
- @Override
- public void startElement(String name, Attributes attributes) {
- checkCancel();
- if (name.equals(INSTALLABLE_UNIT_ELEMENT)) {
- this.units = new ArrayList<InstallableUnitDescription>(1);
- this.unitHandler = new InstallableUnitHandler(this, attributes, units);
- } else {
- invalidElement(name, attributes);
- }
- }
-
- @Override
- protected void finished() {
- if (isValidXML()) {
- // TODO: This is an Ugly cast because the unit handler returns an interface rather than the mutable instance.
- //
- this.installableUnit = (InstallableUnit) this.unitHandler.getInstallableUnit();
- }
- }
- }
-
- @Override
- protected String getErrorMessage() {
- return Messages.io_parseError;
- }
-
- @Override
- public String toString() {
- // TODO:
- return null;
- }
- }
-}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Platform.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Platform.java
new file mode 100644
index 0000000..dd1f6fd
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Platform.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.internal;
+
+/**
+ * enumeration of all supported platforms
+ *
+ * @author mwoelker
+ */
+public enum Platform {
+ WIN32("win32", "Windows", "zip"), LINUX("linux", "Linux", "tar.gz"), MACOSX(
+ "macosx", "Mac OS X", "tar.gz");
+
+ private final String id;
+ private final String label;
+ private final String extension;
+
+ private Platform( String id, String label, String extension ) {
+ this.id = id;
+ this.extension = extension;
+ this.label = label;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public String getExtension() {
+ return extension;
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StatsLogger.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StatsLogger.java
new file mode 100644
index 0000000..d357948
--- /dev/null
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StatsLogger.java
@@ -0,0 +1,107 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Innoopract Informationssysteme GmbH.
+ * 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:
+ * Innoopract Informationssysteme GmbH - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.epp.wizard.internal;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Class for logging statistics about outgoing clicks Logged items: * current
+ * timestamp * user agent * selected IU roots * destination URL
+ *
+ * @author mwoelker
+ */
+public class StatsLogger implements Runnable {
+
+ private static final String TABLE_HEADER = "'Timestamp rootIUs destination user-agent";
+ static Logger logger = Logger.getLogger( StatsLogger.class );
+ /**
+ * Class encapsulating data for one outgoing click
+ *
+ * @author mwoelker
+ */
+ public static class Statistic {
+
+ private static final String ISO8601_DATEFORMAT = "yyyy-MM-dd'T'HH:mm:ss\t";
+ static DateFormat dateFormat = new SimpleDateFormat( ISO8601_DATEFORMAT );
+ Date timestamp = new Date();
+ String userAgent;
+ String roots;
+ String destination;
+
+ public Statistic( String destination, String userAgent, String roots ) {
+ super();
+ this.destination = destination;
+ this.userAgent = userAgent;
+ this.roots = roots;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append( dateFormat.format( timestamp ) );
+ builder.append( roots );
+ builder.append( "\t" );
+ builder.append( destination );
+ builder.append( "\t" );
+ builder.append( userAgent );
+ builder.append( "\t" );
+ return builder.toString();
+ }
+ }
+ // Blocking queue for asynchronous producer/consumer processing
+ protected BlockingQueue<Statistic> queue = new LinkedBlockingQueue<Statistic>();
+ protected Thread thread;
+ private PrintWriter writer;
+
+ public StatsLogger( File file ) {
+ try {
+ writer = new PrintWriter( new BufferedWriter( new FileWriter( file, true ) ) );
+ writer.println( TABLE_HEADER );
+ thread = new Thread( this );
+ thread.setName( "Download Statistics Logger" );
+ thread.setDaemon( true );
+ thread.start();
+ } catch( Throwable t ) {
+ logger.error( "Could not initialize StatsLogger", t );
+ }
+ }
+
+ public void log( Statistic statistic ) {
+ queue.add( statistic );
+ }
+
+ public void run() {
+ try {
+ while( true ) {
+ Statistic statistic;
+ statistic = queue.take();
+ internalLog( statistic );
+ }
+ } catch( InterruptedException e ) {
+ Thread.currentThread().interrupt();
+ }
+ }
+
+ private void internalLog( Statistic statistic ) {
+ writer.println( statistic );
+ writer.flush();
+ }
+}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java
index eb0af7f..a8abf57 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/StringUtil.java
@@ -10,14 +10,13 @@
******************************************************************************/
package org.eclipse.epp.wizard.internal;
-
-
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
public class StringUtil {
- public static String toCommaList( final String[] items, final boolean space ) {
+ public static String toCommaList( final String[] items, final boolean space )
+ {
StringBuilder result = new StringBuilder();
for( int i = 0; i < items.length; i++ ) {
if( i > 0 ) {
@@ -30,5 +29,4 @@
}
return result.toString();
}
-
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java
index e268828..214a91f 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/Wishlist.java
@@ -38,6 +38,15 @@
private List<IWishlistListener> listeners = new ArrayList<IWishlistListener>();
private EPPModel model = null;
private HashMap<String, IURef> iuRefMap;
+ private Platform platform;
+
+ public Platform getPlatform() {
+ return platform;
+ }
+
+ public void setPlatform( Platform platform ) {
+ this.platform = platform;
+ }
Wishlist() {
// prevent instantiation
@@ -63,35 +72,38 @@
}
public void add( final Group group ) {
- groups.add( group );
- for (IURef iuRef : group.getIURefs()) {
- iuRefs.remove(iuRef);
+ // groups.add(group);
+ for( IURef iuRef : group.getIURefs() ) {
+ add( iuRef );
}
fireChange();
}
public void remove( final Group group ) {
- groups.remove( group );
+ // groups.remove(group);
for( IURef iuRef : group.getIURefs() ) {
- iuRefs.remove( iuRef );
+ remove( iuRef );
}
fireChange();
}
- public void add( final IURef iuRef ) {
- if( !groups.contains( iuRef.getParent() ) ) {
- iuRefs.add( iuRef );
- List<IURef> includedSiblings = includedIURefsInGroup( iuRef.getParent() );
- IURef[] siblingIURefs = iuRef.getParent().getIURefs();
- if( includedSiblings.size() == siblingIURefs.length ) {
- // all included
- groups.add( iuRef.getParent() );
- for( IURef siblingIURef : siblingIURefs ) {
- iuRefs.remove( siblingIURef );
+ public void add( final IURef toAdd ) {
+ List<IURef> list = model.getAllRefs( toAdd );
+ for( IURef iuRef : list ) {
+ if( !groups.contains( iuRef.getParent() ) ) {
+ iuRefs.add( iuRef );
+ List<IURef> includedSiblings = includedIURefsInGroup( iuRef.getParent() );
+ IURef[] siblingIURefs = iuRef.getParent().getIURefs();
+ if( includedSiblings.size() == siblingIURefs.length ) {
+ // all included
+ groups.add( iuRef.getParent() );
+ for( IURef siblingIURef : siblingIURefs ) {
+ iuRefs.remove( siblingIURef );
+ }
}
}
- fireChange();
}
+ fireChange();
}
private List<IURef> includedIURefsInGroup( Group group ) {
@@ -104,16 +116,17 @@
return result;
}
- public void remove( final IURef iuRef ) {
- if( groups.contains( iuRef.getParent() ) ) {
- groups.remove( iuRef.getParent() );
- for( IURef siblingIURef : iuRef.getParent()
- .getIURefs() )
- {
- iuRefs.add( siblingIURef );
+ public void remove( final IURef toRemove ) {
+ List<IURef> list = model.getAllRefs( toRemove );
+ for( IURef iuRef : list ) {
+ if( groups.contains( iuRef.getParent() ) ) {
+ groups.remove( iuRef.getParent() );
+ for( IURef siblingIURef : iuRef.getParent().getIURefs() ) {
+ iuRefs.add( siblingIURef );
+ }
}
+ iuRefs.remove( iuRef );
}
- iuRefs.remove( iuRef );
fireChange();
}
@@ -157,20 +170,19 @@
}
return result.toArray( new String[ result.size() ] );
}
-
+
public String getSelectedIuIds() {
ArrayList<String> iuIds = new ArrayList<String>();
- for(Group group: groups)
- {
- for(IURef iuRef: group.getIURefs()){
- iuIds.add(iuRef.getRefId());
+ for( Group group : groups ) {
+ for( IURef iuRef : group.getIURefs() ) {
+ iuIds.add( iuRef.getRefId() );
}
-
}
- for(IURef iuRef: iuRefs){
- iuIds.add(iuRef.getRefId());
+ for( IURef iuRef : iuRefs ) {
+ iuIds.add( iuRef.getRefId() );
}
- return StringUtil.toCommaList( iuIds.toArray(new String[iuIds.size()]), false );
+ return StringUtil.toCommaList( iuIds.toArray( new String[ iuIds.size() ] ),
+ false );
}
// ////////////////
@@ -225,19 +237,19 @@
}
}
- public String[] addIURefs(String[] strings) {
+ public String[] addIURefs( String[] strings ) {
if( model == null ) {
throw new IllegalStateException( "EPP model is not set" );
}
List<String> unresolvedIURefs = new ArrayList<String>();
- for (String iuRefId : strings) {
- IURef iuRef = iuRefMap.get(iuRefId);
- if (iuRef != null) {
- add(iuRef);
+ for( String iuRefId : strings ) {
+ IURef iuRef = iuRefMap.get( iuRefId );
+ if( iuRef != null ) {
+ add( iuRef );
} else {
- unresolvedIURefs.add(iuRefId);
+ unresolvedIURefs.add( iuRefId );
}
}
- return unresolvedIURefs.toArray(new String[0]);
+ return unresolvedIURefs.toArray( new String[ 0 ] );
}
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java
index 9623a16..76c50ed 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Checkbox.java
@@ -11,7 +11,6 @@
package org.eclipse.epp.wizard.internal.ui;
import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
@@ -23,10 +22,10 @@
boolean selected = false;
boolean grayed = false;
-
+
public Checkbox( final Composite parent ) {
super( parent, SWT.NONE );
- LinkUtil.setHandCursor(this);
+ LinkUtil.setHandCursor( this );
updateImage();
}
@@ -42,12 +41,12 @@
public boolean isGrayed() {
return grayed;
}
-
+
public void setGrayed( boolean grayed ) {
this.grayed = grayed;
updateImage();
}
-
+
public void pressed() {
if( isGrayed() ) {
setGrayed( false );
@@ -60,8 +59,7 @@
}
// helping methods
- //////////////////
-
+ // ////////////////
private void updateImage() {
if( isGrayed() ) {
setImage( Images.CHECKBOX_GRAYED.get() );
@@ -71,5 +69,4 @@
setImage( Images.CHECKBOX_UNCHECKED.get() );
}
}
-
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java
index c4be2ad..5c7207c 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Colors.java
@@ -15,10 +15,8 @@
import org.eclipse.swt.graphics.RGB;
public enum Colors {
- WHITE(255,255,255),
- ECLIPSE_BLUE(51,51,102),
- ECLIPSE_VIOLET(102,51,102),
- SASH(180,180,180),;
+ WHITE(255, 255, 255), ECLIPSE_BLUE(51, 51, 102), ECLIPSE_VIOLET(102, 51, 102), SASH(
+ 180, 180, 180), ;
private final RGB rgb;
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java
index f03d4f9..2e9e627 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Fonts.java
@@ -15,29 +15,20 @@
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
-
public enum Fonts {
- TEXT("sans-serif", 14, SWT.NONE),
- TITLE("sans-serif", 18, SWT.BOLD),
- H2("sans-serif", 15, SWT.BOLD),
- DESCRIPTION("sans-serif", 14, SWT.NONE),
- GROUP("Georgia,Times,serif", 18, SWT.NONE),
- FEATURE("sans-serif", 14, SWT.NONE),
- BUTTON("sans-serif", 14, SWT.BOLD),
- WISHLIST_ITEM("sans-serif", 16, SWT.NONE),
- BETA("sans-serif", 28,
- SWT.ITALIC),
- ;
-
+ TEXT("sans-serif", 14, SWT.NONE), TITLE("sans-serif", 18, SWT.BOLD), HEADER(
+ "sans-serif", 24, SWT.BOLD), H2("sans-serif", 15, SWT.BOLD), DESCRIPTION(
+ "sans-serif", 14, SWT.NONE), GROUP("Georgia,Times,serif", 18, SWT.NONE), FEATURE(
+ "sans-serif", 14, SWT.NONE), BUTTON("sans-serif", 14, SWT.BOLD), WISHLIST_ITEM(
+ "sans-serif", 16, SWT.NONE), BETA("sans-serif", 28, SWT.ITALIC), ;
+
private final FontData fontData;
- private Fonts(String name, int height, int style )
- {
- fontData = new FontData(name, height, style);
+
+ private Fonts( String name, int height, int style ) {
+ fontData = new FontData( name, height, style );
}
-
- public Font get()
- {
+
+ public Font get() {
return Graphics.getFont( fontData );
}
-
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java
index c3e9b41..6f26e9d 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/GroupSelection.java
@@ -20,7 +20,6 @@
import org.eclipse.epp.wizard.model.Group;
import org.eclipse.epp.wizard.model.IURef;
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
@@ -123,8 +122,10 @@
groupIconLayout.marginHeight = 1;
groupIconLayout.marginWidth = 1;
groupIcon.setLayout( groupIconLayout );
- File modelDirectory = Activator.getDefault().getConfiguration().getModelDirectory();
- File file = new File( modelDirectory,group.getIcon() );
+ File modelDirectory = Activator.getDefault()
+ .getConfiguration()
+ .getModelDirectory();
+ File file = new File( modelDirectory, group.getIcon() );
Image image = Images.load( file );
if( image == null ) {
image = Images.ICON_GROUP_FALLBACK.get();
@@ -168,7 +169,7 @@
expBtnGD.verticalSpan = 3;
expandButton.setLayoutData( expBtnGD );
expandButton.setImage( Images.ICON_COLLAPSED.get() );
- LinkUtil.setHandCursor(expandButton);
+ LinkUtil.setHandCursor( expandButton );
expandButton.addMouseListener( new MouseAdapter() {
@Override
@@ -186,24 +187,26 @@
true,
true ) );
expandableComposite.setLayout( new GridLayout( 1, false ) );
- IURef[] featureRefs = group.getIURefs();
- for( int j = 0; j < featureRefs.length; j++ ) {
- final IURef featureRef = featureRefs[ j ];
+ IURef[] iuRefs = group.getIURefs();
+ for( int j = 0; j < iuRefs.length; j++ ) {
+ final IURef iuRef = iuRefs[ j ];
final Button featureCheckBox = new Button( expandableComposite, SWT.CHECK );
featureCheckBox.setLayoutData( new GridData() );
- featureCheckBox.setText( featureRef.getIU().getProperty(IInstallableUnit.PROP_NAME) );
+ featureCheckBox.setText( iuRef.getIU()
+ .getProperty( IInstallableUnit.PROP_NAME ) );
featureCheckBox.setFont( Fonts.FEATURE.get() );
- LinkUtil.setHandCursor(featureCheckBox);
- featureCheckBox.setToolTipText(featureRef.getIU().getProperty(IInstallableUnit.PROP_DESCRIPTION));
+ LinkUtil.setHandCursor( featureCheckBox );
+ featureCheckBox.setToolTipText( iuRef.getIU()
+ .getProperty( IInstallableUnit.PROP_DESCRIPTION ) );
featureCheckBox.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent e ) {
boolean isSelected = featureCheckBox.getSelection();
if( isSelected ) {
- Wishlist.getDefault().add( featureRef );
+ Wishlist.getDefault().add( iuRef );
} else {
- Wishlist.getDefault().remove( featureRef );
+ Wishlist.getDefault().remove( iuRef );
}
}
} );
@@ -211,7 +214,7 @@
public void wishlistChanged() {
Wishlist wishlist = Wishlist.getDefault();
- Inclusion inclusion = wishlist.isIncluded( featureRef );
+ Inclusion inclusion = wishlist.isIncluded( iuRef );
featureCheckBox.setSelection( inclusion == Inclusion.FULL );
}
} );
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java
index 8b7ba33..7bb6e54 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/IWizardScreen.java
@@ -16,7 +16,10 @@
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
public interface IWizardScreen {
+
public String getLabel();
public Control getControl();
+
+ public void update();
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java
index 5736713..4cbd8da 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Images.java
@@ -13,62 +13,60 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.IOException;
-import org.eclipse.epp.wizard.internal.Activator;
-import org.eclipse.jface.resource.ImageDescriptor;
+import org.apache.log4j.Logger;
import org.eclipse.rwt.graphics.Graphics;
import org.eclipse.swt.graphics.Image;
-
public enum Images {
- DOWNLOAD("download.png"),
- WEBSTART("webstart.png"),
- ITEM_GROUP("group16.png"),
- ITEM_FEATURE("feature16.png"),
- ICON_COLLAPSED("expand0.png"),
- ICON_EXPANDED("expand1.png"),
- ICON_GROUP("group48.png"),
- ICON_GROUP_FALLBACK("group_fallback.png"),
- CHECKBOX_CHECKED("cb_selected.png"),
- CHECKBOX_UNCHECKED("cb_notselected.png"),
- CHECKBOX_GRAYED("cb_grayed.png"),
- MAP_CONNECTION("map_connection.png"),
- MAP_LEFT("map_left.png"),
- MAP_RIGHT("map_right.png"),
- MAP_CENTER("map_center.png"),
- MAP_LEFT_FOCUS("map_left-focus.png"),
- MAP_RIGHT_FOCUS("map_right-focus.png"),
- MAP_CENTER_FOCUS("map_center-focus.png"),
- MAP_NEXT("map_next.png"),
- MAP_PREV("map_prev.png"),
- MAP_NEXT_OFF("map_next_off.png"),
- MAP_PREV_OFF("map_prev_off.png"),
- MAP_SPACING("map_spacing.png"),
- MY_SELECTION("my_selection.png"),
- ;
-
+ DOWNLOAD("download.png"), WEBSTART("webstart.png"), ITEM_GROUP("group16.png"), ITEM_FEATURE(
+ "feature16.png"), ICON_COLLAPSED("expand0.png"), ICON_EXPANDED(
+ "expand1.png"), ICON_GROUP("group48.png"), ICON_GROUP_FALLBACK(
+ "group_fallback.png"), CHECKBOX_CHECKED("cb_selected.png"), CHECKBOX_UNCHECKED(
+ "cb_notselected.png"), CHECKBOX_GRAYED("cb_grayed.png"), MAP_CONNECTION(
+ "map_connection.png"), MAP_LEFT("map_left.png"), MAP_RIGHT(
+ "map_right.png"), MAP_CENTER("map_center.png"), MAP_LEFT_FOCUS(
+ "map_left-focus.png"), MAP_RIGHT_FOCUS("map_right-focus.png"), MAP_CENTER_FOCUS(
+ "map_center-focus.png"), MAP_NEXT("map_next.png"), MAP_PREV(
+ "map_prev.png"), MAP_NEXT_OFF("map_next_off.png"), MAP_PREV_OFF(
+ "map_prev_off.png"), MAP_SPACING("map_spacing.png"), MY_SELECTION(
+ "my_selection.png"), HEADER_LOGO("eclipse_home_header.jpg"), HEADER_BACKGROUND(
+ "header_bg.jpg"), ;
+
+ static Logger logger = Logger.getLogger( Images.class );
private final String location;
private final static String imageFolder = "icons/";
private Images( String location ) {
- this.location = imageFolder+location;
+ this.location = imageFolder + location;
}
-
- public Image get()
- {
- ImageDescriptor imgDescr
- = Activator.imageDescriptorFromPlugin( Activator.PLUGIN_ID, location );
- return imgDescr.createImage();
+
+ public Image get() {
+ /*
+ * ImageDescriptor imgDescr = Activator.imageDescriptorFromPlugin(
+ * Activator.PLUGIN_ID, location ); return imgDescr.createImage();
+ */
+ return Graphics.getImage( location, getClass().getClassLoader() );
}
-
- public static Image load(File file)
- {
+
+ public static Image load( File file ) {
Image image = null;
+ FileInputStream inputStream = null;
try {
- image = Graphics.getImage( file.getName(), new FileInputStream(file));
+ inputStream = new FileInputStream( file );
+ image = Graphics.getImage( file.getName(), inputStream );
} catch( FileNotFoundException exc ) {
- System.err.println("Image file '"+file.getAbsolutePath()+ "' not found.");
- }
+ logger.warn( "Image file '" + file.getAbsolutePath() + "' not found." );
+ } finally {
+ if( inputStream != null ) {
+ try {
+ inputStream.close();
+ } catch( IOException e ) {
+ logger.warn( "Could not close file '" + file.getAbsolutePath(), e );
+ }
+ }
+ }
return image;
}
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java
index 41b4ba7..25f2da3 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Roadmap.java
@@ -15,7 +15,6 @@
import java.util.Map;
import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.MouseAdapter;
@@ -30,15 +29,14 @@
*/
public class Roadmap extends Composite {
- public interface IRoadmapListener
- {
- void screenActivated( final IWizardScreen activeScreen );
+ public interface IRoadmapListener {
+
+ void screenActivated( final IWizardScreen activeScreen );
}
private final IWizardScreen[] screens;
private final StackLayout stackLayout;
private IWizardScreen activeScreen;
- Map<IWizardScreen, RoadmapItem> items
- = new HashMap<IWizardScreen, RoadmapItem>();
+ Map<IWizardScreen, RoadmapItem> items = new HashMap<IWizardScreen, RoadmapItem>();
protected HashSet<IRoadmapListener> listeners = new HashSet<IRoadmapListener>();
private Label navPrev;
private Label navNext;
@@ -53,15 +51,14 @@
createContents();
}
- public void addListener(final IRoadmapListener listener)
- {
+ public void addListener( final IRoadmapListener listener ) {
listeners.add( listener );
}
-
- public void removeListener(final IRoadmapListener listener)
- {
+
+ public void removeListener( final IRoadmapListener listener ) {
listeners.remove( listener );
}
+
private void createContents() {
setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
RowLayout layout = new RowLayout();
@@ -82,10 +79,10 @@
private void createNavNext() {
new Label( this, SWT.NONE ).setImage( Images.MAP_SPACING.get() );
navNext = new Label( this, SWT.NONE );
- LinkUtil.setHandCursor(navNext);
+ LinkUtil.setHandCursor( navNext );
navNext.setImage( Images.MAP_NEXT.get() );
-
MouseAdapter mouseListener = new MouseAdapter() {
+
@Override
public void mouseDown( final MouseEvent e ) {
IWizardScreen nextScreen = getNextScreen();
@@ -100,10 +97,10 @@
private void createNavPrev() {
navPrev = new Label( this, SWT.NONE );
navPrev.setImage( Images.MAP_PREV_OFF.get() );
- LinkUtil.setHandCursor(navPrev);
+ LinkUtil.setHandCursor( navPrev );
new Label( this, SWT.NONE ).setImage( Images.MAP_SPACING.get() );
-
MouseAdapter mouseListener = new MouseAdapter() {
+
@Override
public void mouseDown( final MouseEvent e ) {
IWizardScreen prevScreen = getPrevScreen();
@@ -122,34 +119,33 @@
for( IWizardScreen screen : this.screens ) {
boolean isActive = ( screen.equals( activeScreen ) );
items.get( screen ).setActive( isActive );
- if( isActive) {
+ if( isActive ) {
updateNav();
}
}
- for(IRoadmapListener listener: listeners)
- {
+ for( IRoadmapListener listener : listeners ) {
listener.screenActivated( activeScreen );
}
-
+ activeScreen.update();
}
private void updateNav() {
if( getPrevScreen() == null ) {
navPrev.setImage( Images.MAP_PREV_OFF.get() );
- LinkUtil.resetCursor(navPrev);
+ LinkUtil.resetCursor( navPrev );
} else {
navPrev.setImage( Images.MAP_PREV.get() );
- LinkUtil.setHandCursor(navPrev);
+ LinkUtil.setHandCursor( navPrev );
}
if( getNextScreen() != null ) {
navNext.setImage( Images.MAP_NEXT.get() );
- LinkUtil.setHandCursor(navNext);
+ LinkUtil.setHandCursor( navNext );
} else {
navNext.setImage( Images.MAP_NEXT_OFF.get() );
- LinkUtil.resetCursor(navNext);
+ LinkUtil.resetCursor( navNext );
}
}
-
+
private IWizardScreen getNextScreen() {
IWizardScreen result = null;
for( int i = 0; result == null && i < screens.length; i++ ) {
@@ -179,11 +175,11 @@
}
return result;
}
-
+
private boolean hasNext( final int i, final Object[] array ) {
return i + 1 < array.length;
}
-
+
private IWizardScreen getActiveScreen() {
return activeScreen;
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java
index 7171ff7..a5f3b06 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/RoadmapItem.java
@@ -11,7 +11,6 @@
package org.eclipse.epp.wizard.internal.ui;
import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.rwt.lifecycle.WidgetUtil;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
@@ -21,7 +20,6 @@
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
-
public class RoadmapItem {
private boolean active;
@@ -59,7 +57,7 @@
label.setLayoutData( new GridData( SWT.CENTER, SWT.CENTER, true, true ) );
label.setText( screen.getLabel() );
label.setForeground( Colors.WHITE.get() );
- label.setFont(Fonts.BUTTON.get());
+ label.setFont( Fonts.BUTTON.get() );
right = new Label( roadmap, SWT.NONE );
right.setImage( Images.MAP_RIGHT.get() );
right.setToolTipText( screen.getLabel() );
@@ -70,11 +68,11 @@
} else {
nextConnection.setImage( Images.MAP_SPACING.get() );
}
- LinkUtil.setHandCursor(left);
- LinkUtil.setHandCursor(right);
- LinkUtil.setHandCursor(label);
-
+ LinkUtil.setHandCursor( left );
+ LinkUtil.setHandCursor( right );
+ LinkUtil.setHandCursor( label );
MouseAdapter mouseListener = new MouseAdapter() {
+
@Override
public void mouseDown( final MouseEvent e ) {
roadmap.setActiveScreen( screen );
@@ -85,15 +83,14 @@
right.addMouseListener( mouseListener );
label.addMouseListener( mouseListener );
}
-
+
public void setActive( final boolean active ) {
this.active = active;
updateImages();
}
-
- // helping methods
- //////////////////
+ // helping methods
+ // ////////////////
private void updateImages() {
if( active ) {
prevConnection.setVisible( false );
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java
index 1f32aa9..933bc1e 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WishlistComposite.java
@@ -48,17 +48,16 @@
titleLabel.setText( "My Selection" );
titleLabel.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
titleLabel.setFont( Fonts.TITLE.get() );
- titleLabel.setForeground( Colors.ECLIPSE_BLUE.get() );
- Label labelSeparator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL);
+ titleLabel.setForeground( Colors.ECLIPSE_BLUE.get() );
+ Label labelSeparator = new Label( this, SWT.SEPARATOR | SWT.HORIZONTAL );
GridData gridData = new GridData( GridData.FILL_HORIZONTAL );
gridData.horizontalSpan = 2;
labelSeparator.setLayoutData( gridData );
-
scrolledComposite = new ScrolledComposite( this, SWT.H_SCROLL
| SWT.V_SCROLL );
GridData gridDataScrolled = new GridData( GridData.FILL_BOTH );
gridDataScrolled.horizontalSpan = 2;
- scrolledComposite.setLayoutData( gridDataScrolled) ;
+ scrolledComposite.setLayoutData( gridDataScrolled );
listComposite = new Composite( scrolledComposite, SWT.NONE );
listComposite.setLayout( new GridLayout( 2, false ) );
// listComposite.setSize( 400, 400 );
@@ -104,7 +103,6 @@
label.setText( string );
label.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
label.setFont( Fonts.WISHLIST_ITEM.get() );
-
return label;
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java
index 3e2c115..fc3d0c3 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/Wizard.java
@@ -10,24 +10,26 @@
******************************************************************************/
package org.eclipse.epp.wizard.internal.ui;
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import org.apache.log4j.Logger;
import org.eclipse.epp.wizard.internal.Activator;
import org.eclipse.epp.wizard.internal.Configuration;
import org.eclipse.epp.wizard.internal.ExternalServiceProviderConfiguration;
+import org.eclipse.epp.wizard.internal.OsUtil;
+import org.eclipse.epp.wizard.internal.Platform;
import org.eclipse.epp.wizard.internal.Wishlist;
import org.eclipse.epp.wizard.internal.ui.Roadmap.IRoadmapListener;
import org.eclipse.epp.wizard.model.EPPModel;
import org.eclipse.epp.wizard.model.Screen;
import org.eclipse.epp.wizard.model.Structure;
import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.rwt.RWT;
import org.eclipse.rwt.lifecycle.IEntryPoint;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.ControlAdapter;
@@ -39,13 +41,13 @@
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
-import org.jdom.JDOMException;
/**
* @author Jordi Boehme Lopez <jboehme@innoopract.com>
*/
public class Wizard implements IEntryPoint, IRoadmapListener {
+ static Logger logger = Logger.getLogger( Wizard.class );
private List<IWizardScreen> screens = new ArrayList<IWizardScreen>();
private StackLayout stackLayout = new StackLayout();
@SuppressWarnings("unused")
@@ -61,33 +63,42 @@
public int createUI() {
try {
- loadModel();
+ if( logger.isDebugEnabled() ) {
+ logger.debug( "Creating new session" );
+ }
+ loadModel();
+ Wishlist wishlist = Wishlist.getDefault();
+ wishlist.setModel( model );
+ String userAgent = RWT.getRequest().getHeader( "user-agent" );
+ // RWT.getRequest().getSession().getServletContext().getIni
+ Platform defaultOs = OsUtil.getDefaultOs( userAgent );
+ wishlist.setPlatform( defaultOs );
+ setInputFeatureIds( wishlist );
Display display = new Display();
final Shell shell = new Shell( display, SWT.NO_TRIM );
shell.setMaximized( true );
shell.setText( "EPP Download Wizard" );
- shell.setLayout( new FillLayout() );
+ FillLayout layout = new FillLayout();
+ layout.marginHeight = -5;
+ layout.marginWidth = -5;
+ shell.setLayout( layout );
Composite parent = new Composite( shell, SWT.NONE );
- parent.setLayout(new GridLayout());
-
-
+ parent.setLayout( new GridLayout() );
+ createHeader( parent );
SashForm sashForm = new SashForm( parent, SWT.HORIZONTAL );
sashForm.setBackground( Colors.SASH.get() );
- sashForm.setLayoutData( new GridData( GridData.FILL_BOTH ) );
+ GridData layoutData = new GridData( GridData.FILL_BOTH );
+ sashForm.setLayoutData( layoutData );
+ layoutData.horizontalIndent = 20;
+ layoutData.verticalIndent = 20;
Composite screenArea = createScreenArea( sashForm );
-
-
- Wishlist wishlist = Wishlist.getDefault();
- wishlist.setModel( model );
- wishlistComposite = new WishlistComposite( sashForm,
- wishlist);
+ wishlistComposite = new WishlistComposite( sashForm, wishlist );
sashForm.setWeights( new int[]{
2, 1
} );
- ExternalServiceProviderConfiguration externalServiceProviderConfiguration = Activator.getDefault().getConfiguration().getExternalServiceProviderConfiguration();
-
-
-
+ ExternalServiceProviderConfiguration externalServiceProviderConfiguration = Activator.getDefault()
+ .getConfiguration()
+ .getExternalServiceProviderConfiguration();
if( model != null ) {
Structure structure = model.getStructure();
Screen[] structScreens = structure.getScreens();
@@ -97,16 +108,15 @@
screenArea );
addWizardScreen( wizardScreen );
}
- downloadScreen = new WizardDownloadScreen(
- screenArea, externalServiceProviderConfiguration);
- addWizardScreen(downloadScreen);
+ downloadScreen = new WizardDownloadScreen( screenArea,
+ externalServiceProviderConfiguration );
+ addWizardScreen( downloadScreen );
screenArea.layout();
Roadmap roadmap = createRoadmap( parent );
roadmap.addListener( this );
roadmap.setActiveScreen( this.screens.get( 0 ) );
}
setInputFeatureIds( wishlist );
-
shell.layout();
shell.addControlListener( new ControlAdapter() {
@@ -122,34 +132,49 @@
}
return 0;
} catch( Exception exc ) {
- exc.printStackTrace();
+ logger.error( "Error in createUI", exc );
return 0;
}
}
- private void loadModel() {
- Configuration configuration = Activator.getDefault().getConfiguration();
- File modelDirectory = configuration.getModelDirectory();
- File modelXML = new File(modelDirectory, "eppmodel.xml");
- model = null;
- try {
- model = EPPModel.read(modelXML.toURI().toURL(), new URL(
- configuration.getEppMetadataRepository()));
- } catch( IOException exc ) {
- // Activator.log( exc );
- } catch( JDOMException exc ) {
- // Activator.log( exc );
- }
+ private void createHeader( Composite parent ) {
+ Composite header = new Composite( parent, SWT.NONE );
+ GridDataFactory.fillDefaults().grab( true, false ).applyTo( header );
+ GridLayoutFactory.fillDefaults().numColumns( 4 ).applyTo( header );
+ Label headerLabel = new Label( header, SWT.NONE );
+ headerLabel.setImage( Images.HEADER_LOGO.get() );
+ Label titleLabel = new Label( header, SWT.NONE );
+ header.setBackgroundMode( SWT.INHERIT_DEFAULT );
+ GridDataFactory.swtDefaults().indent( 30, 0 ).applyTo( titleLabel );
+ titleLabel.setText( "Eclipse Dynamic Download" );
+ titleLabel.setFont( Fonts.HEADER.get() );
+ titleLabel.setForeground( Colors.WHITE.get() );
+ header.setBackgroundImage( Images.HEADER_BACKGROUND.get() );
+ Label betaLabel = new Label( header, SWT.None );
+ betaLabel.setText( "beta" );
+ betaLabel.setFont( Fonts.BETA.get() );
+ betaLabel.setForeground( Colors.WHITE.get() );
+ GridDataFactory.fillDefaults()
+ .align( SWT.RIGHT, SWT.CENTER )
+ .grab( true, false )
+ .applyTo( betaLabel );
+ Label dummyLabel = new Label( header, SWT.None );
+ GridDataFactory.fillDefaults()
+ .align( SWT.RIGHT, SWT.CENTER )
+ .hint( 10, SWT.DEFAULT )
+ .applyTo( dummyLabel );
+ }
+
+ private void loadModel() throws Exception {
+ model = Activator.getDefault().getModel();
}
private void setInputFeatureIds( Wishlist wishlist ) {
- String featureIdString = RWT.getRequest().getParameter(
- Configuration.P2_ROOTS);
- if(featureIdString != null)
- {
+ String featureIdString = RWT.getRequest()
+ .getParameter( Configuration.P2_ROOTS );
+ if( featureIdString != null ) {
String[] featureIds = featureIdString.split( "," );
- wishlist.addIURefs(featureIds);
-
+ wishlist.addIURefs( featureIds );
}
}
@@ -159,14 +184,16 @@
private Composite createScreenArea( final Composite parent ) {
Composite leftSide = new Composite( parent, SWT.NONE );
leftSide.setLayout( new GridLayout() );
- screenTitle = new Label(leftSide, SWT.NONE);
+ screenTitle = new Label( leftSide, SWT.NONE );
screenTitle.setText( "Title" );
screenTitle.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
screenTitle.setFont( Fonts.TITLE.get() );
- screenTitle.setForeground( Colors.ECLIPSE_BLUE.get() );
- Label labelSeparator = new Label(leftSide, SWT.None /*SWT.SEPARATOR | SWT.HORIZONTAL*/);
+ screenTitle.setForeground( Colors.ECLIPSE_BLUE.get() );
+ Label labelSeparator = new Label( leftSide, SWT.None /*
+ * SWT.SEPARATOR |
+ * SWT.HORIZONTAL
+ */);
labelSeparator.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
-
Composite result = new Composite( leftSide, SWT.NONE );
result.setLayoutData( new GridData( GridData.FILL_BOTH ) );
result.setLayout( this.stackLayout );
@@ -175,21 +202,49 @@
private Roadmap createRoadmap( final Composite parent ) {
IWizardScreen[] screensArray = screens.toArray( new IWizardScreen[ screens.size() ] );
-
- Composite bottom = new Composite(parent, SWT.None);
- GridDataFactory.fillDefaults().grab(true, false).applyTo(bottom);
- GridLayout layout = new GridLayout(2, false);
+ Composite bottom = new Composite( parent, SWT.None );
+ GridDataFactory.fillDefaults().grab( true, false ).applyTo( bottom );
+ GridLayout layout = new GridLayout( 2, false );
layout.marginRight = 10;
- bottom.setLayout(layout);
+ bottom.setLayout( layout );
Roadmap roadmap = new Roadmap( bottom, screensArray, stackLayout );
- GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER,
- SWT.CENTER).applyTo(roadmap);
- Label betaLabel = new Label(bottom, SWT.None);
- betaLabel.setText("beta");
- betaLabel.setFont(Fonts.BETA.get());
- betaLabel.setForeground(Colors.SASH.get());
- GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(
- betaLabel);
+ GridDataFactory.fillDefaults()
+ .grab( true, false )
+ .align( SWT.CENTER, SWT.CENTER )
+ .span( 2, 1 )
+ .applyTo( roadmap );
+ Composite touBox = new Composite( bottom, SWT.None );
+ touBox.setLayout( new GridLayout() );
+ GridDataFactory.fillDefaults()
+ .align( SWT.LEFT, SWT.CENTER )
+ .applyTo( touBox );
+ Browser touBrowser = new Browser( touBox, SWT.None );
+ touBrowser.setText( "<body style='background-color:#f8f8ff;'><div style='font-family:sans-serif;font-size:10pt;text-align:left;'><a href='"
+ + Activator.getDefault()
+ .getConfiguration()
+ .getPrivacyURL()
+ + "' target='_blank'>Privacy Policy</a> | <a href='"
+ + Activator.getDefault()
+ .getConfiguration()
+ .getTermsOfUseURL()
+ + "' target='_blank'>Terms of Use</a></div></body>" );
+ GridDataFactory.fillDefaults()
+ .align( SWT.LEFT, SWT.CENTER )
+ .grab( true, false )
+ .hint( 250, 25 )
+ .applyTo( touBrowser );
+ Composite infoBox = new Composite( bottom, SWT.None );
+ infoBox.setLayout( new GridLayout() );
+ GridDataFactory.fillDefaults()
+ .align( SWT.RIGHT, SWT.CENTER )
+ .applyTo( infoBox );
+ Browser browser = new Browser( infoBox, SWT.None );
+ browser.setText( "<body style='background-color:#f8f8ff;'><div style='font-family:sans-serif;font-size:10pt;text-align:right;'>powered by <a href='http://www.eclipse.org/rap/' target='_blank'>Eclipse RAP</a> and <a href='http://wiki.eclipse.org/Equinox_p2' target='_blank'>Equinox P2</a></div></body>" );
+ GridDataFactory.fillDefaults()
+ .align( SWT.RIGHT, SWT.CENTER )
+ .grab( true, false )
+ .hint( 400, 25 )
+ .applyTo( browser );
return roadmap;
}
@@ -198,8 +253,6 @@
}
public void screenActivated( IWizardScreen activeScreen ) {
- screenTitle.setText(activeScreen.getLabel());
-
+ screenTitle.setText( activeScreen.getLabel() );
}
-
}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java
index 1407ade..85b6537 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardDownloadScreen.java
@@ -10,15 +10,20 @@
******************************************************************************/
package org.eclipse.epp.wizard.internal.ui;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.Random;
+import org.apache.log4j.Logger;
import org.eclipse.epp.wizard.internal.Activator;
import org.eclipse.epp.wizard.internal.Configuration;
import org.eclipse.epp.wizard.internal.ExternalServiceProviderConfiguration;
import org.eclipse.epp.wizard.internal.IWishlistListener;
-import org.eclipse.epp.wizard.internal.LinkUtil;
-import org.eclipse.epp.wizard.internal.OsUtil;
+import org.eclipse.epp.wizard.internal.Platform;
+import org.eclipse.epp.wizard.internal.StatsLogger;
import org.eclipse.epp.wizard.internal.Wishlist;
+import org.eclipse.epp.wizard.internal.ExternalServiceProviderConfiguration.Entry;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.rwt.RWT;
@@ -31,7 +36,7 @@
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
@@ -41,295 +46,436 @@
*/
public class WizardDownloadScreen extends Composite implements IWizardScreen {
- private Browser browser;
- private Wishlist wishlist;
- private ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
- private Label notificationLabel;
- private String noItemsText;
- private String gotItemsText;
+ protected class LinkInfo {
- public WizardDownloadScreen(final Composite parent,
- ExternalServiceProviderConfiguration externalServiceProviderConfiguration
- ) {
- super(parent, SWT.NONE);
- this.externalServiceProviderConfiguration = externalServiceProviderConfiguration;
- createContent(this);
- }
+ Browser browser;
+ final String title;
+ final String url;
- public void createContent(final Composite parent) {
- wishlist = Wishlist.getDefault();
- GridLayout layout = new GridLayout(1, false);
- layout.verticalSpacing = 1;
- layout.horizontalSpacing = 1;
- layout.marginHeight = 1;
- layout.marginWidth = 1;
- parent.setLayout(layout);
- createHiddenBrowser(parent);
- createNotification(parent);
- Composite downloadArea = new Composite(parent, SWT.NONE);
+ private LinkInfo( String title, String url ) {
+ super();
+ this.title = title;
+ this.url = url;
+ }
- downloadArea.setLayout(new GridLayout(1, false));
- createDownloadButton(downloadArea);
- createWebstartButton(downloadArea);
- createSpacing(parent);
- createExternalServiceProviderComposite(parent);
- }
+ public String getTitle() {
+ return title;
+ }
- private void createSpacing(Composite parent) {
- new Label(parent, SWT.NONE);
+ public String getUrl() {
+ return url;
+ }
- }
+ public Browser getBrowser() {
+ return browser;
+ }
- private void createHiddenBrowser(final Composite parent) {
- browser = new Browser(parent, SWT.NONE);
- browser.setSize(1, 1);
- browser.setVisible(false);
- // don't show
- browser.setLayoutData(GridDataFactory.fillDefaults().exclude(true)
- .create());
- }
+ public void setBrowser( Browser browser ) {
+ this.browser = browser;
+ }
+ }
+ private List<LinkInfo> links = new ArrayList<LinkInfo>();
+ static Logger logger = Logger.getLogger( WizardDownloadScreen.class );
+ private Browser browser;
+ private Wishlist wishlist;
+ private ExternalServiceProviderConfiguration externalServiceProviderConfiguration;
+ private Label notificationLabel;
+ private String noItemsText;
+ private String gotItemsText;
+ private Browser downloadButtonBrowser;
+ private Configuration configuration;
- private void createExternalServiceProviderComposite(final Composite parent) {
- final ScrolledComposite scrolledComposite = new ScrolledComposite(
- parent, SWT.H_SCROLL | SWT.V_SCROLL);
- scrolledComposite.setLayoutData(GridDataFactory.fillDefaults().grab(
- true, true).indent(20, 40).create());
- scrolledComposite.setExpandVertical(true);
- scrolledComposite.setExpandHorizontal(true);
- final Composite composite = new Composite(scrolledComposite, SWT.NONE);
- scrolledComposite
- .addControlListener(new org.eclipse.swt.events.ControlAdapter() {
+ public WizardDownloadScreen( final Composite parent,
+ ExternalServiceProviderConfiguration externalServiceProviderConfiguration )
+ {
+ super( parent, SWT.NONE );
+ this.externalServiceProviderConfiguration = externalServiceProviderConfiguration;
+ configuration = Activator.getDefault().getConfiguration();
+ createContent( this );
+ }
- @Override
- public void controlResized(ControlEvent e) {
- super.controlResized(e);
- scrolledComposite.setMinSize(composite.computeSize(
- SWT.DEFAULT, SWT.DEFAULT));
- }
- });
+ public void createContent( final Composite parent ) {
+ wishlist = Wishlist.getDefault();
+ GridLayout layout = new GridLayout( 1, false );
+ layout.verticalSpacing = 1;
+ layout.horizontalSpacing = 1;
+ layout.marginHeight = 1;
+ layout.marginWidth = 1;
+ parent.setLayout( layout );
+ createHiddenBrowser( parent );
+ createNotification( parent );
+ Composite downloadArea = new Composite( parent, SWT.NONE );
+ GridLayout layout2 = new GridLayout( 2, false );
+ layout2.horizontalSpacing = 0;
+ layout2.verticalSpacing = 0;
+ downloadArea.setLayout( layout2 );
+ createOsSelection( downloadArea );
+ createDownloadButton( downloadArea );
+ createWebstartButton( downloadArea );
+ createSpacing( parent );
+ createExternalServiceProviderComposite( parent );
+ }
- scrolledComposite.setContent(composite);
- composite.setLayout(new GridLayout(2, false));
- Label title = new Label(composite, SWT.NONE);
- title.setText("Add additional software to your current selection");
- title.setFont(Fonts.TITLE.get());
- title.setForeground(Colors.ECLIPSE_BLUE.get());
- title.setLayoutData(GridDataFactory.fillDefaults().span(2, 1).grab(
- true, false).create());
- Label separator = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
- separator.setLayoutData(GridDataFactory.fillDefaults().span(2, 1)
- .minSize(10, 10).create());
- separator.setForeground(Colors.ECLIPSE_BLUE.get());
- for (final ExternalServiceProviderConfiguration.Entry entry : externalServiceProviderConfiguration
- .getEntries()) {
- Label icon = new Label(composite, SWT.NONE);
- icon.setImage(Images.load(entry.getIcon()));
- icon.setLayoutData(GridDataFactory.fillDefaults().span(1, 2)
- .create());
- Label link = new Label(composite, SWT.NONE);
- link.setFont(Fonts.H2.get());
- title.setForeground(Colors.ECLIPSE_VIOLET.get());
- link.setText(entry.getLabel());
- LinkUtil.setHandCursor(link);
- LinkUtil.setHandCursor(icon);
- link.addMouseListener(new MouseAdapter() {
+ private void createOsSelection( Composite downloadArea ) {
+ Composite composite = new Composite( downloadArea, SWT.NONE );
+ GridDataFactory.swtDefaults().span( 2, 1 ).applyTo( composite );
+ composite.setLayout( new GridLayout( 2, false ) );
+ Label label = new Label( composite, SWT.NONE );
+ label.setText( "Operating System: " );
+ final Combo combo = new Combo( composite, SWT.NONE );
+ for( Platform platform : Platform.values() ) {
+ combo.add( platform.getLabel(), platform.ordinal() );
+ }
+ combo.select( wishlist.getPlatform().ordinal() );
+ combo.addSelectionListener( new SelectionAdapter() {
- @Override
- public void mouseDown(MouseEvent e) {
- try {
- boolean shouldOpen = true;
- if (wishlist.isEmpty()) {
- MessageDialog messageDialog = new MessageDialog(
- getShell(),
- "External Service Provider",
- null,
- "No components have been selected. Do you wish to continue anyway?",
- 0, new String[] { "Yes", "No" }, 1);
- int result = messageDialog.open();
- if (result == 1) {
- shouldOpen = false;
- }
- }
- if (shouldOpen) {
- openURL(entry.getUrlTemplate(), true);
- }
- } catch (Throwable e2) {
- e2.printStackTrace();
- }
- }
- });
- Label description = new Label(composite, SWT.NONE);
- description.setFont(Fonts.TEXT.get());
- description.setText(entry.getDescription());
- }
- composite.pack();
- }
+ public void widgetSelected( SelectionEvent e ) {
+ wishlist.setPlatform( Platform.values()[ combo.getSelectionIndex() ] );
+ }
+ } );
+ }
- private void createNotification(final Composite parent) {
- notificationLabel = new Label(parent, SWT.WRAP);
- noItemsText = "If the download button is disabled, please go back to the previous pages and select your desired items, then return to this page to complete your installation.";
- gotItemsText = "Your configuration is now ready to be downloaded";
- notificationLabel.setText(wishlist.isEmpty() ? noItemsText
- : gotItemsText);
- notificationLabel.setFont(Fonts.TEXT.get());
- notificationLabel.setLayoutData(GridDataFactory.swtDefaults().grab(
- true, false).hint(600, SWT.DEFAULT).create());
- wishlist.addListener(new IWishlistListener() {
+ private void createSpacing( Composite parent ) {
+ new Label( parent, SWT.NONE );
+ }
- public void wishlistChanged() {
- updateNotification();
- }
- });
- }
+ private void createHiddenBrowser( final Composite parent ) {
+ browser = new Browser( parent, SWT.NONE );
+ browser.setSize( 1, 1 );
+ browser.setVisible( false );
+ // don't show
+ browser.setLayoutData( GridDataFactory.fillDefaults()
+ .exclude( true )
+ .create() );
+ }
- private void createDownloadButton(final Composite parent) {
- final Button button = new Button(parent, SWT.NONE);
- button.setText(" Download Eclipse P2 Installer");
- button.setImage(Images.DOWNLOAD.get());
- button.setFont(Fonts.BUTTON.get());
- button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
- SWT.CENTER).create());
+ private void createExternalServiceProviderComposite( final Composite parent )
+ {
+ final ScrolledComposite scrolledComposite = new ScrolledComposite( parent,
+ SWT.H_SCROLL
+ | SWT.V_SCROLL );
+ scrolledComposite.setLayoutData( GridDataFactory.fillDefaults()
+ .grab( true, true )
+ .indent( 0, 20 )
+ .create() );
+ scrolledComposite.setExpandVertical( true );
+ scrolledComposite.setExpandHorizontal( true );
+ final Composite composite = new Composite( scrolledComposite, SWT.NONE );
+ scrolledComposite.addControlListener( new org.eclipse.swt.events.ControlAdapter()
+ {
- button.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void controlResized( ControlEvent e ) {
+ super.controlResized( e );
+ scrolledComposite.setMinSize( composite.computeSize( SWT.DEFAULT,
+ SWT.DEFAULT ) );
+ }
+ } );
+ scrolledComposite.setContent( composite );
+ composite.setLayout( new GridLayout( 2, false ) );
+ Label title = new Label( composite, SWT.NONE );
+ title.setText( "Add additional software to your current selection" );
+ title.setFont( Fonts.TITLE.get() );
+ title.setForeground( Colors.ECLIPSE_BLUE.get() );
+ title.setLayoutData( GridDataFactory.fillDefaults()
+ .span( 2, 1 )
+ .grab( true, false )
+ .create() );
+ Label separator = new Label( composite, SWT.SEPARATOR | SWT.HORIZONTAL );
+ separator.setLayoutData( GridDataFactory.fillDefaults()
+ .span( 2, 1 )
+ .minSize( 10, 10 )
+ .create() );
+ separator.setForeground( Colors.ECLIPSE_BLUE.get() );
+ List<Entry> entries = new ArrayList<Entry>( externalServiceProviderConfiguration.getEntries() );
+ Collections.shuffle( entries );
+ for( final ExternalServiceProviderConfiguration.Entry entry : entries ) {
+ Label icon = new Label( composite, SWT.NONE );
+ icon.setImage( Images.load( entry.getIcon() ) );
+ icon.setLayoutData( GridDataFactory.fillDefaults()
+ .span( 1, 2 )
+ .indent( 10, 0 )
+ .create() );
+ /*
+ * Label link = new Label(composite, SWT.NONE);
+ * link.setFont(Fonts.H2.get()); link.setText(entry.getLabel());
+ * LinkUtil.setHandCursor(link);
+ */
+ Browser link = createLink( composite,
+ new LinkInfo( entry.getLabel(),
+ entry.getUrlTemplate() ) );
+ GridDataFactory.swtDefaults().hint( 600, 40 ).applyTo( link );
+ composite.setBackgroundMode( SWT.INHERIT_DEFAULT );
+ // LinkUtil.setHandCursor(icon);
+ link.addMouseListener( new MouseAdapter() {
- @Override
- public void widgetSelected(final SelectionEvent se) {
- Configuration configuration = Activator.getDefault()
- .getConfiguration();
- openURL(configuration.getInstallerURL(), false);
- }
- });
- addButtonEnabler(button);
- }
+ @Override
+ public void mouseDown( MouseEvent e ) {
+ try {
+ boolean shouldOpen = true;
+ if( wishlist.isEmpty() ) {
+ MessageDialog messageDialog = new MessageDialog( getShell(),
+ "External Service Provider",
+ null,
+ "No components have been selected. Do you wish to continue anyway?",
+ 0,
+ new String[]{
+ "Yes", "No"
+ },
+ 1 );
+ int result = messageDialog.open();
+ if( result == 1 ) {
+ shouldOpen = false;
+ }
+ }
+ if( shouldOpen ) {
+ openURL( entry.getUrlTemplate(), true );
+ }
+ } catch( Throwable e2 ) {
+ logger.error( "Error opening link", e2 );
+ }
+ }
+ } );
+ Label description = new Label( composite, SWT.NONE );
+ description.setFont( Fonts.TEXT.get() );
+ description.setText( entry.getDescription() );
+ }
+ composite.pack();
+ }
- private void addButtonEnabler(final Button button) {
- button.setEnabled(false);
- wishlist.addListener(new IWishlistListener() {
+ private void createNotification( final Composite parent ) {
+ notificationLabel = new Label( parent, SWT.WRAP );
+ noItemsText = "If the download button is disabled, please go back to the previous pages and select your desired items, then return to this page to complete your installation.";
+ gotItemsText = "Your configuration is now ready to be downloaded";
+ notificationLabel.setText( wishlist.isEmpty()
+ ? noItemsText
+ : gotItemsText );
+ notificationLabel.setFont( Fonts.TEXT.get() );
+ notificationLabel.setLayoutData( GridDataFactory.swtDefaults()
+ .grab( true, false )
+ .create() );
+ wishlist.addListener( new IWishlistListener() {
- public void wishlistChanged() {
- button.setEnabled(!wishlist.isEmpty());
- if(wishlist.isEmpty())
- {
- LinkUtil.resetCursor(button);
- }
- else
- {
- LinkUtil.setHandCursor(button);
- }
- }
- });
- }
+ public void wishlistChanged() {
+ updateNotification();
+ }
+ } );
+ }
- private void createWebstartButton(final Composite parent) {
- Button button = new Button(parent, SWT.NONE);
- button.setText(" Start Eclipse P2 Installer");
- button.setFont(Fonts.BUTTON.get());
- button.setImage(Images.WEBSTART.get());
- button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
- SWT.CENTER).create());
+ private void createDownloadButton( final Composite parent ) {
+ Label icon = new Label( parent, SWT.NONE );
+ icon.setImage( Images.DOWNLOAD.get() );
+ String url = configuration.getInstallerURL();
+ downloadButtonBrowser = createLink( parent,
+ new LinkInfo( "Download Eclipse P2 Installer",
+ url ) );
+ GridDataFactory.swtDefaults()
+ .hint( 350, SWT.DEFAULT )
+ .indent( 0, 10 )
+ .applyTo( downloadButtonBrowser );
+ updateDownloadButton();
+ parent.setBackgroundMode( SWT.INHERIT_DEFAULT );
+ /*
+ * final Button button = new Button(parent, SWT.NONE);
+ * button.setText("Download Eclipse P2 Installer");
+ * button.setImage(Images.DOWNLOAD.get());
+ * button.setFont(Fonts.BUTTON.get());
+ * button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
+ * SWT.CENTER).create()); button.addSelectionListener(new SelectionAdapter()
+ * {
+ * @Override public void widgetSelected(final SelectionEvent se) {
+ * Configuration configuration = Activator.getDefault() .getConfiguration();
+ * openURL(configuration.getInstallerURL(), false); } });
+ * addButtonEnabler(button);
+ */
+ }
- // addButtonEnabler(button);
- button.setEnabled(false);
- Label label = new Label(parent, SWT.NONE);
- label
- .setText("Note: Webstart support is currently unavailable due to Eclipse Bug 240500.");
- label.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
- SWT.CENTER).create());
- button.addSelectionListener(new SelectionAdapter() {
+ private Browser createLink( Composite parent, LinkInfo linkInfo ) {
+ Browser browser = new Browser( parent, SWT.NONE );
+ linkInfo.setBrowser( browser );
+ links.add( linkInfo );
+ browser.setBackgroundMode( SWT.INHERIT_DEFAULT );
+ updateLink( linkInfo );
+ return browser;
+ }
- @Override
- public void widgetSelected(final SelectionEvent se) {
- /*
- * String[] ids = Wishlist.getDefault().getInstallerIDs();
- * String fileName = CustomJnlp.getFileName(ids); try { /
- * CustomJnlp.execute("http://localhost:8008/download",
- * StringUtil.toCommaList(ids, false), fileName);
- * browser.setText("<html></html>");
- * browser.setUrl("../download/" + fileName);
- *
- * } catch (IOException exc) { // should never happen, but log
- * anyway exc.printStackTrace(); }
- */
- }
- });
- }
+ private void updateLink( LinkInfo linkInfo ) {
+ String cmd = wishlist.isEmpty()
+ ? "alert(\"No components have been selected.\\n\\nPlease go back to the previous pages and select your desired items, then return to this page to complete your installation.\")"
+ : "document.myform.submit()";
+ StringBuilder sb = new StringBuilder();
+ String url = linkInfo.getUrl();
+ String ius = configuration.getBaseIUs() + "," + wishlist.getSelectedIuIds();
+ sb.append( "<body style='background-color: transparent;'><a style='position:absolute; top:20%; vertical-align: middle; font-family:sans-serif;' href='javascript:"
+ + cmd
+ + "'>"
+ + linkInfo.getTitle()
+ + "</a><form name='myform' method='post' target='_top' action='"
+ + url
+ + "' "
+ + " style='display: none;'>" );
+ addParameter( sb, "os", wishlist.getPlatform().getId() );
+ addParameter( sb, Configuration.P2_ROOTS, ius );
+ addParameter( sb,
+ Configuration.P2_METADATA_REPOSITORIES,
+ configuration.getMetadataRepositories() );
+ addParameter( sb,
+ Configuration.P2_ARTIFACT_REPOSITORIES,
+ configuration.getArtifactRepositories() );
+ // sb.append(
+ // "<button type='submit' value='Download Eclipse P2 Installer'><img src=''><b>Download Eclipse P2 Installer</b></Button>"
+ // );
+ sb.append( "</form> </body>" );
+ linkInfo.getBrowser().setText( sb.toString() );
+ }
- public String getLabel() {
- return "Finish";
- }
+ private void updateDownloadButton() {
+ /*
+ * StringBuilder sb = new StringBuilder(); Configuration configuration =
+ * Activator.getDefault().getConfiguration(); String url =
+ * configuration.getInstallerURL(); String ius =
+ * configuration.getBaseIUs()+","+ wishlist.getSelectedIuIds();sb.append(
+ * "<body style='background-color:transparent;'><form name='myform' method='post' action='"
+ * + url + "' " + ">"); addParameter(sb, "os",
+ * wishlist.getPlatform().getId()); addParameter(sb, Configuration.P2_ROOTS,
+ * ius); addParameter(sb, Configuration.P2_METADATA_REPOSITORIES,
+ * configuration .getMetadataRepositories()); addParameter(sb,
+ * Configuration.P2_ARTIFACT_REPOSITORIES, configuration
+ * .getArtifactRepositories());sb.append(
+ * "<button type='submit' value='Download Eclipse P2 Installer'><img src=''><b>Download Eclipse P2 Installer</b></Button>"
+ * );sb.append(
+ * "</form><a href='javascript:document.myform.submit()'>Free Support</a> </body>"
+ * ); downloadButtonBrowser.setText(sb.toString());
+ */
+ }
- public Control getControl() {
- return this;
- }
+ /*
+ * private void addButtonEnabler(final Button button) {
+ * button.setEnabled(false); wishlist.addListener(new IWishlistListener() {
+ * public void wishlistChanged() { button.setEnabled(!wishlist.isEmpty());
+ * if(wishlist.isEmpty()) { LinkUtil.resetCursor(button); } else {
+ * LinkUtil.setHandCursor(button); } } }); }
+ */
+ private void createWebstartButton( final Composite parent ) {
+ Label icon = new Label( parent, SWT.NONE );
+ icon.setImage( Images.WEBSTART.get() );
+ String url = configuration.getInstallerURL();
+ downloadButtonBrowser = createLink( parent,
+ new LinkInfo( "Start Eclipse P2 Installer",
+ url ) );
+ GridDataFactory.fillDefaults()
+ .hint( 350, SWT.DEFAULT )
+ .applyTo( downloadButtonBrowser );
+ updateDownloadButton();
+ parent.setBackgroundMode( SWT.INHERIT_DEFAULT );
+ Label dummyLabel = new Label( parent, SWT.NONE );
+ GridDataFactory.swtDefaults().span( 1, 1 ).applyTo( dummyLabel );
+ Label label = new Label( parent, SWT.WRAP );
+ label.setText( "Note: Webstart support is currently\nunavailable due to Eclipse Bug 240500." );
+ label.setLayoutData( GridDataFactory.swtDefaults()
+ .align( SWT.LEFT, SWT.CENTER )
+ .create() );
+ /*
+ * Button button = new Button(parent, SWT.NONE);
+ * button.setText("Start Eclipse P2 Installer");
+ * button.setFont(Fonts.BUTTON.get());
+ * button.setImage(Images.WEBSTART.get());
+ * button.setLayoutData(GridDataFactory.swtDefaults().align(SWT.FILL,
+ * SWT.CENTER).create()); // addButtonEnabler(button);
+ * button.setEnabled(false);
+ * @SuppressWarnings("unused") Label dummyLabel = new Label(parent,
+ * SWT.NONE); Label label = new Label(parent, SWT.WRAP); label.setText(
+ * "Note: Webstart support is currently\nunavailable due to Eclipse Bug 240500."
+ * ); label.setLayoutData(GridDataFactory.swtDefaults().align(SWT.LEFT,
+ * SWT.CENTER).create()); button.addSelectionListener(new SelectionAdapter()
+ * {
+ * @Override public void widgetSelected(final SelectionEvent se) { /
+ * String[] ids = Wishlist.getDefault().getInstallerIDs(); String fileName =
+ * CustomJnlp.getFileName(ids); try { /
+ * CustomJnlp.execute("http://localhost:8008/download",
+ * StringUtil.toCommaList(ids, false), fileName);
+ * browser.setText("<html></html>"); browser.setUrl("../download/" +
+ * fileName); } catch (IOException exc) { // should never happen, but log
+ * anyway exc.printStackTrace(); } / } });
+ */
+ }
- // ///////////////
- // helping methods
- // ///////////////
- private String getDefaultOs() {
- String header = RWT.getRequest().getHeader("User-Agent"); //$NON-NLS-1$
- String[] platformNames = OsUtil.getPlatforms();
- int platform = 0;
- // Check if we can autodetect the platform
- for (int i = 0; i < platformNames.length; i++) {
- String platformHeader = platformNames[i].substring(0, 3);
- if (header.indexOf(platformHeader) > -1
- || header.indexOf(platformHeader.toUpperCase()) > -1
- || header.indexOf(platformHeader.substring(0, 1)
- .toUpperCase()
- + platformHeader.substring(1, platformHeader
- .length())) > -1) {
- platform = i;
- }
- }
- return platformNames[platform];
- }
+ public String getLabel() {
+ return "Finish";
+ }
- /**
- * Open a URL, by using the RAP browser widget, passing the p2 metadata
- * information as POST parameters
- *
- * @param url
- * URL of the location to open
- * @param top
- * true -> complete page redirect, false -> inside widget, useful
- * for downloads
- */
- private void openURL(String url, boolean top) {
- Configuration configuration = Activator.getDefault().getConfiguration();
- String ius = configuration.getBaseIUs()+","+ wishlist.getSelectedIuIds();
- browser.setText("<html></html>");
- StringBuilder sb = new StringBuilder();
- sb.append("<form name='myform' method='post' action='" + url + "' "
- + (top ? "target='_top'" : "") + ">");
- addParameter(sb, "os", getDefaultOs());
- addParameter(sb, Configuration.P2_ROOTS, ius);
- addParameter(sb, Configuration.P2_METADATA_REPOSITORIES, configuration
- .getMetadataRepositories());
- addParameter(sb, Configuration.P2_ARTIFACT_REPOSITORIES, configuration
- .getArtifactRepositories());
- sb.append("</form>");
+ public Control getControl() {
+ return this;
+ }
- // This bit is needed to prevent some caching behavior in the browser
- // component; crude but works
- sb.append(new Random().nextLong());
+ /**
+ * Open a URL, by using the RAP browser widget, passing the p2 metadata
+ * information as POST parameters
+ *
+ * @param url URL of the location to open
+ * @param top true -> complete page redirect, false -> inside widget, useful
+ * for downloads
+ */
+ private void openURL( String url, boolean top ) {
+ Configuration configuration = Activator.getDefault().getConfiguration();
+ String ius = configuration.getBaseIUs() + "," + wishlist.getSelectedIuIds();
+ browser.setText( "<html></html>" );
+ StringBuilder sb = new StringBuilder();
+ String target = "";
+ if( top ) {
+ target = "target='_top'";
+ }
+ // IE 7 has some weird issues with RAP and the iframe-autoform-download, and
+ // IE security "features",
+ // making this ugly workaround necessary
+ if( RWT.getRequest().getHeader( "user-agent" ).contains( " MSIE 7." ) ) {
+ target = "target='_blank'";
+ }
+ sb.append( "<form name='myform' method='post' action='"
+ + url
+ + "' "
+ + target
+ + ">" );
+ addParameter( sb, "os", wishlist.getPlatform().getId() );
+ addParameter( sb, Configuration.P2_ROOTS, ius );
+ addParameter( sb,
+ Configuration.P2_METADATA_REPOSITORIES,
+ configuration.getMetadataRepositories() );
+ addParameter( sb,
+ Configuration.P2_ARTIFACT_REPOSITORIES,
+ configuration.getArtifactRepositories() );
+ sb.append( "</form>" );
+ // This bit is needed to prevent some caching behavior in the browser
+ // component; crude but works
+ sb.append( new Random().nextLong() );
+ // Timeout is required to work around problems with the connection to
+ // the RAP server being forcefully disconnected
+ sb.append( "<SCRIPT language='JavaScript'>" );
+ sb.append( " setTimeout('document.myform.submit();',1000)" );
+ sb.append( "</SCRIPT> " );
+ // browser.setText(sb.toString());
+ browser.setUrl( "http://wmwoelker/x.zip" );
+ Activator.getDefault()
+ .getStatsLogger()
+ .log( new StatsLogger.Statistic( url, RWT.getRequest()
+ .getHeader( "user-agent" ), ius ) );
+ }
- // Timeout is required to work around problems with the connection to
- // the RAP server being forcefully disconnected
- sb.append("<SCRIPT language='JavaScript'>");
- sb.append(" setTimeout('document.myform.submit();',1000)");
- sb.append("</SCRIPT> ");
- browser.setText(sb.toString());
- }
+ private void addParameter( StringBuilder sb, String key, String value ) {
+ sb.append( "<input type='hidden' name='" + key + "' value='" + value + "'>" );
+ }
- private void addParameter(StringBuilder sb, String key, String value) {
- sb.append("<input type='hidden' name='" + key + "' value='" + value
- + "'>");
- }
+ protected void updateNotification() {
+ notificationLabel.setText( wishlist.isEmpty()
+ ? noItemsText
+ : gotItemsText );
+ notificationLabel.setVisible( wishlist.isEmpty() );
+ notificationLabel.getParent().layout();
+ }
- protected void updateNotification() {
- notificationLabel.setText(wishlist.isEmpty() ? noItemsText
- : gotItemsText);
- notificationLabel.getParent().layout();
- }
-
+ public void update() {
+ for( LinkInfo linkInfo : links ) {
+ updateLink( linkInfo );
+ }
+ }
}
diff --git a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java
index ebbdd4a..4b67599 100644
--- a/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java
+++ b/plugins/org.eclipse.epp.wizard/src/org/eclipse/epp/wizard/internal/ui/WizardSelectionScreen.java
@@ -10,6 +10,8 @@
******************************************************************************/
package org.eclipse.epp.wizard.internal.ui;
+import org.eclipse.epp.wizard.internal.Wishlist;
+import org.eclipse.epp.wizard.internal.Wishlist.Inclusion;
import org.eclipse.epp.wizard.model.Group;
import org.eclipse.epp.wizard.model.Screen;
import org.eclipse.swt.SWT;
@@ -78,10 +80,13 @@
}
private void createSelectionArea( final Composite parent ) {
+ Wishlist wishlist = Wishlist.getDefault();
Group[] groups = getScreen().getGroups();
for( int i = 0; i < groups.length; i++ ) {
final Group group = groups[ i ];
- new GroupSelection(parent, group);
+ GroupSelection groupSelection = new GroupSelection( parent, group );
+ groupSelection.setExpanded( wishlist.isIncluded( group ) != Inclusion.NONE );
+ // groupSelection.setExpanded(true);
}
}
@@ -99,4 +104,8 @@
private Screen getScreen() {
return screen;
}
+
+ public void update() {
+ // Nothing to do here
+ }
}