Example usage for com.fasterxml.jackson.core JsonGenerator writeArrayFieldStart

List of usage examples for com.fasterxml.jackson.core JsonGenerator writeArrayFieldStart

Introduction

In this page you can find the example usage for com.fasterxml.jackson.core JsonGenerator writeArrayFieldStart.

Prototype

public final void writeArrayFieldStart(String fieldName) throws IOException, JsonGenerationException 

Source Link

Document

Convenience method for outputting a field entry ("member") (that will contain a JSON Array value), and the START_ARRAY marker.

Usage

From source file:com.google.openrtb.json.OpenRtbJsonWriter.java

protected void writeAudioFields(Audio audio, JsonGenerator gen) throws IOException {
    // Common to Video & Audio

    if (checkRequired(audio.getMimesCount())) {
        writeStrings("mimes", audio.getMimesList(), gen);
    }//from w ww . jav  a2  s .c  o m
    if (audio.hasMinduration()) {
        gen.writeNumberField("minduration", audio.getMinduration());
    }
    if (audio.hasMaxduration()) {
        gen.writeNumberField("maxduration", audio.getMaxduration());
    }
    if (checkRequired(audio.getProtocolsCount())) {
        writeEnums("protocols", audio.getProtocolsList(), gen);
    }
    if (audio.hasStartdelay()) {
        gen.writeNumberField("startdelay", audio.getStartdelay());
    }
    if (audio.hasSequence()) {
        gen.writeNumberField("sequence", audio.getSequence());
    }
    writeEnums("battr", audio.getBattrList(), gen);
    if (audio.hasMaxextended()) {
        gen.writeNumberField("maxextended", audio.getMaxextended());
    }
    if (audio.hasMinbitrate()) {
        gen.writeNumberField("minbitrate", audio.getMinbitrate());
    }
    if (audio.hasMaxbitrate()) {
        gen.writeNumberField("maxbitrate", audio.getMaxbitrate());
    }
    writeEnums("delivery", audio.getDeliveryList(), gen);
    if (audio.getCompanionadCount() != 0) {
        // OpenRTB 2.2+
        gen.writeArrayFieldStart("companionad");
        for (Banner companionad : audio.getCompanionadList()) {
            writeBanner(companionad, gen);
        }
        gen.writeEndArray();
    }
    writeEnums("api", audio.getApiList(), gen);
    writeEnums("companiontype", audio.getCompaniontypeList(), gen);

    // Audio only

    if (audio.hasMaxseq()) {
        gen.writeNumberField("maxseq", audio.getMaxseq());
    }
    if (audio.hasFeed()) {
        gen.writeNumberField("feed", audio.getFeed().getNumber());
    }
    if (audio.hasStitched()) {
        writeIntBoolField("stitched", audio.getStitched(), gen);
    }
    if (audio.hasNvol()) {
        gen.writeNumberField("nvol", audio.getNvol().getNumber());
    }
}

From source file:de.escalon.hypermedia.spring.de.escalon.hypermedia.spring.jackson.LinkListSerializer.java

