/* * Copyright 2003,2004 Colin Crist * * 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 hermes.impl; import hermes.Domain; import hermes.Hermes; import hermes.HermesException; import hermes.NullConnectionFactory; import hermes.SystemProperties; import hermes.config.ClasspathConfig; import hermes.config.ClasspathGroupConfig; import hermes.config.ConnectionConfig; import hermes.config.DestinationConfig; import hermes.config.FactoryConfig; import hermes.config.HermesConfig; import hermes.config.JDBCStore; import hermes.config.NamingConfig; import hermes.config.ObjectFactory; import hermes.config.PropertyConfig; import hermes.config.PropertySetConfig; import hermes.config.ProviderConfig; import hermes.config.ProviderExtConfig; import hermes.config.RendererConfig; import hermes.config.SessionConfig; import hermes.config.WatchConfig; import hermes.ext.DefaultHermesAdminFactory; import java.io.File; import java.io.IOException; import java.math.BigInteger; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; import javax.xml.bind.JAXBException; import org.apache.log4j.Logger; /** * @author colincrist@hermesjms.com * @version $Id: ConfigHelper.java,v 1.36 2005/10/21 08:37:22 colincrist Exp $ */ public class ConfigDAOImpl implements ConfigDAO { private static final Logger log = Logger.getLogger(ConfigDAOImpl.class); private final ObjectFactory factory = new ObjectFactory(); private final Properties adminProperties = new Properties(); private final Collection<String> adminFactories = new ArrayList<String>(); private final String ADMIN_FACTORIES = "admin.factories"; private final Map<String, URL> adminFactoryToJARMap = new HashMap<String, URL>(); private final Map<String, String> adminFactoryToPlugIn = new HashMap<String, String>(); private final Map<String, String> plugInToAdminFactory = new HashMap<String, String>(); private URL[] adminFactoryURLs = null; public ConfigDAOImpl() { List<URL> adminFactoryList = new ArrayList<URL>(); try { adminProperties.load(ConfigDAOImpl.class.getClassLoader().getResourceAsStream("hermes/impl/confighelper.properties")); log.debug(adminProperties); if (adminProperties.containsKey(ADMIN_FACTORIES)) { for (StringTokenizer tokens = new StringTokenizer(adminProperties.getProperty(ADMIN_FACTORIES), ","); tokens.hasMoreTokens();) { String adminFactoryClass = tokens.nextToken(); adminFactories.add(adminFactoryClass); log.debug("factory=" + adminFactoryClass); if (adminProperties.containsKey(adminFactoryClass)) { String libraryPair = (String) adminProperties.get(adminFactoryClass); String[] split = libraryPair.split(","); String library = SystemProperties.EXT_LIBRARY_PATH + "/" + split[0]; String libraryLongName = split[1]; adminFactoryToPlugIn.put(adminFactoryClass, libraryLongName); if (library.startsWith("http")) { log.debug(libraryLongName + "(" + adminFactoryClass + ") lives in " + library); adminFactoryToJARMap.put(adminFactoryClass, new URL(library)); plugInToAdminFactory.put(libraryLongName, adminFactoryClass); } else { File libraryFile = new File(library); if (libraryFile.exists()) { log.debug(libraryLongName + "(" + adminFactoryClass + ") lives in " + library); adminFactoryToJARMap.put(adminFactoryClass, libraryFile.toURL()); adminFactoryList.add(libraryFile.toURL()); } else { log.error("cannot find " + library + " for " + adminFactoryClass); } plugInToAdminFactory.put(libraryLongName, adminFactoryClass); } } } } } catch (IOException e) { log.error("Cannot load confighelper.properties from the ClassLoader: " + e.getMessage(), e); } adminFactoryURLs = new URL[adminFactoryList.size()]; int i = 0; for (Iterator<URL> iter = adminFactoryList.iterator(); iter.hasNext();) { URL url = iter.next(); adminFactoryURLs[i++] = url; } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getFactory() */ public ObjectFactory getFactory() { return factory; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getAdminClassForPlugIn(java.lang.String) */ public String getAdminClassForPlugIn(String plugin) { if (plugInToAdminFactory.containsKey(plugin)) { return plugInToAdminFactory.get(plugin); } else { return DefaultHermesAdminFactory.class.getName(); } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getPlugInName(java.lang.String) */ public String getPlugInName(String adminFactoryClass) { if (adminFactoryToPlugIn.containsKey(adminFactoryClass)) { return adminFactoryToPlugIn.get(adminFactoryClass); } else { return DEFAULT_PLUGIN; } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getAdminFactoryURLs() */ public URL[] getAdminFactoryURLs() { return adminFactoryURLs; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getURLForAdminFactory(java.lang.String) */ public URL getURLForAdminFactory(String adminFactoryClass) { return adminFactoryToJARMap.get(adminFactoryClass); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#removeJDBC(hermes.config.HermesConfig, * hermes.config.JDBCStore) */ public void removeJDBC(HermesConfig config, JDBCStore store) { config.getJdbcStore().remove(store); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#addJDBCStore(hermes.config.HermesConfig, * java.lang.String, java.lang.String, java.lang.String) */ public JDBCStore addJDBCStore(HermesConfig config, String alias, String driver, String url) throws JAXBException { JDBCStore storeConfig = factory.createJDBCStore(); storeConfig.setAlias(alias); storeConfig.setDriver(driver); storeConfig.setUrl(url); for (Iterator iter = config.getJdbcStore().iterator(); iter.hasNext();) { JDBCStore existing = (JDBCStore) iter.next(); if (existing.getAlias().equals(alias)) { iter.remove(); } } config.getJdbcStore().add(storeConfig); return storeConfig; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#removeNamingConfig(hermes.config.HermesConfig, * java.lang.String) */ public void removeNamingConfig(HermesConfig config, String id) { for (Iterator<?> iter = config.getNaming().iterator(); iter.hasNext();) { NamingConfig namingConfig = (NamingConfig) iter.next(); if (namingConfig.getId().equals(id)) { iter.remove(); } } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getClasspathGroupConfig(hermes.config.HermesConfig, * java.lang.String) */ public ClasspathGroupConfig getClasspathGroupConfig(HermesConfig config, String id) { for (Iterator<?> iter = config.getClasspathGroup().iterator(); iter.hasNext();) { ClasspathGroupConfig gConfig = (ClasspathGroupConfig) iter.next(); if (gConfig.getId().equals(id)) { return gConfig; } } return null; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicate(hermes.config.ClasspathConfig) */ public ClasspathConfig duplicate(ClasspathConfig cConfig) throws JAXBException { ClasspathConfig newCConfig = factory.createClasspathConfig(); newCConfig.setFactories(cConfig.getFactories()); newCConfig.setJar(cConfig.getJar()); newCConfig.setNoFactories(cConfig.isNoFactories()); return newCConfig; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicateClasspathGroups(java.util.List) */ public List<ClasspathGroupConfig> duplicateClasspathGroups(List<?> classPathGroups) throws JAXBException { List<ClasspathGroupConfig> rval = new ArrayList<ClasspathGroupConfig>(); for (Iterator<?> iter = classPathGroups.iterator(); iter.hasNext();) { ClasspathGroupConfig gConfig = (ClasspathGroupConfig) iter.next(); ClasspathGroupConfig newGConfig = factory.createClasspathGroupConfig(); newGConfig.setId(gConfig.getId()); rval.add(newGConfig); for (Iterator<ClasspathConfig> iter2 = gConfig.getLibrary().iterator(); iter2.hasNext();) { ClasspathConfig cConfig = iter2.next(); ClasspathConfig newCConfig = duplicate(cConfig); newGConfig.getLibrary().add(newCConfig); } } return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#removeHermes(hermes.config.HermesConfig, * java.lang.String) */ public void removeHermes(HermesConfig config, String hermesId) throws HermesException { for (Iterator<FactoryConfig> iter = config.getFactory().iterator(); iter.hasNext();) { FactoryConfig factoryConfig = iter.next(); for (Iterator<?> iter2 = factoryConfig.getDestination().iterator(); iter2.hasNext();) { DestinationConfig destinationConfig = (DestinationConfig) iter2.next(); } for (Iterator<ConnectionConfig> iter3 = factoryConfig.getConnection().iterator(); iter3.hasNext();) { ConnectionConfig connectionConfig = iter3.next(); for (Iterator<SessionConfig> iter4 = connectionConfig.getSession().iterator(); iter4.hasNext();) { SessionConfig sessionConfig = iter4.next(); if (sessionConfig.getId() == null) { iter4.remove(); } else if (sessionConfig.getId().equals(hermesId)) { iter4.remove(); log.debug(hermesId + " removed"); return; } } } } throw new HermesException("no session " + hermesId); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#removeDestination(hermes.config.HermesConfig, * java.lang.String, java.lang.String) */ public void removeDestination(HermesConfig config, String hermesId, String destinationName) throws HermesException { for (Iterator<FactoryConfig> iter = config.getFactory().iterator(); iter.hasNext();) { FactoryConfig factoryConfig = iter.next(); for (Iterator<ConnectionConfig> iter3 = factoryConfig.getConnection().iterator(); iter3.hasNext();) { ConnectionConfig connectionConfig = iter3.next(); for (Iterator<SessionConfig> iter4 = connectionConfig.getSession().iterator(); iter4.hasNext();) { SessionConfig sessionConfig = iter4.next(); if (sessionConfig.getId().equals(hermesId)) { for (Iterator<?> iter2 = factoryConfig.getDestination().iterator(); iter2.hasNext();) { DestinationConfig destinationConfig = (DestinationConfig) iter2.next(); if (destinationConfig.getName().equals(destinationName)) { log.debug(destinationName + " removed."); iter2.remove(); return; } } } } } } throw new HermesException("no destination " + destinationName + " configured for session " + hermesId); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getAllSessions(hermes.config.HermesConfig) */ public Collection<SessionConfig> getAllSessions(HermesConfig config) throws HermesException { Collection<SessionConfig> rval = new ArrayList<SessionConfig>(); for (Iterator<FactoryConfig> iter1 = config.getFactory().iterator(); iter1.hasNext();) { FactoryConfig factoryConfig = iter1.next(); for (Iterator<ConnectionConfig> iter2 = factoryConfig.getConnection().iterator(); iter2.hasNext();) { ConnectionConfig connectionConfig = iter2.next(); for (Iterator<SessionConfig> iter3 = connectionConfig.getSession().iterator(); iter3.hasNext();) { SessionConfig sessionConfig = iter3.next(); rval.add(sessionConfig); } } } return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getAllDestinations(hermes.config.HermesConfig, * java.lang.String) */ public Collection getAllDestinations(HermesConfig config, String hermesId) throws HermesException { Collection<Object> rval = new ArrayList<Object>(); for (Iterator<FactoryConfig> iter1 = config.getFactory().iterator(); iter1.hasNext();) { FactoryConfig factoryConfig = iter1.next(); for (Iterator<ConnectionConfig> iter2 = factoryConfig.getConnection().iterator(); iter2.hasNext();) { ConnectionConfig connectionConfig = iter2.next(); for (Iterator<SessionConfig> iter3 = connectionConfig.getSession().iterator(); iter3.hasNext();) { SessionConfig sessionConfig = iter3.next(); if (sessionConfig.getId() == null) { log.debug("session with a null id removed"); iter3.remove(); } else { if (hermesId == null || sessionConfig.getId().equals(hermesId)) { for (Iterator iter4 = factoryConfig.getDestination().iterator(); iter4.hasNext();) { rval.add(iter4.next()); } } } } } } return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getRendererProperties(hermes.config.RendererConfig) */ public Properties getRendererProperties(RendererConfig rConfig) { Properties props = new Properties(); if (rConfig.getProperties() != null) { for (Iterator<PropertyConfig> iter2 = rConfig.getProperties().getProperty().iterator(); iter2.hasNext();) { PropertyConfig pConfig = iter2.next(); props.put(pConfig.getName(), pConfig.getValue()); } } return props; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getRendererProperties(hermes.config.HermesConfig, * java.lang.String) */ public Properties getRendererProperties(HermesConfig config, String className) throws HermesException { Properties props = new Properties(); for (Iterator<?> iter = config.getRenderer().iterator(); iter.hasNext();) { RendererConfig rConfig = (RendererConfig) iter.next(); if (rConfig.getClassName().equals(className)) { return getRendererProperties(rConfig); } } throw new HermesException("no such renderer " + className); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createRendererConfig(java.lang.String, * java.util.Map) */ public RendererConfig createRendererConfig(String className, Map<?, ?> map) throws HermesException { try { RendererConfig rConfig = factory.createRendererConfig(); rConfig.setClassName(className); PropertySetConfig properties = rConfig.getProperties(); if (properties == null) { properties = new PropertySetConfig(); rConfig.setProperties(properties); } populatePropertySet(map, properties); return rConfig; } catch (JAXBException e) { throw new HermesException(e); } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#updatePropertySet(hermes.config.PropertySetConfig, * java.util.Map) */ public void updatePropertySet(PropertySetConfig properties, Map<?, ?> map) throws JAXBException { for (Iterator<PropertyConfig> iter = properties.getProperty().iterator(); iter.hasNext();) { final PropertyConfig pConfig = iter.next(); if (map.containsKey(pConfig.getName())) { iter.remove(); } } for (Iterator<?> iter2 = map.entrySet().iterator(); iter2.hasNext();) { final Map.Entry entry = (Map.Entry) iter2.next(); final PropertyConfig pConfig = factory.createPropertyConfig(); pConfig.setName((String) entry.getKey()); if (entry.getValue() != null) { pConfig.setValue(entry.getValue().toString()); properties.getProperty().add(pConfig); } } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#populatePropertySet(java.util.Map, * hermes.config.PropertySetConfig) */ public void populatePropertySet(Map<?, ?> map, PropertySetConfig properties) throws JAXBException { for (Iterator<?> iter2 = map.keySet().iterator(); iter2.hasNext();) { String key = (String) iter2.next(); if (map.get(key) != null) { String value = map.get(key).toString(); if (!value.equals("") && !key.equals("class") && !key.equals("name")) { PropertyConfig pConfig = factory.createPropertyConfig(); pConfig.setName(key); pConfig.setValue(value); properties.getProperty().add(pConfig); } } } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createPropertySet() */ public PropertySetConfig createPropertySet() throws HermesException { return factory.createPropertySetConfig(); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#setRendererProperties(hermes.config.HermesConfig, * java.lang.String, java.util.Map) */ public void setRendererProperties(HermesConfig config, String className, Map<?, ?> props) throws HermesException, JAXBException { for (Iterator<?> iter = config.getRenderer().iterator(); iter.hasNext();) { RendererConfig rConfig = (RendererConfig) iter.next(); if (rConfig.getClassName().equals(className)) { if (rConfig.getProperties() == null) { rConfig.setProperties(new PropertySetConfig()); } rConfig.getProperties().getProperty().clear(); for (Iterator<?> iter2 = props.keySet().iterator(); iter2.hasNext();) { final String key = (String) iter2.next(); if (props.get(key) != null) { final String value = props.get(key).toString(); if (!key.equals("class") && !key.equals("name")) { PropertyConfig pConfig = factory.createPropertyConfig(); pConfig.setName(key); pConfig.setValue(value); rConfig.getProperties().getProperty().add(pConfig); } } } return; } } throw new HermesException("no such renderer " + className); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createWatchConfig() */ public WatchConfig createWatchConfig() { WatchConfig rval = new WatchConfig(); rval.setShowAge(true); rval.setUpdateFrequency(30 * 1000L); return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createDestinationConfig() */ public DestinationConfig createDestinationConfig() { return new DestinationConfig(); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createDestinationConfig(java.lang.String, * hermes.Domain) */ public DestinationConfig createDestinationConfig(String name, Domain domain) { DestinationConfig rval = new DestinationConfig(); rval.setName(name); rval.setDomain(domain.getId()); return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createDefaultProviderExtConfig(java.lang.String) */ public ProviderExtConfig createDefaultProviderExtConfig(String connectionFactoryName) throws JAXBException { final ProviderExtConfig config = factory.createProviderExtConfig(); if (adminProperties.containsKey(connectionFactoryName)) { config.setClassName((String) adminProperties.get(connectionFactoryName)); } else { config.setClassName(DefaultHermesAdminFactory.class.getName()); } config.setProperties(factory.createPropertySetConfig()); return config; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicateForWatch(hermes.config.DestinationConfig, * hermes.Hermes) */ public DestinationConfig duplicateForWatch(DestinationConfig dConfig, Hermes hermes) { DestinationConfig rval = duplicate(dConfig); rval.setSelector(null); rval.setMyHermes(hermes.getId()); return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicate(hermes.config.DestinationConfig) */ public DestinationConfig duplicate(DestinationConfig dConfig) { DestinationConfig rval = new DestinationConfig(); rval.setName(dConfig.getName()); rval.setShortName(dConfig.getShortName()); rval.setSelector(dConfig.getSelector()); rval.setDomain(dConfig.getDomain()); rval.setDurable(dConfig.isDurable()); rval.setClientID(dConfig.getClientID()); return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getAdminFactories() */ public Collection<String> getAdminFactories() { return adminFactories; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createJNDIFactoryConfig(java.lang.String, * java.lang.String, java.lang.String, hermes.config.PropertySetConfig, * java.lang.String) */ public FactoryConfig createJNDIFactoryConfig(String classpathId, String sessionId, String binding, PropertySetConfig properties, String className) throws JAXBException { FactoryConfig factoryConfig = new FactoryConfig(); factoryConfig.setClasspathId(classpathId); SessionConfig sessionConfig = new SessionConfig(); ConnectionConfig connectConfig = new ConnectionConfig(); ProviderConfig providerConfig = new ProviderConfig(); sessionConfig.setId(sessionId); sessionConfig.setTransacted(true); sessionConfig.setReconnects(BigInteger.ZERO); connectConfig.getSession().add(sessionConfig); factoryConfig.getConnection().add(connectConfig); factoryConfig.setExtension(createDefaultProviderExtConfig(NullConnectionFactory.class.getName())); PropertySetConfig propertySet = factory.createPropertySetConfig(); // Copy over the other ones... for (Iterator<PropertyConfig> iter = properties.getProperty().iterator(); iter.hasNext();) { PropertyConfig pConfig = iter.next(); if (!pConfig.getName().equals("binding")) { propertySet.getProperty().add(pConfig); } } PropertyConfig bProperty = factory.createPropertyConfig(); // Update with the binding. bProperty.setName("binding"); bProperty.setValue(binding); propertySet.getProperty().add(bProperty); providerConfig.setProperties(propertySet); providerConfig.setClassName(className); factoryConfig.setProvider(providerConfig); return factoryConfig; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#createDefaultFactoryConfig(java.lang.String) */ public FactoryConfig createDefaultFactoryConfig(String sessionId) throws JAXBException { FactoryConfig factoryConfig = new FactoryConfig(); factoryConfig.setClasspathId(SimpleClassLoaderManager.SYSTEM_LOADER); SessionConfig sessionConfig = new SessionConfig(); ConnectionConfig connectConfig = new ConnectionConfig(); ProviderConfig providerConfig = new ProviderConfig(); sessionConfig.setId(sessionId); connectConfig.getSession().add(sessionConfig); factoryConfig.getConnection().add(connectConfig); factoryConfig.setExtension(createDefaultProviderExtConfig(NullConnectionFactory.class.getName())); sessionConfig.setTransacted(true); providerConfig.setProperties(new PropertySetConfig()); factoryConfig.setProvider(providerConfig); return factoryConfig; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#replaceDestinationConfigs(hermes.config.HermesConfig, * java.lang.String, java.util.Collection) */ public void replaceDestinationConfigs(HermesConfig config, String hermesId, Collection<DestinationConfig> destinationConfigs) { for (Iterator<FactoryConfig> fIter = config.getFactory().iterator(); fIter.hasNext();) { final FactoryConfig factoryConfig = fIter.next(); for (Iterator<ConnectionConfig> cIter = factoryConfig.getConnection().iterator(); cIter.hasNext();) { final ConnectionConfig connConfig = cIter.next(); for (Iterator<SessionConfig> sIter = connConfig.getSession().iterator(); sIter.hasNext();) { final SessionConfig sConfig = sIter.next(); if (sConfig.getId().equals(hermesId)) { for (Iterator iter = factoryConfig.getDestination().iterator(); iter.hasNext();) { DestinationConfig dConfig = (DestinationConfig) iter.next(); if (dConfig.getDomain() == Domain.TOPIC.getId() && dConfig.isDurable()) { // Don't replace the durable topics.... } else { iter.remove(); } } factoryConfig.getDestination().addAll(destinationConfigs); return; } } } } } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#renameSession(hermes.config.FactoryConfig, * java.lang.String) */ public void renameSession(FactoryConfig factoryConfig, String newSessionId) { ConnectionConfig connectionConfig = (ConnectionConfig) factoryConfig.getConnection().get(0); SessionConfig sessionConfig = (SessionConfig) connectionConfig.getSession().get(0); sessionConfig.setId(newSessionId); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#getFactoryConfig(hermes.config.HermesConfig, * java.lang.String) */ public FactoryConfig getFactoryConfig(HermesConfig config, String hermesId) throws HermesException { for (Iterator<FactoryConfig> factoryIter = config.getFactory().iterator(); factoryIter.hasNext();) { FactoryConfig factoryConfig = factoryIter.next(); ConnectionConfig connectionConfig = (ConnectionConfig) factoryConfig.getConnection().get(0); if (connectionConfig.getSession().size() > 0) { SessionConfig sessionConfig = (SessionConfig) connectionConfig.getSession().get(0); if (sessionConfig.getId().equals(hermesId)) { return factoryConfig; } } } throw new HermesException("no such session " + hermesId); } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicate(hermes.config.SessionConfig, * java.lang.String) */ public SessionConfig duplicate(SessionConfig sourceSession, String newId) throws JAXBException { SessionConfig rval = factory.createSessionConfig(); rval.setAudit(sourceSession.isAudit()); rval.setAuditDirectory(sourceSession.getAuditDirectory()); rval.setCheckSize(sourceSession.isCheckSize()); rval.setCheckSizePeriod(sourceSession.getCheckSizePeriod()); rval.setId(newId); rval.setReconnects(sourceSession.getReconnects()); rval.setTransacted(sourceSession.isTransacted()); return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicate(hermes.config.ConnectionConfig, * java.lang.String) */ public ConnectionConfig duplicate(ConnectionConfig sourceConnection, String newSessionId) throws JAXBException { ConnectionConfig rval = factory.createConnectionConfig(); SessionConfig sessionConfig = (SessionConfig) sourceConnection.getSession().get(0); rval.setPassword(sourceConnection.getPassword()); rval.setUsername(sourceConnection.getUsername()); rval.getSession().add(duplicate(sessionConfig, newSessionId)); return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicate(hermes.config.FactoryConfig, * java.lang.String) */ public FactoryConfig duplicate(FactoryConfig sourceFactory, String newSessionId) throws JAXBException { FactoryConfig rval = factory.createFactoryConfig(); ConnectionConfig connectionConfig = (ConnectionConfig) sourceFactory.getConnection().get(0); rval.setClasspathId(sourceFactory.getClasspathId()); rval.setExtension(sourceFactory.getExtension()); rval.setProvider(sourceFactory.getProvider()); rval.getConnection().add(duplicate(connectionConfig, newSessionId)); return rval; } /* * (non-Javadoc) * * @see hermes.impl.ConfigDAO#duplicateSession(hermes.config.HermesConfig, * java.lang.String, java.lang.String) */ public void duplicateSession(HermesConfig config, String hermesId, String newHermesId) throws JAXBException, HermesException { FactoryConfig sourceFactory = getFactoryConfig(config, hermesId); FactoryConfig newFactory = duplicate(sourceFactory, newHermesId); newFactory.getDestination().addAll(sourceFactory.getDestination()); config.getFactory().add(newFactory); } @Override public PropertyConfig createPropertyConfig(String name, String value) { PropertyConfig p = factory.createPropertyConfig() ; p.setName(name) ; p.setValue(value) ; return p ; } }