[jboss-svn-commits] JBoss Common SVN: r4555 - in shrinkwrap/trunk: extension-glassfish/src/main/resources/META-INF/services and 6 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jun 25 10:23:09 EDT 2010
Author: kenglxn
Date: 2010-06-25 10:23:08 -0400 (Fri, 25 Jun 2010)
New Revision: 4555
Added:
shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeExceptionDelegator.java
shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ExtensionWrapper.java
Removed:
shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionType.java
Modified:
shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchiveFactory.java
shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Configuration.java
shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ConfigurationBuilder.java
shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionLoader.java
shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeException.java
shrinkwrap/trunk/extension-glassfish/src/main/resources/META-INF/services/org.jboss.shrinkwrap.glassfish.api.ShrinkwrapReadableArchive
shrinkwrap/trunk/extension-jetty/src/main/resources/META-INF/services/org.jboss.shrinkwrap.jetty.api.ShrinkWrapWebAppContext
shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ServiceExtensionLoader.java
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ExplodedExporter
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ZipExporter
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ExplodedImporter
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ZipImporter
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.SerializableView
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.ZipSerializableView
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.EnterpriseArchive
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.JavaArchive
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.WebArchive
shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.spi.Configurable
shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ConfigurationBuilderTestCase.java
shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ShrinkWrapTestCase.java
shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$Extension
shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$WrongImplExtension
Log:
SHRINKWRAP-183 - Rework configuration mechanism for type mappings to default extensions
Moved the ExtensionMapping map from Configuration to ExtensionLoader.
Added method to ExtensionLoader to get the extension from the mapping.
Added ExtensionWrapper, and changed the extensionMapping to contain it as the value field.
Updated all META-INF/services files.
The loading of services files now throws a pretty exception if the file does not contain implementingClassName property.
The ServiceExtensionLoader now exposes the extension via getExtensionFromExtensionMapping. It also initializes the extensionMapping.
Added a delegator to be able to use UnknownExtensionTypeException from impl-base. Also removed code in UnknownExtensionTypeException that was no longer relevant.
Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchiveFactory.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchiveFactory.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ArchiveFactory.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -31,6 +31,7 @@
* presented to the caller in a designated {@link Assignable} view.
*
* @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @author <a href="mailto:ken at glxn.net">Ken Gullaksen</a>
* @version $Revision: $
*/
public final class ArchiveFactory
@@ -82,8 +83,7 @@
* will be be backed by the {@link Configuration}
* specific to this {@link ArchiveFactory}.
* Generates a random name for the archive and adds proper extension based
- * on the type mappings found in this {@link Domain}'s
- * {@link Configuration#getExtensionMappings()}s.
+ * on {@link ExtensionLoader#getExtensionFromExtensionMapping(Class)}.
* If no extension is found for the given type an {@link UnknownExtensionTypeException}
* is thrown.
*
@@ -101,18 +101,14 @@
throw new IllegalArgumentException("Type must be specified");
}
- // Get the extension type
- final ExtensionType extensionType = configuration.getExtensionMappings().get(type);
- if (extensionType == null)
- {
- throw UnknownExtensionTypeException.newInstance(type);
- }
+ // Get the extensionType type
+ final String extension = configuration.getExtensionLoader().getExtensionFromExtensionMapping(type);
// Generate a random name
String archiveName = UUID.randomUUID().toString();
// Delegate
- return create(type, archiveName += extensionType);
+ return create(type, archiveName += extension);
}
/**
@@ -152,7 +148,7 @@
* specific to this {@link ArchiveFactory}.
*
* @param type The type of the archive e.g. {@link org.jboss.shrinkwrap.api.spec.WebArchive}
- * @param archiveName the archiveName to use
+ * @param archiveFile the archiveFile to use
* @return An {@link Assignable} view
* @throws IllegalArgumentException If either argument is not supplied, if the specified
* {@link File} does not exist, or is not a valid ZIP file
Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Configuration.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Configuration.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/Configuration.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -16,7 +16,6 @@
*/
package org.jboss.shrinkwrap.api;
-import java.util.Map;
import java.util.concurrent.ExecutorService;
/**
@@ -55,8 +54,6 @@
*/
private final ExecutorService executorService;
- private final Map<Class<?>, ExtensionType> extensionMappings;
-
//-------------------------------------------------------------------------------------||
// Constructor ------------------------------------------------------------------------||
//-------------------------------------------------------------------------------------||
@@ -79,7 +76,6 @@
// Set
this.extensionLoader = builder.getExtensionLoader();
this.executorService = builder.getExecutorService();
- this.extensionMappings = builder.getExtensionMapping();
}
//-------------------------------------------------------------------------------------||
@@ -101,12 +97,4 @@
{
return executorService;
}
-
- /**
- * @return the extensionMapping
- */
- public Map<Class<?>, ExtensionType> getExtensionMappings()
- {
- return extensionMappings;
- }
}
Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ConfigurationBuilder.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ConfigurationBuilder.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ConfigurationBuilder.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -16,13 +16,6 @@
*/
package org.jboss.shrinkwrap.api;
-import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive;
-import org.jboss.shrinkwrap.api.spec.WebArchive;
-
-import java.util.HashMap;
-import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -73,11 +66,6 @@
*/
private ExecutorService executorService;
- /**
- * Mapping between {@link org.jboss.shrinkwrap.api.Assignable} and {@link org.jboss.shrinkwrap.api.ExtensionType}
- */
- private Map<Class<?>, ExtensionType> extensionMappings;
-
//-------------------------------------------------------------------------------------||
// Constructor ------------------------------------------------------------------------||
//-------------------------------------------------------------------------------------||
@@ -111,13 +99,6 @@
return executorService;
}
- /**
- * @return the extensionMapping
- */
- public Map<Class<?>, ExtensionType> getExtensionMapping()
- {
- return extensionMappings;
- }
/**
* Sets the {@link ExtensionLoader} to be used, returning this instance
@@ -143,17 +124,6 @@
}
/**
- * Sets the extensionMapping to be used, returning this instance
- * @param extensionMappings the extensionMapping
- * @return the ConfigurationBuilder
- */
- public ConfigurationBuilder extensionMappings(final Map<Class<?>, ExtensionType> extensionMappings)
- {
- this.extensionMappings = extensionMappings;
- return this;
- }
-
- /**
* Builds a new {@link Configuration} using the properties contained
* in this builder. In the case a property has not been specified, it will be defaulted
* according to the rules set forth in this {@link ConfigurationBuilder}'s contract.
@@ -189,14 +159,6 @@
}
this.extensionLoader(loader);
}
- if(getExtensionMapping() == null) {
- final Map<Class<?>, ExtensionType> extensionMapping = createDefaultExtensionMapping();
- if (log.isLoggable(Level.FINER))
- {
- log.finer("User has not defined an explicit extensionMapping; defaulting to " + extensionMapping);
- }
- this.extensionMappings(extensionMapping);
- }
}
/**
@@ -211,20 +173,4 @@
{}, ExtensionLoader.class);
}
- /**
- * Creates and populates the default extensionMapping
- * @return the extensionMapping
- */
- private Map<Class<?>, ExtensionType> createDefaultExtensionMapping()
- {
- extensionMappings = new HashMap<Class<?>, ExtensionType>();
-
- extensionMappings.put(WebArchive.class, ExtensionType.WAR);
- extensionMappings.put(JavaArchive.class, ExtensionType.JAR);
- extensionMappings.put(EnterpriseArchive.class, ExtensionType.EAR);
- extensionMappings.put(ResourceAdapterArchive.class, ExtensionType.RAR);
-
- return extensionMappings;
- }
-
}
Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionLoader.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionLoader.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionLoader.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -22,6 +22,7 @@
* Describes a way for the {@link Archive} to load extensions.
*
* @author <a href="mailto:aslak at conduct.no">Aslak Knutsen</a>
+ * @author <a href="mailto:ken at glxn.net">Ken Gullaksen</a>
* @version $Revision: $
*/
public interface ExtensionLoader
@@ -50,5 +51,13 @@
*/
public <T extends Assignable> ExtensionLoader addOverride(
Class<T> extensionClass,
- Class<? extends T> extensionImplClass);
+ Class<? extends T> extensionImplClass);
+
+ /**
+ * Gets the extension for the given type from the extensionMapping
+ * @param extensionClass The Extension interface class
+ * @param <T> The type of Extension
+ * @return the filename extension
+ */
+ public <T extends Assignable> String getExtensionFromExtensionMapping(Class<T> extensionClass);
}
Deleted: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionType.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionType.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/ExtensionType.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1,46 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2010, 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.api;
-
-/**
- * Class to help provide correct extension
- * in {@link ArchiveFactory#create(Class)}
- *
- * @author <a href="mailto:ken at glxn.net">Ken Gullaksen</a>
- * @version $Revision: $
- */
-class ExtensionType
-{
- static final ExtensionType WAR = new ExtensionType("war");
- static final ExtensionType JAR = new ExtensionType("jar");
- static final ExtensionType EAR = new ExtensionType("ear");
- static final ExtensionType RAR = new ExtensionType("rar");
- private static final String DOT_DELIMITER = ".";
- private final String extension;
-
- private ExtensionType(String extension)
- {
- this.extension = extension;
- }
-
- @Override
- public String toString()
- {
- return DOT_DELIMITER + extension;
- }
-}
Modified: shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeException.java
===================================================================
--- shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeException.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/api/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeException.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -14,17 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.jboss.shrinkwrap.api;
-import java.lang.reflect.Method;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
/**
* Indicates that a default name cannot be generated for
* a given type because no extension mapping has been configured
- * via {@link Configuration#getExtensionMappings()}.
- *
+ * via {@link ExtensionLoader#getExtensionFromExtensionMapping(Class)}.
+ *
* @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
* @version $Revision: $
*/
@@ -40,45 +37,17 @@
*/
private static final long serialVersionUID = 1L;
- /**
- * Method used in the error message instructing a developer how to add new extension
- * mappings
- */
- private static final Method GET_EXTENSION_MAPPING;
- static
- {
- GET_EXTENSION_MAPPING = AccessController.doPrivileged(new PrivilegedAction<Method>()
- {
-
- @Override
- public Method run()
- {
- try
- {
- return Configuration.class.getMethod("getExtensionMappings", new Class<?>[]
- {});
- }
- catch (final NoSuchMethodException e)
- {
- throw new RuntimeException(
- "Incorrect extension mappings method defined for error message; development error in ShrinkWrap");
- }
- }
- });
- }
-
//-------------------------------------------------------------------------------------||
// Constructor ------------------------------------------------------------------------||
//-------------------------------------------------------------------------------------||
/**
- * Creates a new instance with message indicating the missing type
+ * Creates a new instance with message indicating the missing type
*/
private <T extends Assignable> UnknownExtensionTypeException(final Class<T> type)
{
super("The current configuration has no mapping for type " + type.getCanonicalName()
- + ", unable to determine extension. Either add a mapping via " + GET_EXTENSION_MAPPING.toString()
- + " or manually assign a name.");
+ + ", unable to determine extension. You should provide extension in the services descriptor file");
}
//-------------------------------------------------------------------------------------||
@@ -87,7 +56,7 @@
/**
* Creates a new {@link UnknownExtensionTypeException} for the specified type
- *
+ *
* @throws IllegalArgumentException If the type is not specified
*/
static <T extends Assignable> UnknownExtensionTypeException newInstance(final Class<T> type)
Modified: shrinkwrap/trunk/extension-glassfish/src/main/resources/META-INF/services/org.jboss.shrinkwrap.glassfish.api.ShrinkwrapReadableArchive
===================================================================
--- shrinkwrap/trunk/extension-glassfish/src/main/resources/META-INF/services/org.jboss.shrinkwrap.glassfish.api.ShrinkwrapReadableArchive 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/extension-glassfish/src/main/resources/META-INF/services/org.jboss.shrinkwrap.glassfish.api.ShrinkwrapReadableArchive 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.glassfish.impl.ShrinkwrapReadableArchiveImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.glassfish.impl.ShrinkwrapReadableArchiveImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/extension-jetty/src/main/resources/META-INF/services/org.jboss.shrinkwrap.jetty.api.ShrinkWrapWebAppContext
===================================================================
--- shrinkwrap/trunk/extension-jetty/src/main/resources/META-INF/services/org.jboss.shrinkwrap.jetty.api.ShrinkWrapWebAppContext 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/extension-jetty/src/main/resources/META-INF/services/org.jboss.shrinkwrap.jetty.api.ShrinkWrapWebAppContext 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.jetty.api.ShrinkWrapWebAppContext
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.jetty.api.ShrinkWrapWebAppContext
\ No newline at end of file
Added: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeExceptionDelegator.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeExceptionDelegator.java (rev 0)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/api/UnknownExtensionTypeExceptionDelegator.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -0,0 +1,39 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, 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.api;
+
+/**
+ * UnknownExtensionTypeExceptionDelegator
+ * Delegator added to be able to reach {@link UnknownExtensionTypeException} from impl-base
+ *
+ * @author <a href="mailto:ken at glxn.net">Ken Gullaksen</a>
+ * @version $Revision: $
+ */
+public class UnknownExtensionTypeExceptionDelegator
+{
+ /**
+ *
+ * @param type The Extension interface class
+ * @param <T> The type of extension
+ * @return an UnknownExtensionTypeException to be thrown
+ */
+ public static <T extends Assignable> UnknownExtensionTypeException newExceptionInstance(Class<T> type)
+ {
+ return UnknownExtensionTypeException.newInstance(type);
+ }
+}
Added: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ExtensionWrapper.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ExtensionWrapper.java (rev 0)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ExtensionWrapper.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -0,0 +1,66 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, 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;
+
+import org.jboss.shrinkwrap.api.Assignable;
+
+import java.util.Map;
+
+/**
+ * ExtensionWrapper
+ * Wrapper used in the extensionMapping of {@link org.jboss.shrinkwrap.api.ExtensionLoader}
+ * Initialized in {@link org.jboss.shrinkwrap.impl.base.ServiceExtensionLoader#loadExtensionMapping(Class)}
+ *
+ * @author <a href="mailto:ken at glxn.net">Ken Gullaksen</a>
+ * @version $Revision: $
+ */
+class ExtensionWrapper
+{
+
+ final Map<String, String> properties;
+
+ final String implementingClassName;
+
+ final Class<? extends Assignable> extension;
+
+ public ExtensionWrapper(String implementingClassName, Map<String, String> properties, Class<? extends Assignable> extension)
+ {
+ this.properties = properties;
+ this.implementingClassName = implementingClassName;
+ this.extension = extension;
+ }
+
+ /**
+ * Gets the value for the given key in the properties map.
+ * If the property is not found, an exception is thrown.
+ *
+ * @param key the key to look up value for
+ * @return value of the property
+ * @throws RuntimeException if the property is not found
+ */
+ public String getProperty(String key)
+ {
+ String value = properties.get(key);
+ if(value == null)
+ {
+ throw new RuntimeException("No property value found for key " + key);
+ }
+ return value;
+ }
+
+}
Modified: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ServiceExtensionLoader.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ServiceExtensionLoader.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/ServiceExtensionLoader.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -24,17 +24,19 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.logging.Logger;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ExtensionLoader;
import org.jboss.shrinkwrap.api.Assignable;
-import org.jboss.shrinkwrap.impl.base.io.IOUtil;
+import org.jboss.shrinkwrap.api.UnknownExtensionTypeExceptionDelegator;
/**
* ServiceExtensionLoader
*
* @author <a href="mailto:aslak at conduct.no">Aslak Knutsen</a>
+ * @author <a href="mailto:ken at glxn.net">Ken Gullaksen</a>
* @version $Revision: $
*/
public class ServiceExtensionLoader implements ExtensionLoader
@@ -54,6 +56,8 @@
private ClassLoader classLoader = SecurityActions.getThreadContextClassLoader();
private Map<Class<?>, Class<?>> cache = new HashMap<Class<?>, Class<?>>();
+ private Map<Class<?>, ExtensionWrapper> extensionMappings = new HashMap<Class<?>, ExtensionWrapper>();
+
//-------------------------------------------------------------------------------------||
// Required Implementations - ExtensionLoader -----------------------------------------||
@@ -115,10 +119,28 @@
return this;
}
+ /* (non-Javadoc)
+ * @see org.jboss.shrinkwrap.api.ExtensionLoader#getExtensionFromExtensionMapping(java.lang.Class)
+ */
+ public <T extends Assignable> String getExtensionFromExtensionMapping(Class<T> type)
+ {
+
+ ExtensionWrapper extensionWrapper = extensionMappings.get(type);
+ if (extensionWrapper == null) {
+ loadExtensionMapping(type);
+ }
+ extensionWrapper = extensionMappings.get(type);
+ if (extensionWrapper == null)
+ {
+ throw UnknownExtensionTypeExceptionDelegator.newExceptionInstance(type);
+ }
+ return extensionWrapper.getProperty("extension");
+ }
+
/**
* Check to see if a specific extension interface is beeing overloaded
*
- * @param extensionClass The Extension interface class
+ * @param extensionClass The ExtensionType interface class
* @return true if found
*/
public boolean isOverriden(Class<?> extensionClass)
@@ -131,24 +153,38 @@
// Internal Helper Methods - Loading --------------------------------------------------||
//-------------------------------------------------------------------------------------||
- private <T extends Assignable> T createFromLoadExtension(Class<T> extensionClass, Archive<?> archive)
+ private <T extends Assignable> T createFromLoadExtension(Class<T> extensionClass, Archive<?> archive)
{
- Class<T> extensionImplClass = loadExtension(extensionClass);
- if(!extensionClass.isAssignableFrom(extensionImplClass))
+ ExtensionWrapper extensionWrapper = loadExtensionMapping(extensionClass);
+ if (extensionWrapper == null)
{
+ throw new RuntimeException("Failed to load ExtensionMapping");
+ }
+
+ Class<T> extensionImplClass = loadExtension(extensionWrapper);
+
+ if (!extensionClass.isAssignableFrom(extensionImplClass)) {
throw new RuntimeException(
- "Found extension impl class " + extensionImplClass.getName() +
+ "Found extension impl class " + extensionImplClass.getName() +
" not assignable to extension interface " + extensionClass.getName());
}
return createExtension(extensionImplClass, archive);
}
- private <T extends Assignable> Class<T> loadExtension(Class<T> extensionClass)
+ private <T extends Assignable> Class<T> loadExtension(ExtensionWrapper extensionWrapper)
{
+ return loadExtensionClass(extensionWrapper.implementingClassName);
+ }
+
+ private <T extends Assignable> ExtensionWrapper loadExtensionMapping(Class<T> extensionClass)
+ {
URL extensionImplUrl = findExtensionImpl(extensionClass);
- String extensionImplClassName = loadExtensionName(extensionImplUrl);
- return loadExtensionClass(extensionImplClassName);
+
+ ExtensionWrapper extensionWrapper = loadExtensionWrapper(extensionImplUrl, extensionClass);
+ this.extensionMappings.put(extensionClass, extensionWrapper);
+ return extensionWrapper;
}
+
private <T extends Assignable> URL findExtensionImpl(Class<T> extensionClass)
{
@@ -177,24 +213,30 @@
}
catch (Exception e)
{
- throw new RuntimeException("Could not find any mapping for extension " + extensionClass.getName(), e);
+ throw UnknownExtensionTypeExceptionDelegator.newExceptionInstance(extensionClass);
}
}
- private String loadExtensionName(URL extensionURL)
+ @SuppressWarnings({"unchecked"})
+ private <T extends Assignable> ExtensionWrapper loadExtensionWrapper(URL extensionURL, Class<T> extensionClass)
{
- try
+ Properties properties = new Properties();
+ try
{
- return new String(IOUtil.asByteArray(extensionURL.openStream()));
- }
- catch (IOException e)
+ properties.load(extensionURL.openStream());
+ } catch (IOException e) {
+ throw new RuntimeException("Could not open stream for extensionURL " + extensionURL, e);
+ }
+ String implementingClassName = (String) properties.get("implementingClassName");
+ if(implementingClassName == null)
{
- throw new RuntimeException("Could not read extension mapping " + extensionURL, e);
+ throw new RuntimeException("Property implementingClassName is not present in " + extensionURL);
}
+ return new ExtensionWrapper(implementingClassName, new HashMap<String, String>((Map) properties), extensionClass);
}
@SuppressWarnings("unchecked")
- private <T extends Assignable> Class<T> loadExtensionClass(String extensionClassName)
+ private <T extends Assignable> Class<T> loadExtensionClass(String extensionClassName)
{
try
{
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ExplodedExporter
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ExplodedExporter 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ExplodedExporter 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.exporter.ExplodedExporterImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.exporter.ExplodedExporterImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ZipExporter
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ZipExporter 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.exporter.ZipExporter 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.exporter.ZipExporterImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.exporter.ZipExporterImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ExplodedImporter
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ExplodedImporter 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ExplodedImporter 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.importer.ExplodedImporterImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.importer.ExplodedImporterImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ZipImporter
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ZipImporter 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.importer.ZipImporter 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.importer.ZipImporterImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.importer.ZipImporterImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.SerializableView
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.SerializableView 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.SerializableView 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.serialization.ZipSerializableViewImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.serialization.ZipSerializableViewImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.ZipSerializableView
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.ZipSerializableView 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.serialization.ZipSerializableView 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.serialization.ZipSerializableViewImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.serialization.ZipSerializableViewImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.EnterpriseArchive
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.EnterpriseArchive 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.EnterpriseArchive 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1,2 @@
-org.jboss.shrinkwrap.impl.base.spec.EnterpriseArchiveImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.spec.EnterpriseArchiveImpl
+extension=.ear
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.JavaArchive
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.JavaArchive 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.JavaArchive 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1,2 @@
-org.jboss.shrinkwrap.impl.base.spec.JavaArchiveImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.spec.JavaArchiveImpl
+extension=.jar
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.ResourceAdapterArchive 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1,2 @@
-org.jboss.shrinkwrap.impl.base.spec.ResourceAdapterArchiveImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.spec.ResourceAdapterArchiveImpl
+extension=.rar
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.WebArchive
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.WebArchive 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.api.spec.WebArchive 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1,2 @@
-org.jboss.shrinkwrap.impl.base.spec.WebArchiveImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.spec.WebArchiveImpl
+extension=.war
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.spi.Configurable
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.spi.Configurable 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/main/resources/META-INF/services/org.jboss.shrinkwrap.spi.Configurable 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.ConfigurableArchiveImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.ConfigurableArchiveImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ConfigurationBuilderTestCase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ConfigurationBuilderTestCase.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ConfigurationBuilderTestCase.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -138,6 +138,12 @@
{
return null;
}
+
+ @Override
+ public String getExtensionFromExtensionMapping(Class type)
+ {
+ return null;
+ }
};
// Supply and build
Modified: shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ShrinkWrapTestCase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ShrinkWrapTestCase.java 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/ShrinkWrapTestCase.java 2010-06-25 14:23:08 UTC (rev 4555)
@@ -393,6 +393,12 @@
{
return null;
}
+
+ @Override
+ public String getExtensionFromExtensionMapping(Class type)
+ {
+ return null;
+ }
}
/**
Modified: shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$Extension
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$Extension 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$Extension 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$ExtensionImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$ExtensionImpl
\ No newline at end of file
Modified: shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$WrongImplExtension
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$WrongImplExtension 2010-06-25 07:22:54 UTC (rev 4554)
+++ shrinkwrap/trunk/impl-base/src/test/resources/META-INF/services/org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$WrongImplExtension 2010-06-25 14:23:08 UTC (rev 4555)
@@ -1 +1 @@
-org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$ExtensionImpl
\ No newline at end of file
+implementingClassName=org.jboss.shrinkwrap.impl.base.ServiceExtensionLoaderTestCase$ExtensionImpl
\ No newline at end of file
More information about the jboss-svn-commits
mailing list