package org.rhq.enterprise.server.resource.metadata; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.resource.ResourceType; import org.rhq.enterprise.server.RHQConstants; import org.rhq.enterprise.server.configuration.metadata.ConfigurationMetadataManagerLocal; @Stateless public class ResourceConfigurationMetadataManagerBean implements ResourceConfigurationMetadataManagerLocal { private static final Log log = LogFactory.getLog(ResourceConfigurationMetadataManagerBean.class); @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME) private EntityManager entityMgr; @EJB private ConfigurationMetadataManagerLocal configurationMetadataMgr; @Override public void updateResourceConfigurationDefinition(ResourceType existingType, ResourceType newType) { log.debug("Updating resource configuration definition for " + existingType); existingType = entityMgr.find(ResourceType.class, existingType.getId()); ConfigurationDefinition newResourceConfigurationDefinition = newType.getResourceConfigurationDefinition(); if (newResourceConfigurationDefinition != null) { if (existingType.getResourceConfigurationDefinition() == null) { if (log.isDebugEnabled()) { log.debug(existingType + " currently does not have a resource configuration definition. Adding " + "new resource configuration definition."); } entityMgr.persist(newResourceConfigurationDefinition); existingType.setResourceConfigurationDefinition(newResourceConfigurationDefinition); } else { if (log.isDebugEnabled()) { log.debug("Updating existing resource configuration definition for " + existingType); } ConfigurationDefinition existingDefinition = existingType.getResourceConfigurationDefinition(); configurationMetadataMgr.updateConfigurationDefinition(newResourceConfigurationDefinition, existingDefinition); } } else { // newDefinition == null if (existingType.getResourceConfigurationDefinition() != null) { if (log.isDebugEnabled()) { log.debug("Removing resource configuration definition for " + existingType); } existingType.setResourceConfigurationDefinition(null); } } } }