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

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

Go to download

Java classes providing resolving functionality for Persistent Identifiers. Main focus is on National Bibliography Numbers, but some other known systems are also supported. See the official URN:NBN Resolver http://nbn-resolving.org or http://persid.org

The newest version!
/**********************************************************************
 * 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