X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fyang-jmx-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fyangjmxgenerator%2FModuleMXBeanEntryBuilder.java;h=ed727c9a13590733178d84e66b64cae71f23b058;hp=518a11540e6c1ea33ebd3cf70909ad35b9874024;hb=159881b2b1c44301f740a6d20199df58eea04851;hpb=02bdbc1c781abc0b0b1d12dbfc1a19c316bebb98 diff --git a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java index 518a11540e..ed727c9a13 100644 --- a/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java +++ b/opendaylight/config/yang-jmx-generator/src/main/java/org/opendaylight/controller/config/yangjmxgenerator/ModuleMXBeanEntryBuilder.java @@ -18,7 +18,6 @@ import com.google.common.base.Optional; import com.google.common.collect.Collections2; import com.google.common.collect.Maps; import com.google.common.collect.Sets; - import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -27,9 +26,7 @@ import java.util.Objects; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; - import javax.annotation.Nullable; - import org.opendaylight.controller.config.yangjmxgenerator.attribute.AbstractDependencyAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.AttributeIfc; import org.opendaylight.controller.config.yangjmxgenerator.attribute.DependencyAttribute; @@ -38,6 +35,7 @@ import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListAttribu import org.opendaylight.controller.config.yangjmxgenerator.attribute.ListDependenciesAttribute; import org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute; import org.opendaylight.controller.config.yangjmxgenerator.plugin.util.NameConflictException; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.rev130405.ServiceRef; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.AugmentationSchema; import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode; @@ -92,22 +90,22 @@ final class ModuleMXBeanEntryBuilder { return this; } - private static final Logger logger = LoggerFactory + private static final Logger LOG = LoggerFactory .getLogger(ModuleMXBeanEntryBuilder.class); // TODO: the XPath should be parsed by code generator IMO private static final String MAGIC_STRING = "MAGIC_STRING"; private static final String MODULE_CONDITION_XPATH_TEMPLATE = "^/MAGIC_STRING:modules/MAGIC_STRING:module/MAGIC_STRING:type\\s*=\\s*['\"](.+)['\"]$"; - private static final SchemaPath expectedConfigurationAugmentationSchemaPath = SchemaPath.create(true, + private static final SchemaPath EXPECTED_CONFIGURATION_AUGMENTATION_SCHEMA_PATH = SchemaPath.create(true, createConfigQName("modules"), createConfigQName("module"), createConfigQName("configuration")); - private static final SchemaPath expectedStateAugmentationSchemaPath = SchemaPath.create(true, + private static final SchemaPath EXPECTED_STATE_AUGMENTATION_SCHEMA_PATH = SchemaPath.create(true, createConfigQName("modules"), createConfigQName("module"), createConfigQName("state")); private static final Pattern PREFIX_COLON_LOCAL_NAME = Pattern .compile("^(.+):(.+)$"); public Map build() { - logger.debug("Generating ModuleMXBeans of {} to package {}", + LOG.debug("Generating ModuleMXBeans of {} to package {}", currentModule.getNamespace(), packageName); String configModulePrefix; @@ -145,7 +143,7 @@ final class ModuleMXBeanEntryBuilder { checkAttributeNamesUniqueness(uniqueGeneratedClassesNames, result); checkUnaugumentedIdentities(unaugmentedModuleIdentities); - logger.debug("Number of ModuleMXBeans to be generated: {}", result.size()); + LOG.debug("Number of ModuleMXBeans to be generated: {}", result.size()); return result; } @@ -165,7 +163,7 @@ final class ModuleMXBeanEntryBuilder { private static void checkUnaugumentedIdentities(final Map unaugmentedModuleIdentities) { if (unaugmentedModuleIdentities.size() > 0) { - logger.warn("Augmentation not found for all currentModule identities: {}", + LOG.warn("Augmentation not found for all currentModule identities: {}", unaugmentedModuleIdentities.keySet()); } } @@ -189,7 +187,7 @@ final class ModuleMXBeanEntryBuilder { + identityLocalName); } else { moduleIdentities.put(identityLocalName, id); - logger.debug("Found identity {}", identityLocalName); + LOG.debug("Found identity {}", identityLocalName); } // validation check on unknown schema nodes boolean providedServiceWasSet = false; @@ -269,13 +267,13 @@ final class ModuleMXBeanEntryBuilder { HAS_CHILDREN_AND_QNAME dataNodeContainer = getDataNodeContainer(choiceCaseNode); - if (expectedConfigurationAugmentationSchemaPath.equals(augmentation.getTargetPath())) { - logger.debug("Parsing configuration of {}", moduleLocalNameFromXPath); + if (EXPECTED_CONFIGURATION_AUGMENTATION_SCHEMA_PATH.equals(augmentation.getTargetPath())) { + LOG.debug("Parsing configuration of {}", moduleLocalNameFromXPath); yangToAttributes = fillConfiguration(dataNodeContainer, currentModule, typeProviderWrapper, qNamesToSIEs, schemaContext, packageName); checkUniqueAttributesWithGeneratedClass(uniqueGeneratedClassesNames, when.getQName(), yangToAttributes); - } else if (expectedStateAugmentationSchemaPath.equals(augmentation.getTargetPath())) { - logger.debug("Parsing state of {}", moduleLocalNameFromXPath); + } else if (EXPECTED_STATE_AUGMENTATION_SCHEMA_PATH.equals(augmentation.getTargetPath())) { + LOG.debug("Parsing state of {}", moduleLocalNameFromXPath); try { runtimeBeans = fillRuntimeBeans(dataNodeContainer, currentModule, typeProviderWrapper, packageName, moduleLocalNameFromXPath, javaNamePrefix); @@ -308,9 +306,9 @@ final class ModuleMXBeanEntryBuilder { " both state and configuration"); } else { ModuleMXBeanEntry.ModuleMXBeanEntryInitial initial = new ModuleMXBeanEntry.ModuleMXBeanEntryInitialBuilder() - .setIdSchemaNode(moduleIdentity).setPackageName(packageName).setJavaNamePrefix(javaNamePrefix) - .setNamespace(currentModule.getNamespace().toString()).setqName(ModuleUtil.getQName(currentModule)) - .build(); + .setIdSchemaNode(moduleIdentity).setPackageName(packageName).setJavaNamePrefix(javaNamePrefix) + .setNamespace(currentModule.getNamespace().toString()).setqName(ModuleUtil.getQName(currentModule)) + .build(); // construct ModuleMXBeanEntry ModuleMXBeanEntry moduleMXBeanEntry = new ModuleMXBeanEntry(initial, yangToAttributes, providedServices, @@ -376,7 +374,7 @@ final class ModuleMXBeanEntryBuilder { final String javaNamePrefix) { return RuntimeBeanEntry.extractClassNameToRuntimeBeanMap(packageName, dataNodeContainer, moduleLocalNameFromXPath, - typeProviderWrapper, javaNamePrefix, currentModule).values(); + typeProviderWrapper, javaNamePrefix, currentModule, schemaContext).values(); } @@ -466,7 +464,7 @@ final class ModuleMXBeanEntryBuilder { private Optional extractDependency(final DataNodeContainer dataNodeContainer, final DataSchemaNode attrNode, final Module currentModule, final Map qNamesToSIEs, final SchemaContext schemaContext) { - if (dataNodeContainer.getUses().size() == 1 && getChildNodeSizeWithoutUses(dataNodeContainer) == 0) { + if (isDependencyContainer(dataNodeContainer)) { // reference UsesNode usesNode = dataNodeContainer.getUses().iterator().next(); checkState(usesNode.getRefines().size() == 1, "Unexpected 'refine' child node size of " + dataNodeContainer); @@ -493,6 +491,18 @@ final class ModuleMXBeanEntryBuilder { return Optional.absent(); } + private boolean isDependencyContainer(final DataNodeContainer dataNodeContainer) { + if(dataNodeContainer.getUses().size() != 1) { + return false; + } + UsesNode onlyUses = dataNodeContainer.getUses().iterator().next(); + if(onlyUses.getGroupingPath().getLastComponent().equals(ServiceRef.QNAME) == false) { + return false; + } + + return getChildNodeSizeWithoutUses(dataNodeContainer) == 0; + } + private int getChildNodeSizeWithoutUses(final DataNodeContainer csn) { int result = 0; for (DataSchemaNode dsn : csn.getChildNodes()) {