V1_0.java [src/java/m/ann/normalize] Revision: default Date:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package m.ann.normalize;
import csip.Config;
import utils.MongoAccess;
import csip.ModelDataService;
import csip.ModelDataServiceCall;
import csip.ServiceException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.Path;
import oms3.annotations.Description;
import oms3.annotations.Name;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.hyperledger.fabric.gateway.ContractException;
import utils.blockchain.application.java.FeNS_blockchain;
/**
* Normalize
*
* @author od, sidereus
*/
@Name("Normalize the raw data")
@Description("Normalize all raw data.")
@Path("m/normalize/1.0")
public class V1_0 extends ModelDataService {
protected Map<String, JSONObject> payload;
protected String ann;
protected Boolean blockchain;
@Override
public void preProcess() throws ServiceException, JSONException, ContractException {
if (parameter().getNames().contains("normalize")) {
JSONArray train = parameter().getJSONArray("normalize");
payload = new LinkedHashMap();
for (int i = 0; i < train.length(); i++) {
JSONObject obj = train.getJSONObject(i);
String name = obj.getString("name");
payload.put(name, obj);
}
ann = payload.get("annName").getString("value");
blockchain = payload.get("blockchain").getBoolean("value");
} else {
ann = parameter().getString("annName");
blockchain = parameter().getBoolean("blockchain", false);
}
if (blockchain) {
FeNS_blockchain.getAssets();
}
}
/**
* Normalize data collected in raw collection of input database
*
* @throws ServiceException
*/
@Override
public void doProcess() throws ServiceException, ContractException {
MongoAccess.normalize(ann);
if (blockchain) {
FeNS_blockchain.submit("FeNS_normalize", MongoAccess.getCollectionHash(ann, "normalized"));
FeNS_blockchain.getAssets();
}
results().put("status", "ok");
}
@Override
public void postProcess() throws ServiceException, JSONException, Exception {
if (parameter().getNames().contains("normalize")) {
ModelDataServiceCall mdsc = new ModelDataServiceCall()
.put("train", getCollection("train"))
.put("select", getCollection("select"))
.url(Config.getString("ann.train_ensemble.url",
request().getCodebase() + "m/train_ensemble/1.0"))
.call();
if (!mdsc.serviceFinished()) {
throw new ServiceException("FeNS-trainEnsemble service error: " + mdsc.getError());
}
}
}
private Collection getCollection(String subPayload) throws ServiceException, JSONException {
JSONArray n = parameter().getJSONArray(subPayload);
List<JSONObject> nl = new ArrayList<>();
for (int i = 0; i < n.length(); i++) {
nl.add(n.getJSONObject(i));
}
return nl;
}
// make sure the db connection is closed at the end.
public static void onContextDestroy() {
MongoAccess.closeMongo();
System.out.println("Closed ANN Mongo.");
}
}