@Override
public void serialize(List<Link> links, JsonGenerator jgen, SerializerProvider serializerProvider)
        throws IOException {

    try {/*from  w  w w  .java2s  .c o  m*/
        Collection<Link> simpleLinks = new ArrayList<Link>();
        Collection<Affordance> affordances = new ArrayList<Affordance>();
        Collection<Link> templatedLinks = new ArrayList<Link>();
        Collection<Affordance> templatedAffordances = new ArrayList<Affordance>();
        for (Link link : links) {
            if (link instanceof Affordance) {
                final Affordance affordance = (Affordance) link;
                final List<ActionDescriptor> actionDescriptors = affordance.getActionDescriptors();
                if (!actionDescriptors.isEmpty()) {
                    if (affordance.isTemplated()) {
                        templatedAffordances.add(affordance);
                    } else {
                        affordances.add(affordance);
                    }
                } else {
                    if (affordance.isTemplated()) {
                        templatedLinks.add(affordance);
                    } else {
                        simpleLinks.add(affordance);
                    }
                }
            } else if (link.isTemplated()) {
                templatedLinks.add(link);
            } else {
                simpleLinks.add(link);
            }
        }

        for (Affordance templatedAffordance : templatedAffordances) {
            jgen.writeObjectFieldStart(templatedAffordance.getRel());

            jgen.writeStringField("@type", "hydra:IriTemplate");
            jgen.writeStringField("hydra:template", templatedAffordance.getHref());
            final List<ActionDescriptor> actionDescriptors = templatedAffordance.getActionDescriptors();
            ActionDescriptor actionDescriptor = actionDescriptors.get(0);
            jgen.writeArrayFieldStart("hydra:mapping");
            writeHydraVariableMapping(jgen, actionDescriptor, actionDescriptor.getPathVariableNames());
            writeHydraVariableMapping(jgen, actionDescriptor, actionDescriptor.getRequestParamNames());
            jgen.writeEndArray();

            jgen.writeEndObject();
        }
        for (Link templatedLink : templatedLinks) {
            // we only have the template, no access to method params
            jgen.writeObjectFieldStart(templatedLink.getRel());

            jgen.writeStringField("@type", "hydra:IriTemplate");
            jgen.writeStringField("hydra:template", templatedLink.getHref());

            jgen.writeArrayFieldStart("hydra:mapping");
            writeHydraVariableMapping(jgen, null, templatedLink.getVariableNames());
            jgen.writeEndArray();

            jgen.writeEndObject();
        }

        Deque<String> vocabStack = (Deque<String>) serializerProvider
                .getAttribute(JacksonHydraSerializer.KEY_LD_CONTEXT);
        String currentVocab = vocabStack != null ? vocabStack.peek() : null;

        for (Affordance affordance : affordances) {
            final String rel = affordance.getRel();
            List<ActionDescriptor> actionDescriptors = affordance.getActionDescriptors();
            if (!actionDescriptors.isEmpty()) {
                if (!Link.REL_SELF.equals(rel)) {
                    jgen.writeObjectFieldStart(rel); // begin rel
                }
                jgen.writeStringField(JacksonHydraSerializer.AT_ID, affordance.getHref());
                jgen.writeArrayFieldStart("hydra:operation");
            }

            for (ActionDescriptor actionDescriptor : actionDescriptors) {
                jgen.writeStartObject(); // begin a hydra:Operation

                final String semanticActionType = actionDescriptor.getSemanticActionType();
                if (semanticActionType != null) {
                    jgen.writeStringField("@type", semanticActionType);
                }
                jgen.writeStringField("hydra:method", actionDescriptor.getHttpMethod().name());

                final ActionInputParameter requestBodyInputParameter = actionDescriptor.getRequestBody();
                if (requestBodyInputParameter != null) {

                    jgen.writeObjectFieldStart("hydra:expects"); // begin hydra:expects

                    final Class<?> clazz = requestBodyInputParameter.getNestedParameterType();
                    final Expose classExpose = clazz.getAnnotation(Expose.class);
                    final String typeName;
                    if (classExpose != null) {
                        typeName = classExpose.value();
                    } else {
                        typeName = requestBodyInputParameter.getNestedParameterType().getSimpleName();
                    }
                    jgen.writeStringField("@type", typeName);

                    jgen.writeArrayFieldStart("hydra:supportedProperty"); // begin hydra:supportedProperty
                    // TODO check need for actionDescriptor and requestBodyInputParameter here:
                    recurseSupportedProperties(jgen, currentVocab, clazz, actionDescriptor,
                            requestBodyInputParameter, requestBodyInputParameter.getCallValue());
                    jgen.writeEndArray(); // end hydra:supportedProperty

                    jgen.writeEndObject(); // end hydra:expects
                }

                jgen.writeEndObject(); // end hydra:Operation
            }

            if (!actionDescriptors.isEmpty()) {
                jgen.writeEndArray(); // end hydra:operation

                if (!Link.REL_SELF.equals(rel)) {
                    jgen.writeEndObject(); // end rel
                }
            }
        }

        for (Link simpleLink : simpleLinks) {
            final String rel = simpleLink.getRel();
            if (Link.REL_SELF.equals(rel)) {
                jgen.writeStringField("@id", simpleLink.getHref());
            } else {
                String linkAttributeName = IanaRels.isIanaRel(rel) ? IANA_REL_PREFIX + rel : rel;
                jgen.writeObjectFieldStart(linkAttributeName);
                jgen.writeStringField("@id", simpleLink.getHref());
                jgen.writeEndObject();
            }
        }
    } catch (IntrospectionException e) {
        throw new RuntimeException(e);
    }
}

