diff --git a/productMods/edit/forms/addRoleToPersonTwoStage.jsp b/productMods/edit/forms/addRoleToPersonTwoStage.jsp index 4493d89d..858850dc 100644 --- a/productMods/edit/forms/addRoleToPersonTwoStage.jsp +++ b/productMods/edit/forms/addRoleToPersonTwoStage.jsp @@ -27,12 +27,14 @@ <%@ page import="java.util.Arrays" %> <%@ page import="java.util.Set" %> <%@ page import="java.util.HashSet" %> +<%@ page import="java.util.Iterator" %> <%@ page import="com.hp.hpl.jena.rdf.model.Model" %> <%@ page import="com.hp.hpl.jena.vocabulary.XSD" %> <%@ page import="org.json.JSONObject" %> <%@ page import="org.json.JSONException" %> +<%@ page import="org.json.JSONArray" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.beans.Individual" %> <%@ page import="edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary" %> @@ -537,25 +539,26 @@ request.setAttribute("typeQuery", getActivityTypeQuery(vreq)); <%! + +private static final String VIVO_CORE = "http://vivoweb.org/ontology/core#"; +private static final String DEFAULT_ACTIVITY_TYPE_QUERY = + "PREFIX core: <" + VIVO_CORE + ">\n" + + "SELECT ?existingActivityType WHERE { \n" + + "?role core:roleIn ?existingActivity . \n" + + "?existingActivity a ?existingActivityType . \n" + + "}"; // The activity type query results must be limited to the values in the activity type select element. // Sometimes the query returns a superclass such as owl:Thing instead. private String getActivityTypeQuery(VitroRequest vreq) { String activityTypeQuery = null; - String vivoCore = "http://vivoweb.org/ontology/core#"; - String defaultActivityTypeQuery = - "PREFIX core: <" + vivoCore + ">\n" + - "SELECT ?existingActivityType WHERE { \n" + - "?role core:roleIn ?existingActivity . \n" + - "?existingActivity a ?existingActivityType . \n" + - "}"; // Select options are subclasses of a specified class String objectClassUri = vreq.getParameter("roleActivityType_objectClassUri"); if (StringUtils.isNotBlank(objectClassUri)) { log.debug("objectClassUri = " + objectClassUri); activityTypeQuery = - "PREFIX core: <" + vivoCore + ">\n" + + "PREFIX core: <" + VIVO_CORE + ">\n" + "PREFIX rdfs: <" + VitroVocabulary.RDFS + ">\n" + "SELECT ?existingActivityType WHERE {\n" + "?role core:roleIn ?existingActivity . \n" + @@ -569,15 +572,25 @@ private String getActivityTypeQuery(VitroRequest vreq) { String typeLiteralOptions = vreq.getParameter("roleActivityType_literalOptions"); if (StringUtils.isNotBlank(typeLiteralOptions)) { try { - JSONObject json = new JSONObject(typeLiteralOptions); - Set selectOptions = new HashSet(); + JSONObject json = new JSONObject("{values: [" + typeLiteralOptions + "]}"); + Set typeUris = new HashSet(); + JSONArray values = json.getJSONArray("values"); + int valueCount = values.length(); + for (int i = 0; i < valueCount; i++) { + JSONArray option = values.getJSONArray(i); + String uri = option.getString(0); + if (StringUtils.isNotBlank(uri)) { + typeUris.add("(?existingTypeActivity = \"" + uri + "\")"); + } + } + String typeFilters = "FILTER (" + StringUtils.join(typeUris, "||") + ")"; + activityTypeQuery = DEFAULT_ACTIVITY_TYPE_QUERY.replace("}", "") + typeFilters + "}"; } catch (JSONException e) { - activityTypeQuery = defaultActivityTypeQuery; + activityTypeQuery = DEFAULT_ACTIVITY_TYPE_QUERY; } } - activityTypeQuery = defaultActivityTypeQuery; // temporary } else { - activityTypeQuery = defaultActivityTypeQuery; + activityTypeQuery = DEFAULT_ACTIVITY_TYPE_QUERY; } } log.debug("Activity type query: " + activityTypeQuery);