Updates for add role to person two stage logic

This commit is contained in:
hjkhjk54 2011-11-02 21:04:19 +00:00
parent babd610e03
commit 75eb9952d0
4 changed files with 317 additions and 158 deletions

View file

@ -161,7 +161,7 @@
</#if>
</#if>
</div>
<input type="hidden" id="editKey" name="editKey" value="${editKey} />
<input type="hidden" id="editKey" name="editKey" value="${editKey}" />
<p class="submit">
<input type="submit" id="submit" value="${submitButtonText}"/><span class="or"> or <a class="cancel" href="${cancelUrl}">Cancel</a>
</p>

View file

@ -70,6 +70,10 @@ import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode;
Important: This form cannot be directly used as a custom form. It has parameters that must be set.
See addClinicalRoleToPerson.jsp for an example.
roleToActivityPredicate and activityToRolePredicate are both dependent on the type of
the activity itself. For a new statement, the predicate type is not known.
For an existing statement, the predicate is known but may change based on the type of the activity newly selected.
*
*/
public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurationGenerator {
@ -142,7 +146,7 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
//Add validator
editConfiguration.addValidator(new DateTimeIntervalValidationVTwo("startField","endField") );
//Add preprocessors
addPreprocessors(editConfiguration);
addPreprocessors(editConfiguration, vreq.getWebappDaoFactory());
//Adding additional data, specifically edit mode
addFormSpecificData(editConfiguration, vreq);
return editConfiguration;
@ -210,18 +214,18 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
private String getPrefixesString() {
//TODO: Include dynamic way of including this
return "@prefix core: http://vivoweb.org/ontology/core# .";
return "@prefix core: <http://vivoweb.org/ontology/core#> .";
}
//TODO: Check if single string or multiple strings - check rdfslabel form etc. for prefix
//processing
private List<String> generateN3Required(VitroRequest vreq) {
List<String> n3ForEdit = new ArrayList<String>();
String editString = getPrefixesString() + " /n";
String editString = getPrefixesString();
editString += "?person ?rolePredicate ?role .";
editString += "?role a <" + getRoleType(vreq) + "> .";
editString += "?role <" + getRoleToActivityPredicate(vreq) + "> ?roleActivity .";
editString += "?roleActivity <" + getActivityToRolePredicate(vreq) + "> ?role .";
editString += "?role " + getRoleToActivityPredicate(vreq) + " ?roleActivity .";
editString += "?roleActivity " + getActivityToRolePredicate(vreq) + " ?role .";
n3ForEdit.add(editString);
return n3ForEdit;
}
@ -342,6 +346,10 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
//add role activity and roleActivityType to uris on form
urisOnForm.add("roleActivity");
urisOnForm.add("roleActivityType");
//Also adding the predicates
//TODO: Check how to override this in case of default parameter? Just write hidden input to form?
urisOnForm.add("roleToActivityPredicate");
urisOnForm.add("activityToRolePredicate");
editConfiguration.setUrisOnform(urisOnForm);
//activity label and role label are literals on form
literalsOnForm.add("activityLabel");
@ -378,10 +386,43 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
map.put("endNode", getEndNodeQuery(vreq));
map.put("startField-precision", getStartPrecisionQuery(vreq));
map.put("endField-precision", getEndPrecisionQuery(vreq));
//Also need sparql queries for roleToActivityPredicate and activityToRolePredicate
map.put("roleToActivityPredicate", getRoleToActivityPredicateQuery(vreq));
map.put("activityToRolePredicate", getActivityToRolePredicateQuery(vreq));
return map;
}
private String getEndPrecisionQuery(VitroRequest vreq) {
private String getActivityToRolePredicateQuery(VitroRequest vreq) {
String query = "SELECT ?existingActivityToRolePredicate \n " +
"WHERE { \n" +
"?roleActivity ?existingActivityToRolePredicate ?role .";
//Get possible predicates
List<String> addToQuery = new ArrayList<String>();
List<String> predicates = getPossibleActivityToRolePredicates();
for(String p:predicates) {
addToQuery.add("(?existingActivityToRolePredicate=<" + p + ">)");
}
query += "FILTER (" + StringUtils.join(addToQuery, " || ") + ")";
query += "}";
return query;
}
private String getRoleToActivityPredicateQuery(VitroRequest vreq) {
String query = "SELECT ?existingRoleToActivityPredicate \n " +
"WHERE { \n" +
"?role ?existingRoleToActivityPredicate ?roleActivity .";
//Get possible predicates
query += getFilterRoleToActivityPredicate("existingRoleToActivityPredicate");
query += "}";
return query;
}
private String getEndPrecisionQuery(VitroRequest vreq) {
String query = "SELECT ?existingEndPrecision WHERE {" +
"?role <" + getRoleToIntervalURI() + "> ?intervalNode ." +
"?intervalNode <" + VitroVocabulary.RDF_TYPE + "> <" + getIntervalTypeURI() + "> ." +
@ -473,7 +514,9 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
List<String> typeUris = new ArrayList<String>();
Set<String> optionUris = typeLiteralOptions.keySet();
for(String uri: optionUris) {
typeUris.add("(?existingActivityType = <" + uri + ">)");
if(!uri.isEmpty()) {
typeUris.add("(?existingActivityType = <" + uri + ">)");
}
}
String typeFilters = "FILTER (" + StringUtils.join(typeUris, "||") + ")";
String defaultActivityTypeQuery = getDefaultActivityTypeQuery(vreq);
@ -490,8 +533,17 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
activityTypeQuery = getDefaultActivityTypeQuery(vreq);
}
String roleToActivityPredicate = getRoleToActivityPredicate(vreq);
activityTypeQuery = QueryUtils.subUriForQueryVar(activityTypeQuery, "predicate", roleToActivityPredicate);
//The replacement of activity type query's predicate was only relevant when we actually
//know which predicate is definitely being used here
//Here we have multiple values possible for predicate so the original
//Replacement should only happen when we have an actual predicate
String replaceRoleToActivityPredicate = getRoleToActivityPredicate(vreq);
//if no filters to add, this means an actual parameter exists for the role to activity predicate and that should be utilized
//as the replacement
if(!doAddFilterToRoleToActivityQuery(vreq)) {
activityTypeQuery = QueryUtils.subUriForQueryVar(activityTypeQuery, "predicate", replaceRoleToActivityPredicate);
}
log.debug("Activity type query: " + activityTypeQuery);
return activityTypeQuery;
@ -503,8 +555,11 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
"PREFIX vitro: <" + VitroVocabulary.vitroURI + "> \n" +
"SELECT ?existingActivityType WHERE { \n" +
" ?role ?predicate ?existingActivity . \n" +
" ?existingActivity vitro:mostSpecificType ?existingActivityType . \n" +
"}";
" ?existingActivity vitro:mostSpecificType ?existingActivityType . \n";
if(doAddFilterToRoleToActivityQuery(vreq)) {
query += getFilterRoleToActivityPredicate("predicate");
}
query+= "}";
return query;
}
@ -515,8 +570,11 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
"SELECT ?existingActivityType WHERE {\n" +
" ?role ?predicate ?existingActivity . \n" +
" ?existingActivity vitro:mostSpecificType ?existingActivityType . \n" +
" ?existingActivityType rdfs:subClassOf ?objectClassUri . \n" +
"}";
" ?existingActivityType rdfs:subClassOf ?objectClassUri . \n";
if(doAddFilterToRoleToActivityQuery(vreq)) {
query += getFilterRoleToActivityPredicate("predicate");
}
query+= "}";
return query;
}
@ -526,8 +584,11 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
"SELECT ?existingActivityType WHERE { \n" +
" ?role ?predicate ?existingActivity . \n" +
" ?existingActivity vitro:mostSpecificType ?existingActivityType . \n" +
" ?existingActivityType vitro:inClassGroup ?classgroup . \n" +
"}";
" ?existingActivityType vitro:inClassGroup ?classgroup . \n";
if(doAddFilterToRoleToActivityQuery(vreq)) {
query += getFilterRoleToActivityPredicate("predicate");
}
query+= "}";
return query;
}
@ -539,15 +600,17 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
String roleToActivityPredicate = getRoleToActivityPredicate(vreq);
//Portion below for multiple possible predicates
/*if(roleToActivityPredicate.equals(getDefaultRoleToActivityPredicate())) {
query += "SELECT ?existingActivity WHERE { " +
"{?role <" + ModelUtils.processPropertyURI + "> ?existingActivity .} UNION " +
"{?role <" + ModelUtils.nonProcessPropertyURI + "> ?existingActivity .}" +
"}";
if(doAddFilterToRoleToActivityQuery(vreq)) {
List<String> predicates = getPossibleRoleToActivityPredicates();
List<String> addToQuery = new ArrayList<String>();
query += "SELECT ?existingActivity WHERE { \n" +
" ?role ?predicate ?existingActivity . \n ";
query += getFilterRoleToActivityPredicate("predicate");
query += "}";
} else {
*/
query += "SELECT ?existingActivity WHERE { ?role <" +roleToActivityPredicate + "> ?existingActivity . }";
/*}*/
}
return query;
}
@ -594,19 +657,19 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
"PREFIX rdfs: <" + RDFS.getURI() + "> \n";
String roleToActivityPredicate = getRoleToActivityPredicate(vreq);
/*if(roleToActivityPredicate.equals(getDefaultRoleToActivityPredicate())) {
if(doAddFilterToRoleToActivityQuery(vreq)) {
query += "SELECT ?existingTitle WHERE { \n" +
"{?role <" + ModelUtils.processPropertyURI + "> ?existingActivity . \n" +
"?existingActivity rdfs:label ?existingTitle . } UNION " +
"{?role <" + ModelUtils.nonProcessPropertyURI + "> ?existingActivity . \n" +
"?existingActivity rdfs:label ?existingTitle . } " +
"}";
"?role ?predicate ?existingActivity . \n" +
"?existingActivity rdfs:label ?existingTitle . \n";
query += getFilterRoleToActivityPredicate("predicate");
query += "}";
} else {*/
} else {
query += "SELECT ?existingTitle WHERE { \n" +
"?role <" + roleToActivityPredicate + "> ?existingActivity . \n" +
"?existingActivity rdfs:label ?existingTitle . }";
/*}*/
}
return query;
}
@ -625,11 +688,86 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
getRoleLabelField(editConfiguration, vreq, fields);
getStartField(editConfiguration, vreq, fields);
getEndField(editConfiguration, vreq, fields);
//These fields are for the predicates that will be set later
//TODO: Do these only if not using a parameter for the predicate?
getRoleToActivityPredicateField(editConfiguration, vreq, fields);
getActivityToRolePredicateField(editConfiguration, vreq, fields);
editConfiguration.setFields(fields);
}
//This is a literal technically?
private void getActivityToRolePredicateField(
EditConfigurationVTwo editConfiguration, VitroRequest vreq,
Map<String, FieldVTwo> fields) {
String fieldName = "activityToRolePredicate";
//get range data type uri and range language
String stringDatatypeUri = XSD.xstring.toString();
FieldVTwo field = new FieldVTwo();
field.setName(fieldName);
field.setNewResource(false);
//queryForExisting is not being used anywhere in Field
//Not really interested in validators here
List<String> validators = new ArrayList<String>();
field.setValidators(validators);
//subjectUri and subjectClassUri are not being used in Field
field.setOptionsType("UNDEFINED");
//why isn't predicate uri set for data properties?
field.setPredicateUri(null);
field.setObjectClassUri(null);
field.setRangeDatatypeUri(null);
field.setLiteralOptions(new ArrayList<List<String>>());
//set assertions
List<String> assertions = new ArrayList<String>();
assertions.add("?roleActivity ?activityToRolePredicate ?role .");
field.setAssertions(assertions);
fields.put(field.getName(), field);
}
private void getRoleToActivityPredicateField(
EditConfigurationVTwo editConfiguration, VitroRequest vreq,
Map<String, FieldVTwo> fields) {
String fieldName = "roleToActivityPredicate";
//get range data type uri and range language
String stringDatatypeUri = XSD.xstring.toString();
FieldVTwo field = new FieldVTwo();
field.setName(fieldName);
field.setNewResource(false);
//queryForExisting is not being used anywhere in Field
//Not really interested in validators here
List<String> validators = new ArrayList<String>();
field.setValidators(validators);
//subjectUri and subjectClassUri are not being used in Field
field.setOptionsType("UNDEFINED");
//why isn't predicate uri set for data properties?
field.setPredicateUri(null);
field.setObjectClassUri(null);
field.setRangeDatatypeUri(null);
field.setLiteralOptions(new ArrayList<List<String>>());
//set assertions
List<String> assertions = new ArrayList<String>();
assertions.add("?role ?roleToActivityPredicate ?roleActivity .");
field.setAssertions(assertions);
fields.put(field.getName(), field);
}
//Label of "right side" of role, i.e. label for role roleIn Activity
private void getActivityLabelField(EditConfigurationVTwo editConfiguration,
VitroRequest vreq, Map<String, FieldVTwo> fields) {
@ -743,8 +881,8 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
List<String> assertions = new ArrayList<String>();
//N3ForRoleToActivity
String n3ForRoleToActivity = "@prefix core: <" + getVivoCoreNamespace() + "> ." +
"?role <" + getRoleToActivityPredicate(vreq) + "> ?roleActivity ." +
"?roleActivity <" + getActivityToRolePredicate(vreq) + "> ?role .";
"?role " + getRoleToActivityPredicate(vreq) + " ?roleActivity ." +
"?roleActivity " + getActivityToRolePredicate(vreq) + " ?role .";
assertions.add(n3ForRoleToActivity);
field.setAssertions(assertions);
fields.put(field.getName(), field);
@ -883,10 +1021,12 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
//Add preprocessor
private void addPreprocessors(EditConfigurationVTwo editConfiguration) {
//Add preprocessor that will replace the generic role to activity predicate preprocessor
//With roleIn
editConfiguration.addModelChangePreprocessor(new RoleToActivityPredicatePreprocessor());
private void addPreprocessors(EditConfigurationVTwo editConfiguration, WebappDaoFactory wadf) {
//Add preprocessor that will replace the role to activity predicate and inverse
//with correct properties based on the activity type
editConfiguration.addEditSubmissionPreprocessor(
new RoleToActivityPredicatePreprocessor(editConfiguration, wadf));
}
/**
@ -913,15 +1053,20 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
}
public String getActivityToRolePredicate(VitroRequest vreq) {
return getDefaultActivityToRolePredicate();
return getActivityToRolePlaceholder();
//return getDefaultActivityToRolePredicate();
}
//This has a default value, but note that even that will not be used
//in the update with realized in or contributes to
//Overridden when need be in subclassed generator
//Also note that for now we're going to actually going to return a
//placeholder value by default
public String getRoleToActivityPredicate(VitroRequest vreq) {
return getDefaultRoleToActivityPredicate();
return getRoleToActivityPlaceholder();
//return getDefaultRoleToActivityPredicate();
}
//Ensure when overwritten that this includes the <> b/c otherwise the query won't work
//Some values will have a default value
//activityToRolePredicate
@ -935,15 +1080,53 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
}
public List<String> getPossibleRoleToActivityPredicates() {
return ModelUtils.getPossiblePropertiesForRole();
}
public List<String> getPossibleActivityToRolePredicates() {
return ModelUtils.getPossibleInversePropertiesForRole();
}
/**
* Methods that check edit mode
*/
//Get edit mode
private EditMode getEditMode(VitroRequest vreq) {
String roleToActivityPredicate = getRoleToActivityPredicate(vreq);
List<String> roleToActivityPredicates = getPossibleRoleToActivityPredicates();
//We're making some assumptions here: That there is only one role objec tot one activity object
//pairing, i.e. the same role object can't be related to a different activity object
//That said, there should only be one role to Activity predicate linking a role to an activity
//So if
List<EditMode> editModes = new ArrayList<EditMode>();
Individual object = EditConfigurationUtils.getObjectIndividual(vreq);
EditMode mode = FrontEndEditingUtils.getEditMode(vreq, object, roleToActivityPredicate);
boolean foundEditMode = false;
boolean foundErrorMode = false;
boolean onlyRepairModes = true;
for(String predicate:roleToActivityPredicates) {
EditMode mode = FrontEndEditingUtils.getEditMode(vreq, object, predicate);
//TODO: Check what to do with repair, because unclear
if(mode != EditMode.REPAIR) {
onlyRepairModes = false;
}
if(mode == EditMode.EDIT) {
foundEditMode = true;
break;
}
if(mode == EditMode.ERROR) {
foundErrorMode = true;
break;
}
}
EditMode mode = EditMode.ADD;
//if found one edit or error, then sufficient
if(foundEditMode) mode = EditMode.EDIT;
if(foundErrorMode) mode = EditMode.ERROR;
//if all results are repair, then we need to repair
//doing this this way b/c unclear since zero statements may be returned otherwise
if(onlyRepairModes) mode = EditMode.REPAIR;
return mode;
//(mode == EditMode.ADD || mode == EditMode.REPAIR) ? "\"nonempty\"
}
@ -1022,4 +1205,35 @@ public abstract class AddRoleToPersonTwoStageGenerator implements EditConfigurat
editConfiguration.setFormSpecificData(formSpecificData);
}
//Do add filter fo rroel to activity or activity to role predicates
public boolean doAddFilterToRoleToActivityQuery(VitroRequest vreq) {
return (getRoleToActivityPredicate(vreq) == getRoleToActivityPlaceholder());
}
public boolean doAddFilterToActivityToRoleQuery(VitroRequest vreq) {
return (getActivityToRolePredicate(vreq) == getActivityToRolePlaceholder());
}
public String getFilterRoleToActivityPredicate(String predicateVar) {
String addFilter = "FILTER (";
List<String> predicates = getPossibleRoleToActivityPredicates();
List<String> filterPortions = new ArrayList<String>();
for(String p: predicates) {
filterPortions.add("(?" + predicateVar + "=<" + p + ">)");
}
addFilter += StringUtils.join(filterPortions, " || ");
addFilter += ")";
System.out.println("Add filter is " + addFilter);
return addFilter;
}
public String getRoleToActivityPlaceholder() {
return "?roleToActivityPredicate";
}
public String getActivityToRolePlaceholder() {
return "?activityToRolePredicate";
}
}

