URLNotificationJSONConverter.java
package gov.usgs.earthquake.distribution;
import gov.usgs.earthquake.product.ProductId;
import gov.usgs.util.XmlUtils;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
public class URLNotificationJSONConverter {
/** attribute for product id */
public static final String ATTRIBUTE_PRODUCT_ID = "id";
/** attribute for source */
public static final String ATTRIBUTE_SOURCE = "source";
/** attribute for type */
public static final String ATTRIBUTE_TYPE = "type";
/** attribute for code */
public static final String ATTRIBUTE_CODE = "code";
/** attribute for updatetime */
public static final String ATTRIBUTE_UPDATE_TIME = "updatetime";
/** attribute for trackerURL */
public static final String ATTRIBUTE_TRACKER_URL = "trackerURL";
/** attribute for expires */
public static final String ATTRIBUTE_EXPIRES = "expires";
/** attribute for url */
public static final String ATTRIBUTE_URL = "url";
/**
* Converts a URLNotification into a JSON string
* @param notification URLNotification to convert
* @return JSON string
*/
public static String toJSON(final URLNotification notification) {
//id
ProductId id = notification.getProductId();
JsonObject json = Json.createObjectBuilder()
.add(ATTRIBUTE_PRODUCT_ID,Json.createObjectBuilder()
.add(ATTRIBUTE_SOURCE,id.getSource())
.add(ATTRIBUTE_TYPE,id.getType())
.add(ATTRIBUTE_CODE,id.getCode())
.add(ATTRIBUTE_UPDATE_TIME, XmlUtils.formatDate(id.getUpdateTime())))
.add(ATTRIBUTE_TRACKER_URL,notification.getTrackerURL().toString())
.add(ATTRIBUTE_EXPIRES,XmlUtils.formatDate(notification.getExpirationDate()))
.add(ATTRIBUTE_URL,notification.getProductURL().toString())
.build();
return json.toString();
}
/**
* parse a message from the input stream
* @param message InputStream message
* @return URLNotification
* @throws Exception if error occurs
*/
public static URLNotification parseJSON(final InputStream message) throws Exception{
JsonReader jsonReader = Json.createReader(message);
JsonObject json = jsonReader.readObject();
jsonReader.close();
return parseJSON(json);
}
/**
* Parse a JsonObject
* @param json JsonObject
* @return URLNotification
* @throws Exception if error occurs
*/
public static URLNotification parseJSON(final JsonObject json) throws Exception{
JsonObject idJson = json.getJsonObject(ATTRIBUTE_PRODUCT_ID);
ProductId id = new ProductId(
idJson.getString(ATTRIBUTE_SOURCE),
idJson.getString(ATTRIBUTE_TYPE),
idJson.getString(ATTRIBUTE_CODE),
XmlUtils.getDate(idJson.getString(ATTRIBUTE_UPDATE_TIME)));
return new URLNotification(
id,
XmlUtils.getDate(json.getString(ATTRIBUTE_EXPIRES)),
new URL(json.getString(ATTRIBUTE_TRACKER_URL)),
new URL(json.getString(ATTRIBUTE_URL)));
}
/**
* Main function to run a test JSON-ifying a URLnotification
* @param args arguments
* @throws Exception if error occurs
*/
public static void main(String[] args) throws Exception{
URLNotification testNotification = new URLNotification(new ProductId("testSource","testType","testCode"), new Date(),
new URL("http://localhost/tracker/"), new URL("http://localhost/product/"));
String JSON = toJSON(testNotification);
System.out.println(JSON);
}
}