X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frest%2Fimpl%2FJsonNormalizedNodeBodyReader.java;fp=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frest%2Fimpl%2FJsonNormalizedNodeBodyReader.java;h=0000000000000000000000000000000000000000;hp=42024cab08748cadc9abf338f496e055a616722d;hb=89b8b59cd26fd4810293ff14386eb29a71da9fac;hpb=9ba2b4eca79bcc0e78099b133296801c8d45a6c4 diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonNormalizedNodeBodyReader.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonNormalizedNodeBodyReader.java deleted file mode 100644 index 42024cab08..0000000000 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonNormalizedNodeBodyReader.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2014 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.sal.rest.impl; - -import com.google.common.collect.Iterables; -import com.google.gson.stream.JsonReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import javax.ws.rs.Consumes; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyReader; -import javax.ws.rs.ext.Provider; -import org.opendaylight.controller.sal.rest.api.Draft02; -import org.opendaylight.controller.sal.rest.api.RestconfService; -import org.opendaylight.controller.sal.restconf.impl.InstanceIdentifierContext; -import org.opendaylight.controller.sal.restconf.impl.NormalizedNodeContext; -import org.opendaylight.controller.sal.restconf.impl.RestconfDocumentedException; -import org.opendaylight.controller.sal.restconf.impl.RestconfError.ErrorTag; -import org.opendaylight.controller.sal.restconf.impl.RestconfError.ErrorType; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; -import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; -import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; -import org.opendaylight.yangtools.yang.data.api.schema.MapNode; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; -import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter; -import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; -import org.opendaylight.yangtools.yang.data.impl.schema.ResultAlreadySetException; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; -import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@Provider -@Consumes({ Draft02.MediaTypes.DATA + RestconfService.JSON, Draft02.MediaTypes.OPERATION + RestconfService.JSON, - MediaType.APPLICATION_JSON }) -public class JsonNormalizedNodeBodyReader extends AbstractIdentifierAwareJaxRsProvider implements MessageBodyReader { - - private final static Logger LOG = LoggerFactory.getLogger(JsonNormalizedNodeBodyReader.class); - - @Override - public boolean isReadable(final Class type, final Type genericType, final Annotation[] annotations, - final MediaType mediaType) { - return true; - } - - @Override - public NormalizedNodeContext readFrom(final Class type, final Type genericType, - final Annotation[] annotations, final MediaType mediaType, - final MultivaluedMap httpHeaders, final InputStream entityStream) throws IOException, - WebApplicationException { - try { - final InstanceIdentifierContext path = getInstanceIdentifierContext(); - if (entityStream.available() < 1) { - return new NormalizedNodeContext(path, null); - } - final NormalizedNodeResult resultHolder = new NormalizedNodeResult(); - final NormalizedNodeStreamWriter writer = ImmutableNormalizedNodeStreamWriter.from(resultHolder); - - final SchemaNode parentSchema; - if(isPost()) { - // FIXME: We need dispatch for RPC. - parentSchema = path.getSchemaNode(); - } else if(path.getSchemaNode() instanceof SchemaContext) { - parentSchema = path.getSchemaContext(); - } else { - if (SchemaPath.ROOT.equals(path.getSchemaNode().getPath().getParent())) { - parentSchema = path.getSchemaContext(); - } else { - parentSchema = SchemaContextUtil.findDataSchemaNode(path.getSchemaContext(), path.getSchemaNode().getPath().getParent()); - } - } - - final JsonParserStream jsonParser = JsonParserStream.create(writer, path.getSchemaContext(), parentSchema); - final JsonReader reader = new JsonReader(new InputStreamReader(entityStream)); - jsonParser.parse(reader); - - NormalizedNode result = resultHolder.getResult(); - final List iiToDataList = new ArrayList<>(); - InstanceIdentifierContext newIIContext; - - while (result instanceof AugmentationNode || result instanceof ChoiceNode) { - final Object childNode = ((DataContainerNode) result).getValue().iterator().next(); - if (isPost()) { - iiToDataList.add(result.getIdentifier()); - } - result = (NormalizedNode) childNode; - } - - if (isPost()) { - if (result instanceof MapEntryNode) { - iiToDataList.add(new YangInstanceIdentifier.NodeIdentifier(result.getNodeType())); - iiToDataList.add(result.getIdentifier()); - } else { - iiToDataList.add(result.getIdentifier()); - } - } else { - if (result instanceof MapNode) { - result = Iterables.getOnlyElement(((MapNode) result).getValue()); - } - } - - final YangInstanceIdentifier fullIIToData = YangInstanceIdentifier.create(Iterables.concat( - path.getInstanceIdentifier().getPathArguments(), iiToDataList)); - - newIIContext = new InstanceIdentifierContext<>(fullIIToData, path.getSchemaNode(), path.getMountPoint(), - path.getSchemaContext()); - - return new NormalizedNodeContext(newIIContext, result); - } catch (final RestconfDocumentedException e) { - throw e; - } catch (final ResultAlreadySetException e) { - LOG.debug("Error parsing json input:", e); - - throw new RestconfDocumentedException("Error parsing json input: Failed to create new parse result data. " + - "Are you creating multiple resources/subresources in POST request?"); - } catch (final Exception e) { - LOG.debug("Error parsing json input", e); - - throw new RestconfDocumentedException("Error parsing input: " + e.getMessage(), ErrorType.PROTOCOL, - ErrorTag.MALFORMED_MESSAGE); - } - } -} -