X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fmdsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fmdsal%2Fconnector%2Fops%2Fget%2FGetConfig.java;fp=opendaylight%2Fnetconf%2Fmdsal-netconf-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fmdsal%2Fconnector%2Fops%2Fget%2FGetConfig.java;h=b56bcc795caf3ad1c5adacaa98d445e1b63079a8;hp=0000000000000000000000000000000000000000;hb=8d17b7aca17f10005f5f3da1b80d2e442fd0168c;hpb=2676e61ec5958736753c5345cd31fd48ea3e5a05 diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/ops/get/GetConfig.java b/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/ops/get/GetConfig.java new file mode 100644 index 0000000000..b56bcc795c --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/main/java/org/opendaylight/controller/netconf/mdsal/connector/ops/get/GetConfig.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + +package org.opendaylight.controller.netconf.mdsal.connector.ops.get; + +import com.google.common.base.Optional; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; +import org.opendaylight.controller.md.sal.dom.api.DOMDataReadWriteTransaction; +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.mdsal.connector.CurrentSchemaContext; +import org.opendaylight.controller.netconf.mdsal.connector.TransactionProvider; +import org.opendaylight.controller.netconf.mdsal.connector.ops.Datastore; +import org.opendaylight.controller.netconf.util.xml.XmlElement; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class GetConfig extends AbstractGet { + + private static final Logger LOG = LoggerFactory.getLogger(GetConfig.class); + + private static final String OPERATION_NAME = "get-config"; + + private final TransactionProvider transactionProvider; + + public GetConfig(final String netconfSessionIdForReporting, final CurrentSchemaContext schemaContext, final TransactionProvider transactionProvider) { + super(netconfSessionIdForReporting, schemaContext); + this.transactionProvider = transactionProvider; + } + + @Override + protected Element handleWithNoSubsequentOperations(Document document, XmlElement operationElement) throws NetconfDocumentedException { + GetConfigExecution getConfigExecution = null; + try { + getConfigExecution = GetConfigExecution.fromXml(operationElement, OPERATION_NAME); + + } catch (final NetconfDocumentedException e) { + LOG.warn("Get request processing failed on session: {}", getNetconfSessionIdForReporting(), e); + throw e; + } + + final YangInstanceIdentifier dataRoot = ROOT; + DOMDataReadWriteTransaction rwTx = getTransaction(getConfigExecution.getDatastore()); + try { + final Optional> normalizedNodeOptional = rwTx.read(LogicalDatastoreType.CONFIGURATION, dataRoot).checkedGet(); + if (getConfigExecution.getDatastore() == Datastore.running) { + transactionProvider.abortRunningTransaction(rwTx); + rwTx = null; + } + return (Element) transformNormalizedNode(document, normalizedNodeOptional.get(), dataRoot); + } catch (ReadFailedException e) { + LOG.warn("Unable to read data: {}", dataRoot, e); + throw new IllegalStateException("Unable to read data " + dataRoot, e); + } + } + + private DOMDataReadWriteTransaction getTransaction(Datastore datastore) throws NetconfDocumentedException{ + if (datastore == Datastore.candidate) { + return transactionProvider.getOrCreateTransaction(); + } else if (datastore == Datastore.running) { + return transactionProvider.createRunningTransaction(); + } + throw new NetconfDocumentedException("Incorrect Datastore: ", ErrorType.protocol, ErrorTag.bad_element, ErrorSeverity.error); + } + + @Override + protected String getOperationName() { + return OPERATION_NAME; + } + +}