summaryrefslogtreecommitdiffstats
path: root/branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-11-11 23:11:56 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-11-11 23:11:56 +0000
commit9bed5ae38c581999db465b42b504026a7097af95 (patch)
treea32b086a857a4556b8aec1aa9ed3a586efd9461e /branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache
parentece4fd35da7b7fc76264776f81705e6b5b52d3e0 (diff)
Moving 1.x branches
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@835141 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache')
-rw-r--r--branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java122
-rw-r--r--branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/TuscanyWarMojo.java489
2 files changed, 0 insertions, 611 deletions
diff --git a/branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java b/branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java
deleted file mode 100644
index 3f3f674a66..0000000000
--- a/branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * 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.tuscany.plugin.war;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-
-/**
- * Represents a configured tuscany dependency for boot and extension libraries.
- *
- * @version $Rev$ $Date$
- */
-public class Dependency {
-
- /**
- * JAR type artifact.
- */
- private static final String TYPE_JAR = "jar";
-
- /**
- * Default boot libraries. TODO Decide on whether to get snapshot version rather than hardcoded version..
- */
- private static final Dependency[] DEFAULT_BOOT_LIBS = new Dependency[] { new WebappHostDependency() };
-
- /**
- * Group Id that is injected in from configuration.
- */
- private String groupId;
-
- /**
- * Artifact Id that is injected in from configuration.
- */
- private String artifactId;
-
- /**
- * Version that is injected in from configuration.
- */
- private String version;
-
- /**
- * Default constructor.
- *
- */
- public Dependency() {
- }
-
- /**
- * Initializes the field.
- *
- * @param groupId
- * Group id.
- * @param artifactId
- * Artifact id.
- * @param version
- * Artifact version.
- */
- public Dependency(String groupId, String artifactId, String version) {
- super();
- this.groupId = groupId;
- this.artifactId = artifactId;
- this.version = version;
- }
-
- /**
- * Gets the artifact using the specified artifact factory.
- *
- * @param artifactFactory
- * Artifact factory to use.
- * @return Artifact identified by the dependency.
- */
- public Artifact getArtifact(ArtifactFactory artifactFactory) {
- return artifactFactory.createArtifact(groupId, artifactId, version, Artifact.SCOPE_RUNTIME, TYPE_JAR);
- }
-
- /**
- * Returns the default boot libraries.
- *
- * @return Default boot libraries.
- */
- public static Dependency[] getDefaultBootLibs() {
- return DEFAULT_BOOT_LIBS;
- }
-
- /**
- * Checks whether the specified artifact has the same artifact id.
- *
- * @param artifact
- * Artifact to be matched.
- * @return True if the sepcified artifact has the same id.
- */
- public boolean match(Artifact artifact) {
- // TODO Auto-generated method stub
- return artifact.getArtifactId().equals(artifactId);
- }
-
- /**
- * Webapp host depndency.
- */
- private static class WebappHostDependency extends Dependency {
- // TODO Decide on whether to get snapshot version rather than hardcoded version
- private WebappHostDependency() {
- super("org.apache.tuscany.sca.runtime.webapp", "webapp-host", "0.1-pre-spec-SNAPSHOT");
- }
- }
-
-}
diff --git a/branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/TuscanyWarMojo.java b/branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/TuscanyWarMojo.java
deleted file mode 100644
index 622d8686b2..0000000000
--- a/branches/pre-spec-changes/runtime/webapp/plugin.war/src/main/java/org/apache/tuscany/plugin/war/TuscanyWarMojo.java
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * 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.tuscany.plugin.war;
-
-import java.beans.XMLEncoder;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.JarOutputStream;
-import java.util.zip.ZipException;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
-import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
-import org.apache.maven.artifact.metadata.ResolutionGroup;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-/**
- * Build the tuscany war file by adding the tuscany dependencies.
- *
- * Performs the following tasks.
- *
- * <ul>
- * <li>Adds the boot dependencies transitively to WEB-INF/tuscany/boot</li>
- * <li>By default boot libraries are transitively resolved from webapp-host</li>
- * <li>The version of boot libraries can be specified using configuration/runTimeVersion element</li>
- * <li>Boot libraries can be overridden using the configuration/bootLibs element in the plugin</li>
- * <li>Adds the extension artifacts specified using configuration/extensions to WEB-INF/tuscany/extensions</li>
- * <li>If configuration/loadExtensionsDependency is set to true extension dependencies are transitivel loaded</li>
- * <li>Extension dependencies are loaded into WEB-INF/tuscany/repository directory in a Maven repo format</li>
- * <li>Extension dependency metadata is written to WEB-INF/tuscany/repository/dependency.metadata file</li>
- * </ul>
- * @goal tuscany-war
- * @phase package
- *
- * @version $Rev$ $Date$
- *
- */
-public class TuscanyWarMojo extends AbstractMojo {
-
- /**
- * Tuscany path.
- */
- private static final String TUSCANY_PATH = "WEB-INF/tuscany/";
-
- /**
- * Tuscany boot path.
- */
- private static final String BOOT_PATH = TUSCANY_PATH + "boot/";
-
- /**
- * Tuscany extension path.
- */
- private static final String EXTENSION_PATH = TUSCANY_PATH + "extensions/";
-
- /**
- * Tuscany repository path.
- */
- private static final String REPOSITORY_PATH = TUSCANY_PATH + "repository/";
-
- /**
- * Artifact metadata source.
- *
- * @component
- */
- private ArtifactMetadataSource metadataSource;
-
- /**
- * Used to look up Artifacts in the remote repository.
- *
- * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
- * @required
- * @readonly
- */
- private ArtifactFactory artifactFactory;
-
- /**
- * Used to look up Artifacts in the remote repository.
- *
- * @parameter expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}"
- * @required
- * @readonly
- */
- protected ArtifactResolver resolver;
-
- /**
- * Location of the local repository.
- *
- * @parameter expression="${localRepository}"
- * @readonly
- * @required
- */
- private ArtifactRepository localRepository;
-
- /**
- * List of Remote Repositories used by the resolver
- *
- * @parameter expression="${project.remoteArtifactRepositories}"
- * @readonly
- * @required
- */
- private List remoteRepositories;
-
- /**
- * The directory for the generated WAR.
- *
- * @parameter expression="${project.build.directory}"
- * @required
- */
- private String outputDirectory;
-
- /**
- * The directory for the generated WAR.
- *
- * @parameter
- */
- private Dependency[] bootLibs = Dependency.getDefaultBootLibs();
-
- /**
- * The directory for the generated WAR.
- *
- * @parameter
- */
- private Dependency[] extensions = new Dependency[0];
-
- /**
- * The directory for the generated WAR.
- *
- * @parameter
- */
- private Dependency[] dependencies = new Dependency[0];
-
- /**
- * The name of the generated WAR.
- *
- * @parameter expression="${project.build.finalName}"
- * @required
- */
- private String warName;
-
- /**
- * A flag to indicate whether extension dependencies should be resolved transitively.
- *
- * @parameter
- */
- private boolean loadExtensionDependencies;
-
- /**
- * The default version of boot dependany jar files
- *
- * @parameter
- */
- private String runTimeVersion = null;
-
- /**
- * WEB-INF jar files.
- */
- private Set<String> packagedLibs = new HashSet<String>();
-
- /**
- * Transitive dependencies for extensions.
- */
- private Map transDepenedencyMap = new HashMap();
-
- /**
- * Executes the MOJO.
- */
- public void execute() throws MojoExecutionException {
-
- JarFile originalWar = null;
- JarOutputStream newWar = null;
- File originalWarFile = null;
- File newWarFile = null;
-
- boolean success = false;
-
- try {
-
- // if there is a runtime version specified and no bootLib dependancies,
- // modify the bootLibs to have the runtime version.
- if (runTimeVersion != null && bootLibs == Dependency.getDefaultBootLibs()) {
- Dependency dependancy = new Dependency("org.apache.tuscany.sca.runtime.webapp",
- "webapp-host", runTimeVersion);
- bootLibs = new Dependency[] {dependancy};
- }
-
- originalWarFile = new File(outputDirectory, warName + ".war");
- originalWar = new JarFile(originalWarFile);
-
- newWarFile = new File(outputDirectory, warName + "-temp.war");
- newWar = new JarOutputStream(new FileOutputStream(newWarFile));
-
- copyOriginal(originalWar, newWar);
-
- addEntry(newWar, TUSCANY_PATH);
- addEntry(newWar, BOOT_PATH);
- addEntry(newWar, EXTENSION_PATH);
- addEntry(newWar, REPOSITORY_PATH);
-
- for (Dependency dependency : bootLibs) {
- for (Artifact art : resolveArtifact(dependency.getArtifact(artifactFactory), true)) {
- addArtifact(newWar, BOOT_PATH, art);
- }
- }
-
- for (Dependency dependency : extensions) {
- for (Artifact art : resolveArtifact(dependency.getArtifact(artifactFactory), loadExtensionDependencies)) {
- if (dependency.match(art)) {
- addArtifact(newWar, EXTENSION_PATH, art);
- }
-
- // Load dependencies even for the extension itself
- if (loadExtensionDependencies) {
- loadTransitiveDependencies(newWar, art);
- }
-
- }
- }
-
- for (Dependency dependency : dependencies) {
- for (Artifact art : resolveArtifact(dependency.getArtifact(artifactFactory), loadExtensionDependencies)) {
- loadTransitiveDependencies(newWar, art);
- }
- }
-
- writeDependencyMetadata(newWar);
-
- success = true;
-
- } catch (Exception ex) {
- throw new MojoExecutionException(ex.getMessage(), ex);
- } finally {
- IOUtils.closeQuietly(newWar);
- }
-
- if (success) {
- if (!originalWarFile.delete()) {
- throw new MojoExecutionException("Unable to rename war file");
- }
- if (!newWarFile.renameTo(originalWarFile)) {
- throw new MojoExecutionException("Unable to rename war file");
- }
- }
-
- }
-
- /**
- * Adds an entry to the JAR failing safe for duplicate.
- *
- * @param jar JAR to which the entry is added.
- * @param entry Entry to be added.
- * @return True if added successfully.
- * @throws IOException In case of an IO error.
- */
- private boolean addEntry(JarOutputStream jar, String entry) throws IOException {
- try {
- jar.putNextEntry(new JarEntry(entry));
- return true;
- } catch (ZipException duplicateEntry) {
- getLog().info(duplicateEntry.getMessage());
- return false;
- }
- }
-
- /**
- * Writes the dependency metadata.
- * @param newWar WAR to which the metadata is written.
- * @throws IOException In case of an IO error.
- */
- private void writeDependencyMetadata(JarOutputStream newWar) throws IOException {
-
- FileOutputStream depMapOutStream = null;
- FileInputStream depMapInStream = null;
-
- try {
- String metadataFile = "dependency.metadata";
-
- File file = new File(outputDirectory, "webapp");
- file = new File(file, REPOSITORY_PATH);
- file.mkdirs();
-
- file = new File(file, metadataFile);
- file.createNewFile();
-
- depMapOutStream = new FileOutputStream(file);
- XMLEncoder xmlEncoder = new XMLEncoder(depMapOutStream);
- xmlEncoder.writeObject(transDepenedencyMap);
- xmlEncoder.close();
-
- if (addEntry(newWar, REPOSITORY_PATH + metadataFile)) {
- depMapInStream = new FileInputStream(file);
- IOUtils.copy(depMapInStream, newWar);
- }
-
- } finally {
- IOUtils.closeQuietly(depMapOutStream);
- IOUtils.closeQuietly(depMapInStream);
- }
-
- }
-
- /**
- * Builds the transitive dependencies for artifacts.
- *
- * @param newWar WARto which the artifacts are added.
- * @param art Extension artifact.
- * @throws IOException In case of an unexpected IO error.
- * @throws ArtifactResolutionException If the artifact cannot be resolved.
- * @throws ArtifactNotFoundException If the artifact is not found.
- * @throws ArtifactMetadataRetrievalException In case of error in retrieving metadata.
- */
- private void loadTransitiveDependencies(JarOutputStream newWar, Artifact art) throws IOException, ArtifactResolutionException,
- ArtifactNotFoundException, ArtifactMetadataRetrievalException {
-
- String artPath = art.getGroupId() + "/" + art.getArtifactId() + "/" + art.getVersion() + "/";
- String path = REPOSITORY_PATH + artPath;
- addArtifact(newWar, path, art);
-
- Set<String> transDepenedenyList = new HashSet<String>();
- transDepenedencyMap.put(artPath, transDepenedenyList);
-
- // Get the transitive dependencies for each dependency.
- for (Artifact transArt : resolveArtifact(art, true)) {
- String transArtPath = transArt.getGroupId() + "/" + transArt.getArtifactId() + "/" + transArt.getVersion() + "/";
- if (addArtifact(newWar, REPOSITORY_PATH + transArtPath, transArt)) {
- transDepenedenyList.add(transArtPath + transArt.getFile().getName());
- }
- }
-
- }
-
- /**
- * Resolves the specified artifact.
- *
- * @param artifact Artifact to be resolved.
- * @param transitive Whether to resolve transitively.
- * @return A set of resolved artifacts.
- * @throws IOException In case of an unexpected IO error.
- * @throws ArtifactResolutionException If the artifact cannot be resolved.
- * @throws ArtifactNotFoundException If the artifact is not found.
- * @throws ArtifactMetadataRetrievalException In case of error in retrieving metadata.
- */
- private Set<Artifact> resolveArtifact(Artifact artifact, boolean transitive) throws IOException, ArtifactResolutionException,
- ArtifactNotFoundException, ArtifactMetadataRetrievalException {
-
- Set<Artifact> resolvedArtifacts = new HashSet<Artifact>();
-
- // Resolve the artifact
- resolver.resolve(artifact, remoteRepositories, localRepository);
- resolvedArtifacts.add((Artifact) artifact);
-
- if (!transitive) {
- return resolvedArtifacts;
- }
-
- // Transitively resolve all the dependencies
- ResolutionGroup resolutionGroup = metadataSource.retrieve(artifact, localRepository, remoteRepositories);
- ArtifactResolutionResult result = resolver.resolveTransitively(resolutionGroup.getArtifacts(), artifact, remoteRepositories, localRepository,
- metadataSource);
-
- // Add the artifacts to the deployment unit
- for (Object depArtifact : result.getArtifacts()) {
- resolvedArtifacts.add((Artifact) depArtifact);
- }
- return resolvedArtifacts;
-
- }
-
- /**
- * Adds the artifact to the war file.
- *
- * @param newWar War file to which the artifact is added.
- * @param path Path within the war file where artifact is added.
- * @param artifact Artifact to be added.
- * @throws IOException In case of an unexpected IO error.
- */
- private boolean addArtifact(JarOutputStream newWar, String path, Artifact artifact) throws IOException {
-
- FileInputStream artifactStream = null;
- FileOutputStream fileOutputStream = null;
-
- try {
-
- File artifactFile = artifact.getFile();
- // For extensions, we'll add it even the packagedLibs has it
- if ((!EXTENSION_PATH.equals(path)) && packagedLibs.contains(artifactFile.getName())) {
- return false;
- }
- artifactStream = new FileInputStream(artifactFile);
-
- newWar.putNextEntry(new JarEntry(path + artifactFile.getName()));
-
- File file = new File(outputDirectory, "webapp");
- file = new File(file, path);
- file.mkdirs();
-
- file = new File(file, artifactFile.getName());
- fileOutputStream = new FileOutputStream(file);
-
- IOUtils.copy(artifactStream, fileOutputStream);
- IOUtils.closeQuietly(artifactStream);
-
- artifactStream = new FileInputStream(artifactFile);
- IOUtils.copy(artifactStream, newWar);
-
- packagedLibs.add(artifactFile.getName());
-
- getLog().info("Processed " + path + artifactFile.getName());
-
- return true;
-
- } finally {
- IOUtils.closeQuietly(artifactStream);
- IOUtils.closeQuietly(fileOutputStream);
- }
-
- }
-
- /**
- * Copies the original war file.
- *
- * @param originalWar Original war file.
- * @param newWar New war file.
- * @throws IOException In case of an unexpected IO error.
- */
- private void copyOriginal(JarFile originalWar, JarOutputStream newWar) throws IOException {
-
- Enumeration entries = originalWar.entries();
- packagedLibs.clear();
-
- while (entries.hasMoreElements()) {
-
- JarEntry entry = (JarEntry) entries.nextElement();
- InputStream jarEntryStream = null;
-
- try {
- jarEntryStream = originalWar.getInputStream(entry);
- newWar.putNextEntry(entry);
- IOUtils.copy(jarEntryStream, newWar);
- String name = entry.getName();
-
- if (name.endsWith(".jar")) {
- packagedLibs.add(name.substring(name.lastIndexOf("/") + 1));
- }
- } finally {
- IOUtils.closeQuietly(jarEntryStream);
- }
-
- }
-
- originalWar.close();
-
- }
-
-}