X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2Foperations%2Fgetconfig%2FGetConfig.java;h=350ace5eb1a44ac88bd60ac3fc338babcc4d22ae;hp=05bba56611a1137e0bfb60c69b198df82ae2aa7d;hb=f73a6cd4c81794193d42893fab61b97416f751f2;hpb=72a2f458d328d443e2a5479ac147c1242a41a70f diff --git a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java index 05bba56611..350ace5eb1 100644 --- a/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java +++ b/opendaylight/netconf/config-netconf-connector/src/main/java/org/opendaylight/controller/netconf/confignetconfconnector/operations/getconfig/GetConfig.java @@ -8,47 +8,42 @@ package org.opendaylight.controller.netconf.confignetconfconnector.operations.getconfig; -import java.util.HashMap; -import java.util.Map; +import com.google.common.base.Optional; import java.util.Set; - import javax.management.ObjectName; - import org.opendaylight.controller.config.util.ConfigRegistryClient; import org.opendaylight.controller.config.util.ConfigTransactionClient; import org.opendaylight.controller.netconf.api.NetconfDocumentedException; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag; -import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorType; +import org.opendaylight.controller.netconf.api.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.Config; import org.opendaylight.controller.netconf.confignetconfconnector.mapping.config.ServiceRegistryWrapper; import org.opendaylight.controller.netconf.confignetconfconnector.operations.AbstractConfigNetconfOperation; import org.opendaylight.controller.netconf.confignetconfconnector.operations.Datastore; import org.opendaylight.controller.netconf.confignetconfconnector.operations.editconfig.EditConfig; -import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot; +import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreContext; import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider; +import org.opendaylight.controller.netconf.util.exception.MissingNameSpaceException; +import org.opendaylight.controller.netconf.util.exception.UnexpectedElementException; +import org.opendaylight.controller.netconf.util.exception.UnexpectedNamespaceException; import org.opendaylight.controller.netconf.util.xml.XmlElement; -import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; -import com.google.common.base.Optional; - public class GetConfig extends AbstractConfigNetconfOperation { public static final String GET_CONFIG = "get-config"; - private final YangStoreSnapshot yangStoreSnapshot; + private final YangStoreContext yangStoreSnapshot; private final Optional maybeNamespace; private final TransactionProvider transactionProvider; - private static final Logger logger = LoggerFactory.getLogger(GetConfig.class); + private static final Logger LOG = LoggerFactory.getLogger(GetConfig.class); - public GetConfig(YangStoreSnapshot yangStoreSnapshot, Optional maybeNamespace, + public GetConfig(YangStoreContext yangStoreSnapshot, Optional maybeNamespace, TransactionProvider transactionProvider, ConfigRegistryClient configRegistryClient, String netconfSessionIdForReporting) { super(configRegistryClient, netconfSessionIdForReporting); @@ -57,7 +52,8 @@ public class GetConfig extends AbstractConfigNetconfOperation { this.transactionProvider = transactionProvider; } - public static Datastore fromXml(XmlElement xml) { + public static Datastore fromXml(XmlElement xml) throws UnexpectedNamespaceException, UnexpectedElementException, MissingNameSpaceException, NetconfDocumentedException { + xml.checkName(GET_CONFIG); xml.checkNamespace(XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0); @@ -65,20 +61,17 @@ public class GetConfig extends AbstractConfigNetconfOperation { XmlNetconfConstants.URN_IETF_PARAMS_XML_NS_NETCONF_BASE_1_0); XmlElement sourceNode = sourceElement.getOnlyChildElement(); String sourceParsed = sourceNode.getName(); - logger.debug("Setting source datastore to '{}'", sourceParsed); + LOG.debug("Setting source datastore to '{}'", sourceParsed); Datastore sourceDatastore = Datastore.valueOf(sourceParsed); - // Filter option - unsupported - if (xml.getChildElements(XmlNetconfConstants.FILTER).size() != 0) - throw new UnsupportedOperationException("Unsupported option " + XmlNetconfConstants.FILTER + " for " - + GET_CONFIG); + // Filter option: ignore for now, TODO only load modules specified by the filter return sourceDatastore; } private Element getResponseInternal(final Document document, final ConfigRegistryClient configRegistryClient, - final Datastore source) throws NetconfDocumentedException { + final Datastore source) { Element dataElement = XmlUtil.createElement(document, XmlNetconfConstants.DATA_KEY, Optional.absent()); final Set instances = Datastore.getInstanceQueryStrategy(source, this.transactionProvider) .queryInstances(configRegistryClient); @@ -93,7 +86,7 @@ public class GetConfig extends AbstractConfigNetconfOperation { ServiceRegistryWrapper serviceTracker = new ServiceRegistryWrapper(ta); dataElement = configMapping.toXml(instances, this.maybeNamespace, document, dataElement, serviceTracker); - logger.trace("{} operation successful", GET_CONFIG); + LOG.trace("{} operation successful", GET_CONFIG); return dataElement; } @@ -106,27 +99,7 @@ public class GetConfig extends AbstractConfigNetconfOperation { @Override public Element handleWithNoSubsequentOperations(Document document, XmlElement xml) throws NetconfDocumentedException { Datastore source; - try { - source = fromXml(xml); - } catch (final IllegalArgumentException e) { - logger.warn("Rpc error: {}", ErrorTag.bad_attribute, e); - final Map errorInfo = new HashMap<>(); - errorInfo.put(ErrorTag.bad_attribute.name(), e.getMessage()); - throw new NetconfDocumentedException(e.getMessage(), e, ErrorType.rpc, ErrorTag.bad_attribute, - ErrorSeverity.error, errorInfo); - } catch (final IllegalStateException e) { - logger.warn("Rpc error: {}", ErrorTag.missing_attribute, e); - final Map errorInfo = new HashMap<>(); - errorInfo.put(ErrorTag.missing_attribute.name(), "Missing datasource attribute value"); - throw new NetconfDocumentedException(e.getMessage(), e, ErrorType.rpc, ErrorTag.missing_attribute, - ErrorSeverity.error, errorInfo); - } catch (final UnsupportedOperationException e) { - logger.warn("Unsupported", e); - final Map errorInfo = new HashMap<>(); - errorInfo.put(ErrorTag.operation_not_supported.name(), "Unsupported option for get"); - throw new NetconfDocumentedException(e.getMessage(), e, ErrorType.application, - ErrorTag.operation_not_supported, ErrorSeverity.error, errorInfo); - } - return getResponseInternal(document, configRegistryClient, source); + source = fromXml(xml); + return getResponseInternal(document, getConfigRegistryClient(), source); } }