- 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 URI payloadNS = namespace(payload);
- if (payloadNS == null) {
- throw new RestconfDocumentedException(
- "Data has bad format. Root element node must have namespace (XML format) or module name(JSON format)",
- ErrorType.PROTOCOL, ErrorTag.UNKNOWN_NAMESPACE);
- }
-
- InstanceIdentifierContext iiWithData = null;
- CompositeNode value = null;
- if (representsMountPointRootData(payload)) {
- // payload represents mount point data and URI represents path to the mount point
-
- if (endsWithMountPoint(identifier)) {
- throw new RestconfDocumentedException("URI has bad format. URI should be without \""
- + ControllerContext.MOUNT + "\" for POST operation.", ErrorType.PROTOCOL,
- ErrorTag.INVALID_VALUE);
- }
-
- final String completeIdentifier = addMountPointIdentifier(identifier);
- iiWithData = controllerContext.toInstanceIdentifier(completeIdentifier);
-
- value = this.normalizeNode(payload, iiWithData.getSchemaNode(), iiWithData.getMountPoint());
- } else {
- final InstanceIdentifierContext incompleteInstIdWithData = controllerContext
- .toInstanceIdentifier(identifier);
- 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(
- parentSchema, payloadName, module.getNamespace());
- value = this.normalizeNode(payload, schemaNode, mountPoint);
-
- iiWithData = addLastIdentifierFromData(incompleteInstIdWithData, value, schemaNode,incompleteInstIdWithData.getSchemaContext());
- }
-
- final NormalizedNode<?, ?> datastoreNormalizedData = compositeNodeToDatastoreNormalizedNode(value,
- iiWithData.getSchemaNode());
- final DOMMountPoint mountPoint = iiWithData.getMountPoint();
- YangInstanceIdentifier normalizedII;
-
- try {
- if (mountPoint != null) {
- normalizedII = new DataNormalizer(mountPoint.getSchemaContext()).toNormalized(iiWithData
- .getInstanceIdentifier());
- broker.commitConfigurationDataPost(mountPoint, normalizedII, datastoreNormalizedData);
- } else {
- normalizedII = controllerContext.toNormalized(iiWithData.getInstanceIdentifier());
- broker.commitConfigurationDataPost(normalizedII, datastoreNormalizedData);
+ public Response createConfigurationData(final String identifier, final NormalizedNodeContext payload, final UriInfo uriInfo) {
+ return createConfigurationData(payload, uriInfo);
+ }
+
+ // FIXME create RestconfIdetifierHelper and move this method there
+ private YangInstanceIdentifier checkConsistencyOfNormalizedNodeContext(final NormalizedNodeContext payload) {
+ Preconditions.checkArgument(payload != null);
+ Preconditions.checkArgument(payload.getData() != null);
+ Preconditions.checkArgument(payload.getData().getNodeType() != null);
+ Preconditions.checkArgument(payload.getInstanceIdentifierContext() != null);
+ Preconditions.checkArgument(payload.getInstanceIdentifierContext().getInstanceIdentifier() != null);
+
+ final QName payloadNodeQname = payload.getData().getNodeType();
+ final YangInstanceIdentifier yangIdent = payload.getInstanceIdentifierContext().getInstanceIdentifier();
+ if (payloadNodeQname.compareTo(yangIdent.getLastPathArgument().getNodeType()) > 0) {
+ return yangIdent;
+ }
+ final InstanceIdentifierContext parentContext = payload.getInstanceIdentifierContext();
+ final SchemaNode parentSchemaNode = parentContext.getSchemaNode();
+ if(parentSchemaNode instanceof DataNodeContainer) {
+ final DataNodeContainer cast = (DataNodeContainer) parentSchemaNode;
+ for (final DataSchemaNode child : cast.getChildNodes()) {
+ if (payloadNodeQname.compareTo(child.getQName()) == 0) {
+ return YangInstanceIdentifier.builder(yangIdent).node(child.getQName()).build();
+ }