org.jboss.shrinkwrap.impl.base.container.WebContainerBase Maven / Gradle / Ivy
Show all versions of shrinkwrap-impl-base Show documentation
/*
* JBoss, Home of Professional Open Source
* Copyright 2009, 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.impl.base.container;
import java.io.File;
import java.net.URL;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
import org.jboss.shrinkwrap.api.asset.FileAsset;
import org.jboss.shrinkwrap.api.asset.UrlAsset;
import org.jboss.shrinkwrap.api.container.WebContainer;
import org.jboss.shrinkwrap.impl.base.Validate;
import org.jboss.shrinkwrap.impl.base.asset.AssetUtil;
import org.jboss.shrinkwrap.impl.base.asset.ServiceProviderAsset;
import org.jboss.shrinkwrap.impl.base.path.BasicPath;
/**
* WebContainerBase
*
* Abstract class that helps implement the WebContainer. Used by specs that extends the WebContainer.
*
* @author Aslak Knutsen
* @version $Revision: $
* @param
*/
public abstract class WebContainerBase> extends ContainerBase implements WebContainer {
// -------------------------------------------------------------------------------------||
// Class Members ----------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
// Instance Members -------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
// Constructor ------------------------------------------------------------------------||
// -------------------------------------------------------------------------------------||
protected WebContainerBase(Class actualType, Archive> archive) {
super(actualType, archive);
}
// -------------------------------------------------------------------------------------||
// Required Implementations - WebContainer --------------------------------------------||
// -------------------------------------------------------------------------------------||
/**
* Returns the path to web resources
*
* @return Base Path for the web resources
*/
protected abstract ArchivePath getWebPath();
/**
* Returns the path to WEB-INF
*
* @return the path to WEB-INF
*/
protected abstract ArchivePath getWebInfPath();
/**
* Returns the path to web container service providers
*
* @return the path to web container service providers
*/
protected abstract ArchivePath getServiceProvidersPath();
/*
* (non-Javadoc)
*
* @see org.jboss.declarchive.api.container.WebContainer#setWebXML(java.lang.String)
*/
@Override
public T setWebXML(String resourceName) throws IllegalArgumentException {
Validate.notNull(resourceName, "ResourceName should be specified");
return setWebXML(new ClassLoaderAsset(resourceName));
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#setWebXML(java.io.File)
*/
@Override
public T setWebXML(File resource) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
return setWebXML(new FileAsset(resource));
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#setWebXML(java.net.URL)
*/
@Override
public T setWebXML(URL resource) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
return setWebXML(new UrlAsset(resource));
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#setWebXML(org.jboss.shrinkwrap.api.Asset)
*/
@Override
public T setWebXML(Asset resource) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
return addAsWebInfResource(resource, "web.xml");
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#setWebXML(java.lang.Package, java.lang.String)
*/
@Override
public T setWebXML(Package resourcePackage, String resourceName) throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNull(resourceName, "ResourceName must be specified");
String classloaderResourceName = AssetUtil.getClassLoaderResourceName(resourcePackage, resourceName);
return setWebXML(new ClassLoaderAsset(classloaderResourceName));
}
/*
* (non-Javadoc)
*
* @see org.jboss.declarchive.api.container.WebContainer#addWebResource(java.lang.String)
*/
@Override
public T addAsWebResource(String resourceName) throws IllegalArgumentException {
Validate.notNull(resourceName, "ResourceName should be specified");
return addAsWebResource(new ClassLoaderAsset(resourceName),
AssetUtil.getNameForClassloaderResource(resourceName));
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.io.File)
*/
@Override
public T addAsWebResource(File resource) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
return addAsWebResource(new FileAsset(resource), resource.getName());
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.lang.String, java.lang.String)
*/
@Override
public T addAsWebResource(String resourceName, String target) throws IllegalArgumentException {
Validate.notNull(resourceName, "ResourceName should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebResource(new ClassLoaderAsset(resourceName), target);
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.io.File, java.lang.String)
*/
@Override
public T addAsWebResource(File resource, String target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebResource(new FileAsset(resource), target);
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.net.URL, java.lang.String)
*/
@Override
public T addAsWebResource(URL resource, String target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebResource(new UrlAsset(resource), target);
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(org.jboss.shrinkwrap.api.Asset,
* java.lang.String)
*/
@Override
public T addAsWebResource(Asset resource, String target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebResource(resource, new BasicPath(target));
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.lang.String,
* org.jboss.shrinkwrap.api.Path)
*/
@Override
public T addAsWebResource(String resourceName, ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resourceName, "ResourceName should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebResource(new ClassLoaderAsset(resourceName), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebResource(java.io.File,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebResource(File resource, ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebResource(new FileAsset(resource), target);
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.net.URL, org.jboss.shrinkwrap.api.Path)
*/
@Override
public T addAsWebResource(URL resource, ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebResource(new UrlAsset(resource), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebResource(org.jboss.shrinkwrap.api.asset.Asset,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebResource(Asset resource, ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
ArchivePath location = new BasicPath(getWebPath(), target);
return add(resource, location);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebResources(java.lang.Package, java.lang.String[])
*/
@Override
public T addAsWebResources(Package resourcePackage, String... resourceNames) throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNullAndNoNullValues(resourceNames,
"ResourceNames must be specified and can not container null values");
for (final String resourceName : resourceNames) {
addAsWebResource(resourcePackage, resourceName);
}
return covariantReturn();
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.lang.Package, java.lang.String)
*/
@Override
public T addAsWebResource(Package resourcePackage, String resourceName) throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNull(resourceName, "ResourceName must be specified");
String classloaderResourceName = AssetUtil.getClassLoaderResourceName(resourcePackage, resourceName);
ArchivePath target = ArchivePaths.create(classloaderResourceName);
return addAsWebResource(resourcePackage, resourceName, target);
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.lang.Package, java.lang.String,
* java.lang.String)
*/
@Override
public T addAsWebResource(Package resourcePackage, String resourceName, String target)
throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNull(resourceName, "ResourceName must be specified");
Validate.notNull(target, "Target must be specified");
return addAsWebResource(resourcePackage, resourceName, ArchivePaths.create(target));
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addWebResource(java.lang.Package, java.lang.String,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebResource(Package resourcePackage, String resourceName, ArchivePath target)
throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNull(resourceName, "ResourceName must be specified");
Validate.notNull(target, "Target must be specified");
String classloaderResourceName = AssetUtil.getClassLoaderResourceName(resourcePackage, resourceName);
Asset resource = new ClassLoaderAsset(classloaderResourceName);
return addAsWebResource(resource, target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.lang.String)
*/
@Override
public T addAsWebInfResource(final String resourceName) throws IllegalArgumentException {
Validate.notNull(resourceName, "ResourceName should be specified");
return addAsWebInfResource(new ClassLoaderAsset(resourceName),
AssetUtil.getNameForClassloaderResource(resourceName));
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.io.File)
*/
@Override
public T addAsWebInfResource(final File resource) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
return addAsWebInfResource(new FileAsset(resource), resource.getName());
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.lang.String, java.lang.String)
*/
@Override
public T addAsWebInfResource(final String resourceName, final String target) throws IllegalArgumentException {
Validate.notNull(resourceName, "ResourceName should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebInfResource(new ClassLoaderAsset(resourceName), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.io.File, java.lang.String)
*/
@Override
public T addAsWebInfResource(final File resource, final String target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNullOrEmpty(target, "Target should be specified");
return addAsWebInfResource(new FileAsset(resource), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.net.URL, java.lang.String)
*/
@Override
public T addAsWebInfResource(final URL resource, final String target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNullOrEmpty(target, "Target should be specified");
return addAsWebInfResource(new UrlAsset(resource), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(org.jboss.shrinkwrap.api.asset.Asset,
* java.lang.String)
*/
@Override
public T addAsWebInfResource(final Asset resource, final String target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNullOrEmpty(target, "Target should be specified");
return addAsWebInfResource(resource, ArchivePaths.create(target));
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.lang.String,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebInfResource(final String resourceName, final ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resourceName, "ResourceName should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebInfResource(new ClassLoaderAsset(resourceName), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.io.File,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebInfResource(final File resource, final ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebInfResource(new FileAsset(resource), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.net.URL,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebInfResource(final URL resource, final ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
return addAsWebInfResource(new UrlAsset(resource), target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(org.jboss.shrinkwrap.api.asset.Asset,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebInfResource(final Asset resource, final ArchivePath target) throws IllegalArgumentException {
Validate.notNull(resource, "Resource should be specified");
Validate.notNull(target, "Target should be specified");
final ArchivePath location = new BasicPath(getWebInfPath(), target);
return add(resource, location);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResources(java.lang.Package, java.lang.String[])
*/
@Override
public T addAsWebInfResources(final Package resourcePackage, final String... resourceNames)
throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNullAndNoNullValues(resourceNames,
"ResourceNames must be specified and can not container null values");
for (String resourceName : resourceNames) {
addAsWebInfResource(resourcePackage, resourceName);
}
return covariantReturn();
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.lang.Package, java.lang.String)
*/
@Override
public T addAsWebInfResource(final Package resourcePackage, final String resourceName)
throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNull(resourceName, "ResourceName must be specified");
final String classloaderResourceName = AssetUtil.getClassLoaderResourceName(resourcePackage, resourceName);
final ArchivePath target = ArchivePaths.create(classloaderResourceName);
return addAsWebInfResource(resourcePackage, resourceName, target);
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.lang.Package, java.lang.String,
* java.lang.String)
*/
@Override
public T addAsWebInfResource(final Package resourcePackage, final String resourceName, final String target)
throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNullOrEmpty(resourceName, "ResourceName must be specified");
Validate.notNullOrEmpty(target, "Target must be specified");
return addAsWebInfResource(resourcePackage, resourceName, ArchivePaths.create(target));
}
/**
* {@inheritDoc}
*
* @see org.jboss.shrinkwrap.api.container.WebContainer#addAsWebInfResource(java.lang.Package, java.lang.String,
* org.jboss.shrinkwrap.api.ArchivePath)
*/
@Override
public T addAsWebInfResource(final Package resourcePackage, final String resourceName, ArchivePath target)
throws IllegalArgumentException {
Validate.notNull(resourcePackage, "ResourcePackage must be specified");
Validate.notNullOrEmpty(resourceName, "ResourceName must be specified");
Validate.notNull(target, "Target must be specified");
final String classloaderResourceName = AssetUtil.getClassLoaderResourceName(resourcePackage, resourceName);
final Asset resource = new ClassLoaderAsset(classloaderResourceName);
return addAsWebInfResource(resource, target);
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.ManifestContainer#addServiceProvider(java.lang.Class,
* java.lang.Class>[])
*/
@Override
public T addAsServiceProvider(Class> serviceInterface, Class>... serviceImpls) throws IllegalArgumentException {
Validate.notNull(serviceInterface, "ServiceInterface must be specified");
Validate.notNullAndNoNullValues(serviceImpls, "ServiceImpls must be specified and can not contain null values");
Asset asset = new ServiceProviderAsset(serviceImpls);
ArchivePath path = new BasicPath(getServiceProvidersPath(), serviceInterface.getName());
return add(asset, path);
}
/* (non-Javadoc)
* @see org.jboss.shrinkwrap.impl.base.container.ContainerBase#addAsServiceProvider(java.lang.String, java.lang.String[])
*/
@Override
public T addAsServiceProvider(String serviceInterface, String... serviceImpls) throws IllegalArgumentException {
Validate.notNull(serviceInterface, "ServiceInterface must be specified");
Validate.notNullAndNoNullValues(serviceImpls, "ServiceImpls must be specified and can not contain null values");
Asset asset = new ServiceProviderAsset(serviceImpls);
ArchivePath path = new BasicPath(getServiceProvidersPath(), serviceInterface);
return add(asset, path);
}
/*
* (non-Javadoc)
*
* @see org.jboss.shrinkwrap.api.container.ServiceProviderContainer#addServiceProviderAndClasses(java.lang.Class,
* java.lang.Class>[])
*/
@Override
public T addAsServiceProviderAndClasses(Class> serviceInterface, Class>... serviceImpls)
throws IllegalArgumentException {
Validate.notNull(serviceInterface, "ServiceInterface must be specified");
Validate.notNullAndNoNullValues(serviceImpls, "ServiceImpls must be specified and can not contain null values");
addAsServiceProvider(serviceInterface, serviceImpls);
addClass(serviceInterface);
return addClasses(serviceImpls);
}
}