From source file:net.opentsdb.tsd.HttpSampleSerializer.java

/**
 * Format the results from a timeseries data query
 * @param data_query The TSQuery object used to fetch the results
 * @param results The data fetched from storage
 * @param globals An optional list of global annotation objects
 * @return A ChannelBuffer object to pass on to the caller
 *//*from   ww  w.  j  a va 2  s. c  o  m*/
public ChannelBuffer formatQueryV1(final TSQuery data_query, final List<DataPoints[]> results,
        final List<Annotation> globals) {

    final boolean as_arrays = this.query.hasQueryStringParam("arrays");
    final String jsonp = this.query.getQueryStringParam("jsonp");

    // todo - this should be streamed at some point since it could be HUGE
    final ChannelBuffer response = ChannelBuffers.dynamicBuffer();
    final OutputStream output = new ChannelBufferOutputStream(response);
    try {
        // don't forget jsonp
        if (jsonp != null && !jsonp.isEmpty()) {
            output.write((jsonp + "(").getBytes(query.getCharset()));
        }
        JsonGenerator json = JSON.getFactory().createGenerator(output);
        json.writeStartArray();

        for (DataPoints[] separate_dps : results) {
            for (DataPoints dps : separate_dps) {
                json.writeStartObject();

                json.writeStringField("metric", dps.metricName());

                json.writeFieldName("tags");
                json.writeStartObject();
                if (dps.getTags() != null) {
                    for (Map.Entry<String, String> tag : dps.getTags().entrySet()) {
                        json.writeStringField(tag.getKey(), tag.getValue());
                    }
                }
                json.writeEndObject();

                json.writeFieldName("aggregateTags");
                json.writeStartArray();
                if (dps.getAggregatedTags() != null) {
                    for (String atag : dps.getAggregatedTags()) {
                        json.writeString(atag);
                    }
                }
                json.writeEndArray();

                if (data_query.getShowTSUIDs()) {
                    json.writeFieldName("tsuids");
                    json.writeStartArray();
                    final List<String> tsuids = dps.getTSUIDs();
                    Collections.sort(tsuids);
                    for (String tsuid : tsuids) {
                        json.writeString(tsuid);
                    }
                    json.writeEndArray();
                }

                if (!data_query.getNoAnnotations()) {
                    final List<Annotation> annotations = dps.getAnnotations();
                    if (annotations != null) {
                        Collections.sort(annotations);
                        json.writeArrayFieldStart("annotations");
                        for (Annotation note : annotations) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }

                    if (globals != null && !globals.isEmpty()) {
                        Collections.sort(globals);
                        json.writeArrayFieldStart("globalAnnotations");
                        for (Annotation note : globals) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }
                }

                // now the fun stuff, dump the data
                json.writeFieldName("dps");

                // default is to write a map, otherwise write arrays
                if (as_arrays) {
                    json.writeStartArray();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < data_query.startTime() || dp.timestamp() > data_query.endTime()) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        json.writeStartArray();
                        json.writeNumber(timestamp);
                        json.writeNumber(dp.isInteger() ? dp.longValue() : dp.doubleValue());
                        json.writeEndArray();
                    }
                    json.writeEndArray();
                } else {
                    json.writeStartObject();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < (data_query.startTime())
                                || dp.timestamp() > (data_query.endTime())) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        json.writeNumberField(Long.toString(timestamp),
                                dp.isInteger() ? dp.longValue() : dp.doubleValue());
                    }
                    json.writeEndObject();
                }

                // close the results for this particular query
                json.writeEndObject();
            }
        }

        // close
        json.writeEndArray();
        json.close();

        if (jsonp != null && !jsonp.isEmpty()) {
            output.write(")".getBytes());
        }
        return response;
    } catch (IOException e) {
        LOG.error("Unexpected exception", e);
        throw new RuntimeException(e);
    }
}

From source file:net.opentsdb.tsd.HttpJsonSerializer.java

