|
@@ -0,0 +1,343 @@ |
|
|
|
|
|
package org.apache.tools.ant.taskdefs.optional.ide; |
|
|
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
|
* The Apache Software License, Version 1.1 |
|
|
|
|
|
* |
|
|
|
|
|
* Copyright (c) 1999 The Apache Software Foundation. All rights |
|
|
|
|
|
* reserved. |
|
|
|
|
|
* |
|
|
|
|
|
* Redistribution and use in source and binary forms, with or without |
|
|
|
|
|
* modification, are permitted provided that the following conditions |
|
|
|
|
|
* are met: |
|
|
|
|
|
* |
|
|
|
|
|
* 1. Redistributions of source code must retain the above copyright |
|
|
|
|
|
* notice, this list of conditions and the following disclaimer. |
|
|
|
|
|
* |
|
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
|
|
|
|
|
* notice, this list of conditions and the following disclaimer in |
|
|
|
|
|
* the documentation and/or other materials provided with the |
|
|
|
|
|
* distribution. |
|
|
|
|
|
* |
|
|
|
|
|
* 3. The end-user documentation included with the redistribution, if |
|
|
|
|
|
* any, must include the following acknowlegement: |
|
|
|
|
|
* "This product includes software developed by the |
|
|
|
|
|
* Apache Software Foundation (http://www.apache.org/)." |
|
|
|
|
|
* Alternately, this acknowlegement may appear in the software itself, |
|
|
|
|
|
* if and wherever such third-party acknowlegements normally appear. |
|
|
|
|
|
* |
|
|
|
|
|
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software |
|
|
|
|
|
* Foundation" must not be used to endorse or promote products derived |
|
|
|
|
|
* from this software without prior written permission. For written |
|
|
|
|
|
* permission, please contact apache@apache.org. |
|
|
|
|
|
* |
|
|
|
|
|
* 5. Products derived from this software may not be called "Apache" |
|
|
|
|
|
* nor may "Apache" appear in their names without prior written |
|
|
|
|
|
* permission of the Apache Group. |
|
|
|
|
|
* |
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED |
|
|
|
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
|
|
|
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
|
|
|
|
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR |
|
|
|
|
|
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
|
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
|
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
|
|
|
|
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
|
|
|
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
|
|
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT |
|
|
|
|
|
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
|
|
|
|
* SUCH DAMAGE. |
|
|
|
|
|
* ==================================================================== |
|
|
|
|
|
* |
|
|
|
|
|
* This software consists of voluntary contributions made by many |
|
|
|
|
|
* individuals on behalf of the Apache Software Foundation. For more |
|
|
|
|
|
* information on the Apache Software Foundation, please see |
|
|
|
|
|
* <http://www.apache.org/>. |
|
|
|
|
|
*/ |
|
|
|
|
|
import java.util.Hashtable; |
|
|
|
|
|
import java.util.Vector; |
|
|
|
|
|
import java.util.Enumeration; |
|
|
|
|
|
import org.apache.tools.ant.*; |
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* This class wraps the Ant project information needed to |
|
|
|
|
|
* start Ant from Visual Age. |
|
|
|
|
|
* It serves the following purposes: |
|
|
|
|
|
* - acts as model for AntMakeFrame |
|
|
|
|
|
* - converts itself to/from String (to store the information |
|
|
|
|
|
* as ToolData in the VA repository) |
|
|
|
|
|
* - wraps Project functions for the GUI (get target list, |
|
|
|
|
|
* execute target) |
|
|
|
|
|
* |
|
|
|
|
|
* @author Wolf Siberski, TUI Infotec GmbH |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
public class VAJBuildInfo { |
|
|
|
|
|
// name of the VA project this BuildInfo belongs to |
|
|
|
|
|
private String vajProjectName = ""; |
|
|
|
|
|
|
|
|
|
|
|
// name of the Ant build file |
|
|
|
|
|
private String buildFileName = ""; |
|
|
|
|
|
|
|
|
|
|
|
// main targets found in the build file |
|
|
|
|
|
private Vector projectTargets = new Vector(); |
|
|
|
|
|
|
|
|
|
|
|
// target selected for execution |
|
|
|
|
|
private java.lang.String target = ""; |
|
|
|
|
|
|
|
|
|
|
|
// log level |
|
|
|
|
|
private int outputMessageLevel = Project.MSG_INFO; |
|
|
|
|
|
|
|
|
|
|
|
// Ant Project created from build file |
|
|
|
|
|
private transient Project project; |
|
|
|
|
|
|
|
|
|
|
|
// is true if Project initialization was successful |
|
|
|
|
|
private transient boolean projectInitialized = false; |
|
|
|
|
|
|
|
|
|
|
|
// Support for bound properties |
|
|
|
|
|
protected transient java.beans.PropertyChangeSupport propertyChange; |
|
|
|
|
|
/** |
|
|
|
|
|
* The addPropertyChangeListener method was generated to support the propertyChange field. |
|
|
|
|
|
*/ |
|
|
|
|
|
public synchronized void addPropertyChangeListener(java.beans.PropertyChangeListener listener) { |
|
|
|
|
|
getPropertyChange().addPropertyChangeListener(listener); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Returns the BuildInfo information as String. The BuildInfo can |
|
|
|
|
|
* be rebuilt from that String by calling parse(). |
|
|
|
|
|
* @return java.lang.String |
|
|
|
|
|
*/ |
|
|
|
|
|
public String asDataString() { |
|
|
|
|
|
String result = getOutputMessageLevel() + "|" + getBuildFileName() + "|" + getTarget(); |
|
|
|
|
|
for ( Enumeration e = getProjectTargets().elements(); e.hasMoreElements(); ) { |
|
|
|
|
|
result = result + "|" + e.nextElement(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Executes the target set by setTarget(). |
|
|
|
|
|
* @param listener BuildListener for the output of the build |
|
|
|
|
|
*/ |
|
|
|
|
|
public void executeProject( BuildListener listener ) { |
|
|
|
|
|
Throwable error = null; |
|
|
|
|
|
try { |
|
|
|
|
|
if (!isProjectInitialized()) { |
|
|
|
|
|
project = new Project(); |
|
|
|
|
|
} |
|
|
|
|
|
project.addBuildListener( listener ); |
|
|
|
|
|
// Chris: HACK: replace when Ant-Refactoring is finished! |
|
|
|
|
|
// project.fireBuildStarted(); |
|
|
|
|
|
if (!isProjectInitialized()) { |
|
|
|
|
|
initProject(); |
|
|
|
|
|
} |
|
|
|
|
|
project.executeTarget(target); |
|
|
|
|
|
|
|
|
|
|
|
} catch (RuntimeException exc) { |
|
|
|
|
|
error = exc; |
|
|
|
|
|
throw exc; |
|
|
|
|
|
} catch (Error err) { |
|
|
|
|
|
error = err; |
|
|
|
|
|
throw err; |
|
|
|
|
|
} finally { |
|
|
|
|
|
// Chris: HACK: replace when Ant-Refactoring is finished! |
|
|
|
|
|
// project.fireBuildFinished(error); |
|
|
|
|
|
project.removeBuildListener( listener ); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Search for the insert position to keep names a sorted list of Strings |
|
|
|
|
|
* This method has been copied from org.apache.tools.ant.Main |
|
|
|
|
|
*/ |
|
|
|
|
|
private static int findTargetPosition(Vector names, String name) { |
|
|
|
|
|
int res = names.size(); |
|
|
|
|
|
for (int i=0; i<names.size() && res == names.size(); i++) { |
|
|
|
|
|
if (name.compareTo((String)names.elementAt(i)) < 0) { |
|
|
|
|
|
res = i; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return res; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* The firePropertyChange method was generated to support the propertyChange field. |
|
|
|
|
|
*/ |
|
|
|
|
|
public void firePropertyChange(java.lang.String propertyName, java.lang.Object oldValue, java.lang.Object newValue) { |
|
|
|
|
|
getPropertyChange().firePropertyChange(propertyName, oldValue, newValue); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Returns the build file name. |
|
|
|
|
|
* @return build file name. |
|
|
|
|
|
*/ |
|
|
|
|
|
public String getBuildFileName() { |
|
|
|
|
|
return buildFileName; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Returns the log level |
|
|
|
|
|
* @return log level. |
|
|
|
|
|
*/ |
|
|
|
|
|
public int getOutputMessageLevel() { |
|
|
|
|
|
return outputMessageLevel; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Returns the Ant project |
|
|
|
|
|
* @return org.apache.tools.ant.Project |
|
|
|
|
|
*/ |
|
|
|
|
|
private Project getProject() { |
|
|
|
|
|
return project; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* return a list of all targets in the current buildfile |
|
|
|
|
|
*/ |
|
|
|
|
|
public Vector getProjectTargets() { |
|
|
|
|
|
return projectTargets; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Accessor for the propertyChange field. |
|
|
|
|
|
*/ |
|
|
|
|
|
protected java.beans.PropertyChangeSupport getPropertyChange() { |
|
|
|
|
|
if (propertyChange == null) { |
|
|
|
|
|
propertyChange = new java.beans.PropertyChangeSupport(this); |
|
|
|
|
|
}; |
|
|
|
|
|
return propertyChange; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Insert the method's description here. |
|
|
|
|
|
* Creation date: (07.11.2000 10:34:18) |
|
|
|
|
|
* @return java.lang.String |
|
|
|
|
|
*/ |
|
|
|
|
|
public java.lang.String getTarget() { |
|
|
|
|
|
return target; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* returns the VA project name |
|
|
|
|
|
* @return The projectName property value. |
|
|
|
|
|
*/ |
|
|
|
|
|
public String getVAJProjectName() { |
|
|
|
|
|
return vajProjectName; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Initializes the Ant project. Assumes that the |
|
|
|
|
|
* project attribute is already set. |
|
|
|
|
|
*/ |
|
|
|
|
|
private void initProject() { |
|
|
|
|
|
try { |
|
|
|
|
|
project.init(); |
|
|
|
|
|
File buildFile = new File(getBuildFileName()); |
|
|
|
|
|
project.setUserProperty("ant.file", buildFile.getAbsolutePath()); |
|
|
|
|
|
ProjectHelper.configureProject(project, buildFile); |
|
|
|
|
|
setProjectInitialized(true); |
|
|
|
|
|
} catch (RuntimeException exc) { |
|
|
|
|
|
setProjectInitialized(false); |
|
|
|
|
|
throw exc; |
|
|
|
|
|
} catch (Error err) { |
|
|
|
|
|
setProjectInitialized(false); |
|
|
|
|
|
throw err; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Returns true, if the Ant project is initialized |
|
|
|
|
|
* (i.e. buildfile loaded) |
|
|
|
|
|
*/ |
|
|
|
|
|
public boolean isProjectInitialized() { |
|
|
|
|
|
return projectInitialized; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Creates a BuildInfo object from a String |
|
|
|
|
|
* The String must be in the format |
|
|
|
|
|
* outputMessageLevel'|'buildFileName'|'defaultTarget'|'(project target'|')* |
|
|
|
|
|
* |
|
|
|
|
|
* @return org.apache.tools.ant.taskdefs.optional.vaj.BuildInfo |
|
|
|
|
|
* @param data java.lang.String |
|
|
|
|
|
*/ |
|
|
|
|
|
public static VAJBuildInfo parse(String data) { |
|
|
|
|
|
VAJBuildInfo result = new VAJBuildInfo(); |
|
|
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
java.util.StringTokenizer tok = new java.util.StringTokenizer( data, "|" ); |
|
|
|
|
|
result.setOutputMessageLevel( tok.nextToken() ); |
|
|
|
|
|
result.setBuildFileName( tok.nextToken() ); |
|
|
|
|
|
result.setTarget( tok.nextToken() ); |
|
|
|
|
|
while( tok.hasMoreTokens() ) { |
|
|
|
|
|
result.projectTargets.addElement( tok.nextToken() ); |
|
|
|
|
|
} |
|
|
|
|
|
} catch ( Throwable t ) { |
|
|
|
|
|
} |
|
|
|
|
|
return result; |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* The removePropertyChangeListener method was generated to support the propertyChange field. |
|
|
|
|
|
*/ |
|
|
|
|
|
public synchronized void removePropertyChangeListener(java.beans.PropertyChangeListener listener) { |
|
|
|
|
|
getPropertyChange().removePropertyChangeListener(listener); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Sets the build file name |
|
|
|
|
|
* @param buildFileName build file name |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setBuildFileName(String newBuildFileName) { |
|
|
|
|
|
String oldValue = buildFileName; |
|
|
|
|
|
buildFileName = newBuildFileName; |
|
|
|
|
|
setProjectInitialized(false); |
|
|
|
|
|
firePropertyChange("buildFileName", oldValue, buildFileName); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Sets the log level (value must be one of the constants in Project) |
|
|
|
|
|
* @param outputMessageLevel log level. |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setOutputMessageLevel(int newOutputMessageLevel) { |
|
|
|
|
|
int oldValue = outputMessageLevel; |
|
|
|
|
|
outputMessageLevel = newOutputMessageLevel; |
|
|
|
|
|
firePropertyChange("outputMessageLevel", new Integer(oldValue), new Integer(outputMessageLevel)); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Sets the log level (value must be one of the constants in Project) |
|
|
|
|
|
* @param outputMessageLevel log level as String. |
|
|
|
|
|
*/ |
|
|
|
|
|
private void setOutputMessageLevel(String outputMessageLevel) { |
|
|
|
|
|
int level = Integer.parseInt( outputMessageLevel ); |
|
|
|
|
|
setOutputMessageLevel( level ); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
*/ |
|
|
|
|
|
private void setProjectInitialized(boolean initialized) { |
|
|
|
|
|
Boolean oldValue = new Boolean(projectInitialized); |
|
|
|
|
|
projectInitialized = initialized; |
|
|
|
|
|
firePropertyChange("projectInitialized", oldValue, new Boolean(projectInitialized)); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Sets the target to execute when executeBuild is called |
|
|
|
|
|
* @param newTarget build target |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setTarget(String newTarget) { |
|
|
|
|
|
String oldValue = target; |
|
|
|
|
|
target = newTarget; |
|
|
|
|
|
firePropertyChange("target", oldValue, target); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* Sets the name of the Visual Age for Java project where |
|
|
|
|
|
* this BuildInfo belongs to |
|
|
|
|
|
* @param newProjectName VAJ project |
|
|
|
|
|
*/ |
|
|
|
|
|
public void setVAJProjectName(String newVAJProjectName) { |
|
|
|
|
|
String oldValue = vajProjectName; |
|
|
|
|
|
vajProjectName = newVAJProjectName; |
|
|
|
|
|
firePropertyChange("VAJProjectName", oldValue, vajProjectName); |
|
|
|
|
|
} |
|
|
|
|
|
/** |
|
|
|
|
|
* reloads the build file and updates the target list |
|
|
|
|
|
*/ |
|
|
|
|
|
public void updateTargetList() { |
|
|
|
|
|
project = new Project(); |
|
|
|
|
|
initProject(); |
|
|
|
|
|
projectTargets.removeAllElements(); |
|
|
|
|
|
Enumeration ptargets = project.getTargets().elements(); |
|
|
|
|
|
while (ptargets.hasMoreElements()) { |
|
|
|
|
|
Target currentTarget = (Target) ptargets.nextElement(); |
|
|
|
|
|
if ( currentTarget.getDescription() != null ) { |
|
|
|
|
|
String targetName = currentTarget.getName(); |
|
|
|
|
|
int pos = findTargetPosition( projectTargets, targetName ); |
|
|
|
|
|
projectTargets.insertElementAt(targetName, pos); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |