package org.hadatac.console.controllers.studies;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import play.mvc.Controller;
import play.mvc.Result;
import org.apache.jena.query.DatasetAccessor;
import org.apache.jena.query.DatasetAccessorFactory;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.Statement;
import org.apache.jena.rdf.model.StmtIterator;
import org.hadatac.console.controllers.AuthApplication;
import org.hadatac.console.controllers.metadata.DynamicFunctions;
import org.hadatac.console.controllers.studies.routes;
import org.hadatac.console.controllers.studies.DeleteStudy;
import org.hadatac.console.views.html.studies.*;
import org.hadatac.console.views.html.triplestore.syncLabkey;
import org.hadatac.entity.pojo.Study;
import org.hadatac.metadata.loader.TripleProcessing;
import org.hadatac.metadata.loader.ValueCellProcessing;
import org.hadatac.utils.Collections;
import org.hadatac.utils.ConfigProp;
import org.hadatac.utils.Feedback;
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 RefreshStudy extends Controller {
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result index(String study_uri) {
try {
if (study_uri != null) {
study_uri = URLDecoder.decode(study_uri, "UTF-8");
} else {
study_uri = "";
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (study_uri.equals("")) {
return badRequest("Invalid study URI!");
}
DeleteStudy.deleteStudy(DynamicFunctions.replaceURLWithPrefix(study_uri));
String site = ConfigProp.getPropertyValue("labkey.config", "site");
String path = ConfigProp.getPropertyValue("labkey.config", "folder");
if (session().get("LabKeyUserName") == null && session().get("LabKeyPassword") == null) {
return redirect(org.hadatac.console.controllers.triplestore.routes.LoadKB.logInLabkey(
routes.RefreshStudy.index(study_uri).url()));
}
String results = "";
int nTriples = 0;
try {
Model model = TripleProcessing.importStudy(site, session().get("LabKeyUserName"),
session().get("LabKeyPassword"), path, study_uri);
DatasetAccessor accessor = DatasetAccessorFactory.createHTTP(
Collections.getCollectionsName(Collections.METADATA_GRAPH));
accessor.add(model);
Model refModel = Study.findModel(ValueCellProcessing.replaceNameSpaceEx(study_uri));
results += Feedback.println(Feedback.WEB, "Imported Triples: ");
StmtIterator iter = model.listStatements();
while (iter.hasNext()) {
Statement stmt = iter.nextStatement();
if (!refModel.contains(stmt)) {
System.out.println(stmt.toString());
}
results += Feedback.println(Feedback.WEB, stmt.toString());
nTriples++;
}
TripleProcessing.importDataAcquisition(site, session().get("LabKeyUserName"),
session().get("LabKeyPassword"), path, ValueCellProcessing.replacePrefixEx(study_uri));
} catch (CommandException e) {
if (e.getMessage().equals("Unauthorized")) {
return ok(syncLabkey.render("login_failed",
org.hadatac.console.controllers.studies.routes.StudyManagement.index(
State.ACTIVE).url(), ""));
}
}
return ok(refreshStudy.render(results, nTriples));
}
@Restrict(@Group(AuthApplication.DATA_OWNER_ROLE))
public static Result postIndex(String study_uri) {
return index(study_uri);
}
}