/*
* Jopr Management Platform
* Copyright (C) 2005-2009 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser General Public License along with this program;
* if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.rhq.plugins.jbossas5.util;
import org.jboss.managed.api.ComponentType;
import org.jboss.managed.api.ManagedComponent;
import org.jboss.metatype.api.values.SimpleValue;
/**
* @author Lukas Krejci
*/
public class Ejb2BeanUtils {
private static final ComponentType MDB_COMPONENT_TYPE = new ComponentType("EJB", "MDB");
private Ejb2BeanUtils() {
}
public static String getUniqueBeanIdentificator(ManagedComponent component) {
if (MDB_COMPONENT_TYPE.equals(component.getType())) {
//for MDBs, the unique combination is the deployment name + (component name - @object-id)
String componentName = stripObjectId(component.getName());
String deploymentName = ((SimpleValue) component.getProperty("DeploymentName").getValue()).getValue()
.toString();
return deploymentName + "|" + componentName;
} else {
return component.getName();
}
}
public static String parseResourceName(ManagedComponent component) {
String resourceName = parseSimpleResourceName(component.getName());
if (MDB_COMPONENT_TYPE.equals(component.getType())) {
//we need to exclude the @object-id part from the name
//in a given deployment, there's guaranteed to be at most 1
//instance of an MDB with a given name
resourceName = stripObjectId(resourceName);
}
return resourceName;
}
private static String parseSimpleResourceName(String componentName) {
//jboss.j2ee:jndiName=eardeployment/SessionA,service=EJB
int jndiNameIdx = componentName.indexOf("jndiName=");
jndiNameIdx += 9; // = "jndiName=".length()
int commaIdx = componentName.indexOf(',', jndiNameIdx);
if (commaIdx == -1)
commaIdx = componentName.length();
int slashIdx = componentName.lastIndexOf('/', commaIdx);
slashIdx++;
int startIdx = slashIdx > jndiNameIdx ? slashIdx : jndiNameIdx;
return componentName.substring(startIdx, commaIdx);
}
private static String stripObjectId(String resourceName) {
int atIdx = resourceName.indexOf('@');
if (atIdx != -1) {
resourceName = resourceName.substring(0, atIdx);
}
return resourceName;
}
}