diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java index ce98d1dec..437cb87da 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java @@ -179,10 +179,9 @@ public class SiteAdminController extends FreemarkerHttpServlet { urls.put("objectPropertyHierarchy", urlBuilder.getPortalUrl("/showObjectPropertyHierarchy", new ParamMap("iffRoot", "true"))); map.put("urls", urls); - // RY Make sure this works for true, false, and undefined values of the param String verbose = vreq.getParameter("verbose"); boolean verbosePropertyValue = "true".equals(verbose) ? true : false; - vreq.getSession().setAttribute("verbosePropertyListing", verbosePropertyValue); + vreq.getSession().setAttribute("verbosePropertyDisplay", verbosePropertyValue); Map verbosePropertyForm = new HashMap(); verbosePropertyForm.put("verboseFieldValue", String.valueOf(!verbosePropertyValue)); // the form toggles the current value diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java index 6fd50ebdf..8675fa400 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/UrlBuilder.java @@ -35,11 +35,13 @@ public class UrlBuilder { AUTHENTICATE("/authenticate"), BROWSE("/browse"), CONTACT("/contact"), + DATA_PROPERTY_EDIT("/datapropEdit"), INDIVIDUAL("/individual"), INDIVIDUAL_EDIT("/entityEdit"), INDIVIDUAL_LIST("/individuallist"), LOGIN("/login"), LOGOUT("/logout"), + OBJECT_PROPERTY_EDIT("/propertyEdit"), SEARCH("/search"), SITE_ADMIN("/siteAdmin"), TERMS_OF_USE("/termsOfUse"), diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java index 9c6a21fec..ebf925b8b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/DataPropertyTemplateModel.java @@ -15,9 +15,11 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAct import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddDataPropStmt; import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.beans.Property; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route; import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyStatementDao; public class DataPropertyTemplateModel extends PropertyTemplateModel { @@ -32,8 +34,9 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingPolicyHelper policyHelper, List populatedDataPropertyList) { - super(dp, subject, policyHelper); + super(dp, subject, policyHelper, vreq); setName(dp.getPublicName()); + statements = new ArrayList(); // If the property is populated, get the data property statements via a sparql query @@ -62,6 +65,16 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel { } } + @Override + protected Object getPropertyDisplayTier(Property p) { + return ((DataProperty)p).getDisplayTier(); + } + + @Override + protected Route getPropertyEditRoute() { + return Route.DATA_PROPERTY_EDIT; + } + /* Access methods for templates */ public String getType() { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditingPolicyHelper.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditingPolicyHelper.java index c91e2a0ed..5b716351f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditingPolicyHelper.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/EditingPolicyHelper.java @@ -7,6 +7,7 @@ import javax.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import edu.cornell.mannlib.vedit.beans.LoginStatusBean; import edu.cornell.mannlib.vitro.webapp.auth.identifier.IdentifierBundle; import edu.cornell.mannlib.vitro.webapp.auth.identifier.ServletIdentifierBundleFactory; import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyList; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java index 9d94f73b3..6018a5dff 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java @@ -46,7 +46,7 @@ public class GroupedPropertyList extends BaseTemplateModel { private static final int MAX_GROUP_DISPLAY_RANK = 99; @SuppressWarnings("serial") - private static final List VITRO_PROPS_TO_ADD_TO_LIST = new ArrayList() {{ + protected static final List VITRO_PROPS_TO_ADD_TO_LIST = new ArrayList() {{ add(VitroVocabulary.PRIMARY_LINK); add(VitroVocabulary.ADDITIONAL_LINK); add(VitroVocabulary.IND_MAIN_IMAGE); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java index 10a0b1ae5..39b68a8ad 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/ObjectPropertyTemplateModel.java @@ -5,7 +5,6 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; import java.io.File; import java.io.IOException; import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -23,17 +22,19 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; -import org.w3c.dom.Node; import org.w3c.dom.NodeList; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAction; import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.AddObjectPropStmt; +import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; +import edu.cornell.mannlib.vitro.webapp.beans.Property; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMap; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import freemarker.cache.TemplateLoader; @@ -94,12 +95,9 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel EditingPolicyHelper policyHelper) throws InvalidConfigurationException { - super(op, subject, policyHelper); - - log.debug("Creating template model for object property " + op.getURI()); - + super(op, subject, policyHelper, vreq); setName(op.getDomainPublic()); - + // Get the config for this object property try { config = new PropertyListConfig(op, vreq); @@ -120,6 +118,16 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel } } + @Override + protected Object getPropertyDisplayTier(Property p) { + return ((ObjectProperty)p).getDomainDisplayTier(); + } + + @Override + protected Route getPropertyEditRoute() { + return Route.OBJECT_PROPERTY_EDIT; + } + protected ConfigError checkQuery(String queryString) { if (StringUtils.isBlank(queryString)) { return ConfigError.NO_SELECT_QUERY; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java index fc6ee8d6d..e39a36634 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/PropertyTemplateModel.java @@ -2,11 +2,18 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; +import java.util.HashMap; +import java.util.Map; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import edu.cornell.mannlib.vedit.beans.LoginStatusBean; import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.Property; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; /** @@ -19,16 +26,17 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { private String name; private String localName; protected String propertyUri; + protected Map verboseDisplay = null; // For editing protected String subjectUri = null; protected boolean addAccess = false; - PropertyTemplateModel(Property property, Individual subject, EditingPolicyHelper policyHelper) { + PropertyTemplateModel(Property property, Individual subject, EditingPolicyHelper policyHelper, VitroRequest vreq) { propertyUri = property.getURI(); localName = property.getLocalName(); log.debug("Local name for property " + propertyUri + ": " + localName); - + setVerboseDisplayValues(property, vreq); // Do in subclass constructor. The label has not been set on the property, and the // means of getting the label differs between object and data properties. // this.name = property.getLabel(); @@ -38,6 +46,35 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { } } + protected void setVerboseDisplayValues(Property property, VitroRequest vreq) { + // No verbose display for these properties + if (GroupedPropertyList.VITRO_PROPS_TO_ADD_TO_LIST.contains(property)) { + return; + } + Boolean verboseDisplayFlag = (Boolean) vreq.getSession().getAttribute("verbosePropertyDisplay"); + if ( ! Boolean.TRUE.equals(verboseDisplayFlag)) { + return; + } + + LoginStatusBean loginStatusBean = LoginStatusBean.getBean(vreq); + if (! loginStatusBean.isLoggedInAtLeast(LoginStatusBean.CURATOR)) { + return; + } + + verboseDisplay = new HashMap(); + verboseDisplay.put("displayLevel", property.getHiddenFromDisplayBelowRoleLevel().getLabel()); + verboseDisplay.put("updateLevel", property.getProhibitedFromUpdateBelowRoleLevel().getLabel()); + verboseDisplay.put("localName", property.getLocalNameWithPrefix()); + verboseDisplay.put("displayTier", getPropertyDisplayTier(property)); + + UrlBuilder urlBuilder = new UrlBuilder(vreq.getPortal()); + String editUrl = urlBuilder.getPortalUrl(getPropertyEditRoute(), "uri", property.getURI()); + verboseDisplay.put("propertyEditUrl", editUrl); + } + + protected abstract Object getPropertyDisplayTier(Property p); + protected abstract Route getPropertyEditRoute(); + protected void setName(String name) { this.name = name; } @@ -60,5 +97,9 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel { } public abstract String getAddUrl(); + + public Map getVerboseDisplay() { + return verboseDisplay; + } } diff --git a/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl b/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl index fe83651a8..f24c0ecdc 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/individual-properties.ftl @@ -23,7 +23,7 @@ <#list group.properties as property>
<#-- Property display name --> -

${property.name} <@p.addLink property editable />

+

${property.name} <@p.addLink property editable /> <@p.verboseDisplay property />

<#-- List the statements for each property -->
    <#-- data property --> diff --git a/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl b/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl index ecb623005..4ea5ced93 100644 --- a/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl +++ b/webapp/web/templates/freemarker/body/partials/individual/lib-properties.ftl @@ -65,7 +65,7 @@ Assumes property is non-null. --> <#macro objectPropertyListing property editable template=property.template> <#local localName = property.localName> -

    ${property.name?capitalize} <@addLink property editable />

    +

    ${property.name?capitalize} <@addLink property editable /> <@verboseDisplay property />

      <@p.objectProperty property editable />
    @@ -83,7 +83,7 @@ name will be used as the label. --> <#macro addLinkWithLabel property editable label="${property.name?capitalize}"> <#local addLink><@addLink property editable label /> <#if addLink?has_content> -

    ${label} ${addLink}

    +

    ${label} ${addLink} <@verboseDisplay property />

    @@ -97,7 +97,7 @@ name will be used as the label. --> <#macro propertyLabel property label="${property.name?capitalize}"> -

    ${label}

    +

    ${label} <@verboseDisplay property />

    <#macro propertyListItem property statement editable> @@ -128,6 +128,19 @@ name will be used as the label. --> +<#macro verboseDisplay property> + <#local verboseDisplay = property.verboseDisplay!> + <#if verboseDisplay?has_content> + + ${verboseDisplay.localName} + (${property.type?lower_case} property); + display tier: ${verboseDisplay.displayTier} within group; + display level: ${verboseDisplay.displayLevel}; + update level: ${verboseDisplay.updateLevel} + + + + <#----------------------------------------------------------------------------- Macros for specific properties diff --git a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl index 8ba75a0e8..619543bca 100644 --- a/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl +++ b/webapp/web/templates/freemarker/body/siteAdmin/siteAdmin-ontologyEditor.ftl @@ -33,14 +33,12 @@
  • Property groups
- <#-- NIHVIVO-1590 This feature temporarily disabled in v1.2 due to time constraints. <#assign formId = "verbosePropertyForm">
Verbose property display for this session is ${ontologyEditor.verbosePropertyForm.currentValue}.
- --> \ No newline at end of file