*/
package org.opendaylight.controller.sal.restconf.impl;
-import com.google.common.base.Objects;
-
-import java.util.Map;
import java.util.concurrent.Future;
import javax.ws.rs.core.Response.Status;
import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
import org.opendaylight.controller.sal.core.api.mount.MountInstance;
import org.opendaylight.controller.sal.rest.impl.RestconfProvider;
-import org.opendaylight.controller.sal.restconf.impl.ResponseException;
import org.opendaylight.controller.sal.streams.listeners.ListenerAdapter;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.common.QName;
}
public Future<RpcResult<TransactionStatus>> commitConfigurationDataPost( final InstanceIdentifier path,
- final CompositeNode payload ) {
+ final CompositeNode payload) {
this.checkPreconditions();
final DataModificationTransaction transaction = dataService.beginTransaction();
- transaction.putConfigurationData( path, payload );
- Map<InstanceIdentifier, CompositeNode> createdConfigurationData =
- transaction.getCreatedConfigurationData();
- CompositeNode createdNode = createdConfigurationData.get( path );
-
- if( Objects.equal( payload, createdNode ) ) {
- LOG.trace( "Post Configuration via Restconf: {}", path );
- return transaction.commit();
+ /* check for available Node in Configuration DataStore by path */
+ CompositeNode availableNode = transaction.readConfigurationData( path );
+ if (availableNode != null) {
+ String errMsg = "Post Configuration via Restconf was not executed because data already exists";
+ BrokerFacade.LOG.warn((new StringBuilder(errMsg)).append(" : ").append(path).toString());
+ // FIXME: return correct ietf-restconf:errors -> follow specification
+ // (http://tools.ietf.org/html/draft-bierman-netconf-restconf-03#page-48)
+ throw new ResponseException(Status.CONFLICT, errMsg);
}
-
- LOG.trace( "Post Configuration via Restconf was not executed because data already exists: {}",
- path );
- return null;
+ BrokerFacade.LOG.trace( "Post Configuration via Restconf: {}", path );
+ transaction.putConfigurationData( path, payload );
+ return transaction.commit();
}
public Future<RpcResult<TransactionStatus>> commitConfigurationDataPostBehindMountPoint(
this.checkPreconditions();
final DataModificationTransaction transaction = mountPoint.beginTransaction();
- transaction.putConfigurationData( path, payload );
- Map<InstanceIdentifier, CompositeNode> createdConfigurationData =
- transaction.getCreatedConfigurationData();
- CompositeNode createdNode = createdConfigurationData.get( path );
-
- if( Objects.equal( payload, createdNode ) ) {
- LOG.trace( "Post Configuration via Restconf: {}", path );
- return transaction.commit();
+ /* check for available Node in Configuration DataStore by path */
+ CompositeNode availableNode = transaction.readConfigurationData( path );
+ if (availableNode != null) {
+ String errMsg = "Post Configuration via Restconf was not executed because data already exists";
+ BrokerFacade.LOG.warn((new StringBuilder(errMsg)).append(" : ").append(path).toString());
+ // FIXME: return correct ietf-restconf:errors -> follow specification
+ // (http://tools.ietf.org/html/draft-bierman-netconf-restconf-03#page-48)
+ throw new ResponseException(Status.CONFLICT, errMsg);
}
-
- LOG.trace( "Post Configuration via Restconf was not executed because data already exists: {}",
- path );
- return null;
+ BrokerFacade.LOG.trace( "Post Configuration via Restconf: {}", path );
+ transaction.putConfigurationData( path, payload );
+ return transaction.commit();
}
public Future<RpcResult<TransactionStatus>> commitConfigurationDataDelete( final InstanceIdentifier path ) {