package com.ibm.maximo.oslc; import java.io.IOException; import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; import javax.json.JsonObjectBuilder; public class BulkProcessor { private JsonArrayBuilder bulkArray = Json.createArrayBuilder(); private MaximoConnector mc; private String uri; public BulkProcessor(MaximoConnector mc, String uri){ this.mc = mc; this.uri = uri; } public BulkProcessor create(JsonObject jo){ JsonObject obj = Json.createObjectBuilder().add("_data", jo).build(); this.bulkArray.add(obj); return this; } public BulkProcessor update(JsonObject jo, String uri, String... properties){ JsonObjectBuilder objb = Json.createObjectBuilder().add("_data", jo); this.addMeta(objb, "PATCH", uri, properties); return this; } public BulkProcessor merge(JsonObject jo, String uri, String... properties){ JsonObjectBuilder objb = Json.createObjectBuilder().add("_data", jo); this.addMeta(objb, "MERGE", uri, properties); return this; } public BulkProcessor delete(String uri){ JsonObjectBuilder objb = Json.createObjectBuilder(); this.addMeta(objb, "DELETE", uri); return this; } private void addMeta(JsonObjectBuilder objb, String method, String uri, String... properties){ JsonObjectBuilder objBuilder = Json.createObjectBuilder(); String propStr = this.propertiesBuilder(properties); if(propStr != null){ objBuilder.add("properties", propStr); } if(method != null && !method.isEmpty()){ objBuilder.add("method", method); } if(uri != null && !uri.isEmpty()){ objBuilder.add("uri", uri); } JsonObject objMeta = objBuilder.build(); if(!objMeta.isEmpty()){ objb.add("_meta", objMeta); } this.bulkArray.add(objb.build()); } public JsonArray processBulk(){ JsonArray jarr = null; try { jarr = this.mc.bulk(this.uri, this.bulkArray.build()); } catch (IOException e) { e.printStackTrace(); } catch (OslcException e) { e.printStackTrace(); } return jarr; } private String propertiesBuilder(String... properties){ StringBuilder propStrb = new StringBuilder(); for(String property: properties){ propStrb.append(property).append(","); } if(propStrb.length()>0){ if(propStrb.toString().endsWith(",")){ return propStrb.substring(0,propStrb.length()-1); }else{ return propStrb.toString(); } } return null; } }