*/
package org.opendaylight.controller.config.api.jmx;
-import org.opendaylight.controller.config.api.ModuleIdentifier;
-import org.opendaylight.controller.config.api.jmx.constants.ConfigRegistryConstants;
-
-import javax.annotation.concurrent.ThreadSafe;
-import javax.management.MalformedObjectNameException;
-import javax.management.ObjectName;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import javax.annotation.concurrent.ThreadSafe;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import org.opendaylight.controller.config.api.ModuleIdentifier;
+import org.opendaylight.controller.config.api.jmx.constants.ConfigRegistryConstants;
/**
* Provides ObjectName creation. Each created ObjectName consists of domain that
*/
@ThreadSafe
public class ObjectNameUtil {
+ private ObjectNameUtil() {
+ }
public static final String ON_DOMAIN = ConfigRegistryConstants.ON_DOMAIN;
public static final String MODULE_FACTORY_NAME_KEY = "moduleFactoryName";
public static final String SERVICE_QNAME_KEY = "serviceQName";
public static final String INSTANCE_NAME_KEY = "instanceName";
public static final String TYPE_KEY = ConfigRegistryConstants.TYPE_KEY;
- public static final String TYPE_CONFIG_REGISTRY = ConfigRegistryConstants.TYPE_CONFIG_REGISTRY;
public static final String TYPE_CONFIG_TRANSACTION = "ConfigTransaction";
public static final String TYPE_MODULE = "Module";
public static final String TYPE_SERVICE_REFERENCE = "ServiceReference";
public static final String TRANSACTION_NAME_KEY = "TransactionName";
public static final String REF_NAME_KEY = "RefName";
private static final String REPLACED_QUOTATION_MARK = "\\?";
+ public static final String ON_WILDCARD = "*";
- public static ObjectName createON(String on) {
+ public static ObjectName createON(final String on) {
try {
return new ObjectName(on);
- } catch (MalformedObjectNameException e) {
+ } catch (final MalformedObjectNameException e) {
throw new IllegalArgumentException(e);
}
}
- public static ObjectName createONWithDomainAndType(String type) {
+ public static ObjectName createONWithDomainAndType(final String type) {
return ConfigRegistryConstants.createONWithDomainAndType(type);
}
- public static ObjectName createON(String name, String key, String value) {
+ public static ObjectName createON(final String name, final String key, final String value) {
return ConfigRegistryConstants.createON(name, key, value);
}
- public static ObjectName createON(String domain, Map<String, String> attribs) {
+ public static ObjectName createON(final String domain, final Map<String, String> attribs) {
Hashtable<String, String> table = new Hashtable<>(attribs);
try {
return new ObjectName(domain, table);
- } catch (MalformedObjectNameException e) {
+ } catch (final MalformedObjectNameException e) {
throw new IllegalArgumentException(e);
}
}
public static ObjectName createTransactionControllerON(
- String transactionName) {
+ final String transactionName) {
Map<String, String> onParams = new HashMap<>();
onParams.put(TRANSACTION_NAME_KEY, transactionName);
onParams.put(TYPE_KEY, TYPE_CONFIG_TRANSACTION);
return createON(ON_DOMAIN, onParams);
}
- public static ObjectName createTransactionModuleON(String transactionName,
- ModuleIdentifier moduleIdentifier) {
+ public static ObjectName createTransactionModuleON(final String transactionName,
+ final ModuleIdentifier moduleIdentifier) {
return createTransactionModuleON(transactionName,
moduleIdentifier.getFactoryName(),
moduleIdentifier.getInstanceName());
}
- public static ObjectName createTransactionModuleON(String transactionName,
- String moduleName, String instanceName) {
+ public static ObjectName createTransactionModuleON(final String transactionName,
+ final String moduleName, final String instanceName) {
Map<String, String> onParams = createModuleMap(moduleName, instanceName);
onParams.put(TRANSACTION_NAME_KEY, transactionName);
return createON(ON_DOMAIN, onParams);
}
- public static ObjectName createTransactionModuleON(String transactionName,
- ObjectName on) {
+ public static ObjectName createTransactionModuleON(final String transactionName,
+ final ObjectName on) {
return createTransactionModuleON(transactionName, getFactoryName(on),
getInstanceName(on));
}
public static ObjectName createReadOnlyModuleON(
- ModuleIdentifier moduleIdentifier) {
+ final ModuleIdentifier moduleIdentifier) {
return createReadOnlyModuleON(moduleIdentifier.getFactoryName(),
moduleIdentifier.getInstanceName());
}
- public static ObjectName createReadOnlyServiceON(String serviceQName, String refName) {
+ public static ObjectName createReadOnlyServiceON(final String serviceQName, final String refName) {
Map<String, String> onParams = createServiceMap(serviceQName, refName);
return createON(ON_DOMAIN, onParams);
}
- public static ObjectName createTransactionServiceON(String transactionName, String serviceQName, String refName) {
+ public static ObjectName createTransactionServiceON(final String transactionName, final String serviceQName, final String refName) {
Map<String, String> onParams = createServiceON(transactionName, serviceQName, refName);
return createON(ON_DOMAIN, onParams);
}
- public static String getServiceQName(ObjectName objectName) {
+ public static String getServiceQName(final ObjectName objectName) {
checkType(objectName, TYPE_SERVICE_REFERENCE);
String quoted = objectName.getKeyProperty(SERVICE_QNAME_KEY);
return unquoteAndUnescape(objectName, quoted);
// ObjectName supports quotation and ignores tokens like =, but fails to ignore ? sign.
// It must be replaced with another character that hopefully does not collide
// with actual value.
- private static String unquoteAndUnescape(ObjectName objectName, String quoted) {
+ private static String unquoteAndUnescape(final ObjectName objectName, final String quoted) {
if (quoted == null) {
throw new IllegalArgumentException("Cannot find " + SERVICE_QNAME_KEY + " in " + objectName);
}
- if (quoted.startsWith("\"") == false || quoted.endsWith("\"") == false) {
+ if (!quoted.startsWith("\"") || !quoted.endsWith("\"")) {
throw new IllegalArgumentException("Quotes not found in " + objectName);
}
String substring = quoted.substring(1);
return substring;
}
- private static String quoteAndEscapeValue(String serviceQName) {
+ private static String quoteAndEscapeValue(final String serviceQName) {
return "\"" + serviceQName.replace("?", REPLACED_QUOTATION_MARK) + "\"";
}
- public static String getReferenceName(ObjectName objectName) {
+ public static String getReferenceName(final ObjectName objectName) {
checkType(objectName, TYPE_SERVICE_REFERENCE);
return objectName.getKeyProperty(REF_NAME_KEY);
}
- private static Map<String, String> createServiceON(String transactionName, String serviceQName,
- String refName) {
+ private static Map<String, String> createServiceON(final String transactionName, final String serviceQName,
+ final String refName) {
Map<String, String> result = new HashMap<>(createServiceMap(serviceQName, refName));
result.put(TRANSACTION_NAME_KEY, transactionName);
return result;
}
- private static Map<String, String> createServiceMap(String serviceQName,
- String refName) {
+ private static Map<String, String> createServiceMap(final String serviceQName,
+ final String refName) {
Map<String, String> onParams = new HashMap<>();
onParams.put(TYPE_KEY, TYPE_SERVICE_REFERENCE);
onParams.put(SERVICE_QNAME_KEY, quoteAndEscapeValue(serviceQName));
}
- public static ObjectName createReadOnlyModuleON(String moduleName,
- String instanceName) {
+ public static ObjectName createReadOnlyModuleON(final String moduleName,
+ final String instanceName) {
Map<String, String> onParams = createModuleMap(moduleName, instanceName);
return createON(ON_DOMAIN, onParams);
}
- private static Map<String, String> createModuleMap(String moduleName,
- String instanceName) {
+ private static Map<String, String> createModuleMap(final String moduleName,
+ final String instanceName) {
Map<String, String> onParams = new HashMap<>();
onParams.put(TYPE_KEY, TYPE_MODULE);
onParams.put(MODULE_FACTORY_NAME_KEY, moduleName);
return onParams;
}
- public static String getFactoryName(ObjectName objectName) {
+ public static String getFactoryName(final ObjectName objectName) {
checkTypeOneOf(objectName, TYPE_MODULE, TYPE_RUNTIME_BEAN);
return objectName.getKeyProperty(MODULE_FACTORY_NAME_KEY);
}
- public static String getInstanceName(ObjectName objectName) {
+ public static String getInstanceName(final ObjectName objectName) {
checkTypeOneOf(objectName, TYPE_MODULE, TYPE_RUNTIME_BEAN);
return objectName.getKeyProperty(INSTANCE_NAME_KEY);
}
- public static String getTransactionName(ObjectName objectName) {
+ public static String getTransactionName(final ObjectName objectName) {
return objectName.getKeyProperty(TRANSACTION_NAME_KEY);
}
/**
* Sanitize on: keep only mandatory attributes of module + metadata.
*/
- public static ObjectName withoutTransactionName(ObjectName inputON) {
+ public static ObjectName withoutTransactionName(final ObjectName inputON) {
checkTypeOneOf(inputON, TYPE_MODULE, TYPE_SERVICE_REFERENCE);
if (getTransactionName(inputON) == null) {
throw new IllegalArgumentException(
"Expected ObjectName with transaction:" + inputON);
}
- if (ON_DOMAIN.equals(inputON.getDomain()) == false) {
+ if (!ON_DOMAIN.equals(inputON.getDomain())) {
throw new IllegalArgumentException("Expected different domain: "
+ inputON);
}
return createON(ON_DOMAIN, outputProperties);
}
- public static ObjectName withTransactionName(ObjectName inputON, String transactionName) {
+ public static ObjectName withTransactionName(final ObjectName inputON, final String transactionName) {
Map<String, String> additionalProperties = getAdditionalProperties(inputON);
additionalProperties.put(TRANSACTION_NAME_KEY, transactionName);
return createON(inputON.getDomain(), additionalProperties);
}
private static void assertDoesNotContain(
- Map<String, String> additionalProperties, String key) {
+ final Map<String, String> additionalProperties, final String key) {
if (additionalProperties.containsKey(key)) {
throw new IllegalArgumentException(
"Map 'additionalProperties' cannot overwrite attribute "
}
}
- public static ObjectName createRuntimeBeanName(String moduleName,
- String instanceName, Map<String, String> additionalProperties) {
+ public static ObjectName createRuntimeBeanName(final String moduleName,
+ final String instanceName, final Map<String, String> additionalProperties) {
// check that there is no overwriting of default attributes
assertDoesNotContain(additionalProperties, MODULE_FACTORY_NAME_KEY);
assertDoesNotContain(additionalProperties, INSTANCE_NAME_KEY);
MODULE_FACTORY_NAME_KEY, INSTANCE_NAME_KEY, TYPE_KEY));
public static Map<String, String> getAdditionalPropertiesOfRuntimeBeanName(
- ObjectName on) {
+ final ObjectName on) {
checkType(on, TYPE_RUNTIME_BEAN);
Map<String, String> allProperties = getAdditionalProperties(on);
Map<String, String> result = new HashMap<>();
for (Entry<String, String> entry : allProperties.entrySet()) {
- if (blacklist.contains(entry.getKey()) == false) {
+ if (!blacklist.contains(entry.getKey())) {
result.put(entry.getKey(), entry.getValue());
}
}
return result;
}
- public static Map<String, String> getAdditionalProperties(ObjectName on) {
- Hashtable<String, String> keyPropertyList = on.getKeyPropertyList();
+ public static Map<String, String> getAdditionalProperties(final ObjectName on) {
+ Map<String, String> keyPropertyList = on.getKeyPropertyList();
Map<String, String> result = new HashMap<>();
for (Entry<String, String> entry : keyPropertyList.entrySet()) {
result.put(entry.getKey(), entry.getValue());
return result;
}
- public static void checkDomain(ObjectName objectName) {
+ public static void checkDomain(final ObjectName objectName) {
if (!ON_DOMAIN.equals(objectName.getDomain())) {
throw new IllegalArgumentException("Wrong domain " + objectName);
}
}
- public static void checkType(ObjectName objectName, String type) {
+ public static void checkType(final ObjectName objectName, final String type) {
if (!type.equals(objectName.getKeyProperty(TYPE_KEY))) {
throw new IllegalArgumentException("Wrong type, expected '" + type
+ "', got " + objectName);
}
}
- public static void checkTypeOneOf(ObjectName objectName, String... types) {
+ public static void checkTypeOneOf(final ObjectName objectName, final String... types) {
for (String type : types) {
if (type.equals(objectName.getKeyProperty(TYPE_KEY))) {
return;
+ ", got " + objectName);
}
- public static ObjectName createModulePattern(String moduleName,
- String instanceName) {
- if (moduleName == null) {
- moduleName = "*";
- }
- if (instanceName == null) {
- instanceName = "*";
- }
+ public static ObjectName createModulePattern(final String moduleName,
+ final String instanceName) {
+ String finalModuleName = moduleName == null ? ON_WILDCARD : moduleName;
+ String finalInstanceName = instanceName == null ? ON_WILDCARD : instanceName;
+
// do not return object names containing transaction name
ObjectName namePattern = ObjectNameUtil
.createON(ObjectNameUtil.ON_DOMAIN + ":"
+ ObjectNameUtil.TYPE_KEY + "="
+ ObjectNameUtil.TYPE_MODULE + ","
+ ObjectNameUtil.MODULE_FACTORY_NAME_KEY + "="
- + moduleName + "," + ""
- + ObjectNameUtil.INSTANCE_NAME_KEY + "=" + instanceName);
+ + finalModuleName + "," + ""
+ + ObjectNameUtil.INSTANCE_NAME_KEY + "=" + finalInstanceName);
return namePattern;
}
- public static ObjectName createModulePattern(String ifcName,
- String instanceName, String transactionName) {
+ public static ObjectName createModulePattern(final String ifcName,
+ final String instanceName, final String transactionName) {
+ String finalIfcName = ifcName == null ? ON_WILDCARD : ifcName;
+ String finalInstanceName = instanceName == null ? ON_WILDCARD : instanceName;
+ String finalTransactionName = transactionName == null ? ON_WILDCARD : transactionName;
+
return ObjectNameUtil.createON(ObjectNameUtil.ON_DOMAIN
+ ":type=Module," + ObjectNameUtil.MODULE_FACTORY_NAME_KEY
- + "=" + ifcName + "," + ObjectNameUtil.INSTANCE_NAME_KEY + "="
- + instanceName + "," + ObjectNameUtil.TRANSACTION_NAME_KEY
- + "=" + transactionName);
+ + "=" + finalIfcName + "," + ObjectNameUtil.INSTANCE_NAME_KEY + "="
+ + finalInstanceName + "," + ObjectNameUtil.TRANSACTION_NAME_KEY
+ + "=" + finalTransactionName);
}
- public static ObjectName createRuntimeBeanPattern(String moduleName,
- String instanceName) {
+ public static ObjectName createRuntimeBeanPattern(final String moduleName,
+ final String instanceName) {
+ String finalModuleName = moduleName == null ? ON_WILDCARD : moduleName;
+ String finalInstanceName = instanceName == null ? ON_WILDCARD : instanceName;
+
return ObjectNameUtil.createON(ObjectNameUtil.ON_DOMAIN + ":"
+ ObjectNameUtil.TYPE_KEY + "="
+ ObjectNameUtil.TYPE_RUNTIME_BEAN + ","
- + ObjectNameUtil.MODULE_FACTORY_NAME_KEY + "=" + moduleName
- + "," + ObjectNameUtil.INSTANCE_NAME_KEY + "=" + instanceName
+ + ObjectNameUtil.MODULE_FACTORY_NAME_KEY + "=" + finalModuleName
+ + "," + ObjectNameUtil.INSTANCE_NAME_KEY + "=" + finalInstanceName
+ ",*");
}
- public static ModuleIdentifier fromON(ObjectName objectName,
- String expectedType) {
+ public static ModuleIdentifier fromON(final ObjectName objectName,
+ final String expectedType) {
checkType(objectName, expectedType);
String factoryName = getFactoryName(objectName);
if (factoryName == null) {
return new ModuleIdentifier(factoryName, instanceName);
}
- public static boolean isServiceReference(ObjectName objectName) {
+ public static boolean isServiceReference(final ObjectName objectName) {
return TYPE_SERVICE_REFERENCE.equals(objectName.getKeyProperty(TYPE_KEY));
}
}