Add license and notice  file to the online-manipulator
Add apache license header to the online-manipulator

Edit license and notice file of junit4osgi

Add the online-manipulator to the reactor

Fix a potential NPE in the manipulator when the Created-By entry does not exist in the manipulated jar

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@767443 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/online-manipulator/LICENSE b/ipojo/online-manipulator/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/ipojo/online-manipulator/LICENSE
@@ -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/ipojo/online-manipulator/NOTICE b/ipojo/online-manipulator/NOTICE
new file mode 100644
index 0000000..06496a3
--- /dev/null
+++ b/ipojo/online-manipulator/NOTICE
@@ -0,0 +1,28 @@
+Apache Felix iPOJO Online Manipulator
+Copyright 2008-2009 The Apache Software Foundation
+
+I. Included Software
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+Licensed under the Apache License 2.0.
+
+This product includes software developed at
+Copyright (c) 2000-2005 INRIA, France Telecom
+Licensed under BSD License.
+
+II. Used Software
+
+This product uses software developed at
+The Apache Software Foundation (http://www.apache.org/).
+Licensed under the Apache License 2.0.
+
+This product uses software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright (c) OSGi Alliance (2000, 2007).
+Licensed under the Apache License 2.0.
+
+III. License Summary
+- Apache License 2.0
+- BSD Licence
+
diff --git a/ipojo/online-manipulator/metadata.xml b/ipojo/online-manipulator/metadata.xml
index 352564c..faa1f7d 100644
--- a/ipojo/online-manipulator/metadata.xml
+++ b/ipojo/online-manipulator/metadata.xml
@@ -1,3 +1,21 @@
+<!--
+ 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.
+-->
 <ipojo>
 <component classname="org.apache.felix.org.apache.felix.ipojo.online.manipulator.IPOJOURLHandler" 
 	public="false"
diff --git a/ipojo/online-manipulator/pom.xml b/ipojo/online-manipulator/pom.xml
index 68d7b62..fdd899a 100644
--- a/ipojo/online-manipulator/pom.xml
+++ b/ipojo/online-manipulator/pom.xml
@@ -1,53 +1,94 @@
-<project>
-  <modelVersion>4.0.0</modelVersion>
-  <packaging>bundle</packaging>
-  <groupId>org.apache.felix</groupId>
-  <artifactId>org.apache.felix.ipojo.online.manipulator</artifactId>
-  <version>1.3.0-SNAPSHOT</version>
-  <name>Apache Felix iPOJO URL Handler</name>
-  
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <version>1.4.3</version>
-        <extensions>true</extensions>
-        <configuration>
-          <instructions>
-            <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
-            <Private-Package>org.apache.felix.org.apache.felix.ipojo.online.manipulator</Private-Package>
-            <Export-Package>
-            				org.apache.felix.ipojo.manipulator,
-            				org.apache.felix.ipojo.xml.parser,
-            				org.apache.felix.ipojo.manipulation,
+<!--
+ 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.
+-->
+<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/maven-v4_0_0.xsd">
+	<parent>
+		<groupId>org.apache.felix</groupId>
+		<artifactId>felix</artifactId>
+		<version>1.0.4</version>
+		<relativePath>../../pom/pom.xml</relativePath>
+	</parent>
+	<modelVersion>4.0.0</modelVersion>
+	<packaging>bundle</packaging>
+	<artifactId>org.apache.felix.ipojo.online.manipulator</artifactId>
+	<version>1.3.0-SNAPSHOT</version>
+	<name>Apache Felix iPOJO URL Handler</name>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>1.4.3</version>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+						<Private-Package>org.apache.felix.org.apache.felix.ipojo.online.manipulator</Private-Package>
+						<Export-Package> org.apache.felix.ipojo.manipulator,
+							org.apache.felix.ipojo.xml.parser,
+							org.apache.felix.ipojo.manipulation,
 							org.apache.felix.ipojo.manipulation.annotations,
-							org.objectweb.asm.commons, org.objectweb.asm
-			</Export-Package>
-			<Import-Package>
-			!org.objectweb.asm.tree, !sun.io,
-							*
+							org.objectweb.asm.commons, org.objectweb.asm </Export-Package>
+						<Import-Package> !org.objectweb.asm.tree, !sun.io, * 
 						</Import-Package>
 						<Embed-Dependency>xercesImpl|xml-resolver</Embed-Dependency>
-          </instructions>
-        </configuration>
-      </plugin>
-      <plugin>
-	      <groupId>org.apache.felix</groupId>
-	      <artifactId>maven-ipojo-plugin</artifactId>
-	       <version>1.3.0-SNAPSHOT</version>
-		  <executions>
-          	<execution>
-            	<goals>
-	              <goal>ipojo-bundle</goal>
-               </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-  			<dependency>
+					</instructions>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-ipojo-plugin</artifactId>
+				<version>1.3.0-SNAPSHOT</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>ipojo-bundle</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>rat-maven-plugin</artifactId>
+				<configuration>
+					<excludeSubProjects>false</excludeSubProjects>
+					<useEclipseDefaultExcludes>true</useEclipseDefaultExcludes>
+					<useMavenDefaultExcludes>true</useMavenDefaultExcludes>
+					<excludes>
+						<param>doc/*</param>
+						<param>maven-eclipse.xml</param>
+						<param>.checkstyle</param>
+						<param>.externalToolBuilders/*</param>
+					</excludes>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-checkstyle-plugin</artifactId>
+				<configuration>
+					<configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<dependency>
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
 			<version>1.3.0-SNAPSHOT</version>
@@ -63,20 +104,20 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
-  	<dependency>
-  		<groupId>org.apache.felix</groupId>
-  		<artifactId>org.osgi.core</artifactId>
-  		<version>1.2.0</version>
-  	</dependency>
-  	<dependency>
-  		<groupId>xerces</groupId>
-  		<artifactId>xercesImpl</artifactId>
-  		<version>2.9.1</version>
-  	</dependency>
-  	<dependency>
-  		<groupId>xml-resolver</groupId>
-  		<artifactId>xml-resolver</artifactId>
-  		<version>1.2</version>
-  	</dependency>
-  </dependencies>
-</project>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.osgi.core</artifactId>
+			<version>1.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>xerces</groupId>
+			<artifactId>xercesImpl</artifactId>
+			<version>2.9.1</version>
+		</dependency>
+		<dependency>
+			<groupId>xml-resolver</groupId>
+			<artifactId>xml-resolver</artifactId>
+			<version>1.2</version>
+		</dependency>
+	</dependencies>
+</project>
\ No newline at end of file
diff --git a/ipojo/online-manipulator/src/main/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java b/ipojo/online-manipulator/src/main/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
index 27b0bc0..b71246a 100644
--- a/ipojo/online-manipulator/src/main/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
+++ b/ipojo/online-manipulator/src/main/java/org/apache/felix/org/apache/felix/ipojo/online/manipulator/IPOJOURLHandler.java
@@ -1,3 +1,21 @@
+/* 
+ * 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.org.apache.felix.ipojo.online.manipulator;
 
 import java.io.File;
@@ -14,11 +32,34 @@
 import org.osgi.framework.BundleContext;
 import org.osgi.service.url.URLStreamHandlerService;
 
+/**
+* iPOJO URL Handler allowing installation time manipulation.
+* When a bundle is installed with the <code>ipojo:</code> URL
+* prefix, the bundle is downloaded and manipulated by this 
+* handler.
+* The metadata.xml file can either be provided inside the bundle (root,
+* or in META-INF) or given in the URL:
+* ipojo:URL_BUNDLE!URL_METADATA.
+* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+*/
 public class IPOJOURLHandler extends org.osgi.service.url.AbstractURLStreamHandlerService implements URLStreamHandlerService {
     
+    /**
+     * The bundle context.
+     */
     private BundleContext m_context;
+    
+    /**
+     * The directory storing bundles.
+     */
     private File m_temp;
     
+    /**
+     * Creates a IPOJOURLHandler.
+     * Gets the bundle context and create the working
+     * directory.
+     * @param bc the bundle context
+     */
     public IPOJOURLHandler(BundleContext bc) {
         m_context = bc;
         m_temp = m_context.getDataFile("temp");
@@ -27,6 +68,10 @@
         }
     }
     
+    /**
+     * Stops the URL handler:
+     * Deletes the working directory.  
+     */
     public void stop() {
         File[] files = m_temp.listFiles();
         for (int i = 0; i < files.length; i++) {
@@ -35,6 +80,15 @@
         m_temp.delete();
     }
 
+    /**
+     * Opens a connection using the ipojo url handler.
+     * This methods parses the URL and manipulate the given bundle.
+     * @param url the url.
+     * @return the URL connection on the manipulated bundle
+     * @throws IOException  occurs when the bundle cannot be either downloaded, or manipulated or
+     * installed correctly.
+     * @see org.osgi.service.url.AbstractURLStreamHandlerService#openConnection(java.net.URL)
+     */
     public URLConnection openConnection(URL url) throws IOException {
         System.out.println("Processing URL : " + url);
 
@@ -52,19 +106,19 @@
         full = full.trim();
         
         // Now full is like : URL,URL or URL
-        String urls[] = full.split("!");
+        String[] urls = full.split("!");
         URL bundleURL = null;
         URL metadataURL = null;
         if (urls.length == 1) {
             // URL form
             System.out.println("Extracted URL : " + urls[0]);
             bundleURL = new URL(urls[0]);
-        } else if (urls.length == 2){
+        } else if (urls.length == 2) {
             // URL,URL form
             bundleURL = new URL(urls[0]);
             metadataURL = new URL(urls[1]);
         } else {
-            throw new MalformedURLException("The iPOJO url is not formatted correctly, ipojo://bundle_url[!metadata_url] expected");
+            throw new MalformedURLException("The iPOJO url is not formatted correctly, ipojo:bundle_url[!metadata_url] expected");
         }
         
         File bundle = File.createTempFile("ipojo_", ".jar", m_temp);
@@ -81,7 +135,7 @@
         
         // Pojoization
         Pojoization pojoizator = new Pojoization();
-        File out =  new File(m_temp, bundle.getName()+"-ipojo.jar");
+        File out =  new File(m_temp, bundle.getName() + "-ipojo.jar");
         System.out.println("Pojoization " + bundle.exists() + " - " + metadata.exists());
         try {
             pojoizator.pojoization(bundle, out, metadata);
@@ -97,7 +151,7 @@
             throw new IOException("Errors occured during the manipulation : " + pojoizator.getErrors());
         }
         if (! pojoizator.getWarnings().isEmpty()) {
-           System.err.println("Warnings occured during the manipulation : " + pojoizator.getWarnings());
+            System.err.println("Warnings occured during the manipulation : " + pojoizator.getWarnings());
         }
 
         System.out.println("Manipulation done : " + out.exists());
@@ -114,18 +168,34 @@
         
     }
 
+    /**
+     * Downloads the content pointed by the given url to
+     * the given file.
+     * @param url   the url
+     * @param file  the file
+     * @throws IOException occurs if the content cannot be read 
+     * and save inside the file 
+     */
     private void save(URL url, File file) throws IOException {
         InputStream is = url.openStream();
         save(is, file);
     }
     
+    /**
+     * Saves the content of the input stream to the given file.
+     * @param is    the input stream to read
+     * @param file  the file
+     * @throws IOException  occurs if the content cannot be read 
+     * and save inside the file  
+     */
     private void save(InputStream is, File file) throws IOException {
         FileOutputStream writer = new FileOutputStream(file);
         int cc = 0;
         do {
             int i = is.read();
-            if (i == -1)
+            if (i == -1) {
                 break;
+            }
             cc++;
             writer.write(i);
         } while (true);
@@ -134,6 +204,17 @@
         writer.close();        
     }
     
+    /**
+     * Looks for the metadata.xml file in the jar file.
+     * Two locations are checked:
+     * <ol>
+     * <li>the root of the jar file</li>
+     * <li>the META-INF directory</li>
+     * </ol>
+     * @param jar   the jar file
+     * @return  the founded file or <code>null</code> if not found.
+     * @throws IOException  occurs when the Jar file cannot be read.
+     */
     private File findMetadata(JarFile jar) throws IOException {
         JarEntry je = jar.getJarEntry("metadata.xml");
         if (je == null) {
@@ -141,6 +222,7 @@
         }
         
         if (je == null) {
+            System.out.println("Metadata file not found, use annotations only.");
             return null; // Not Found, use annotation only
         } else {
             System.out.println("Metadata file found: " + je.getName());