import java.util.Map;
import java.util.Set;
import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
final YangInstanceIdentifier pathIdentifier = ((YangInstanceIdentifier) pathValue);
String streamName = null;
if (!Iterables.isEmpty(pathIdentifier.getPathArguments())) {
- final String fullRestconfIdentifier = controllerContext.toFullRestconfIdentifier(pathIdentifier);
+ final String fullRestconfIdentifier = controllerContext.toFullRestconfIdentifier(pathIdentifier, null);
LogicalDatastoreType datastore = parseEnumTypeParameter(value, LogicalDatastoreType.class,
DATASTORE_PARAM_NAME);
validateListKeysEqualityInPayloadAndUri(iiWithData, payload.getData());
final DOMMountPoint mountPoint = iiWithData.getMountPoint();
-
final YangInstanceIdentifier normalizedII = iiWithData.getInstanceIdentifier();
/*
}
@Override
- public Response createConfigurationData(final String identifier, final Node<?> payload) {
+ public Response createConfigurationData(final String identifier, final Node<?> payload, final UriInfo uriInfo) {
if (payload == null) {
throw new RestconfDocumentedException("Input is required.", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE);
}
final DataNodeContainer parentSchema = (DataNodeContainer) incompleteInstIdWithData.getSchemaNode();
final DOMMountPoint mountPoint = incompleteInstIdWithData.getMountPoint();
final Module module = findModule(mountPoint, payload);
+ if (module == null) {
+ throw new RestconfDocumentedException("Module was not found for \"" + payloadNS + "\"",
+ ErrorType.PROTOCOL, ErrorTag.UNKNOWN_ELEMENT);
+ }
final String payloadName = getName(payload);
final DataSchemaNode schemaNode = ControllerContext.findInstanceDataChildByNameAndNamespace(
throw new RestconfDocumentedException("Error creating data", e);
}
- return Response.status(Status.NO_CONTENT).build();
+
+ final ResponseBuilder responseBuilder = Response.status(Status.NO_CONTENT);
+ final URI location = resolveLocation(uriInfo, "config", mountPoint, normalizedII);
+ if (location != null) {
+ responseBuilder.location(location);
+ }
+ return responseBuilder.build();
}
@Override
- public Response createConfigurationData(final Node<?> payload) {
+ public Response createConfigurationData(final Node<?> payload, final UriInfo uriInfo) {
if (payload == null) {
throw new RestconfDocumentedException("Input is required.", ErrorType.PROTOCOL, ErrorTag.MALFORMED_MESSAGE);
}
}
final Module module = this.findModule(null, payload);
+ if (module == null) {
+ throw new RestconfDocumentedException(
+ "Data has bad format. Root element node has incorrect namespace (XML format) or module name(JSON format)",
+ ErrorType.PROTOCOL, ErrorTag.UNKNOWN_NAMESPACE);
+ }
final String payloadName = getName(payload);
final DataSchemaNode schemaNode = ControllerContext.findInstanceDataChildByNameAndNamespace(module,
throw new RestconfDocumentedException("Error creating data", e);
}
- return Response.status(Status.NO_CONTENT).build();
+ final ResponseBuilder responseBuilder = Response.status(Status.NO_CONTENT);
+ final URI location = resolveLocation(uriInfo, "", mountPoint, normalizedII);
+ if (location != null) {
+ responseBuilder.location(location);
+ }
+ return responseBuilder.build();
+ }
+
+ private URI resolveLocation(final UriInfo uriInfo, final String uriBehindBase, final DOMMountPoint mountPoint, final YangInstanceIdentifier normalizedII) {
+ final UriBuilder uriBuilder = uriInfo.getBaseUriBuilder();
+ uriBuilder.path("config");
+ try {
+ uriBuilder.path(controllerContext.toFullRestconfIdentifier(normalizedII, mountPoint));
+ } catch (final Exception e) {
+ LOG.debug("Location for instance identifier"+normalizedII+"wasn't created", e);
+ return null;
+ }
+ return uriBuilder.build();
}
@Override