package org.hadatac.console.controllers.dataacquisitionmanagement; import org.hadatac.console.controllers.AuthApplication; import org.hadatac.console.controllers.dataacquisitionmanagement.routes; import org.hadatac.console.controllers.triplestore.UserManagement; import org.hadatac.console.models.DataAcquisitionForm; import org.hadatac.console.models.SysUser; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Comparator; 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.views.html.main; import org.hadatac.console.views.html.dataacquisitionmanagement.*; import org.hadatac.entity.pojo.DataAcquisition; import org.hadatac.entity.pojo.DataAcquisitionSchema; import org.hadatac.entity.pojo.Deployment; import org.hadatac.entity.pojo.TriggeringEvent; import org.hadatac.entity.pojo.User; import org.hadatac.entity.pojo.UserGroup; import org.hadatac.metadata.loader.LabkeyDataHandler; import org.hadatac.metadata.loader.ValueCellProcessing; import org.hadatac.utils.ConfigProp; import org.hadatac.utils.State; import org.labkey.remoteapi.CommandException; import be.objectify.deadbolt.java.actions.Group; import be.objectify.deadbolt.java.actions.Restrict; public class DataAcquisitionManagement extends Controller { @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result index(int stateId) { List<DataAcquisition> results = null; State state = new State(stateId); final SysUser user = AuthApplication.getLocalUser(session()); if (user.isDataManager()) { results = DataAcquisition.findAll(state); } else { String ownerUri = UserManagement.getUriByEmail(user.getEmail()); results = DataAcquisition.find(ownerUri, state); } for (DataAcquisition dataAcquisition : results) { dataAcquisition.setSchemaUri(ValueCellProcessing.replaceNameSpaceEx( dataAcquisition.getSchemaUri())); } results.sort(new Comparator<DataAcquisition>() { @Override public int compare(DataAcquisition lhs, DataAcquisition rhs) { return lhs.getUri().compareTo(rhs.getUri()); } }); return ok(dataAcquisitionManagement.render(state, results, user.isDataManager())); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result postIndex(int stateId) { return index(stateId); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result newDataAcquisition() { if (session().get("LabKeyUserName") == null && session().get("LabKeyPassword") == null) { return redirect(org.hadatac.console.controllers.triplestore.routes.LoadKB.logInLabkey( routes.DataAcquisitionManagement.newDataAcquisition().url())); } final SysUser sysUser = AuthApplication.getLocalUser(session()); List<DataAcquisitionSchema> schemas = DataAcquisitionSchema.findAll(); for (DataAcquisitionSchema schema : schemas) { schema.setUri(ValueCellProcessing.replaceNameSpaceEx(schema.getUri())); } Map<String, String> nameList = new HashMap<String, String>(); List<User> groups = UserGroup.find(); for (User group : groups) { nameList.put(group.getUri(), group.getName()); } return ok(newDataAcquisition.render(Deployment.find(new State(State.ACTIVE)), schemas, nameList, User.getUserURIs(), sysUser.isDataManager())); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result postNewDataAcquisition() { return newDataAcquisition(); } @Restrict(@Group(AuthApplication.DATA_OWNER_ROLE)) public static Result processForm() { final SysUser sysUser = AuthApplication.getLocalUser(session()); Form<DataAcquisitionForm> form = Form.form(DataAcquisitionForm.class).bindFromRequest(); DataAcquisitionForm data = form.get(); if (form.hasErrors()) { return badRequest("The submitted form has errors!"); } if (null != DataAcquisition.findByUri(data.getNewDataAcquisitionUri())) { return badRequest("Data acquisition with this uri already exists!"); } DataAcquisition da = new DataAcquisition(); da.setUri(data.getNewDataAcquisitionUri()); da.setNumberDataPoints(0); da.setSchemaUri(data.getNewSchema()); da.setTriggeringEvent(TriggeringEvent.INITIAL_DEPLOYMENT); da.setParameter(data.getNewParameter()); if (sysUser.isDataManager()) { da.setOwnerUri(data.getNewOwner()); } da.setPermissionUri(data.getNewPermission()); String dateString = ""; DateFormat jsFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm a"); try { Date dateFromJs = jsFormat.parse(data.getNewStartDate()); DateFormat isoFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); dateString = isoFormat.format(dateFromJs); } catch (ParseException e) { return badRequest("Cannot parse data " + data.getNewStartDate()); } da.setStartedAt(dateString); da.save(); return redirect(routes.DataAcquisitionManagement.index(State.ACTIVE)); } }