All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nbnResolving.converters.JsonConverter Maven / Gradle / Ivy

/**********************************************************************
 * Class JsonConverter
 *  
 * Copyright (c) 2011-2012, German National Library/Deutsche Nationalbibliothek
 * Adickesallee 1, D-60322 Frankfurt am Main, Federal Republic of Germany 
 *
 * This program is free software.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * Thomas Haidlas -- German National Library
 * Kadir Karaca Kocer -- German National Library
 **********************************************************************/

/* ********************************************************************
 * CHANGELOG:
 * 
 * 2012-04-03 Port to Maven by Timo Heck & Karaca Kocer
 * 2011-12-12 License information and JavaDocs by Karaca kocer
 * Created on 2011-12-08 by Thomas Haidlas -- German National Library
 ********************************************************************/

package org.nbnResolving.converters;

import java.io.IOException;
import java.text.SimpleDateFormat;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.impl.Utf8Generator;
import org.nbnResolving.pidef.PidefDocument;

/**
 * Class to convert resolving results to JSON
 * 
 */
public class JsonConverter {
    private static final Log LOGGER = LogFactory.getLog(JsonConverter.class);

    /**
     * @param generator
     * @param doc
     * @param sdf
     * @throws JsonGenerationException
     * @throws IOException
     */
    @SuppressWarnings("static-method")
    public void addRecordToModel(Utf8Generator generator, PidefDocument doc, SimpleDateFormat sdf) throws JsonGenerationException, IOException {
        if (generator != null) {
            LOGGER.debug("JsonGenerator OK. Generating the JSON ...");
            generator.useDefaultPrettyPrinter();
            generator.writeStartObject();
            generator.writeObjectFieldStart("header");
            generator.writeStringField("request", doc.getPidef().getHeader().getRequest());
            if (doc.getPidef().getHeader().getTimestamp() != null)
                generator.writeStringField("timestamp", sdf.format(doc.getPidef().getHeader().getTimestamp().getTime()));
            generator.writeNumberField("status_code", doc.getPidef().getHeader().getStatusCode());

            org.nbnResolving.pidef.MessageType[] mt = doc.getPidef().getHeader().getMessageArray();
            for (int i = 0; i < mt.length; i++) {
                generator.writeObjectFieldStart("message");
                generator.writeStringField("language", mt[i].getLang());
                generator.writeStringField("text", mt[i].getStringValue());
                generator.writeEndObject(); // message
            }

            generator.writeStringField("source", doc.getPidef().getHeader().getSource());
            generator.writeStringField("organisation", doc.getPidef().getHeader().getOrganisation());
            generator.writeEndObject(); // header

            org.nbnResolving.pidef.DataType dt = doc.getPidef().getData();
            if (dt != null) {
                generator.writeObjectFieldStart("data");
                if (dt.getResolvingInformation() != null) {
                    LOGGER.debug("getResolvingInformation() found. Listing detailed information");
                    org.nbnResolving.pidef.PiInfoType pi = dt.getResolvingInformation().getPiInfo();
                    if (pi != null) {
                        generator.writeObjectFieldStart("resolving_information");
                        generator.writeObjectFieldStart("pi_info");
                        generator.writeStringField("identifier", pi.getIdentifier());
                        generator.writeStringField("fragment", pi.getFragment());
                        // owner
                        org.nbnResolving.pidef.InstitutionType it = pi.getOwner();
                        if (it != null) {
                            generator.writeObjectFieldStart("owner");
                            generator.writeStringField("ref", it.getRef());
                            generator.writeNumberField("num", it.getNum());
                            generator.writeStringField("name", it.getName());
                            generator.writeStringField("street", it.getStreet());
                            generator.writeStringField("office_box", it.getOfficeBox());
                            generator.writeStringField("zip", it.getZip());
                            generator.writeStringField("city", it.getCity());
                            generator.writeStringField("country", it.getCountry());
                            // other fields?
                            generator.writeEndObject(); // owner
                        }
                        generator.writeNumberField("status", pi.getStatus());
                        if (pi.getCreated() != null)
                            generator.writeStringField("created", sdf.format(pi.getCreated().getTime()));
                        if (pi.getLastModified() != null)
                            generator.writeStringField("last_modified", sdf.format(pi.getLastModified().getTime()));
                        if (pi.getLastChecked() != null)
                            generator.writeStringField("last_checked", sdf.format(pi.getLastChecked().getTime()));
                        generator.writeStringField("comment", pi.getComment());
                    } // pi
                    generator.writeEndObject(); // pi_info

                    // generator.writeArrayFieldStart("url_info_array");
                    org.nbnResolving.pidef.UrlInfoType[] uit = dt.getResolvingInformation().getUrlInfoArray();
                    for (int i = 0; i < uit.length; i++) {
                        generator.writeObjectFieldStart("url_info");
                        //
                        generator.writeStringField("url", uit[i].getUrl());
                        // owner
                        org.nbnResolving.pidef.InstitutionType it = uit[i].getOwner();
                        if (it != null) {
                            generator.writeObjectFieldStart("owner");
                            generator.writeStringField("ref", it.getRef());
                            generator.writeNumberField("num", it.getNum());
                            generator.writeStringField("name", it.getName());
                            generator.writeStringField("street", it.getStreet());
                            generator.writeStringField("office_box", it.getOfficeBox());
                            generator.writeStringField("zip", it.getZip());
                            generator.writeStringField("city", it.getCity());
                            generator.writeStringField("country", it.getCountry());
                            // other fields?
                            generator.writeEndObject(); // owner
                        }
                        generator.writeStringField("mimetype", uit[i].getMimetype());
                        generator.writeBooleanField("frontpage", uit[i].getFrontpage());
                        generator.writeNumberField("origin", uit[i].getOrigin());
                        generator.writeNumberField("status", uit[i].getStatus());
                        generator.writeNumberField("filesize", uit[i].getFilesize());
                        // checksum_info
                        // link_check_info
                        // deactivation_time
                        if (uit[i].getCreated() != null)
                            generator.writeStringField("created", sdf.format(uit[i].getCreated().getTime()));
                        if (uit[i].getLastModified() != null)
                            generator.writeStringField("last_modified", sdf.format(uit[i].getLastModified().getTime()));
                        generator.writeStringField("comment", uit[i].getComment());
                        generator.writeEndObject(); // url_info
                    } // for all URLs
                      // generator.writeEndArray();
                    generator.writeEndObject(); // resolving_information
                } else {
                    // No resolving information
                    LOGGER.debug("getResolvingInformation() not found. Can not list detailed information");
                }

                org.nbnResolving.pidef.LinkArray la = dt.getLinks();
                if (la != null) {
                    LOGGER.debug("getLinks() found. Listing the Array");
                    // generator.writeObjectFieldStart("links");
                    generator.writeArrayFieldStart("links");
                    String[] links = la.getLinkArray();
                    // generator.writeStartArray();
                    // generator.writeArrayFieldStart("links");
                    // generator.writeStringField("linkArray", "Start");
                    for (int i = 0; i < links.length; i++)
                        generator.writeString(links[i]);
                    generator.writeEndArray();
                    // generator.writeEndObject(); //
                } else {
                    // TODO: should not occur: error condition! handle.
                    // logger.warn("Generating JSON: you shold not be here! Please check!");
                    LOGGER.debug("getLinks() not found. Can not list the array");
                }

                generator.writeEndObject(); // data
            } // (dt == null)
        } // (generator == null)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy