diff --git a/gen/pom.xml b/gen/pom.xml index 12a595ef..13b3f1cf 100644 --- a/gen/pom.xml +++ b/gen/pom.xml @@ -705,7 +705,7 @@ executionJBossEE6 validate - true + false @author diff --git a/metadata-parser-test/pom.xml b/metadata-parser-test/pom.xml index 3db4ee25..990112d9 100644 --- a/metadata-parser-test/pom.xml +++ b/metadata-parser-test/pom.xml @@ -81,6 +81,8 @@ datasources org.jboss.datasources.api org.jboss.datasources.impl + ${basedir}/src/test/resources/packageInfo/datasourceApi/package-info.java + ${basedir}/src/test/resources/packageInfo/datasourceImpl/package-info.java DatasourcesDescriptor datasources datasources:datasourcesType diff --git a/metadata-parser-test/src/test/resources/packageInfo/datasourceApi/package-info.java b/metadata-parser-test/src/test/resources/packageInfo/datasourceApi/package-info.java new file mode 100644 index 00000000..ef055513 --- /dev/null +++ b/metadata-parser-test/src/test/resources/packageInfo/datasourceApi/package-info.java @@ -0,0 +1,5 @@ + /** + * Provides the implementation classes as defined in the schema + */ + +package org.jboss.datasources.api; diff --git a/metadata-parser-test/src/test/resources/packageInfo/datasourceImpl/package-info.java b/metadata-parser-test/src/test/resources/packageInfo/datasourceImpl/package-info.java new file mode 100644 index 00000000..328962b2 --- /dev/null +++ b/metadata-parser-test/src/test/resources/packageInfo/datasourceImpl/package-info.java @@ -0,0 +1,5 @@ + /** + * Provides the implementation classes as defined in the schema + */ + +package org.jboss.datasources.impl; diff --git a/metadata-parser/pom.xml b/metadata-parser/pom.xml index 72ad8c16..47348337 100644 --- a/metadata-parser/pom.xml +++ b/metadata-parser/pom.xml @@ -80,6 +80,12 @@ 3.1 + + commons-io + commons-io + 2.4 + + 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;