
org.nbnResolving.converters.JsonConverter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of resolver-core Show documentation
Show all versions of resolver-core Show documentation
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