package org.hadatac.console.controllers.deployments; import org.hadatac.console.http.GetSparqlQuery; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import play.mvc.Controller; import play.mvc.Result; import play.twirl.api.Html; import play.data.*; import org.hadatac.console.views.html.*; import org.hadatac.console.views.html.deployments.*; import org.hadatac.console.views.html.triplestore.syncLabkey; import org.hadatac.console.controllers.deployments.routes; import org.hadatac.data.api.DataFactory; import org.hadatac.entity.pojo.DataAcquisition; import org.hadatac.entity.pojo.Deployment; import org.hadatac.entity.pojo.Detector; import org.hadatac.entity.pojo.Instrument; import org.hadatac.entity.pojo.Platform; import org.hadatac.entity.pojo.TriggeringEvent; import org.hadatac.metadata.loader.LabkeyDataHandler; import org.hadatac.metadata.loader.ValueCellProcessing; import org.hadatac.utils.ConfigProp; import org.labkey.remoteapi.CommandException; import org.labkey.remoteapi.query.SaveRowsResponse; import be.objectify.deadbolt.java.actions.Group; import be.objectify.deadbolt.java.actions.Restrict; import org.hadatac.console.models.DeploymentForm; import org.hadatac.console.models.SparqlQuery; import org.hadatac.console.models.SparqlQueryResults; import org.hadatac.console.models.SysUser; import org.hadatac.console.controllers.AuthApplication; import org.hadatac.console.controllers.dataacquisitionmanagement.DataAcquisitionManagement; import org.hadatac.console.controllers.triplestore.UserManagement; import org.hadatac.console.controllers.deployments.NewDeployment; public class NewDeployment extends Controller { public static SparqlQueryResults getQueryResults(String tabName) { SparqlQuery query = new SparqlQuery(); GetSparqlQuery query_submit = new GetSparqlQuery(query); SparqlQueryResults thePlatforms = null; String query_json = null; try { query_json = query_submit.executeQuery(tabName); thePlatforms = new SparqlQueryResults(query_json, false); } catch (IllegalStateException | NullPointerException e1) { e1.printStackTrace(); } return thePlatforms; } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result index(String type) { if (session().get("LabKeyUserName") == null && session().get("LabKeyPassword") == null) { return redirect(org.hadatac.console.controllers.triplestore.routes.LoadKB.logInLabkey( routes.NewDeployment.index(type).url())); } if (type.equalsIgnoreCase("regular")) { return ok(newDeployment.render( Platform.find(), Instrument.findAvailable(), Detector.findAvailable(), type)); } else if (type.equalsIgnoreCase("legacy")) { return ok(newDeployment.render( Platform.find(), Instrument.find(), Detector.find(), type)); } return badRequest("Invalid deployment type!"); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result postIndex(String type) { return index(type); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result processForm() { final SysUser user = AuthApplication.getLocalUser(session()); Form<DeploymentForm> form = Form.form(DeploymentForm.class).bindFromRequest(); if (form.hasErrors()) { return badRequest("The submitted form has errors!"); } DeploymentForm data = form.get(); String dateStringFromJs = data.getStartDateTime(); String dateString = ""; DateFormat jsFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm a"); Date dateFromJs; try { dateFromJs = jsFormat.parse(dateStringFromJs); DateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); dateString = isoFormat.format(dateFromJs); } catch (ParseException e) { return badRequest("Cannot parse data " + dateStringFromJs); } String deploymentUri = data.getUri(); Deployment deployment = DataFactory.createDeployment(deploymentUri, data.getPlatform(), data.getInstrument(), data.getDetectors(), dateString, data.getType()); int triggeringEvent; if (data.getType().equalsIgnoreCase("LEGACY")) { triggeringEvent = TriggeringEvent.LEGACY_DEPLOYMENT; } else { triggeringEvent = TriggeringEvent.INITIAL_DEPLOYMENT; } String dataAcquisitionUri = data.getDataAcquisitionUri(); String param = data.getInitialParameter(); DataAcquisition dataAcquisition = DataFactory.createDataAcquisition( triggeringEvent, dataAcquisitionUri, deploymentUri, param, UserManagement.getUriByEmail(user.getEmail())); String user_name = session().get("LabKeyUserName"); String password = session().get("LabKeyPassword"); if (user_name != null && password != null) { try { int nRowsOfDeployment = deployment.saveToLabKey( session().get("LabKeyUserName"), session().get("LabKeyPassword")); int nRowsOfDA = dataAcquisition.saveToLabKey( session().get("LabKeyUserName"), session().get("LabKeyPassword")); deployment.save(); dataAcquisition.save(); return ok(main.render("Results,", "", new Html("<h3>" + String.format("%d row(s) have been inserted in Table \"Deployment\" \n", nRowsOfDeployment) + String.format("%d row(s) have been inserted in Table \"DataAcquisition\"", nRowsOfDA) + "</h3>"))); } catch (CommandException e) { return badRequest("Failed to insert Deployment to LabKey!\n" + "Error Message: " + e.getMessage()); } } return ok(deploymentConfirm.render("New Deployment", data)); } }