package org.rhq.plugins.jbossas5;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jboss.deployers.spi.management.ManagementView;
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.managed.api.ManagedDeployment;
import org.jboss.profileservice.spi.NoSuchDeploymentException;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
import org.rhq.plugins.jbossas5.connection.ProfileServiceConnection;
import org.rhq.plugins.jbossas5.util.ManagedComponentUtils;
public class PlatformDiscoveryComponent implements ResourceDiscoveryComponent<ApplicationServerComponent<?>> {
private final Log log = LogFactory.getLog(this.getClass());
public static String PLATFORM_DEPLOYMENT_NAME = "deployment";
public static String PLATFORM_COMPONENT_NAME = "componentName";
public Set discoverResources(ResourceDiscoveryContext<ApplicationServerComponent<?>> context)
throws InvalidPluginConfigurationException, Exception {
log.trace("Discovering " + context.getResourceType().getName() + " Resources...");
Set<DiscoveredResourceDetails> resources = new HashSet<DiscoveredResourceDetails>();
ResourceType resourceType = context.getResourceType();
Set<ManagedComponent> components = new HashSet<ManagedComponent>();
Configuration config = context.getDefaultPluginConfiguration();
String deployName = config.getSimple(PlatformDiscoveryComponent.PLATFORM_DEPLOYMENT_NAME).getStringValue();
String componentName = config.getSimple(PlatformDiscoveryComponent.PLATFORM_COMPONENT_NAME).getStringValue();
components.addAll(addManagedDeploymentComponent(deployName, componentName, context));
for (ManagedComponent component : components) {
ComponentType type = component.getType();
String displayName;
try {
displayName = (String) ManagedComponentUtils.getSimplePropertyValue(component, "name");
} catch (IllegalStateException il) {
displayName = component.getName();
}
try {
String resourceName = (String) component.getName();
String resourceKey = component.getType() + "|" + type.getSubtype() + "|" + resourceName;
String version = "";
Configuration pluginConfig = new Configuration();
pluginConfig.put(new PropertySimple(PLATFORM_DEPLOYMENT_NAME, deployName));
pluginConfig.put(new PropertySimple(PLATFORM_COMPONENT_NAME, resourceName));
resources.add(new DiscoveredResourceDetails(context.getResourceType(), resourceKey, displayName,
version, resourceType.getDescription(), pluginConfig, null));
} catch (Exception e) {
log.error("failed discovering the platform Mbeans", e);
}
}
return resources;
}
private Set<ManagedComponent> addManagedDeploymentComponent(String deployName, String componentName,
ResourceDiscoveryContext<ApplicationServerComponent<?>> context) throws NoSuchDeploymentException {
ProfileServiceConnection connection = context.getParentResourceComponent().getConnection();
ManagementView managementView = connection.getManagementView();
Set<ManagedComponent> components = new HashSet<ManagedComponent>();
ManagedDeployment deploy = managementView.getDeployment(deployName);
if (deploy != null) {
if (componentName == null || componentName.equals("*"))
components.addAll(deploy.getComponents().values());
else {
for (ManagedComponent comp : deploy.getComponents().values()) {
if (comp.getName().equals(componentName))
components.add(comp);
}
}
}
return components;
}
}