NIHVIVO-1332 Refactoring to move creation of an EditingHelper object to GroupedPropertyList, so it only has to be created once per page rather than once per property or link.
This commit is contained in:
parent
cce9d6a0d2
commit
d96f24ba1b
11 changed files with 66 additions and 58 deletions
|
@ -37,10 +37,11 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
|
|||
|
||||
private SortedMap<String, List<ObjectPropertyStatementTemplateModel>> subclasses;
|
||||
|
||||
CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq)
|
||||
CollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject,
|
||||
VitroRequest vreq, EditingHelper editLinkHelper)
|
||||
throws InvalidConfigurationException {
|
||||
|
||||
super(op, subject, vreq);
|
||||
super(op, subject, vreq, editLinkHelper);
|
||||
|
||||
String invalidConfigMessage = checkConfiguration();
|
||||
if ( ! invalidConfigMessage.isEmpty() ) {
|
||||
|
@ -56,12 +57,12 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
|
|||
List<Map<String, String>> statementData =
|
||||
opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString());
|
||||
|
||||
/* Apply postprocessing */
|
||||
/* Apply post-processing */
|
||||
postprocess(statementData, wdf);
|
||||
|
||||
/* Collate the data */
|
||||
Map<String, List<ObjectPropertyStatementTemplateModel>> unsortedSubclasses =
|
||||
collate(subjectUri, propertyUri, statementData, vreq);
|
||||
collate(subjectUri, propertyUri, statementData, vreq, editLinkHelper);
|
||||
|
||||
/* Sort by subclass name */
|
||||
Comparator<String> comparer = new Comparator<String>() {
|
||||
|
@ -95,8 +96,8 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
|
|||
return "";
|
||||
}
|
||||
|
||||
private Map<String, List<ObjectPropertyStatementTemplateModel>> collate(String subjectUri,
|
||||
String propertyUri, List<Map<String, String>> statementData, VitroRequest vreq) {
|
||||
private Map<String, List<ObjectPropertyStatementTemplateModel>> collate(String subjectUri, String propertyUri,
|
||||
List<Map<String, String>> statementData, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
|
||||
Map<String, List<ObjectPropertyStatementTemplateModel>> subclassMap =
|
||||
new HashMap<String, List<ObjectPropertyStatementTemplateModel>>();
|
||||
|
@ -115,7 +116,8 @@ public class CollatedObjectPropertyTemplateModel extends ObjectPropertyTemplateM
|
|||
String subclassName = getSubclassName(subclassUri, vreq);
|
||||
subclassMap.put(subclassName, currentList);
|
||||
}
|
||||
currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, objectKey, map, vreq));
|
||||
currentList.add(new ObjectPropertyStatementTemplateModel(subjectUri,
|
||||
propertyUri, objectKey, map, editLinkHelper));
|
||||
}
|
||||
return subclassMap;
|
||||
}
|
||||
|
|
|
@ -13,9 +13,11 @@ public class DataPropertyStatementTemplateModel extends BaseTemplateModel {
|
|||
private static final Log log = LogFactory.getLog(DataPropertyStatementTemplateModel.class);
|
||||
|
||||
private DataPropertyStatement statement;
|
||||
private EditingHelper editLinkHelper;
|
||||
|
||||
DataPropertyStatementTemplateModel(DataPropertyStatement statement) {
|
||||
DataPropertyStatementTemplateModel(DataPropertyStatement statement, EditingHelper editLinkHelper) {
|
||||
this.statement = statement;
|
||||
this.editLinkHelper = editLinkHelper;
|
||||
}
|
||||
|
||||
/* Access methods for templates */
|
||||
|
|
|
@ -20,10 +20,13 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
|
|||
private static final Log log = LogFactory.getLog(DataPropertyTemplateModel.class);
|
||||
|
||||
private static final String TYPE = "data";
|
||||
|
||||
private List<DataPropertyStatementTemplateModel> statements;
|
||||
private EditingHelper editLinkHelper;
|
||||
|
||||
DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
super(dp, editLinkHelper);
|
||||
|
||||
DataPropertyTemplateModel(DataProperty dp, Individual subject, VitroRequest vreq) {
|
||||
super(dp);
|
||||
setName(dp.getPublicName());
|
||||
|
||||
// Get the data property statements via a sparql query
|
||||
|
@ -31,7 +34,7 @@ public class DataPropertyTemplateModel extends PropertyTemplateModel {
|
|||
List<DataPropertyStatement> dpStatements = dpDao.getDataPropertyStatementsForIndividualByProperty(subject, dp);
|
||||
statements = new ArrayList<DataPropertyStatementTemplateModel>(dpStatements.size());
|
||||
for (DataPropertyStatement dps : dpStatements) {
|
||||
statements.add(new DataPropertyStatementTemplateModel(dps));
|
||||
statements.add(new DataPropertyStatementTemplateModel(dps, editLinkHelper));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,20 +14,19 @@ import edu.cornell.mannlib.vitro.webapp.auth.policy.RequestPolicyList;
|
|||
import edu.cornell.mannlib.vitro.webapp.auth.policy.ServletPolicyList;
|
||||
import edu.cornell.mannlib.vitro.webapp.auth.policy.ifaces.PolicyIface;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel;
|
||||
|
||||
public class EditLinkHelper {
|
||||
public class EditingHelper {
|
||||
|
||||
private static final Log log = LogFactory.getLog(EditLinkHelper.class);
|
||||
private static final Log log = LogFactory.getLog(EditingHelper.class);
|
||||
|
||||
private VitroRequest vreq;
|
||||
private ServletContext context;
|
||||
private ServletContext servletContext;
|
||||
private PolicyIface policy;
|
||||
private IdentifierBundle ids;
|
||||
|
||||
protected EditLinkHelper(VitroRequest vreq) {
|
||||
protected EditingHelper(VitroRequest vreq, ServletContext servletContext) {
|
||||
this.vreq = vreq;
|
||||
this.context = BaseTemplateModel.getServletContext();
|
||||
this.servletContext = servletContext;
|
||||
setPolicy();
|
||||
setIds();
|
||||
}
|
||||
|
@ -35,7 +34,7 @@ public class EditLinkHelper {
|
|||
private void setPolicy() {
|
||||
policy = RequestPolicyList.getPolicies(vreq);
|
||||
if( policy == null || ( policy instanceof PolicyList && ((PolicyList)policy).size() == 0 )){
|
||||
policy = ServletPolicyList.getPolicies( context );
|
||||
policy = ServletPolicyList.getPolicies( servletContext );
|
||||
if( policy == null || ( policy instanceof PolicyList && ((PolicyList)policy).size() == 0 )){
|
||||
log.error("No policy found in request at " + RequestPolicyList.POLICY_LIST);
|
||||
}
|
||||
|
@ -44,7 +43,7 @@ public class EditLinkHelper {
|
|||
|
||||
private void setIds() {
|
||||
ids = (IdentifierBundle)ServletIdentifierBundleFactory
|
||||
.getIdBundleForRequest(vreq, vreq.getSession(), context);
|
||||
.getIdBundleForRequest(vreq, vreq.getSession(), servletContext);
|
||||
|
||||
if (ids == null) {
|
||||
log.error("No IdentifierBundle objects for request");
|
|
@ -54,6 +54,11 @@ public class GroupedPropertyList extends BaseTemplateModel {
|
|||
|
||||
// Determine whether we're editing or not.
|
||||
boolean userCanEditThisProfile = getEditingStatus();
|
||||
|
||||
EditingHelper editLinkHelper = null;
|
||||
if (userCanEditThisProfile) {
|
||||
editLinkHelper = new EditingHelper(vreq, getServletContext());
|
||||
}
|
||||
|
||||
// Create the property list for the subject. The properties will be put into groups later.
|
||||
List<Property> propertyList = new ArrayList<Property>();
|
||||
|
@ -101,7 +106,7 @@ public class GroupedPropertyList extends BaseTemplateModel {
|
|||
// Build the template data model from the groupList
|
||||
groups = new ArrayList<PropertyGroupTemplateModel>(propertyGroupList.size());
|
||||
for (PropertyGroup pg : propertyGroupList) {
|
||||
groups.add(new PropertyGroupTemplateModel(vreq, pg, subject));
|
||||
groups.add(new PropertyGroupTemplateModel(vreq, pg, subject, editLinkHelper));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -13,7 +13,6 @@ import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestedAct
|
|||
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.propstmt.EditObjPropStmt;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatementImpl;
|
||||
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.web.templatemodels.BaseTemplateModel;
|
||||
|
@ -24,37 +23,30 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel {
|
|||
|
||||
private static final String EDIT_PATH = "edit/editRequestDispatch.jsp";
|
||||
|
||||
// RY WE may want to instead store the ObjectPropertyStatement
|
||||
private String subjectUri; // we'll use these to make the edit links
|
||||
private String propertyUri;
|
||||
private String objectUri;
|
||||
private Map<String, String> data;
|
||||
private VitroRequest vreq;
|
||||
private ObjectPropertyStatement objectPropertyStatement;
|
||||
private EditLinkHelper editLinkHelper;
|
||||
|
||||
private EditingHelper editLinkHelper;
|
||||
private String objectUri = null;
|
||||
private ObjectPropertyStatement objectPropertyStatement = null;
|
||||
|
||||
|
||||
ObjectPropertyStatementTemplateModel(String subjectUri, String propertyUri,
|
||||
String objectKey, Map<String, String> data, VitroRequest vreq) {
|
||||
String objectKey, Map<String, String> data, EditingHelper editLinkHelper) {
|
||||
this.subjectUri = subjectUri;
|
||||
this.propertyUri = propertyUri;
|
||||
this.objectUri = data.get(objectKey);
|
||||
this.data = data;
|
||||
this.vreq = vreq;
|
||||
// Don't set these until needed (when edit links are requested)
|
||||
this.objectPropertyStatement = null;
|
||||
this.editLinkHelper = null;
|
||||
}
|
||||
|
||||
private void doEditingLinkPrep() {
|
||||
// Assign the objectPropertyStatement and editLinkHelper to instance variables, so we don't
|
||||
// have to do it twice, once for edit link and once for delete link.
|
||||
if (objectPropertyStatement == null) {
|
||||
this.editLinkHelper = editLinkHelper;
|
||||
|
||||
// If the editLinkHelper is non-null, we are in edit mode, so create the necessary objects.
|
||||
if (this.editLinkHelper != null) {
|
||||
objectUri = data.get(objectKey);
|
||||
objectPropertyStatement = new ObjectPropertyStatementImpl(subjectUri, propertyUri, objectUri);
|
||||
}
|
||||
if (editLinkHelper == null) {
|
||||
editLinkHelper = new EditLinkHelper(vreq);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Access methods for templates */
|
||||
|
||||
|
@ -64,7 +56,6 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel {
|
|||
|
||||
public String getEditUrl() {
|
||||
String editUrl = "";
|
||||
doEditingLinkPrep();
|
||||
RequestedAction action = new EditObjPropStmt(objectPropertyStatement);
|
||||
PolicyDecision decision = editLinkHelper.getPolicy().isAuthorized(editLinkHelper.getIds(), action);
|
||||
if (decision != null && decision.getAuthorized() == Authorization.AUTHORIZED) {
|
||||
|
@ -80,7 +71,6 @@ public class ObjectPropertyStatementTemplateModel extends BaseTemplateModel {
|
|||
|
||||
public String getDeleteUrl() {
|
||||
String deleteUrl = "";
|
||||
doEditingLinkPrep();
|
||||
return deleteUrl;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,7 +48,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
|
|||
* ORDER BY ?subclass ?dateTimeEnd
|
||||
* ORDER BY DESC(?subclass) DESC(?dateTimeEnd)
|
||||
*/
|
||||
Pattern.compile("ORDER\\s+BY\\s+((DESC\\()?\\?subclass\\)?\\s+)?DESC\\s*\\(\\s*\\?" + END_DATE_TIME_VARIABLE + "\\)", Pattern.CASE_INSENSITIVE);
|
||||
Pattern.compile("ORDER\\s+BY\\s+((DESC\\()?\\?subclass\\)?\\s+)?DESC\\s*\\(\\s*\\?" +
|
||||
END_DATE_TIME_VARIABLE + "\\)", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
private static String KEY_SUBJECT = "subject";
|
||||
private static final String KEY_PROPERTY = "property";
|
||||
|
@ -60,8 +61,8 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
|
|||
private PropertyListConfig config;
|
||||
private String objectKey;
|
||||
|
||||
ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq) {
|
||||
super(op);
|
||||
ObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
super(op, editLinkHelper);
|
||||
setName(op.getDomainPublic());
|
||||
|
||||
// Get the config for this object property
|
||||
|
@ -105,16 +106,17 @@ public abstract class ObjectPropertyTemplateModel extends PropertyTemplateModel
|
|||
return object;
|
||||
}
|
||||
|
||||
protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq) {
|
||||
protected static ObjectPropertyTemplateModel getObjectPropertyTemplateModel(ObjectProperty op,
|
||||
Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
if (op.getCollateBySubclass()) {
|
||||
try {
|
||||
return new CollatedObjectPropertyTemplateModel(op, subject, vreq);
|
||||
return new CollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper);
|
||||
} catch (InvalidConfigurationException e) {
|
||||
log.error(e);
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq);
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper);
|
||||
}
|
||||
} else {
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq);
|
||||
return new UncollatedObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel {
|
|||
private String name;
|
||||
private List<PropertyTemplateModel> properties;
|
||||
|
||||
PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, Individual subject) {
|
||||
PropertyGroupTemplateModel(VitroRequest vreq, PropertyGroup group, Individual subject, EditingHelper editLinkHelper) {
|
||||
this.name = group.getName();
|
||||
|
||||
List<Property> propertyList = group.getPropertyList();
|
||||
|
@ -32,9 +32,9 @@ public class PropertyGroupTemplateModel extends BaseTemplateModel {
|
|||
for (Property p : propertyList) {
|
||||
if (p instanceof ObjectProperty) {
|
||||
ObjectProperty op = (ObjectProperty)p;
|
||||
properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq));
|
||||
properties.add(ObjectPropertyTemplateModel.getObjectPropertyTemplateModel(op, subject, vreq, editLinkHelper));
|
||||
} else {
|
||||
properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq));
|
||||
properties.add(new DataPropertyTemplateModel((DataProperty)p, subject, vreq, editLinkHelper));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,13 +18,15 @@ public abstract class PropertyTemplateModel extends BaseTemplateModel {
|
|||
private String name;
|
||||
private String uri;
|
||||
protected Property property; // needed to get the edit links
|
||||
protected EditingHelper editLinkHelper;
|
||||
|
||||
PropertyTemplateModel(Property property) {
|
||||
PropertyTemplateModel(Property property, EditingHelper editLinkHelper) {
|
||||
// Do in subclass constructor. The label has not been set on the property, and getting the
|
||||
// label differs between object and data properties.
|
||||
// this.name = property.getLabel();
|
||||
this.uri = property.getURI();
|
||||
this.property = property;
|
||||
this.editLinkHelper = editLinkHelper;
|
||||
}
|
||||
|
||||
protected void setName(String name) {
|
||||
|
|
|
@ -22,15 +22,16 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat
|
|||
|
||||
private List<ObjectPropertyStatementTemplateModel> statements;
|
||||
|
||||
UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq) {
|
||||
super(op, subject, vreq);
|
||||
UncollatedObjectPropertyTemplateModel(ObjectProperty op, Individual subject, VitroRequest vreq, EditingHelper editLinkHelper) {
|
||||
super(op, subject, vreq, editLinkHelper);
|
||||
|
||||
/* Get the data */
|
||||
WebappDaoFactory wdf = vreq.getWebappDaoFactory();
|
||||
ObjectPropertyStatementDao opDao = wdf.getObjectPropertyStatementDao();
|
||||
String subjectUri = subject.getURI();
|
||||
String propertyUri = op.getURI();
|
||||
List<Map<String, String>> statementData = opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString());
|
||||
List<Map<String, String>> statementData =
|
||||
opDao.getObjectPropertyStatementsForIndividualByProperty(subjectUri, propertyUri, getQueryString());
|
||||
|
||||
/* Apply postprocessing */
|
||||
postprocess(statementData, wdf);
|
||||
|
@ -39,7 +40,8 @@ public class UncollatedObjectPropertyTemplateModel extends ObjectPropertyTemplat
|
|||
statements = new ArrayList<ObjectPropertyStatementTemplateModel>(statementData.size());
|
||||
String objectKey = getObjectKey();
|
||||
for (Map<String, String> map : statementData) {
|
||||
statements.add(new ObjectPropertyStatementTemplateModel(subjectUri, propertyUri, objectKey, map, vreq));
|
||||
statements.add(new ObjectPropertyStatementTemplateModel(subjectUri,
|
||||
propertyUri, objectKey, map, editLinkHelper));
|
||||
}
|
||||
|
||||
postprocessStatementList(statements);
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
<ul class="pagination">
|
||||
<#list pages as page>
|
||||
<#if page.selected><li class="selectedNavPage">${page.text}</li>
|
||||
<#-- RY Ideally the urls would be generated by the controller; see search-pagedResults.ftl -->
|
||||
<#else><li><a href="${urls.base}/individuallist?${page.param}&vclassId=${vclassId?url}">${page.text}</a></li>
|
||||
</#if>
|
||||
</#list>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue