/*
* Copyright 2001-2010 The Apache Software Foundation.
*
* 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.apache.juddi.v3.client.config;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Internal jUDDI class to handle multiple clients on the same classloader.
*
* @author kstam
*
*/
public class UDDIClientContainer { private static Log log = LogFactory.getLog(UDDIClientContainer.class); private static Map<String,UDDIClient> clients = new HashMap<String, UDDIClient>();
public static UDDIClient getUDDIClient(String clientName)
throws ConfigurationException {
if (clientName!=null) { if (clients.containsKey(clientName)) { return (clients.get(clientName));
} else {
StringBuilder sb = new StringBuilder(); Iterator<String> iterator = clients.keySet().iterator(); while (iterator.hasNext()){ sb.append(iterator.next()); if (iterator.hasNext()) sb.append(",");
}
throw new ConfigurationException("No client by name " + clientName + " was found. " + " Please check your client uddi.xml files, and make sure this client was started. Available clients: " + sb.toString());
}
} else throw new IllegalArgumentException("clientName is a required argument");
}
/**
* adds the named client, but only if it isn't registered already
* @param manager
* @return true if successful
*/
public static boolean addClient(UDDIClient manager) {
if (!clients.containsKey(manager.getClientConfig().getClientName())) { clients.put(manager.getClientConfig().getClientName(), manager); return true;
} else {
return false;
}
}
public static void removeClerkManager(String clientName)
throws ConfigurationException {
if (clients.containsKey(clientName)) { clients.remove(clientName); } else if (clients.size()==1 && clientName==null) { String name = clients.keySet().iterator().next(); log.info("Removing " + name + " from UDDIClient."); clients.remove(name); } else { throw new ConfigurationException("Could not remove UDDIClient for name " + clientName);
}
}
/**
* return true if the client exists in the current client collection
* @param name
* @return true/false
*/
public static boolean contains(String name) {
return (clients.containsKey(name)) ;
}
public static void removeAll() {
clients.clear(); }
}