commons-logging
commons-logging
diff --git a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataDescriptor.java b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataDescriptor.java
index 4a6a21a2..077418bb 100644
--- a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataDescriptor.java
+++ b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataDescriptor.java
@@ -31,6 +31,10 @@ public class MetadataDescriptor extends BaseMetadataItem {
private boolean generateClasses;
+ private String pathToPackageInfoApi;
+
+ private String pathToPackageInfoImpl;
+
private Properties namespaces = new Properties();
public MetadataDescriptor(String name) {
@@ -68,4 +72,20 @@ public boolean isGenerateClasses() {
public void setGenerateClasses(final boolean generateClasses) {
this.generateClasses = generateClasses;
}
+
+ public String getPathToPackageInfoApi() {
+ return pathToPackageInfoApi;
+ }
+
+ public void setPathToPackageInfoApi(final String pathToPackageInfoApi) {
+ this.pathToPackageInfoApi = pathToPackageInfoApi;
+ }
+
+ public String getPathToPackageInfoImpl() {
+ return pathToPackageInfoImpl;
+ }
+
+ public void setPathToPackageInfoImpl(final String pathToPackageInfoImpl) {
+ this.pathToPackageInfoImpl = pathToPackageInfoImpl;
+ }
}
diff --git a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParser.java b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParser.java
index ab7b740e..c00b9206 100644
--- a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParser.java
+++ b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParser.java
@@ -31,6 +31,7 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerException;
+import org.apache.commons.io.FileUtils;
import org.jboss.shrinkwrap.descriptor.metadata.dom.DomWriter;
import org.jboss.shrinkwrap.descriptor.metadata.dtd.MetadataDtdEventListener;
import org.jboss.shrinkwrap.descriptor.metadata.xslt.XsltTransformer;
@@ -103,6 +104,9 @@ public void parse(final MetadataParserPath path, final List> confList, final L
metadataDescriptor.setNamespace(metadataConf.getNameSpace());
metadataDescriptor.setNamespaces(metadataConf.getNamespaces());
metadataDescriptor.setGenerateClasses(metadataConf.generateClasses);
+ metadataDescriptor.setPathToPackageInfoApi(metadataConf.getPathToPackageInfoApi());
+ metadataDescriptor.setPathToPackageInfoImpl(metadataConf.getPathToPackageInfoImpl());
+
metadata.getMetadataDescriptorList().add(metadataDescriptor);
if (log.isLoggable(Level.FINE)) {
@@ -155,6 +159,7 @@ public void parse(final MetadataParserPath path, final List> confList, final L
if (path.getPathToApi() != null && path.getPathToImpl() != null) {
generateCode(path, verbose);
+ PackageInfo.copyPackageInfo(path, metadata, verbose);
}
}
diff --git a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParserConfiguration.java b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParserConfiguration.java
index 7fea94ef..06b403f1 100644
--- a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParserConfiguration.java
+++ b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/MetadataParserConfiguration.java
@@ -71,6 +71,16 @@ public class MetadataParserConfiguration {
*/
protected boolean verbose;
+ /**
+ * Optional file for package.html or package-info.java
+ */
+ protected String pathToPackageInfoApi;
+
+ /**
+ * Optional file for package.html or package-info.java
+ */
+ protected String pathToPackageInfoImpl;
+
/**
* The map declaring the name spaces for the given descriptor.
*/
@@ -156,4 +166,19 @@ public void setGenerateClasses(final boolean generateClasses) {
this.generateClasses = generateClasses;
}
+ public String getPathToPackageInfoApi() {
+ return pathToPackageInfoApi;
+ }
+
+ public void setPathToPackageInfoApi(final String pathToPackageInfoApi) {
+ this.pathToPackageInfoApi = pathToPackageInfoApi;
+ }
+
+ public String getPathToPackageInfoImpl() {
+ return pathToPackageInfoImpl;
+ }
+
+ public void setPathToPackageInfoImpl(final String pathToPackageInfoImpl) {
+ this.pathToPackageInfoImpl = pathToPackageInfoImpl;
+ }
}
diff --git a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/PackageInfo.java b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/PackageInfo.java
new file mode 100644
index 00000000..5eeca2d3
--- /dev/null
+++ b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/PackageInfo.java
@@ -0,0 +1,102 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2011, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * 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.
+ */
+
+package org.jboss.shrinkwrap.descriptor.metadata;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.logging.Logger;
+
+import org.apache.commons.io.FileUtils;
+
+/**
+ * This class copies optionally the package info files into source directories.
+ *
+ * @author Ralf Battenfeld
+ */
+public final class PackageInfo {
+ public static final String PACKAGE_HTML_NAME = "package.html";
+ public static final String PACKAGE_JAVA_NAME = "package-info.java";
+ private static final Logger log = Logger.getLogger(PackageInfo.class.getName());
+
+ /**
+ * Copies the optional packageInfo files into the packages.
+ * @param path
+ * @param metadata
+ * @throws IOException
+ */
+ public static void copyPackageInfo(final MetadataParserPath path, final Metadata metadata, final boolean verbose) throws IOException {
+ for (final MetadataDescriptor descriptor : metadata.getMetadataDescriptorList()) {
+ if (descriptor.getPathToPackageInfoApi() != null) {
+ final File sourceFile = new File(descriptor.getPathToPackageInfoApi());
+ final String destDirectory = path.pathToApi + File.separatorChar + descriptor.getPackageApi().replace('.', '/');
+ deleteExistingPackageInfo(destDirectory, verbose);
+ copy(sourceFile, destDirectory, verbose);
+ }
+
+ if (descriptor.getPathToPackageInfoImpl() != null) {
+ final File sourceFile = new File(descriptor.getPathToPackageInfoImpl());
+ final String destDirectory = path.pathToImpl + File.separatorChar + descriptor.getPackageImpl().replace('.', '/');
+ deleteExistingPackageInfo(destDirectory, verbose);
+ copy(sourceFile, destDirectory, verbose);
+ }
+ }
+ }
+
+ /**
+ * Copies the given sourceFile into the specified directory. The source file post fix
+ * defines which variant of the package info file is created.
+ *
+ * If the source file ends with .java, then the destination file name is package-info.java
+ * otherwise the file name is package.html.
+ *
+ * @param sourceFile
+ * @param destDirectory
+ * @param verbose
+ * @throws IOException
+ */
+ public static void copy(final File sourceFile, final String destDirectory, final boolean verbose) throws IOException {
+ String destFileName = PACKAGE_HTML_NAME;
+ if (sourceFile.getName().endsWith("java")) {
+ destFileName = PACKAGE_JAVA_NAME;
+ }
+
+ final File destFile = new File(destDirectory + File.separatorChar + destFileName);
+ if (verbose) {
+ log.info(String.format("Copying packageInfo from: %s to: %s", sourceFile.getAbsolutePath(), destFile.getAbsolutePath()));
+ }
+
+ FileUtils.copyFile(sourceFile, destFile, true);
+ }
+
+ /**
+ * Deletes package.html or package-info.java from the given directory.
+ * @param destDirectory
+ * @param verbose
+ */
+ public static void deleteExistingPackageInfo(final String destDirectory, final boolean verbose) {
+ final File htmlFile = new File(destDirectory + File.separatorChar + PACKAGE_HTML_NAME);
+ final File javaFile = new File(destDirectory + File.separatorChar + PACKAGE_JAVA_NAME);
+ final Boolean isHtmlDeleted = FileUtils.deleteQuietly(htmlFile);
+ final Boolean isJavaDeleted = FileUtils.deleteQuietly(javaFile);
+
+ if (verbose) {
+ log.info(String.format("File %s deleted: %s", htmlFile.getAbsolutePath(), isHtmlDeleted.toString()));
+ log.info(String.format("File %s deleted: %s", javaFile.getAbsolutePath(), isJavaDeleted.toString()));
+ }
+ }
+}
diff --git a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/dom/DomWriter.java b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/dom/DomWriter.java
index ae6a5eb7..882a7a0f 100644
--- a/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/dom/DomWriter.java
+++ b/metadata-parser/src/main/java/org/jboss/shrinkwrap/descriptor/metadata/dom/DomWriter.java
@@ -106,6 +106,12 @@ public void write(final Metadata metadata, final String pathToMetadata,
generateClassApi.setValue(Boolean.toString(descriptor.isGenerateClasses()));
packageApi.setAttributeNode(generateClassApi);
+ if (descriptor.getPathToPackageInfoApi() != null) {
+ final Attr pathToPackageInfoApi = doc.createAttribute("packageInfo");
+ pathToPackageInfoApi.setValue(descriptor.getPathToPackageInfoApi());
+ packageApi.setAttributeNode(pathToPackageInfoApi);
+ }
+
packages.appendChild(packageApi);
}
@@ -122,6 +128,13 @@ public void write(final Metadata metadata, final String pathToMetadata,
final Attr generateClassImpl = doc.createAttribute("generateClass");
generateClassImpl.setValue(Boolean.toString(descriptor.isGenerateClasses()));
packageImpl.setAttributeNode(generateClassImpl);
+
+ if (descriptor.getPathToPackageInfoImpl() != null) {
+ final Attr pathToPackageInfoImpl = doc.createAttribute("packageInfo");
+ pathToPackageInfoImpl.setValue(descriptor.getPathToPackageInfoImpl());
+ packageImpl.setAttributeNode(pathToPackageInfoImpl);
+ }
+
packages.appendChild(packageImpl);
}
diff --git a/metadata-parser/src/main/resources/META-INF/ddJavaAll.xsl b/metadata-parser/src/main/resources/META-INF/ddJavaAll.xsl
index 0413a4dd..f1938d0c 100644
--- a/metadata-parser/src/main/resources/META-INF/ddJavaAll.xsl
+++ b/metadata-parser/src/main/resources/META-INF/ddJavaAll.xsl
@@ -1470,7 +1470,7 @@
-
+
diff --git a/metadata-parser/src/test/java/org/jboss/shrinkwrap/descriptor/metadata/PackageInfoTest.java b/metadata-parser/src/test/java/org/jboss/shrinkwrap/descriptor/metadata/PackageInfoTest.java
new file mode 100644
index 00000000..f219c200
--- /dev/null
+++ b/metadata-parser/src/test/java/org/jboss/shrinkwrap/descriptor/metadata/PackageInfoTest.java
@@ -0,0 +1,40 @@
+package org.jboss.shrinkwrap.descriptor.metadata;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class PackageInfoTest {
+
+ @Rule
+ public TemporaryFolder folder = new TemporaryFolder();
+
+ @Test
+ public void testCopyAndDeleteHtmlFile() throws IOException {
+ final File packageFile = new File("src/test/resources/package-info-impl.html");
+ PackageInfo.copy(packageFile, folder.getRoot().getAbsolutePath(), true);
+ final File destFile = new File(folder.getRoot().getAbsolutePath() + File.separatorChar + PackageInfo.PACKAGE_HTML_NAME);
+ assertTrue(destFile.exists());
+
+ PackageInfo.deleteExistingPackageInfo(folder.getRoot().getAbsolutePath(), true);
+ assertFalse(destFile.exists());
+ }
+
+ @Test
+ public void testCopyJavaFile() throws IOException {
+ final File packageFile = new File("src/test/resources/package-info-api.java");
+ PackageInfo.copy(packageFile, folder.getRoot().getAbsolutePath(), true);
+ final File destFile = new File(folder.getRoot().getAbsolutePath() + File.separatorChar + PackageInfo.PACKAGE_JAVA_NAME);
+ assertTrue(destFile.exists());
+
+ PackageInfo.deleteExistingPackageInfo(folder.getRoot().getAbsolutePath(), true);
+ assertFalse(destFile.exists());
+ }
+
+}
diff --git a/metadata-parser/src/test/resources/package-info-api.java b/metadata-parser/src/test/resources/package-info-api.java
new file mode 100644
index 00000000..ef055513
--- /dev/null
+++ b/metadata-parser/src/test/resources/package-info-api.java
@@ -0,0 +1,5 @@
+ /**
+ * Provides the implementation classes as defined in the schema
+ */
+
+package org.jboss.datasources.api;
diff --git a/metadata-parser/src/test/resources/package-info-impl.html b/metadata-parser/src/test/resources/package-info-impl.html
new file mode 100644
index 00000000..328962b2
--- /dev/null
+++ b/metadata-parser/src/test/resources/package-info-impl.html
@@ -0,0 +1,5 @@
+ /**
+ * Provides the implementation classes as defined in the schema
+ */
+
+package org.jboss.datasources.impl;