001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package javax.enterprise.deploy.shared.factories;
023:
024: import org.jboss.logging.Logger;
025:
026: import javax.enterprise.deploy.spi.DeploymentManager;
027: import javax.enterprise.deploy.spi.exceptions.DeploymentManagerCreationException;
028: import javax.enterprise.deploy.spi.factories.DeploymentFactory;
029: import java.util.Collections;
030: import java.util.HashSet;
031: import java.util.Iterator;
032: import java.util.Set;
033:
034: /**
035: * The deployment factory manager.
036: *
037: * @author <a href="mailto:adrian@jboss.org">Adrian Brock</a>
038: * @version $Revision: 57196 $
039: */
040: public final class DeploymentFactoryManager {
041: // deployment logging
042: private static final Logger log = Logger
043: .getLogger(DeploymentFactoryManager.class);
044:
045: /** The instance */
046: private static final DeploymentFactoryManager instance = new DeploymentFactoryManager();
047:
048: /** The deployment factories */
049: private Set deploymentFactories = Collections
050: .synchronizedSet(new HashSet());
051:
052: // Register an instance with the DeploymentFactoryManager
053: static {
054: ClassLoader cl = Thread.currentThread().getContextClassLoader();
055: try {
056: Class factoryClass = cl
057: .loadClass("org.jboss.deployment.spi.factories.DeploymentFactoryImpl");
058: DeploymentFactory factory = (DeploymentFactory) factoryClass
059: .newInstance();
060:
061: DeploymentFactoryManager dfManager = DeploymentFactoryManager
062: .getInstance();
063: dfManager.registerDeploymentFactory(factory);
064: } catch (Exception e) {
065: log.error("Cannot register DeploymentFactory: "
066: + e.toString());
067: }
068: }
069:
070: // hide default constructor
071: private DeploymentFactoryManager() {
072: }
073:
074: /**
075: * Retrieve the instance of the deployment factory manager
076: *
077: * @return the deployment factory manager
078: */
079: public static DeploymentFactoryManager getInstance() {
080: return instance;
081: }
082:
083: /**
084: * Retrieve the deployment factories
085: *
086: * @return an array of deployment factories
087: */
088: public DeploymentFactory[] getDeploymentFactories() {
089: DeploymentFactory[] arr = new DeploymentFactory[deploymentFactories
090: .size()];
091: return (DeploymentFactory[]) deploymentFactories.toArray(arr);
092: }
093:
094: /**
095: * Get a connected deployment manager
096: *
097: * @param uri the uri of the deployment manager
098: * @param userName the user name
099: * @param password the password
100: * @return the deployment manager
101: * @throws DeploymentManagerCreationException
102: */
103: public DeploymentManager getDeploymentManager(String uri,
104: String userName, String password)
105: throws DeploymentManagerCreationException {
106: for (Iterator i = deploymentFactories.iterator(); i.hasNext();) {
107: DeploymentFactory factory = (DeploymentFactory) i.next();
108: if (factory.handlesURI(uri))
109: return factory.getDeploymentManager(uri, userName,
110: password);
111: }
112: throw new DeploymentManagerCreationException(
113: "No deployment manager for uri=" + uri);
114: }
115:
116: /**
117: * Register a deployment factory
118: *
119: * @param factory the deployment factory
120: */
121: public void registerDeploymentFactory(DeploymentFactory factory) {
122: deploymentFactories.add(factory);
123: }
124:
125: /**
126: * Get a disconnected version of the deployment manager
127: *
128: * @param uri the uri to connect to
129: * @return the disconnected deployment manager
130: * @throws DeploymentManagerCreationException
131: */
132: public DeploymentManager getDisconnectedDeploymentManager(String uri)
133: throws DeploymentManagerCreationException {
134: for (Iterator i = deploymentFactories.iterator(); i.hasNext();) {
135: DeploymentFactory factory = (DeploymentFactory) i.next();
136: if (factory.handlesURI(uri))
137: return factory.getDisconnectedDeploymentManager(uri);
138: }
139: throw new DeploymentManagerCreationException(
140: "No deployment manager for uri=" + uri);
141: }
142:
143: // Package protected ---------------------------------------------
144:
145: // Protected -----------------------------------------------------
146:
147: // Private -------------------------------------------------------
148:
149: // Inner classes -------------------------------------------------
150: }
|