/**
 * Format the results from a timeseries data query
 * @param data_query The TSQuery object used to fetch the results
 * @param results The data fetched from storage
 * @param globals An optional list of global annotation objects
 * @return A ChannelBuffer object to pass on to the caller
 *//* w  w w .j ava2s .co m*/
public ChannelBuffer formatQueryV1(final TSQuery data_query, final List<DataPoints[]> results,
        final List<Annotation> globals) {

    final boolean as_arrays = this.query.hasQueryStringParam("arrays");
    final String jsonp = this.query.getQueryStringParam("jsonp");

    // todo - this should be streamed at some point since it could be HUGE
    final ChannelBuffer response = ChannelBuffers.dynamicBuffer();
    final OutputStream output = new ChannelBufferOutputStream(response);
    try {
        // don't forget jsonp
        if (jsonp != null && !jsonp.isEmpty()) {
            output.write((jsonp + "(").getBytes(query.getCharset()));
        }
        JsonGenerator json = JSON.getFactory().createGenerator(output);
        json.writeStartArray();

        for (DataPoints[] separate_dps : results) {
            for (DataPoints dps : separate_dps) {
                json.writeStartObject();

                json.writeStringField("metric", dps.metricName());

                json.writeFieldName("tags");
                json.writeStartObject();
                if (dps.getTags() != null) {
                    for (Map.Entry<String, String> tag : dps.getTags().entrySet()) {
                        json.writeStringField(tag.getKey(), tag.getValue());
                    }
                }
                json.writeEndObject();

                json.writeFieldName("aggregateTags");
                json.writeStartArray();
                if (dps.getAggregatedTags() != null) {
                    for (String atag : dps.getAggregatedTags()) {
                        json.writeString(atag);
                    }
                }
                json.writeEndArray();

                if (data_query.getShowTSUIDs()) {
                    json.writeFieldName("tsuids");
                    json.writeStartArray();
                    final List<String> tsuids = dps.getTSUIDs();
                    Collections.sort(tsuids);
                    for (String tsuid : tsuids) {
                        json.writeString(tsuid);
                    }
                    json.writeEndArray();
                }

                if (!data_query.getNoAnnotations()) {
                    final List<Annotation> annotations = dps.getAnnotations();
                    if (annotations != null) {
                        Collections.sort(annotations);
                        json.writeArrayFieldStart("annotations");
                        for (Annotation note : annotations) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }

                    if (globals != null && !globals.isEmpty()) {
                        Collections.sort(globals);
                        json.writeArrayFieldStart("globalAnnotations");
                        for (Annotation note : globals) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }
                }

                // now the fun stuff, dump the data
                json.writeFieldName("dps");

                // default is to write a map, otherwise write arrays
                if (as_arrays) {
                    json.writeStartArray();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < data_query.startTime() || dp.timestamp() > data_query.endTime()) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        json.writeStartArray();
                        json.writeNumber(timestamp);
                        if (dp.isInteger()) {
                            json.writeNumber(dp.longValue());
                        } else {
                            json.writeNumber(dp.doubleValue());
                        }
                        json.writeEndArray();
                    }
                    json.writeEndArray();
                } else {
                    json.writeStartObject();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < (data_query.startTime())
                                || dp.timestamp() > (data_query.endTime())) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        if (dp.isInteger()) {
                            json.writeNumberField(Long.toString(timestamp), dp.longValue());
                        } else {
                            json.writeNumberField(Long.toString(timestamp), dp.doubleValue());
                        }
                    }
                    json.writeEndObject();
                }

                // close the results for this particular query
                json.writeEndObject();
            }
        }

        // close
        json.writeEndArray();
        json.close();

        if (jsonp != null && !jsonp.isEmpty()) {
            output.write(")".getBytes());
        }
        return response;
    } catch (IOException e) {
        LOG.error("Unexpected exception", e);
        throw new RuntimeException(e);
    }
}

From source file:org.apache.olingo.commons.core.serialization.JsonEntitySerializer.java

