001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * The Original Software is NetBeans. The Initial Developer of the Original
016: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
017: * Microsystems, Inc. All Rights Reserved.
018: */
019: package org.netbeans.modules.xslt.project.anttasks;
020:
021: import java.lang.reflect.InvocationTargetException;
022: import org.apache.tools.ant.BuildException;
023: import org.apache.tools.ant.Task;
024: import org.apache.tools.ant.AntClassLoader;
025: import org.apache.tools.ant.types.Path;
026: import org.apache.tools.ant.types.Reference;
027: import java.lang.reflect.Method;
028: import java.util.logging.Logger;
029:
030: /**
031: * Ant task wrapper which invokes the JBI Generation task
032: * @author Vitaly Bychkov
033: * @author Sreenivasan Genipudi
034: */
035: public class GenerateJBIDescriptorTask extends
036: org.apache.tools.ant.Task {
037:
038: /**
039: * Source directory
040: */
041: private String mSourceDirectory = null;
042: /**
043: * Build directory
044: */
045: private String mBuildDirectory = null;
046: /**
047: * Project classpath
048: */
049: private String mProjectClassPath = null;
050: /**
051: * Custom classloader used to invoke the JBI Generation task
052: */
053: private AntClassLoader m_myClassLoader = null;
054: /**
055: * Classpath Reference
056: */
057: private Reference m_ref = null;
058:
059: /**
060: * Logger instance
061: */
062: private Logger logger = Logger
063: .getLogger(GenerateJBIDescriptorTask.class.getName());
064:
065: public GenerateJBIDescriptorTask() {
066: }
067:
068: /**
069: * Set the classpath reference
070: * @param ref Classpath Reference
071: */
072: public void setClasspathRef(Reference ref) {
073: this .m_ref = ref;
074: }
075:
076: /**
077: * Set the build directory
078: * @param buildDir build directory
079: */
080: public void setBuildDirectory(String buildDir) {
081: mBuildDirectory = buildDir;
082: }
083:
084: /**
085: * Get the build directory
086: * @return String value of the build directory
087: */
088: public String getBuildDirectory() {
089: return mBuildDirectory;
090: }
091:
092: /**
093: * Set the source directory
094: * @param srcDir source directory
095: */
096: public void setSourceDirectory(String srcDir) {
097: this .mSourceDirectory = srcDir;
098: }
099:
100: /**
101: * Get the source directory
102: * @return String value of the source directory
103: */
104: public String getSourceDirectory() {
105: return this .mSourceDirectory;
106: }
107:
108: /**
109: * Set the project classpath
110: * @param projectClassPath Project classpath
111: */
112: public void setProjectClassPath(String projectClassPath) {
113: this .mProjectClassPath = projectClassPath;
114: }
115:
116: /**
117: * Invoke the task that generates the JBI.xml
118: */
119: /**
120: * Invoke validate BPEL Model
121: */
122: public void execute() throws BuildException {
123: try {
124: m_myClassLoader = new AntClassLoader();
125: initClassLoader();
126: Class antTaskClass = Class
127: .forName(
128: "org.netbeans.modules.xslt.project.anttasks.GenerateJBIDescriptor",
129: true, m_myClassLoader);
130: Thread.currentThread().setContextClassLoader(
131: m_myClassLoader);
132:
133: Object generateJBIDecsriptorObj = antTaskClass
134: .newInstance();
135:
136: Method driver = antTaskClass.getMethod("setBuildDirectory",
137: new Class[] { java.lang.String.class });
138: Object[] param = new Object[] { this .mBuildDirectory };
139: driver.invoke(generateJBIDecsriptorObj, param);
140:
141: driver = antTaskClass.getMethod("setSourceDirectory",
142: new Class[] { java.lang.String.class });
143: param = new Object[] { this .mSourceDirectory };
144: driver.invoke(generateJBIDecsriptorObj, param);
145:
146: driver = antTaskClass.getMethod("setProjectClassPath",
147: new Class[] { java.lang.String.class });
148: param = new Object[] { this .mProjectClassPath };
149: driver.invoke(generateJBIDecsriptorObj, param);
150:
151: driver = antTaskClass.getMethod("execute", null);
152: driver.invoke(generateJBIDecsriptorObj, null);
153: } catch (NoSuchMethodException ex) {
154: throw new RuntimeException(ex);
155: // ex.printStackTrace();
156: } catch (ClassNotFoundException ex) {
157: throw new RuntimeException(ex);
158: } catch (IllegalAccessException ex) {
159: throw new RuntimeException(ex);
160: } catch (InvocationTargetException ex) {
161: ex.getCause().printStackTrace();
162: throw new RuntimeException(ex);
163: } catch (InstantiationException ex) {
164: throw new RuntimeException(ex);
165: }
166: }
167:
168: /**
169: * Create custom classloader ( Ant classloader) with
170: * parentFirst = false
171: */
172: private void initClassLoader() {
173: Path path = new Path(getProject());
174: path.setRefid(m_ref);
175:
176: Path parentPath = new Path(getProject());
177: ClassLoader cl = this .getClass().getClassLoader();
178: if (cl instanceof AntClassLoader) {
179: parentPath.setPath(((AntClassLoader) cl).getClasspath());
180: ((AntClassLoader) cl).setParent(null);
181: parentPath.add(path);
182: path = parentPath;
183: }
184: m_myClassLoader.setClassPath(path);
185: m_myClassLoader.setParent(null);
186: m_myClassLoader.setParentFirst(false);
187: }
188:
189: public static void main(String[] args) {
190: GenerateJBIDescriptorTask ddt = new GenerateJBIDescriptorTask();
191:
192: }
193: }
|