use of org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute in project controller by opendaylight.
the class RuntimeBeanEntry method extractSubtree.
/**
* Get direct descendants of this subtree, together with attributes defined
* in subtree.
*/
private static AttributesRpcsAndRuntimeBeans extractSubtree(final String packageName, final DataNodeContainer subtree, final TypeProviderWrapper typeProviderWrapper, final Module currentModule, final SchemaContext ctx) {
Multimap<QName, RpcDefinition> identitiesToRpcs = getIdentitiesToRpcs(ctx);
List<AttributeIfc> attributes = Lists.newArrayList();
List<RuntimeBeanEntry> runtimeBeanEntries = new ArrayList<>();
for (DataSchemaNode child : subtree.getChildNodes()) {
// runtime beans
if (child instanceof LeafSchemaNode) {
// just save the attribute
LeafSchemaNode leaf = (LeafSchemaNode) child;
attributes.add(new JavaAttribute(leaf, typeProviderWrapper));
} else if (child instanceof ContainerSchemaNode) {
ContainerSchemaNode container = (ContainerSchemaNode) child;
// this can be either TO or hierarchical RB
TOAttribute toAttribute = TOAttribute.create(container, typeProviderWrapper, packageName);
attributes.add(toAttribute);
} else if (child instanceof ListSchemaNode) {
if (isInnerStateBean(child)) {
ListSchemaNode listSchemaNode = (ListSchemaNode) child;
RuntimeBeanEntry hierarchicalChild = createHierarchical(packageName, listSchemaNode, typeProviderWrapper, currentModule, ctx);
runtimeBeanEntries.add(hierarchicalChild);
} else /* ordinary list attribute */
{
ListAttribute listAttribute = ListAttribute.create((ListSchemaNode) child, typeProviderWrapper, packageName);
attributes.add(listAttribute);
}
} else if (child instanceof LeafListSchemaNode) {
ListAttribute listAttribute = ListAttribute.create((LeafListSchemaNode) child, typeProviderWrapper);
attributes.add(listAttribute);
} else {
throw new IllegalStateException("Unexpected running-data node " + child);
}
}
Set<Rpc> rpcs = new HashSet<>();
SchemaNode subtreeSchemaNode = (SchemaNode) subtree;
for (UnknownSchemaNode unknownSchemaNode : subtreeSchemaNode.getUnknownSchemaNodes()) {
if (ConfigConstants.RPC_CONTEXT_INSTANCE_EXTENSION_QNAME.equals(unknownSchemaNode.getNodeType())) {
String localIdentityName = unknownSchemaNode.getNodeParameter();
QName identityQName = unknownSchemaNode.isAddedByUses() ? findQNameFromGrouping(subtree, ctx, unknownSchemaNode, localIdentityName) : QName.create(currentModule.getNamespace(), currentModule.getRevision(), localIdentityName);
// convert RpcDefinition to Rpc
for (RpcDefinition rpcDefinition : identitiesToRpcs.get(identityQName)) {
String name = TypeProviderWrapper.findJavaParameter(rpcDefinition);
AttributeIfc returnType;
if (rpcDefinition.getOutput() == null || rpcDefinition.getOutput().getChildNodes().isEmpty()) {
returnType = VoidAttribute.getInstance();
} else if (rpcDefinition.getOutput().getChildNodes().size() == 1) {
DataSchemaNode returnDSN = rpcDefinition.getOutput().getChildNodes().iterator().next();
returnType = getReturnTypeAttribute(returnDSN, typeProviderWrapper, packageName);
} else {
throw new IllegalArgumentException("More than one child node in rpc output is not supported. " + "Error occured in " + rpcDefinition);
}
List<JavaAttribute> parameters = new ArrayList<>();
for (DataSchemaNode childNode : sortAttributes(rpcDefinition.getInput().getChildNodes())) {
if (childNode.isAddedByUses() == false) {
// skip
// refined
// context-instance
checkArgument(childNode instanceof LeafSchemaNode, "Unexpected type of rpc input type. " + "Currently only leafs and empty output nodes are supported, got " + childNode);
JavaAttribute javaAttribute = new JavaAttribute((LeafSchemaNode) childNode, typeProviderWrapper);
parameters.add(javaAttribute);
}
}
Rpc newRpc = new Rpc(returnType, name, rpcDefinition.getQName().getLocalName(), parameters);
rpcs.add(newRpc);
}
}
}
return new AttributesRpcsAndRuntimeBeans(runtimeBeanEntries, attributes, rpcs);
}
use of org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute in project controller by opendaylight.
the class ObjectResolver method caseTOAttribute.
@Override
protected AttributeResolvingStrategy<?, ? extends OpenType<?>> caseTOAttribute(final CompositeType openType) {
Preconditions.checkState(getLastAttribute() instanceof TOAttribute);
TOAttribute toAttribute = (TOAttribute) getLastAttribute();
Map<String, AttributeResolvingStrategy<?, ? extends OpenType<?>>> innerMap = Maps.newHashMap();
for (String innerName : openType.keySet()) {
AttributeIfc innerAttributeIfc = toAttribute.getJmxPropertiesToTypesMap().get(innerName);
innerMap.put(innerAttributeIfc.getAttributeYangName(), prepareStrategy(innerAttributeIfc));
}
return new CompositeAttributeResolvingStrategy(innerMap, openType, createYangToJmxMapping(toAttribute));
}
use of org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute in project controller by opendaylight.
the class ObjectMapper method caseTOAttribute.
@Override
protected AttributeMappingStrategy<?, ? extends OpenType<?>> caseTOAttribute(final CompositeType openType) {
Map<String, AttributeMappingStrategy<?, ? extends OpenType<?>>> innerStrategies = Maps.newHashMap();
Preconditions.checkState(getLastAttribute() instanceof TOAttribute);
TOAttribute lastTO = (TOAttribute) getLastAttribute();
for (Entry<String, AttributeIfc> innerAttrEntry : ((TOAttribute) getLastAttribute()).getJmxPropertiesToTypesMap().entrySet()) {
innerStrategies.put(innerAttrEntry.getKey(), prepareStrategy(innerAttrEntry.getValue()));
}
return new CompositeAttributeMappingStrategy(openType, innerStrategies, createJmxToYangMapping(lastTO));
}
use of org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute in project controller by opendaylight.
the class ObjectXmlReader method caseTOAttribute.
@Override
protected AttributeReadingStrategy caseTOAttribute(final CompositeType openType) {
AttributeIfc lastAttribute = getLastAttribute();
Preconditions.checkState(lastAttribute instanceof TOAttribute);
Map<String, AttributeIfc> inner = ((TOAttribute) lastAttribute).getYangPropertiesToTypesMap();
Map<String, AttributeReadingStrategy> innerStrategies = Maps.newHashMap();
for (Entry<String, AttributeIfc> innerAttrEntry : inner.entrySet()) {
AttributeReadingStrategy innerStrat = prepareReadingStrategy(innerAttrEntry.getKey(), innerAttrEntry.getValue());
innerStrategies.put(innerAttrEntry.getKey(), innerStrat);
}
return new CompositeAttributeReadingStrategy(lastAttribute.getNullableDefault(), innerStrategies);
}
use of org.opendaylight.controller.config.yangjmxgenerator.attribute.TOAttribute in project controller by opendaylight.
the class ModuleMXBeanEntryPluginTest method testThreadsJavaPlugin.
@Test
public void testThreadsJavaPlugin() {
Map<String, ModuleMXBeanEntry> /* identity local name */
namesToMBEs = loadThreadsJava();
{
// check threadfactory-naming
ModuleMXBeanEntry threadFactoryNaming = namesToMBEs.get(THREADFACTORY_NAMING_MXB_NAME);
Collection<RuntimeBeanEntry> runtimeBeans = threadFactoryNaming.getRuntimeBeans();
assertThat(runtimeBeans.size(), is(4));
// first one should be root
{
RuntimeBeanEntry rootRB = findFirstByYangName(runtimeBeans, THREADFACTORY_NAMING_MXB_NAME);
assertThat(rootRB.isRoot(), is(true));
assertThat(rootRB.getAttributes().size(), is(1));
JavaAttribute attribute = (JavaAttribute) rootRB.getAttributes().iterator().next();
assertThat(attribute.getAttributeYangName(), is("created-sessions"));
assertThat(rootRB.getYangName(), is(THREADFACTORY_NAMING_MXB_NAME));
Map<String, FtlTemplate> ftlMap = TemplateFactory.getTOAndMXInterfaceFtlFiles(rootRB);
assertThat(ftlMap.size(), is(1));
GeneralInterfaceTemplate rootGeneratorInterface = (GeneralInterfaceTemplate) ftlMap.get("NamingThreadFactoryRuntimeMXBean.java");
assertNotNull(rootGeneratorInterface);
assertThat(rootGeneratorInterface.getPackageName(), is(PACKAGE_NAME));
assertThat(rootGeneratorInterface.getFullyQualifiedName(), is(PACKAGE_NAME + ".NamingThreadFactoryRuntimeMXBean"));
assertThat(rootGeneratorInterface.getTypeDeclaration().getExtended(), is(Arrays.asList("org.opendaylight.controller.config.api.runtime.RuntimeBean")));
assertThat(rootGeneratorInterface.getMethods().size(), is(1));
Method getCreatedSessions = findFirstMethodByName(rootGeneratorInterface.getMethods(), "getCreatedSessions");
assertThat(getCreatedSessions.getName(), is("getCreatedSessions"));
assertThat(getCreatedSessions.getParameters().isEmpty(), is(true));
assertThat(getCreatedSessions.getReturnType(), is(Long.class.getName()));
}
}
{
ModuleMXBeanEntry threadFactoryNaming = namesToMBEs.get(THREADFACTORY_NAMING_MXB_NAME);
Collection<RuntimeBeanEntry> runtimeBeans = threadFactoryNaming.getRuntimeBeans();
assertThat(runtimeBeans.size(), is(4));
{
RuntimeBeanEntry streamRB = findFirstByNamePrefix(runtimeBeans, "ThreadStream");
assertNotNull(streamRB);
assertFalse(streamRB.getKeyYangName().isPresent());
assertFalse(streamRB.getKeyJavaName().isPresent());
Map<String, AttributeIfc> attributeMap = streamRB.getYangPropertiesToTypesMap();
assertEquals(4, attributeMap.size());
TOAttribute toAttr = (TOAttribute) attributeMap.get("peer");
assertNotNull(toAttr);
JavaAttribute timestampAttr = (JavaAttribute) attributeMap.get("timestamp");
assertNotNull(timestampAttr);
JavaAttribute stateAttr = (JavaAttribute) attributeMap.get("state");
assertNotNull(stateAttr);
ListAttribute innerStreamList = (ListAttribute) attributeMap.get("inner-stream-list");
assertNotNull(innerStreamList);
Map<String, FtlTemplate> ftlMap = TemplateFactory.getTOAndMXInterfaceFtlFiles(streamRB);
assertThat(ftlMap.size(), is(3));
GeneralInterfaceTemplate streamGeneralInterface = (GeneralInterfaceTemplate) ftlMap.get("ThreadStreamRuntimeMXBean.java");
assertThat(streamGeneralInterface.getMethods().size(), is(4));
Method getPeer = findFirstMethodByName(streamGeneralInterface.getMethods(), "getPeer");
assertNotNull(getPeer);
assertThat(getPeer.getReturnType(), is(PACKAGE_NAME + ".Peer"));
// test TO
GeneralClassTemplate peerTO = (GeneralClassTemplate) ftlMap.get("pack2.Peer");
assertThat(peerTO.getPackageName(), is(PACKAGE_NAME));
assertThat(peerTO.getTypeDeclaration().getExtended().isEmpty(), is(true));
assertThat(peerTO.getFullyQualifiedName(), is(PACKAGE_NAME + ".Peer"));
assertThat(peerTO.getMethods().size(), is(5 + 2));
Method getPort = findFirstMethodByName(peerTO.getMethods(), "getPort");
assertNotNull(getPort);
Method setPort = findFirstMethodByName(peerTO.getMethods(), "setPort");
assertNotNull(setPort);
Method getCoreSize = findFirstMethodByName(peerTO.getMethods(), "getCoreSize");
Method setCoreSize = findFirstMethodByName(peerTO.getMethods(), "setCoreSize");
assertNotNull(setCoreSize);
assertNotNull(getCoreSize);
}
}
}
Aggregations