package org.hadatac.console.controllers.dataacquisitionmanagement; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; 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.data.Form; import play.mvc.Controller; import play.mvc.Result; import play.twirl.api.Html; import org.hadatac.console.controllers.AuthApplication; import org.hadatac.console.controllers.dataacquisitionmanagement.routes; import org.hadatac.console.models.DataAcquisitionForm; import org.hadatac.console.models.SysUser; import org.hadatac.console.views.html.*; import org.hadatac.console.views.html.dataacquisitionmanagement.*; import org.hadatac.entity.pojo.DataAcquisition; import org.hadatac.entity.pojo.DataAcquisitionSchema; import org.hadatac.entity.pojo.TriggeringEvent; import org.hadatac.entity.pojo.User; import org.hadatac.entity.pojo.UserGroup; import org.hadatac.metadata.loader.ValueCellProcessing; import org.labkey.remoteapi.CommandException; import be.objectify.deadbolt.java.actions.Group; import be.objectify.deadbolt.java.actions.Restrict; public class EditDataAcquisition extends Controller { @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result index(String uri, boolean bChangeParam) { if ((session().get("LabKeyUserName") == null || session().get("LabKeyPassword") == null) && bChangeParam) { return redirect(org.hadatac.console.controllers.triplestore.routes.LoadKB.logInLabkey( routes.EditDataAcquisition.index(uri, bChangeParam).url())); } final SysUser sysUser = AuthApplication.getLocalUser(session()); try { if (uri != null) { uri = URLDecoder.decode(uri, "UTF-8"); } else { uri = ""; } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if (!uri.equals("")) { DataAcquisition dataAcquisition = DataAcquisition.findByUri(uri); if (null == dataAcquisition) { return badRequest("Invalid data acquisition URI!"); } Map<String, String> nameList = new HashMap<String, String>(); User user = User.find(dataAcquisition.getOwnerUri()); if(null != user){ if(user.getUri() != dataAcquisition.getPermissionUri()){ nameList.put(user.getUri(), user.getName()); } List<User> groups = UserGroup.find(); for (User group : groups) { nameList.put(group.getUri(), group.getName()); } } Map<String, String> mapSchemas = new HashMap<String, String>(); List<DataAcquisitionSchema> schemas = DataAcquisitionSchema.findAll(); for (DataAcquisitionSchema schema : schemas) { mapSchemas.put(schema.getUri(), ValueCellProcessing.replaceNameSpaceEx(schema.getUri())); } return ok(editDataAcquisition.render(dataAcquisition, nameList, User.getUserURIs(), mapSchemas, sysUser.isDataManager(), bChangeParam)); } return badRequest("Invalid data acquisition URI!"); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result postIndex(String uri, boolean bChangeParam) { return index(uri, bChangeParam); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result processForm(String acquisitionUri, boolean bChangeParam) { final SysUser sysUser = AuthApplication.getLocalUser(session()); Form<DataAcquisitionForm> form = Form.form(DataAcquisitionForm.class).bindFromRequest(); DataAcquisitionForm data = form.get(); List<String> changedInfos = new ArrayList<String>(); if (form.hasErrors()) { return badRequest("The submitted form has errors!"); } DataAcquisition da = DataAcquisition.findByUri(acquisitionUri); if (null != data.getNewDataAcquisitionUri()) { if (!data.getNewDataAcquisitionUri().equals("")) { if (null != DataAcquisition.findByUri(data.getNewDataAcquisitionUri())) { return badRequest("Data acquisition with this uri already exists!"); } // Create new data acquisition String strStartDate = ""; String strEndDate = ""; DateFormat jsFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm a"); DateFormat isoFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); try { Date startDate = jsFormat.parse(data.getNewStartDate()); strStartDate = isoFormat.format(startDate); if (!data.getNewEndDate().equals("")) { Date endDate = jsFormat.parse(data.getNewEndDate()); strEndDate = isoFormat.format(endDate); } } catch (ParseException e) { return badRequest("Cannot parse data " + data.getNewStartDate()); } da.setUri(data.getNewDataAcquisitionUri()); da.setNumberDataPoints(0); da.setTriggeringEvent(TriggeringEvent.CHANGED_CONFIGURATION); da.setParameter(data.getNewParameter()); da.setStartedAt(strStartDate); if (!strEndDate.equals("")) { da.setEndedAt(strEndDate); } try { int nRowsAffected = da.saveToLabKey( session().get("LabKeyUserName"), session().get("LabKeyPassword")); da.save(); return ok(main.render("Results,", "", new Html("<h3>" + String.format("%d row(s) have been inserted in Table \"DataAcquisition\"", nRowsAffected) + "</h3>"))); } catch (CommandException e) { return badRequest("Failed to insert new data acquisition to LabKey!\n" + "Error Message: " + e.getMessage()); } } } // Update current data acquisition if (bChangeParam) { if (da.getParameter() == null || !da.getParameter().equals(data.getNewParameter())) { da.setParameter(data.getNewParameter()); changedInfos.add(data.getNewParameter()); } } else { if (sysUser.isDataManager()) { if (da.getOwnerUri() == null || !da.getOwnerUri().equals(data.getNewOwner())) { da.setOwnerUri(data.getNewOwner()); changedInfos.add(data.getNewOwner()); } } if (da.getPermissionUri() == null || !da.getPermissionUri().equals(data.getNewPermission())) { da.setPermissionUri(data.getNewPermission()); changedInfos.add(data.getNewPermission()); } if (da.getSchemaUri() == null || !da.getSchemaUri().equals(data.getNewSchema())) { da.setSchemaUri(data.getNewSchema()); changedInfos.add(data.getNewSchema()); } } if (!changedInfos.isEmpty()) { da.save(); } return ok(editDataAcquisitionConfirm.render(da, changedInfos, sysUser.isDataManager())); } }