protected void doContainerSerialize(final ResWrap<Entity> container, final JsonGenerator jgen)
        throws IOException, EdmPrimitiveTypeException {

    final Entity entity = container.getPayload();

    jgen.writeStartObject();/*from www.  ja  v a2s .c  o m*/

    if (serverMode) {
        if (container.getContextURL() != null) {
            jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0 ? Constants.JSON_CONTEXT
                    : Constants.JSON_METADATA, container.getContextURL().toASCIIString());
        }
        if (version.compareTo(ODataServiceVersion.V40) >= 0
                && StringUtils.isNotBlank(container.getMetadataETag())) {
            jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
        }

        if (StringUtils.isNotBlank(entity.getETag())) {
            jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.ETAG), entity.getETag());
        }
    }

    if (StringUtils.isNotBlank(entity.getType())) {
        jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE),
                new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external(version));
    }

    if (entity.getId() != null) {
        jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.ID),
                entity.getId().toASCIIString());
    }

    for (Annotation annotation : entity.getAnnotations()) {
        valuable(jgen, annotation, "@" + annotation.getTerm());
    }

    for (Property property : entity.getProperties()) {
        valuable(jgen, property, property.getName());
    }

    if (serverMode && entity.getEditLink() != null && StringUtils.isNotBlank(entity.getEditLink().getHref())) {
        jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.EDIT_LINK),
                entity.getEditLink().getHref());

        if (entity.isMediaEntity()) {
            jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_READ_LINK),
                    entity.getEditLink().getHref() + "/$value");
        }
    }

    links(entity, jgen);

    for (Link link : entity.getMediaEditLinks()) {
        if (link.getTitle() == null) {
            jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.MEDIA_EDIT_LINK),
                    link.getHref());
        }

        if (link.getInlineEntity() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineEntity());
        }
        if (link.getInlineEntitySet() != null) {
            jgen.writeArrayFieldStart(link.getTitle());
            for (Entity subEntry : link.getInlineEntitySet().getEntities()) {
                jgen.writeObject(subEntry);
            }
            jgen.writeEndArray();
        }
    }

    if (serverMode) {
        for (ODataOperation operation : entity.getOperations()) {
            jgen.writeObjectFieldStart(
                    "#" + StringUtils.substringAfterLast(operation.getMetadataAnchor(), "#"));
            jgen.writeStringField(Constants.ATTR_TITLE, operation.getTitle());
            jgen.writeStringField(Constants.ATTR_TARGET, operation.getTarget().toASCIIString());
            jgen.writeEndObject();
        }
    }

    jgen.writeEndObject();
}

From source file:com.msopentech.odatajclient.engine.data.impl.JSONEntrySerializer.java

@Override
protected void doSerialize(final AbstractJSONEntry entry, final JsonGenerator jgen,
        final SerializerProvider provider) throws IOException, JsonProcessingException {

    jgen.writeStartObject();//  w ww .ja  v a 2s.c o m

    if (entry.getMetadata() != null) {
        jgen.writeStringField(ODataConstants.JSON_METADATA, entry.getMetadata().toASCIIString());
    }
    if (StringUtils.isNotBlank(entry.getType())) {
        jgen.writeStringField(ODataConstants.JSON_TYPE, entry.getType());
    }
    if (entry.getId() != null) {
        jgen.writeStringField(ODataConstants.JSON_ID, entry.getId());
    }

    if (entry.getSelfLink() != null) {
        jgen.writeStringField(ODataConstants.JSON_READ_LINK, entry.getSelfLink().getHref());
    }

    if (entry.getEditLink() != null) {
        jgen.writeStringField(ODataConstants.JSON_EDIT_LINK, entry.getEditLink().getHref());
    }

    if (entry.getMediaContentSource() != null) {
        jgen.writeStringField(ODataConstants.JSON_MEDIAREAD_LINK, entry.getMediaContentSource());
    }
    if (entry.getMediaContentType() != null) {
        jgen.writeStringField(ODataConstants.JSON_MEDIA_CONTENT_TYPE, entry.getMediaContentType());
    }

    final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>();

    for (JSONLink link : entry.getNavigationLinks()) {
        if (link.getInlineEntry() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineEntry());
        } else if (link.getInlineFeed() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineFeed());
        } else {
            ODataLinkType type = null;
            try {
                type = ODataLinkType.fromString(client, link.getRel(), link.getType());
            } catch (IllegalArgumentException e) {
                // ignore   
            }

            if (type == ODataLinkType.ENTITY_SET_NAVIGATION) {
                final List<String> uris;
                if (entitySetLinks.containsKey(link.getTitle())) {
                    uris = entitySetLinks.get(link.getTitle());
                } else {
                    uris = new ArrayList<String>();
                    entitySetLinks.put(link.getTitle(), uris);
                }
                uris.add(link.getHref());
            } else {
                jgen.writeStringField(link.getTitle() + ODataConstants.JSON_BIND_LINK_SUFFIX, link.getHref());
            }
        }
    }
    for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) {
        jgen.writeArrayFieldStart(entitySetLink.getKey() + ODataConstants.JSON_BIND_LINK_SUFFIX);
        for (String uri : entitySetLink.getValue()) {
            jgen.writeString(uri);
        }
        jgen.writeEndArray();
    }

    for (JSONLink link : entry.getMediaEditLinks()) {
        if (link.getTitle() == null) {
            jgen.writeStringField(ODataConstants.JSON_MEDIAEDIT_LINK, link.getHref());
        }

        if (link.getInlineEntry() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineEntry());
        }
        if (link.getInlineFeed() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineFeed());
        }
    }

    if (entry.getMediaEntryProperties() == null) {
        JSONDOMTreeUtils.writeSubtree(client, jgen, entry.getContent());
    } else {
        JSONDOMTreeUtils.writeSubtree(client, jgen, entry.getMediaEntryProperties());
    }

    jgen.writeEndObject();
}

