import org.opendaylight.restconf.handlers.TransactionChainHandler;
import org.opendaylight.restconf.restful.services.api.RestconfDataService;
import org.opendaylight.restconf.restful.transaction.TransactionVarsWrapper;
+import org.opendaylight.restconf.restful.utils.DeleteDataTransactionUtil;
import org.opendaylight.restconf.restful.utils.PostDataTransactionUtil;
import org.opendaylight.restconf.restful.utils.PutDataTransactionUtil;
import org.opendaylight.restconf.restful.utils.ReadDataTransactionUtil;
@Override
public Response deleteData(final String identifier) {
- throw new UnsupportedOperationException("Not yet implemented.");
+ final SchemaContextRef schemaContextRef = new SchemaContextRef(this.schemaContextHandler.get());
+ final InstanceIdentifierContext<?> instanceIdentifier = ParserIdentifier.toInstanceIdentifier(identifier,
+ schemaContextRef.get());
+
+ final DOMMountPoint mountPoint = instanceIdentifier.getMountPoint();
+ DOMDataReadWriteTransaction transaction = null;
+ if (mountPoint == null) {
+ transaction = this.transactionChainHandler.get().newReadWriteTransaction();
+ } else {
+ transaction = transactionOfMountPoint(mountPoint);
+ }
+
+ final TransactionVarsWrapper transactionNode = new TransactionVarsWrapper(instanceIdentifier, mountPoint,
+ transaction);
+ return DeleteDataTransactionUtil.deleteData(transactionNode);
}
@Override
--- /dev/null
+/*
+ * Copyright (c) 2016 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.restconf.restful.utils;
+
+import com.google.common.util.concurrent.CheckedFuture;
+import javax.ws.rs.core.Response;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction;
+import org.opendaylight.restconf.restful.transaction.TransactionVarsWrapper;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+
+/**
+ * Util class for delete specific data in config DS.
+ *
+ */
+public final class DeleteDataTransactionUtil {
+
+ private DeleteDataTransactionUtil() {
+ throw new UnsupportedOperationException("Util class.");
+ }
+
+ /**
+ * Delete data from DS via transaction.
+ *
+ * @param transactionNode
+ * - Wrapper for data of transaction
+ * @return {@link Response}
+ */
+
+ public static Response deleteData(final TransactionVarsWrapper transactionNode) {
+ final CheckedFuture<Void, TransactionCommitFailedException> future = submitData(
+ transactionNode.getTransaction(), transactionNode.getInstanceIdentifier().getInstanceIdentifier());
+ final ResponseFactory response = new ResponseFactory();
+ FutureCallbackTx.addCallback(future, transactionNode.getTransaction(),
+ RestconfDataServiceConstant.DeleteData.DELETE_TX_TYPE, response);
+ return response.build();
+ }
+
+ /**
+ * Delete data via transaction
+ *
+ * @param writeTx
+ * - write transaction
+ * @param path
+ * - path of data to delete
+ * @return {@link CheckedFuture}
+ */
+ private static CheckedFuture<Void, TransactionCommitFailedException> submitData(
+ final DOMDataWriteTransaction writeTx, final YangInstanceIdentifier path) {
+ writeTx.delete(LogicalDatastoreType.CONFIGURATION, path);
+ return writeTx.submit();
+ }
+}
final class ResponseFactory extends FutureDataFactory<Void> implements Builder<Response> {
- private final NormalizedNode<?, ?> readData;
- private final URI location;
-
+ private final ResponseBuilder responseBuilder;
ResponseFactory(final NormalizedNode<?, ?> readData) {
- this.readData = readData;
- this.location = null;
+ final Status status = prepareStatus(readData);
+ this.responseBuilder = Response.status(status);
}
ResponseFactory(final NormalizedNode<?, ?> readData, final URI location) {
- this.readData = readData;
- this.location = location;
+ final Status status = prepareStatus(readData);
+ this.responseBuilder = Response.status(status);
+ this.responseBuilder.location(location);
+ }
+
+ ResponseFactory() {
+ this.responseBuilder = Response.status(Status.OK);
}
@Override
public Response build() {
- final Status status = this.readData != null ? Status.OK : Status.CREATED;
- final ResponseBuilder responseBuilder = Response.status(status);
- if (this.location != null) {
- responseBuilder.location(this.location);
- }
- return responseBuilder.build();
+ return this.responseBuilder.build();
+ }
+
+ private Status prepareStatus(final NormalizedNode<?, ?> readData) {
+ return readData != null ? Status.OK : Status.CREATED;
}
}
throw new UnsupportedOperationException("Util class.");
}
}
+
+ /**
+ * Constants for data to delete
+ *
+ */
+ public final class DeleteData {
+ public static final String DELETE_TX_TYPE = "DELETE";
+
+ private DeleteData() {
+ throw new UnsupportedOperationException("Util class.");
+ }
+ }
}
private static final Logger LOG = LoggerFactory.getLogger(ParserIdentifier.class);
+ private ParserIdentifier() {
+ throw new UnsupportedOperationException("Util class.");
+ }
+
/**
* Make {@link InstanceIdentifierContext} from identifier.
*