View file

@ -32,28 +32,56 @@ import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.BaseEditSubmissionPreprocessorVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.MultiValueEditSubmission;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo;
import org.vivoweb.webapp.util.ModelUtils;
public class RoleToActivityPredicatePreprocessor implements ModelChangePreprocessor {
public class RoleToActivityPredicatePreprocessor extends BaseEditSubmissionPreprocessorVTwo {
private static final Log log = LogFactory.getLog(CreateLabelFromNameFields.class.getName());
public RoleToActivityPredicatePreprocessor() {
super();
private WebappDaoFactory wadf = null;
//Need the webapp dao factory to try to figure out what the predicate should be
public RoleToActivityPredicatePreprocessor(EditConfigurationVTwo editConfig, WebappDaoFactory wadf) {
super(editConfig);
this.wadf = wadf;
}
public void preprocess(Model retractionsModel, Model additionsModel, HttpServletRequest request) {
public void preprocess(MultiValueEditSubmission submission) {
//Query for all statements using the original roleIn predicate replace
//with the appropriate roleRealizedIn or roleContributesTo
//In addition, need to ensure the inverse predicate is also set correctly
try {
VitroRequest vreq = new VitroRequest(request);
WebappDaoFactory wadf = vreq.getWebappDaoFactory();
replacePredicates(retractionsModel, wadf);
replacePredicates(additionsModel, wadf);
//Get the uris from form
Map<String, List<String>> urisFromForm = submission.getUrisFromForm();
//Get the type of the activity selected
List<String> activityTypes = urisFromForm.get("roleActivityType");
//Really should just be one here
if(activityTypes != null && activityTypes.size() > 0) {
String type = activityTypes.get(0);
ObjectProperty roleToActivityProperty = getCorrectProperty(type, wadf);
String roleToActivityPredicate = roleToActivityProperty.getURI();
String activityToRolePredicate = roleToActivityProperty.getURIInverse();
List<String> predicates = new ArrayList<String>();
predicates.add(roleToActivityPredicate);
List<String> inversePredicates = new ArrayList<String>();
inversePredicates.add(activityToRolePredicate);
//Populate the two fields in edit submission
if(urisFromForm.containsKey("roleToActivityPredicate")) {
urisFromForm.remove("roleToActivityPredicate");
}
urisFromForm.put("roleToActivityPredicate", predicates);
if(urisFromForm.containsKey("activityToRolePredicate")) {
urisFromForm.remove("activityToRolePredicate");
}
urisFromForm.put("activityToRolePredicate", inversePredicates);
}
} catch (Exception e) {
log.error("Error retrieving name values from edit submission.");
@ -61,108 +89,9 @@ public class RoleToActivityPredicatePreprocessor implements ModelChangePreproces
}
private void replacePredicates(Model inputModel, WebappDaoFactory wadf) {
executeQueryAndReplace(inputModel, wadf);
}
private void executeQueryAndReplace(Model inputModel, WebappDaoFactory wadf) {
String queryString= getRoleAndActivityQuery();
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, inputModel);
ResultSet rs = qe.execSelect();
while(rs.hasNext()) {
QuerySolution qs = rs.nextSolution();
Resource role = null, activity = null, mostSpecificType = null;
role = getResourceFromSolution(qs, "role");
activity = getResourceFromSolution(qs, "activity");
mostSpecificType = getResourceFromSolution(qs, "mostSpecificType");
//Within the input model, replace predicate linking role and activity and vice versa
//based on the most specific type of the activity
replacePredicatesForRoleAndActivity(inputModel, role, activity, mostSpecificType, wadf);
}
}
private void replacePredicatesForRoleAndActivity(Model inputModel,
Resource role, Resource activity, Resource mostSpecificType,
WebappDaoFactory wadf) {
Property roleToActivityPredicate = ResourceFactory.createProperty(getGenericRoleToActivityPredicate());
Property activityToRolePredicate = ResourceFactory.createProperty(getGenericActivityToRolePredicate());
if(role != null && activity != null && mostSpecificType != null) {
ObjectProperty newRoleToActivityProperty = getCorrectProperty(mostSpecificType.getURI(), wadf);
String propertyURI = newRoleToActivityProperty.getURI();
String inversePropertyURI = newRoleToActivityProperty.getURIInverse();
//Remove all the old statements connecting role and activity
inputModel.enterCriticalSection(Lock.WRITE);
try {
Model removeRoleToActivityModel = ModelFactory.createDefaultModel();
removeRoleToActivityModel.add(inputModel.listStatements(
role,
roleToActivityPredicate,
activity));
Model removeActivityToRoleModel = ModelFactory.createDefaultModel();
removeActivityToRoleModel.add(inputModel.listStatements(
activity,
activityToRolePredicate,
role));
//Add statements
inputModel.add(inputModel.createStatement(
role,
ResourceFactory.createProperty(propertyURI),
activity));
inputModel.add(inputModel.createStatement(
activity,
ResourceFactory.createProperty(inversePropertyURI),
role));
//Remove all roleToActivityPredicates and replace with the new predicate
inputModel.remove(removeRoleToActivityModel);
//Remove all activity to role predicates and replace with new predicate
inputModel.remove(removeActivityToRoleModel);
} catch(Exception ex) {
log.error("Exception occurred in replacing predicates in model ", ex);
} finally {
inputModel.leaveCriticalSection();
}
}
}
private ObjectProperty getCorrectProperty(String uri, WebappDaoFactory wadf) {
//ObjectProperty correctProperty = ModelUtils.getPropertyForRoleInClass(uri, wadf);
ObjectProperty op = new ObjectProperty();
op.setURI( "http://vivoweb.org/ontology/core#roleRealizedIn");
op.setURIInverse("http://vivoweb.org/ontology/core#realizedRole");
return op;
}
private String getRoleAndActivityQuery() {
String roleToActivityPredicate = getGenericRoleToActivityPredicate();
String query = "PREFIX core: <http://vivoweb.org/ontology/core#>" +
"SELECT ?role ?activity ?mostSpecificType WHERE { ?role <" + roleToActivityPredicate + "> ?activity . \n" +
"?activity <" + VitroVocabulary.RDF_TYPE + "> ?mostSpecificType. \n" +
"}";
return query;
}
private Resource getResourceFromSolution(QuerySolution qs, String variableName) {
Resource resource = null;
if(qs.get(variableName) != null && qs.get(variableName).isResource()) {
resource = qs.getResource(variableName);
}
return resource;
}
//Values used in the forms
private static String getGenericRoleToActivityPredicate() {
return "http://vivoweb.org/ontology/core#roleIn";
}
private static String getGenericActivityToRolePredicate() {
return "http://vivoweb.org/ontology/core#relatedRole";
}
ObjectProperty correctProperty = ModelUtils.getPropertyForRoleInClass(uri, wadf);
return correctProperty;
}
}

View file

@ -2,6 +2,7 @@
package org.vivoweb.webapp.util;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@ -19,10 +20,10 @@ public class ModelUtils {
private static final Log log = LogFactory.getLog(ModelUtils.class.getName());
public static final String processPropertyURI = "http://vivoweb.org/ontology/core#roleRealizedIn";
public static final String processPropertyInverseURI = "http://vivoweb.org/ontology/core#realizedRole";
public static final String nonProcessPropertyURI = "http://vivoweb.org/ontology/core#roleContributesTo";
public static final String nonProcessPropertyInverseURI = "http://vivoweb.org/ontology/core#ContributingRole";
private static final String processPropertyURI = "http://vivoweb.org/ontology/core#roleRealizedIn";
private static final String processPropertyInverseURI = "http://vivoweb.org/ontology/core#realizedRole";
private static final String nonProcessPropertyURI = "http://vivoweb.org/ontology/core#roleContributesTo";
private static final String nonProcessPropertyInverseURI = "http://vivoweb.org/ontology/core#ContributingRole";
private static Set<String> processClass = new HashSet<String>();
static {
@ -79,4 +80,19 @@ public class ModelUtils {
return op;
}
//Return list of all possible predicates
public static List<String> getPossiblePropertiesForRole() {
List<String> properties = new ArrayList<String>();
properties.add(processPropertyURI);
properties.add(nonProcessPropertyURI);
return properties;
}
public static List<String> getPossibleInversePropertiesForRole() {
List<String> properties = new ArrayList<String>();
properties.add(processPropertyInverseURI);
properties.add(nonProcessPropertyInverseURI);
return properties;
}
}