From source file:com.msopentech.odatajclient.engine.data.json.JSONEntrySerializer.java

@Override
protected void doSerializeV3(AbstractJSONEntry<AbstractLinkResource<?, ?>> entry, JsonGenerator jgen,
        SerializerProvider provider) throws IOException, JsonProcessingException {
    jgen.writeStartObject();//from  ww  w  . j  ava  2 s . c o  m

    if (entry.getMetadata() != null) {
        jgen.writeStringField(ODataConstants.JSON_METADATA, entry.getMetadata().toASCIIString());
    }
    if (StringUtils.isNotBlank(entry.getType())) {
        jgen.writeStringField(ODataConstants.JSON_TYPE, entry.getType());
    }
    if (entry.getId() != null) {
        jgen.writeStringField(ODataConstants.JSON_ID, entry.getId());
    }

    if (entry.getSelfLink() != null) {
        jgen.writeStringField(ODataConstants.JSON_READ_LINK, entry.getSelfLink().getHref());
    }

    if (entry.getEditLink() != null) {
        jgen.writeStringField(ODataConstants.JSON_EDIT_LINK, entry.getEditLink().getHref());
    }

    if (entry.getMediaContentSource() != null) {
        jgen.writeStringField(ODataConstants.JSON_MEDIAREAD_LINK, entry.getMediaContentSource());
    }
    if (entry.getMediaContentType() != null) {
        jgen.writeStringField(ODataConstants.JSON_MEDIA_CONTENT_TYPE, entry.getMediaContentType());
    }

    final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>();

    for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getNavigationLinks()) {
        if (link.getInlineEntry() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineEntry());
        } else if (link.getInlineFeed() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineFeed());
        } else {
            ODataLinkType type = null;
            try {
                type = ODataLinkType.fromString(link.getRel(), link.getType());
            } catch (IllegalArgumentException e) {
                // ignore
            }

            if (type == ODataLinkType.ENTITY_SET_NAVIGATION) {
                final List<String> uris;
                if (entitySetLinks.containsKey(link.getTitle())) {
                    uris = entitySetLinks.get(link.getTitle());
                } else {
                    uris = new ArrayList<String>();
                    entitySetLinks.put(link.getTitle(), uris);
                }
                uris.add(link.getHref());
            } else {
                jgen.writeStringField(link.getTitle() + ODataConstants.JSON_BIND_LINK_SUFFIX, link.getHref());
            }
        }
    }
    for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) {
        jgen.writeArrayFieldStart(entitySetLink.getKey() + ODataConstants.JSON_BIND_LINK_SUFFIX);
        for (String uri : entitySetLink.getValue()) {
            jgen.writeString(uri);
        }
        jgen.writeEndArray();
    }

    for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getMediaEditLinks()) {
        if (link.getTitle() == null) {
            jgen.writeStringField(ODataConstants.JSON_MEDIAEDIT_LINK, link.getHref());
        }

        if (link.getInlineEntry() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineEntry());
        }
        if (link.getInlineFeed() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineFeed());
        }
    }

    if (entry.getMediaEntryProperties() == null) {
        DOMTreeUtils.writeSubtree(client, jgen, entry.getContent());
    } else {
        DOMTreeUtils.writeSubtree(client, jgen, entry.getMediaEntryProperties());
    }

    jgen.writeEndObject();
}

