Adding a new boolean property to ObjectProperty. NIHVIVO-118

This commit is contained in:
bdc34 2010-03-22 22:04:47 +00:00
parent b00f1c50e2
commit 87a97cd8df
7 changed files with 85 additions and 8 deletions

View file

@ -75,6 +75,8 @@ public class ObjectProperty extends Property implements Comparable<ObjectPropert
private boolean offerCreateNewOption = false;
private boolean forceStubObjectDeletion = false;
private boolean collateBySubclass = false;
public ObjectProperty() {
super();
}
@ -253,6 +255,14 @@ public class ObjectProperty extends Property implements Comparable<ObjectPropert
this.inverseFunctional = inverseFunctional;
}
public void setCollateBySubclass(boolean collate) {
collateBySubclass = collate;
}
public boolean getCollateBySubclass() {
return collateBySubclass;
}
/**
* adds a single ObjectPropertyStatement object to Property's object property statements List.
* @param e2e

View file

@ -192,6 +192,7 @@ public class PropertyRetryController extends BaseEditController {
request.setAttribute("selectFromExisting",propertyForEditing.getSelectFromExisting());
request.setAttribute("offerCreateNewOption", propertyForEditing.getOfferCreateNewOption());
request.setAttribute("forceStubObjectDeletion", propertyForEditing.getForceStubObjectDeletion());
request.setAttribute("collateBySubclass", propertyForEditing.getCollateBySubclass());
//checkboxes are pretty annoying : we don't know if someone *unchecked* a box, so we have to default to false on updates.
if (propertyForEditing.getURI() != null) {
@ -202,6 +203,7 @@ public class PropertyRetryController extends BaseEditController {
propertyForEditing.setSelectFromExisting(false);
propertyForEditing.setOfferCreateNewOption(false);
propertyForEditing.setForceStubObjectDeletion(false);
propertyForEditing.setCollateBySubclass(false);
}
epo.setFormObject(foo);

View file

@ -108,6 +108,7 @@ public class VitroVocabulary {
public static final String MASKS_PROPERTY = vitroURI + "masksProperty";
public static final String SKIP_EDIT_FORM = vitroURI + "skipEditForm";
public static final String PROPERTY_DEPENDENCYPROPERTYANNOT = vitroURI + "dependencyPropertyAnnot";
public static final String PROPERTY_COLLATEBYSUBCLASSANNOT = vitroURI + "collateBySubclassAnnot";
// ================== keyword related ==================================
@ -278,7 +279,4 @@ public class VitroVocabulary {
public static final String ONTOLOGY_PREFIX_ANNOT = vitroURI + "ontologyPrefixAnnot";
}

View file

@ -80,6 +80,7 @@ public class JenaBaseDaoCon {
protected AnnotationProperty PROPERTY_SELECTFROMEXISTINGANNOT = _constModel.createAnnotationProperty(VitroVocabulary.PROPERTY_SELECTFROMEXISTINGANNOT);
protected AnnotationProperty PROPERTY_OFFERCREATENEWOPTIONANNOT = _constModel.createAnnotationProperty(VitroVocabulary.PROPERTY_OFFERCREATENEWOPTIONANNOT);
protected AnnotationProperty PROPERTY_INPROPERTYGROUPANNOT = _constModel.createAnnotationProperty(VitroVocabulary.PROPERTY_INPROPERTYGROUPANNOT);
protected AnnotationProperty PROPERTY_COLLATEBYSUBCLASSANNOT = _constModel.createAnnotationProperty(VitroVocabulary.PROPERTY_COLLATEBYSUBCLASSANNOT);
protected OntClass PROPERTYGROUP = _constModel.createClass(VitroVocabulary.PROPERTYGROUP);
protected OntClass KEYWORD = _constModel.createClass(VitroVocabulary.KEYWORD);

View file

@ -223,6 +223,9 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp
Boolean forceStubObjectDeletionObj = getPropertyBooleanValue(op,PROPERTY_FORCESTUBDELETIONANNOT);
p.setForceStubObjectDeletion(forceStubObjectDeletionObj==null ? false : forceStubObjectDeletionObj);
Boolean collateBySubclass = getPropertyBooleanValue(op,PROPERTY_COLLATEBYSUBCLASSANNOT);
p.setCollateBySubclass(collateBySubclass==null ? false : collateBySubclass);
// the <i> thing from the old system causes sorting problems and ugliness; here is an inelegant way of dealing with it for now (Note <i>s will disappear on update)
if (p.getDomainSidePhasedOut() != null) {
p.setDomainSidePhasedOut(stripItalics(p.getDomainSidePhasedOut()));
@ -364,8 +367,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp
com.hp.hpl.jena.ontology.ObjectProperty p = ontModel.createObjectProperty(prop.getURI());
com.hp.hpl.jena.ontology.ObjectProperty inv = null;
if (hasInverse(prop)) {
System.out.println(prop.getURIInverse());
System.out.println("non-null inverse URI");
log.debug("non-null inverse URI: " +prop.getURIInverse());
errMsgStr = getWebappDaoFactory().checkURI(prop.getURIInverse());
if (errMsgStr != null) {
throw new InsertException("Unusable URI for inverse property: "+errMsgStr);
@ -603,6 +605,7 @@ public class ObjectPropertyDaoJena extends PropertyDaoJena implements ObjectProp
updatePropertyBooleanValue(p,PROPERTY_SELECTFROMEXISTINGANNOT,prop.getSelectFromExisting(),ontModel,JenaBaseDao.KEEP_ONLY_IF_FALSE);
updatePropertyBooleanValue(p,PROPERTY_OFFERCREATENEWOPTIONANNOT,prop.getOfferCreateNewOption(),ontModel,JenaBaseDao.KEEP_ONLY_IF_TRUE);
updatePropertyBooleanValue(p,PROPERTY_FORCESTUBDELETIONANNOT,prop.getForceStubObjectDeletion(),ontModel,JenaBaseDao.KEEP_ONLY_IF_TRUE);
updatePropertyBooleanValue(p,PROPERTY_COLLATEBYSUBCLASSANNOT,prop.getCollateBySubclass(),ontModel,JenaBaseDao.KEEP_ONLY_IF_TRUE);
try {
p.removeAll(PROPERTY_INPROPERTYGROUPANNOT);
if (prop.getGroupURI() != null && prop.getGroupURI().length()>0) {

View file

@ -0,0 +1,50 @@
package edu.cornell.mannlib.vitro.webapp.dao.jena;
import org.junit.Assert;
import org.junit.Test;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty;
import edu.cornell.mannlib.vitro.webapp.dao.InsertException;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
public class ObjectPropertyDaoJenaTest {
@Test
public void testCollateBySubclass(){
/* Check that we can save collateBySubclass */
OntModel model = ModelFactory.createOntologyModel();
WebappDaoFactory wdf = new WebappDaoFactoryJena(model);
ObjectProperty op1 = new ObjectProperty();
String propURI = "http://example.com/testObjectProp" ;
op1.setURI(propURI);
Assert.assertFalse(op1.getCollateBySubclass());
try {
wdf.getObjectPropertyDao().insertObjectProperty(op1);
ObjectProperty op2 = wdf.getObjectPropertyDao().getObjectPropertyByURI(propURI);
Assert.assertNotNull(op2);
Assert.assertFalse(op2.getCollateBySubclass());
op2.setCollateBySubclass(true);
wdf.getObjectPropertyDao().updateObjectProperty(op2);
ObjectProperty op3 = wdf.getObjectPropertyDao().getObjectPropertyByURI(propURI);
Assert.assertNotNull(op3);
Assert.assertTrue(op3.getCollateBySubclass());
op3.setCollateBySubclass(false);
wdf.getObjectPropertyDao().updateObjectProperty(op3);
ObjectProperty op4 = wdf.getObjectPropertyDao().getObjectPropertyByURI(propURI);
Assert.assertNotNull(op4);
Assert.assertFalse(op4.getCollateBySubclass());
} catch (InsertException e) {
Assert.fail(e.getMessage());
}
}
}

View file

@ -151,6 +151,19 @@
<font size="2" color="red"><form:error name="ObjectIndividualSortPropertyURI"/></font>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="5">
<c:choose>
<c:when test="${collateBySubclass}">
<input name="CollateBySubclass" type="checkbox" value="TRUE" checked="checked"/>collate by subclass
</c:when>
<c:otherwise>
<input name="CollateBySubclass" type="checkbox" value="TRUE"/>collate by subclass
</c:otherwise>
</c:choose>
<font size="2" color="red"><form:error name="CollateBySubclass"/></font>
</td>
</tr>
<tr class="editformcell">
<td valign="bottom" colspan="1">
<c:choose>