Defines an Ant Task to create iPOJO Bundles.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@565750 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/ant/pom.xml b/ipojo/ant/pom.xml
new file mode 100644
index 0000000..a0aa639
--- /dev/null
+++ b/ipojo/ant/pom.xml
@@ -0,0 +1,56 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

+ <parent>

+    <groupId>org.apache.felix</groupId>

+    <artifactId>felix</artifactId>

+    <version>1.1.0-SNAPSHOT</version>

+    <relativePath>../../pom/pom.xml</relativePath>

+  </parent>

+  <modelVersion>4.0.0</modelVersion>

+  <artifactId>org.apache.felix.ipojo.ant</artifactId>

+  <packaging>bundle</packaging>

+  <version>0.7.3-SNAPSHOT</version>

+  <name>iPOJO Ant Task</name>

+  <dependencies>

+  	<dependency>

+      <groupId>${pom.groupId}</groupId>

+      <artifactId>org.apache.felix.ipojo.metadata</artifactId>

+      <version>0.7.3-SNAPSHOT</version>

+    </dependency>

+    <dependency>

+      <groupId>${pom.groupId}</groupId>

+      <artifactId>org.apache.felix.ipojo.manipulator</artifactId>

+      <version>0.7.3-SNAPSHOT</version>

+    </dependency>

+    <dependency>

+      <groupId>xerces</groupId>

+      <artifactId>xercesImpl</artifactId>

+      <version>2.4.0</version>

+    </dependency>

+    <dependency>

+    	<groupId>ant</groupId>

+    	<artifactId>ant</artifactId>

+    	<version>1.6.5</version>

+    </dependency>

+  </dependencies>

+  

+  <build>

+  <plugins>

+  	<plugin>

+    	<groupId>org.apache.felix</groupId>

+    	<artifactId>maven-bundle-plugin</artifactId>

+    	<version>1.1.0-SNAPSHOT</version>

+    	<extensions>true</extensions>

+    	<configuration>

+        	<instructions>          

+          		<Bundle-Name>iPOJO Ant Task</Bundle-Name>

+		        <Bundle-Vendor>Clement ESCOFFIER</Bundle-Vendor>

+        		<Bundle-Description> iPOJO Ant Task </Bundle-Description>

+        		<Private-Package>org.apache.felix.ipojo.metadata, org.apache.felix.ipojo.manipulator, org.apache.felix.ipojo.xml.parser, org.apache.felix.ipojo.manipulation*, org.objectweb.asm, org.objectweb.asm.commons, org.apache.xerces.parsers, org.apache.xerces.xni*, org.apache.xerces.impl*, org.apache.xerces.util.*</Private-Package>

+          		<Export-Package>org.apache.felix.ipojo.task</Export-Package>

+        	</instructions>

+    	</configuration>

+  	</plugin>

+  </plugins>

+  </build>

+</project>
\ No newline at end of file
diff --git a/ipojo/ant/src/main/java/org/apache/felix/ipojo/task/IPojoTask.java b/ipojo/ant/src/main/java/org/apache/felix/ipojo/task/IPojoTask.java
new file mode 100644
index 0000000..1aec42d
--- /dev/null
+++ b/ipojo/ant/src/main/java/org/apache/felix/ipojo/task/IPojoTask.java
@@ -0,0 +1,141 @@
+/* 

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you 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.

+ */

+package org.apache.felix.ipojo.task;

+

+import java.io.File;

+

+import org.apache.felix.ipojo.manipulator.Pojoization;

+import org.apache.tools.ant.BuildException;

+import org.apache.tools.ant.Task;

+

+/**

+* iPOJO Ant Task.

+* This Ant taks manipulate an input bundle.

+* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>

+*/

+public class IPojoTask extends Task {

+    

+    /**

+     * Metadata file.

+     */

+    private File m_metadata;

+    

+    /**

+     * Input bundle.

+     */

+    private File m_input;

+    

+    /**

+     * Output bundle.

+     */

+    private File m_output;

+    

+    /**

+     * Set the metadata file.

+     * @param meta : the metadata file.

+     */

+    public void setMetadata(File meta) {

+        m_metadata = meta;

+    }

+    

+    /**

+     * Set the input bundle.

+     * @param in : the input bundle

+     */

+    public void setInput(File in) {

+        m_input = in;

+    }

+    

+    /**

+     * Set the output bundle.

+     * @param out : the output bundle

+     */

+    public void setOutput(File out) {

+        m_output = out;

+    }

+    

+    /**

+     * Execute the Ant Task.

+     * @see org.apache.tools.ant.Task#execute()

+     */

+    public void execute() {

+        

+        if (m_input == null) {

+            throw new BuildException("No input bundle specified");

+        }

+        if (!m_input.exists()) {

+            throw new BuildException("The input bundle " + m_input.getAbsolutePath() + " does not exist");

+        }

+        

+        System.out.println("Input Bundle File : " + m_input.getAbsolutePath());

+        

+        // Get metadata file

+        if (m_metadata == null) {

+            m_metadata = new File("./metadata.xml");

+            if (!m_metadata.exists()) {

+                System.out.println("No metadata file found - try to use only annotations");

+                m_metadata = null;

+            } else {

+                System.out.println("Metadata File : " + m_metadata.getAbsolutePath());

+            }

+        } else {

+            // Metadata file is specified, check existency

+            if (!m_metadata.exists()) {

+                throw new BuildException("No metadata file found - the file " + m_metadata.getAbsolutePath() + " does not exist");

+            } else {

+                System.out.println("Metadata File : " + m_metadata.getAbsolutePath());

+            }

+        }

+

+        System.out.println("Start bundle manipulation");

+        

+        if (m_output == null) {

+            m_output = new File("./_out.jar");

+        }

+        

+        if (m_output.exists()) {

+            boolean r = m_output.delete();

+            if (!r) { throw new BuildException("The file " + m_output.getAbsolutePath() + " cannot be deleted"); }

+        }

+        

+        Pojoization pojo = new Pojoization();

+        pojo.pojoization(m_input, m_output, m_metadata);

+        for (int i = 0; i < pojo.getWarnings().size(); i++) {

+            System.out.println((String) pojo.getWarnings().get(i));

+        }

+        if (pojo.getErrors().size() > 0) { throw new BuildException((String) pojo.getErrors().get(0)); }

+        

+        String out;

+        if (m_output.getName().equals("_out.jar")) {

+            m_input.delete();

+            m_output.renameTo(m_input);

+            out = m_input.getAbsolutePath();

+        } else {

+            out = m_output.getAbsolutePath();

+        }

+        

+        System.out.println("Bundle manipulation - SUCCESS");

+        System.out.println("Output File : " + out);

+        

+    }

+    

+    

+

+}

+