VIVO-774 clean up the handling of RoleLevel changes.

Create an interface for the Listener to act on.
If the changed object doesn't implement the interface, log a warning and do nothing, instead of throwing a ClassCastException.
The level values should never be null.
This commit is contained in:
Jim Blake 2014-10-31 12:59:44 -04:00
parent f4b3728822
commit 0bf6abb197
5 changed files with 75 additions and 37 deletions

View file

@ -15,7 +15,6 @@ import com.hp.hpl.jena.rdf.model.Model;
import edu.cornell.mannlib.vedit.beans.EditProcessObject;
import edu.cornell.mannlib.vedit.listener.ChangeListener;
import edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.RoleLevel;
import edu.cornell.mannlib.vitro.webapp.beans.Property;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
/**
@ -38,13 +37,17 @@ public class PropertyRestrictionListener implements ChangeListener {
*/
@Override
public void doDeleted(Object oldObj, EditProcessObject epo) {
Property p = (Property) oldObj;
if (oldObj instanceof RoleRestrictedProperty) {
RoleRestrictedProperty p = (RoleRestrictedProperty) oldObj;
if (anyRoleChanged(p.getHiddenFromDisplayBelowRoleLevel(),
p.getProhibitedFromUpdateBelowRoleLevel(),
p.getHiddenFromPublishBelowRoleLevel(), null, null, null)) {
log.debug("rebuilding the PropertyRestrictionPolicyHelper after deletion");
createAndSetBean();
}
} else {
log.warn("Not an instance of RoleRestrictedProperty: " + oldObj);
}
}
/**
@ -52,7 +55,8 @@ public class PropertyRestrictionListener implements ChangeListener {
*/
@Override
public void doInserted(Object newObj, EditProcessObject epo) {
Property p = (Property) newObj;
if (newObj instanceof RoleRestrictedProperty) {
RoleRestrictedProperty p = (RoleRestrictedProperty) newObj;
if (anyRoleChanged(null, null, null,
p.getHiddenFromDisplayBelowRoleLevel(),
p.getProhibitedFromUpdateBelowRoleLevel(),
@ -60,6 +64,9 @@ public class PropertyRestrictionListener implements ChangeListener {
log.debug("rebuilding the PropertyRestrictionPolicyHelper after insertion");
createAndSetBean();
}
} else {
log.warn("Not an instance of RoleRestrictedProperty: " + newObj);
}
}
/**
@ -67,8 +74,10 @@ public class PropertyRestrictionListener implements ChangeListener {
*/
@Override
public void doUpdated(Object oldObj, Object newObj, EditProcessObject epo) {
Property oldP = (Property) oldObj;
Property newP = (Property) newObj;
if (oldObj instanceof RoleRestrictedProperty
&& newObj instanceof RoleRestrictedProperty) {
RoleRestrictedProperty oldP = (RoleRestrictedProperty) oldObj;
RoleRestrictedProperty newP = (RoleRestrictedProperty) newObj;
if (anyRoleChanged(oldP.getHiddenFromDisplayBelowRoleLevel(),
oldP.getProhibitedFromUpdateBelowRoleLevel(),
oldP.getHiddenFromPublishBelowRoleLevel(),
@ -78,6 +87,10 @@ public class PropertyRestrictionListener implements ChangeListener {
log.debug("rebuilding the PropertyRestrictionPolicyHelper after update");
createAndSetBean();
}
} else {
log.warn("Not instances of RoleRestrictedProperty: " + oldObj
+ ", " + newObj);
}
}
private boolean anyRoleChanged(RoleLevel oldDisplayRole,

View file

@ -0,0 +1,17 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.auth.policy.bean;
import edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.RoleLevel;
/**
* A property or faux property whose usage can be restricted according to the
* user's role level.
*/
public interface RoleRestrictedProperty {
RoleLevel getHiddenFromDisplayBelowRoleLevel();
RoleLevel getProhibitedFromUpdateBelowRoleLevel();
RoleLevel getHiddenFromPublishBelowRoleLevel();
}

View file

@ -25,9 +25,9 @@ public class BaseResourceBean implements ResourceBean {
protected String localNameWithPrefix = null;
protected String pickListName = null;
protected RoleLevel hiddenFromDisplayBelowRoleLevel = null;
protected RoleLevel prohibitedFromUpdateBelowRoleLevel = null;
protected RoleLevel hiddenFromPublishBelowRoleLevel = null;
protected RoleLevel hiddenFromDisplayBelowRoleLevel = RoleLevel.PUBLIC;
protected RoleLevel prohibitedFromUpdateBelowRoleLevel = RoleLevel.PUBLIC;
protected RoleLevel hiddenFromPublishBelowRoleLevel = RoleLevel.PUBLIC;
public enum RoleLevel {
PUBLIC("http://vitro.mannlib.cornell.edu/ns/vitro/role#public",
@ -79,6 +79,10 @@ public class BaseResourceBean implements ResourceBean {
return shorthand;
}
public static RoleLevel notNull(RoleLevel level) {
return (level == null) ? RoleLevel.values()[0] : level;
}
public static RoleLevel getRoleByUri(String uri2) {
if (uri2 == null)
return RoleLevel.values()[0];
@ -208,13 +212,13 @@ public class BaseResourceBean implements ResourceBean {
}
@Override
public void setHiddenFromDisplayBelowRoleLevel(RoleLevel eR) {
hiddenFromDisplayBelowRoleLevel = eR;
public void setHiddenFromDisplayBelowRoleLevel(RoleLevel level) {
hiddenFromDisplayBelowRoleLevel = RoleLevel.notNull(level);
}
@Override
public void setHiddenFromDisplayBelowRoleLevelUsingRoleUri(String roleUri) {
hiddenFromDisplayBelowRoleLevel = BaseResourceBean.RoleLevel.getRoleByUri(roleUri);
hiddenFromDisplayBelowRoleLevel = RoleLevel.getRoleByUri(roleUri);
}
@Override
@ -223,13 +227,13 @@ public class BaseResourceBean implements ResourceBean {
}
@Override
public void setProhibitedFromUpdateBelowRoleLevel(RoleLevel eR) {
prohibitedFromUpdateBelowRoleLevel = eR;
public void setProhibitedFromUpdateBelowRoleLevel(RoleLevel level) {
prohibitedFromUpdateBelowRoleLevel = RoleLevel.notNull(level);
}
@Override
public void setProhibitedFromUpdateBelowRoleLevelUsingRoleUri(String roleUri) {
prohibitedFromUpdateBelowRoleLevel = BaseResourceBean.RoleLevel.getRoleByUri(roleUri);
prohibitedFromUpdateBelowRoleLevel = RoleLevel.getRoleByUri(roleUri);
}
@Override
@ -238,8 +242,8 @@ public class BaseResourceBean implements ResourceBean {
}
@Override
public void setHiddenFromPublishBelowRoleLevel(RoleLevel eR) {
hiddenFromPublishBelowRoleLevel = eR;
public void setHiddenFromPublishBelowRoleLevel(RoleLevel level) {
hiddenFromPublishBelowRoleLevel = RoleLevel.notNull(level);
}
@Override

View file

@ -6,13 +6,15 @@ import java.text.Collator;
import java.util.List;
import java.util.LinkedList;
import edu.cornell.mannlib.vitro.webapp.auth.policy.bean.RoleRestrictedProperty;
/**
* class representing a property that relates an entity (object)
* to a data literal
* @author bjl23
*
*/
public class DataProperty extends Property implements Comparable<DataProperty>, ResourceBean {
public class DataProperty extends Property implements Comparable<DataProperty>, ResourceBean, RoleRestrictedProperty {
private String name = null;
private String publicName = null;

View file

@ -17,11 +17,13 @@ import org.joda.time.DateTime;
import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
import edu.cornell.mannlib.vitro.webapp.auth.policy.bean.RoleRestrictedProperty;
/**
* a class representing an object property
*
*/
public class ObjectProperty extends Property implements Comparable<ObjectProperty>, ResourceBean, Cloneable
public class ObjectProperty extends Property implements Comparable<ObjectProperty>, ResourceBean, Cloneable, RoleRestrictedProperty
{
private static final Log log = LogFactory.getLog(ObjectProperty.class.getName());