From source file:com.msopentech.odatajclient.engine.data.json.JSONEntrySerializer.java

@Override
protected void doSerializeV4(AbstractJSONEntry<AbstractLinkResource<?, ?>> entry, JsonGenerator jgen,
        SerializerProvider provider) throws IOException, JsonProcessingException {
    final String annotationPrefix = "@";

    jgen.writeStartObject();/*from  w w w .ja  v  a2 s  .c  om*/

    if (entry.getMetadata() != null) {
        jgen.writeStringField(annotationPrefix + ODataConstants.JSON_METADATA,
                entry.getMetadata().toASCIIString());
    }
    if (StringUtils.isNotBlank(entry.getType())) {
        jgen.writeStringField(annotationPrefix + ODataConstants.JSON_TYPE, entry.getType());
    }
    if (entry.getId() != null) {
        jgen.writeStringField(annotationPrefix + ODataConstants.JSON_ID, entry.getId());
    }

    if (entry.getSelfLink() != null) {
        jgen.writeStringField(annotationPrefix + ODataConstants.JSON_READ_LINK, entry.getSelfLink().getHref());
    }

    if (entry.getEditLink() != null) {
        jgen.writeStringField(annotationPrefix + ODataConstants.JSON_EDIT_LINK, entry.getEditLink().getHref());
    }

    if (entry.getMediaContentSource() != null) {
        jgen.writeStringField(annotationPrefix + ODataConstants.JSON_MEDIAREAD_LINK,
                entry.getMediaContentSource());
    }
    if (entry.getMediaContentType() != null) {
        jgen.writeStringField(annotationPrefix + ODataConstants.JSON_MEDIA_CONTENT_TYPE,
                entry.getMediaContentType());
    }

    final Map<String, List<String>> entitySetLinks = new HashMap<String, List<String>>();

    for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getNavigationLinks()) {
        if (link.getInlineEntry() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineEntry());
        } else if (link.getInlineFeed() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineFeed());
        } else {
            ODataLinkType type = null;
            try {
                type = ODataLinkType.fromString(link.getRel(), link.getType());
            } catch (IllegalArgumentException e) {
                // ignore
            }

            if (type == ODataLinkType.ENTITY_SET_NAVIGATION) {
                final List<String> uris;
                if (entitySetLinks.containsKey(link.getTitle())) {
                    uris = entitySetLinks.get(link.getTitle());
                } else {
                    uris = new ArrayList<String>();
                    entitySetLinks.put(link.getTitle(), uris);
                }
                uris.add(link.getHref());
            } else {
                jgen.writeStringField(link.getTitle() + ODataConstants.JSON_BIND_LINK_SUFFIX, link.getHref());
            }
        }
    }
    for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) {
        jgen.writeArrayFieldStart(entitySetLink.getKey() + ODataConstants.JSON_BIND_LINK_SUFFIX);
        for (String uri : entitySetLink.getValue()) {
            jgen.writeString(uri);
        }
        jgen.writeEndArray();
    }

    for (AbstractLinkResource link : (List<? extends AbstractLinkResource<?, ?>>) entry.getMediaEditLinks()) {
        if (link.getTitle() == null) {
            jgen.writeStringField(annotationPrefix + ODataConstants.JSON_MEDIAEDIT_LINK, link.getHref());
        }

        if (link.getInlineEntry() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineEntry());
        }
        if (link.getInlineFeed() != null) {
            jgen.writeObjectField(link.getTitle(), link.getInlineFeed());
        }
    }

    if (entry.getMediaEntryProperties() == null) {
        DOMTreeUtils.writeSubtree(client, jgen, entry.getContent());
    } else {
        DOMTreeUtils.writeSubtree(client, jgen, entry.getMediaEntryProperties());
    }

    jgen.writeEndObject();
}