use of org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement in project controller by opendaylight.
the class InstanceRuntimeRpc method resolveConfiguration.
private void resolveConfiguration(final Map<String, AttributeConfigElement> mappedConfig) {
// TODO make field, resolvingStrategies can be instantiated only once
Map<String, AttributeResolvingStrategy<?, ? extends OpenType<?>>> resolvingStrategies = new ObjectResolver(null).prepareResolving(yangToAttrConfig, enumResolver);
// TODO make constructor for object resolver without service tracker
for (Entry<String, AttributeConfigElement> configDefEntry : mappedConfig.entrySet()) {
try {
AttributeResolvingStrategy<?, ? extends OpenType<?>> attributeResolvingStrategy = resolvingStrategies.get(configDefEntry.getKey());
configDefEntry.getValue().resolveValue(attributeResolvingStrategy, configDefEntry.getKey());
configDefEntry.getValue().setJmxName(yangToAttrConfig.get(configDefEntry.getKey()).getUpperCaseCammelCase());
} catch (final DocumentedException e) {
throw new IllegalStateException("Unable to resolve value " + configDefEntry.getValue() + " to attribute " + configDefEntry.getKey(), e);
}
}
}
use of org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement in project controller by opendaylight.
the class RpcFacade method fromXml.
public OperationExecution fromXml(final XmlElement xml) throws DocumentedException {
final String namespace;
namespace = xml.getNamespace();
final XmlElement contextInstanceElement = xml.getOnlyChildElement(CONTEXT_INSTANCE);
final String operationName = xml.getName();
final RuntimeRpcElementResolved id = RuntimeRpcElementResolved.fromXpath(contextInstanceElement.getTextContent(), operationName, namespace);
final Rpcs rpcs = mapRpcs();
final ModuleRpcs rpcMapping = rpcs.getRpcMapping(id);
final InstanceRuntimeRpc instanceRuntimeRpc = rpcMapping.getRpc(id.getRuntimeBeanName(), operationName);
// TODO move to Rpcs after xpath attribute is redesigned
final ObjectName on = id.getObjectName(rpcMapping);
Map<String, AttributeConfigElement> attributes = instanceRuntimeRpc.fromXml(xml);
attributes = sortAttributes(attributes, xml);
return new OperationExecution(on, instanceRuntimeRpc.getName(), attributes, instanceRuntimeRpc.getReturnType(), namespace);
}
use of org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement in project controller by opendaylight.
the class RpcFacade method sortAttributes.
private Map<String, AttributeConfigElement> sortAttributes(final Map<String, AttributeConfigElement> attributes, final XmlElement xml) {
final Map<String, AttributeConfigElement> sorted = new LinkedHashMap<>();
for (XmlElement xmlElement : xml.getChildElements()) {
final String name = xmlElement.getName();
if (!CONTEXT_INSTANCE.equals(name)) {
// skip context
// instance child node
// because it
// specifies
// ObjectName
final AttributeConfigElement value = attributes.get(name);
if (value == null) {
throw new IllegalArgumentException("Cannot find yang mapping for node " + xmlElement);
}
sorted.put(name, value);
}
}
return sorted;
}
use of org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement in project controller by opendaylight.
the class RpcFacade method executeOperation.
public Object executeOperation(final OperationExecution execution) {
final Object[] params = new Object[execution.attributes.size()];
final String[] signature = new String[execution.attributes.size()];
int index = 0;
for (final AttributeConfigElement attribute : execution.attributes.values()) {
final Optional<?> resolvedValueOpt = attribute.getResolvedValue();
params[index] = resolvedValueOpt.isPresent() ? resolvedValueOpt.get() : attribute.getResolvedDefaultValue();
signature[index] = resolvedValueOpt.isPresent() ? resolvedValueOpt.get().getClass().getName() : attribute.getResolvedDefaultValue().getClass().getName();
index++;
}
return configRegistryClient.invokeMethod(execution.on, execution.operationName, params, signature);
}
use of org.opendaylight.controller.config.facade.xml.mapping.attributes.fromxml.AttributeConfigElement in project controller by opendaylight.
the class InstanceConfig method fromXml.
public InstanceConfigElementResolved fromXml(XmlElement moduleElement, final ServiceRegistryWrapper services, final String moduleNamespace, final EditStrategyType defaultStrategy, final Map<String, Map<Optional<Revision>, IdentityMapping>> identityMap, final EnumResolver enumResolver) throws DocumentedException {
Map<String, AttributeConfigElement> retVal = Maps.newHashMap();
Map<String, AttributeReadingStrategy> strats = new ObjectXmlReader().prepareReading(yangToAttrConfig, identityMap);
List<XmlElement> recognisedChildren = Lists.newArrayList();
XmlElement typeElement = moduleElement.getOnlyChildElementWithSameNamespace(XmlMappingConstants.TYPE_KEY);
XmlElement nameElement = moduleElement.getOnlyChildElementWithSameNamespace(XmlMappingConstants.NAME_KEY);
List<XmlElement> typeAndNameElements = Lists.newArrayList(typeElement, nameElement);
// if dummy container was defined in yang, set moduleElement to its content
if (nullableDummyContainerName != null) {
int size = moduleElement.getChildElements().size();
int expectedChildNodes = 1 + typeAndNameElements.size();
if (size > expectedChildNodes) {
throw new DocumentedException("Error reading module " + typeElement.getTextContent() + " : " + nameElement.getTextContent() + " - Expected " + expectedChildNodes + " child nodes, " + "one of them with name " + nullableDummyContainerName + ", got " + size + " elements.");
}
if (size == expectedChildNodes) {
try {
moduleElement = moduleElement.getOnlyChildElement(nullableDummyContainerName, moduleNamespace);
} catch (final DocumentedException e) {
throw new DocumentedException("Error reading module " + typeElement.getTextContent() + " : " + nameElement.getTextContent() + " - Expected child node with name " + nullableDummyContainerName + "." + e.getMessage(), e);
}
}
// else 2 elements, no need to descend
}
for (Entry<String, AttributeReadingStrategy> readStratEntry : strats.entrySet()) {
List<XmlElement> configNodes = getConfigNodes(moduleElement, moduleNamespace, readStratEntry.getKey(), recognisedChildren, typeAndNameElements);
AttributeConfigElement readElement = readStratEntry.getValue().readElement(configNodes);
retVal.put(readStratEntry.getKey(), readElement);
}
recognisedChildren.addAll(typeAndNameElements);
try {
moduleElement.checkUnrecognisedElements(recognisedChildren);
} catch (final DocumentedException e) {
throw new DocumentedException("Error reading module " + typeElement.getTextContent() + " : " + nameElement.getTextContent() + " - " + e.getMessage(), e, e.getErrorType(), e.getErrorTag(), e.getErrorSeverity(), e.getErrorInfo());
}
// TODO: add check for conflicts between global and local edit strategy
String perInstanceEditStrategy = moduleElement.getAttribute(XmlMappingConstants.OPERATION_ATTR_KEY, XmlMappingConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0);
InstanceConfigElementResolved instanceConfigElementResolved = perInstanceEditStrategy.equals("") ? new InstanceConfigElementResolved(retVal, defaultStrategy) : new InstanceConfigElementResolved(perInstanceEditStrategy, retVal, defaultStrategy);
resolveConfiguration(instanceConfigElementResolved, services, enumResolver);
return instanceConfigElementResolved;
}
Aggregations