From 38836c15c9a3c07cc9609f513c8877033b10b705 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Tue, 24 May 2016 14:33:45 +0100 Subject: [PATCH 1/9] [VIVO-1245] Cleanup of IndividualSearchResult --- .../BaseIndividualSearchResult.java | 70 ----------------- .../searchresult/IndividualSearchResult.java | 78 ++++++++++++++++++- 2 files changed, 75 insertions(+), 73 deletions(-) delete mode 100644 api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/BaseIndividualSearchResult.java diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/BaseIndividualSearchResult.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/BaseIndividualSearchResult.java deleted file mode 100644 index 7fa0fce6d..000000000 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/BaseIndividualSearchResult.java +++ /dev/null @@ -1,70 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.web.templatemodels.searchresult; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import edu.cornell.mannlib.vitro.webapp.beans.Individual; -import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; -import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao; -import edu.cornell.mannlib.vitro.webapp.web.ViewFinder; -import edu.cornell.mannlib.vitro.webapp.web.ViewFinder.ClassView; -import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; - -public abstract class BaseIndividualSearchResult extends BaseTemplateModel { - - private static final Log log = LogFactory.getLog(BaseIndividualSearchResult.class); - - protected final VitroRequest vreq; - protected final Individual individual; - - public BaseIndividualSearchResult(Individual individual, VitroRequest vreq) { - this.vreq = vreq; - this.individual = individual; - } - - protected String getView(ClassView view) { - ViewFinder vf = new ViewFinder(view); - return vf.findClassView(individual, vreq); - } - - public static List getIndividualTemplateModels(List individuals, VitroRequest vreq) { - List models = new ArrayList(individuals.size()); - for (Individual individual : individuals) { - models.add(new IndividualSearchResult(individual, vreq)); - } - return models; - } - - /* Template properties */ - - public String getUri() { - return individual.getURI(); - } - - public String getProfileUrl() { - return UrlBuilder.getIndividualProfileUrl(individual, vreq); - } - - public String getName() { - return individual.getName(); - } - - public Collection getMostSpecificTypes() { - ObjectPropertyStatementDao opsDao = vreq.getWebappDaoFactory().getObjectPropertyStatementDao(); - Map types = opsDao.getMostSpecificTypesInClassgroupsForIndividual(individual.getURI()); - return types.values(); - } - - public String getSnippet() { - return individual.getSearchSnippet(); - } - -} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java index 01204ad00..9c72e2d71 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java @@ -2,18 +2,90 @@ package edu.cornell.mannlib.vitro.webapp.web.templatemodels.searchresult; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; +import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyStatementDao; +import edu.cornell.mannlib.vitro.webapp.web.ViewFinder; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.BaseTemplateModel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -public class IndividualSearchResult extends BaseIndividualSearchResult { +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +public class IndividualSearchResult extends BaseTemplateModel { private static final Log log = LogFactory.getLog(IndividualSearchResult.class); - + + private static Class resultClass = IndividualSearchResult.class; + + protected final VitroRequest vreq; + protected final Individual individual; + public IndividualSearchResult(Individual individual, VitroRequest vreq) { - super(individual, vreq); + this.vreq = vreq; + this.individual = individual; } + protected String getView(ViewFinder.ClassView view) { + ViewFinder vf = new ViewFinder(view); + return vf.findClassView(individual, vreq); + } + + public static List getIndividualTemplateModels(List individuals, VitroRequest vreq) { + List models = new ArrayList(individuals.size()); + for (Individual individual : individuals) { +// models.add(new IndividualSearchResult(individual, vreq)); + + try { + Constructor ctor = resultClass.getDeclaredConstructor(Individual.class, VitroRequest.class); + models.add((IndividualSearchResult)ctor.newInstance(individual, vreq)); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + return models; + } + + /* Template properties */ + + public String getUri() { + return individual.getURI(); + } + + public String getProfileUrl() { + return UrlBuilder.getIndividualProfileUrl(individual, vreq); + } + + public String getName() { + return individual.getName(); + } + + public Collection getMostSpecificTypes() { + ObjectPropertyStatementDao opsDao = vreq.getWebappDaoFactory().getObjectPropertyStatementDao(); + Map types = opsDao.getMostSpecificTypesInClassgroupsForIndividual(individual.getURI()); + return types.values(); + } + + public String getSnippet() { + return individual.getSearchSnippet(); + } + + protected static void registerResultClass(Class clazz) { + if (IndividualSearchResult.class.isAssignableFrom(clazz)) { + resultClass = clazz; + } + } } \ No newline at end of file From b285e0d62bda85528ff7bda69443d9bbc80e7cf4 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Tue, 24 May 2016 17:05:15 +0100 Subject: [PATCH 2/9] [VIVO-1245] Cleanup of DefaultAddMissingIndividualFormGenerator --- .../n3editing/VTwo/JspToGeneratorMapping.java | 2 +- ...aultAddMissingIndividualFormGenerator.java | 58 ++++++++++++++----- .../DefaultObjectPropertyFormGenerator.java | 2 +- .../searchresult/IndividualSearchResult.java | 8 +-- 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java index c6f2e1029..7d860c146 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java @@ -30,7 +30,7 @@ public class JspToGeneratorMapping { map.put("dateTimeValueForm.jsp", edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DateTimeValueFormGenerator.class.getName()); map.put("defaultAddMissingIndividualForm.jsp", - edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultAddMissingIndividualFormGenerator.class.getName()); + edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultAddMissingIndividualFormGenerator.getImplementationName()); map.put("defaultDatapropForm.jsp", edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultDataPropertyFormGenerator.class.getName()); map.put("defaultObjPropForm.jsp", diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java index dc9ef5acf..ab6380235 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java @@ -10,6 +10,7 @@ import java.util.Map; import javax.servlet.http.HttpSession; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.searchresult.IndividualSearchResult; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -34,8 +35,7 @@ import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess; * */ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurationGenerator { - - private Log log = LogFactory.getLog(DefaultAddMissingIndividualFormGenerator.class); + private static final Log log = LogFactory.getLog(DefaultAddMissingIndividualFormGenerator.class); private boolean isObjectPropForm = false; private String subjectUri = null; private String predicateUri = null; @@ -43,16 +43,35 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati private String template = "defaultAddMissingIndividualForm.ftl"; private static String createCommand = "create"; - private static String objectVarName = "newIndividual"; + protected static String objectVarName = "newIndividual"; private static HashMap defaultsForXSDtypes ; - static { + + private static Class defaultGeneratorClass = DefaultAddMissingIndividualFormGenerator.class; + + static { defaultsForXSDtypes = new HashMap(); //defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","2001-01-01T12:00:00"); defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","#Unparseable datetime defaults to now"); - } + } + + protected DefaultAddMissingIndividualFormGenerator() { } + + public static final DefaultAddMissingIndividualFormGenerator create() { + try { + return (DefaultAddMissingIndividualFormGenerator) defaultGeneratorClass.newInstance(); + } catch (InstantiationException e) { + throw new IllegalStateException("Unable to create DefaultAddMissingIndividualFormGenerator", e); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Unable to create DefaultAddMissingIndividualFormGenerator", e); + } + } + + public static final String getImplementationName() { + return defaultGeneratorClass.getName(); + } //Method which checks whether this particular generator should be employed - public static boolean isCreateNewIndividual(VitroRequest vreq, HttpSession session) { + public static final boolean isCreateNewIndividual(VitroRequest vreq, HttpSession session) { String command = vreq.getParameter("cmd"); String predicateUri = EditConfigurationUtils.getPredicateUri(vreq); //This method also looks at domain and range uris and so is different than just getting the @@ -97,7 +116,10 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati //set fields setFields(editConfiguration, vreq, EditConfigurationUtils.getPredicateUri(vreq)); - + + //form specific data + addFormSpecificData(editConfiguration, vreq); + //add preprocesoors addPreprocessors(vreq, editConfiguration); @@ -116,7 +138,7 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati return editConfiguration; } - private Map generateNewResources(VitroRequest vreq) { + protected Map generateNewResources(VitroRequest vreq) { HashMap newResources = new HashMap(); //Null triggers default namespace newResources.put(objectVarName, null); @@ -210,14 +232,14 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati return n3ForEdit; } - private List getN3Prefixes() { + protected List getN3Prefixes() { List prefixStrings = new ArrayList(); prefixStrings.add("@prefix rdf: ."); prefixStrings.add("@prefix rdfs: ."); return prefixStrings; } - private String getN3PrefixesAsString() { + protected String getN3PrefixesAsString() { String prefixes = StringUtils.join(getN3Prefixes(), "\n"); return prefixes; } @@ -226,7 +248,7 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati return "?" + objectVarName + " rdfs:label ?name ."; } - private List generateN3Optional(VitroRequest vreq) { + protected List generateN3Optional(VitroRequest vreq) { //flag uri and asserted types need to be added here List n3Optional = new ArrayList(); n3Optional.add("?" + objectVarName + " ?inverseProp ?subject ."); @@ -268,7 +290,7 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati //n3 should look as follows //?subject ?predicate ?objectVar - private void setUrisAndLiteralsOnForm(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + protected void setUrisAndLiteralsOnForm(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { List urisOnForm = new ArrayList(); List literalsOnForm = new ArrayList(); literalsOnForm.add("name"); @@ -308,7 +330,7 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati } - private void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq, String predicateUri) { + protected void setFields(EditConfigurationVTwo editConfiguration, VitroRequest vreq, String predicateUri) { Map fields = new HashMap(); if(EditConfigurationUtils.isObjectProperty(EditConfigurationUtils.getPredicateUri(vreq), vreq)) { @@ -391,7 +413,7 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati return (typeOfNew != null && !typeOfNew.isEmpty()); } - private String getTypeOfNew(VitroRequest vreq) { + protected String getTypeOfNew(VitroRequest vreq) { return vreq.getParameter("typeOfNew"); } // The default object proepty form offers the option to create a new item @@ -456,7 +478,13 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati } - + public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + } + protected static void registerGeneratorClass(Class clazz) { + if (DefaultAddMissingIndividualFormGenerator.class.isAssignableFrom(clazz)) { + defaultGeneratorClass = clazz; + } + } } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java index d2528fb2f..7d1e06763 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java @@ -98,7 +98,7 @@ public class DefaultObjectPropertyFormGenerator implements EditConfigurationGene //Check if create new and return specific edit configuration from that generator. if(DefaultAddMissingIndividualFormGenerator.isCreateNewIndividual(vreq, session)) { - DefaultAddMissingIndividualFormGenerator generator = new DefaultAddMissingIndividualFormGenerator(); + DefaultAddMissingIndividualFormGenerator generator = DefaultAddMissingIndividualFormGenerator.create(); return generator.getEditConfiguration(vreq, session); } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java index 9c72e2d71..b477c9cd3 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/searchresult/IndividualSearchResult.java @@ -47,13 +47,13 @@ public class IndividualSearchResult extends BaseTemplateModel { Constructor ctor = resultClass.getDeclaredConstructor(Individual.class, VitroRequest.class); models.add((IndividualSearchResult)ctor.newInstance(individual, vreq)); } catch (NoSuchMethodException e) { - e.printStackTrace(); + log.error("Unable to create IndividualSearchResult", e); } catch (InstantiationException e) { - e.printStackTrace(); + log.error("Unable to create IndividualSearchResult", e); } catch (IllegalAccessException e) { - e.printStackTrace(); + log.error("Unable to create IndividualSearchResult", e); } catch (InvocationTargetException e) { - e.printStackTrace(); + log.error("Unable to create IndividualSearchResult", e); } } return models; From 64eb1ca6c2ad8bc5d3131d7ae02df9e3de58fdb8 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Tue, 24 May 2016 17:37:23 +0100 Subject: [PATCH 3/9] [VIVO-1245] Cleanup of ProcessDataGetterN3Map --- .../utils/ProcessDataGetterN3Map.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/utils/ProcessDataGetterN3Map.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/utils/ProcessDataGetterN3Map.java index 7f155e574..e36799c36 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/utils/ProcessDataGetterN3Map.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/preprocessors/utils/ProcessDataGetterN3Map.java @@ -12,14 +12,24 @@ import org.apache.commons.logging.LogFactory; */ public class ProcessDataGetterN3Map { private static final Log log = LogFactory.getLog(ProcessDataGetterN3Map.class); - public static HashMap getDataGetterTypeToProcessorMap() { - HashMap map = new HashMap(); - map.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessSparqlDataGetterN3"); - map.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.ClassGroupPageData", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessClassGroupDataGetterN3"); - map.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.IndividualsForClassesDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessIndividualsForClassesDataGetterN3"); - map.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.FixedHTMLDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessFixedHTMLN3"); - map.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SearchIndividualsDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessSearchIndividualsDataGetterN3"); - return map; + private static HashMap dataGetterMap; + + static { + dataGetterMap = new HashMap(); + dataGetterMap.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SparqlQueryDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessSparqlDataGetterN3"); + dataGetterMap.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.ClassGroupPageData", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessClassGroupDataGetterN3"); + dataGetterMap.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.IndividualsForClassesDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessIndividualsForClassesDataGetterN3"); + dataGetterMap.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.FixedHTMLDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessFixedHTMLN3"); + dataGetterMap.put("edu.cornell.mannlib.vitro.webapp.utils.dataGetter.SearchIndividualsDataGetter", "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.preprocessors.utils.ProcessSearchIndividualsDataGetterN3"); + } + + public static HashMap getDataGetterTypeToProcessorMap() { + return dataGetterMap; } + + public static void replaceDataGetterMap(HashMap newMap) { + dataGetterMap = new HashMap(); + dataGetterMap.putAll(newMap); + } } \ No newline at end of file From 5cbcab5bccc7c46804b766ebf8d95d7b5642a8f9 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Tue, 24 May 2016 21:52:32 +0100 Subject: [PATCH 4/9] [VIVO-1245] Cleanup of ManageLabelsGenerator --- .../templates/freemarker/lib/lib-properties-classes.ftl | 5 +++++ .../main/webapp/templates/freemarker/lib/lib-properties.ftl | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl diff --git a/webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl new file mode 100644 index 000000000..0a8ee084a --- /dev/null +++ b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl @@ -0,0 +1,5 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#function class_ManageLabelsGenerator> + <#return "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.VIVOManageLabelsGenerator" /> + \ No newline at end of file diff --git a/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl index ab06eaf47..7b6f86805 100644 --- a/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl +++ b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl @@ -4,6 +4,8 @@ Macros and functions for working with properties and property lists ------------------------------------------------------------------------------> +<#include "lib-properties-classes.ftl" /> + <#-- Return true iff there are statements for this property --> <#function hasStatements propertyGroups propertyName> @@ -302,7 +304,7 @@ name will be used as the label. --> <#if editable> <#assign imageAlt = "${i18n().manage}" /> <#assign linkTitle = "${i18n().manage_list_of_labels}"> - <#assign labelLink= "${urls.base}/editRequestDispatch?subjectUri=${individualUri}&editForm=edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManageLabelsGenerator&predicateUri=${labelPropertyUri}${extraParameters}"> + <#assign labelLink= "${urls.base}/editRequestDispatch?subjectUri=${individualUri}&editForm=${class_ManageLabelsGenerator}&predicateUri=${labelPropertyUri}${extraParameters}"> <#else> <#assign linkTitle = "${i18n().view_list_of_labels}"> <#assign imageAlt = "${i18n().view}" /> From fbeed01a94916da277aacec6071ce25b32acff66 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Wed, 25 May 2016 17:06:21 +0100 Subject: [PATCH 5/9] [VIVO-1245] Cleanup of NewIndividualFormGenerator, simplify configuration of generators and improve means of configuring in Freemarker --- .../n3editing/VTwo/JspToGeneratorMapping.java | 16 ++++++++++- ...aultAddMissingIndividualFormGenerator.java | 27 +------------------ .../DefaultObjectPropertyFormGenerator.java | 3 ++- .../NewIndividualFormGenerator.java | 4 +-- .../body/menupage/page-pageList.ftl | 4 ++- .../body/pagemanagement/page-pageList.ftl | 4 ++- .../body/siteAdmin/siteAdmin-dataInput.ftl | 3 ++- .../freemarker/lib/lib-generator-classes.ftl | 4 +++ .../freemarker/lib/lib-properties-classes.ftl | 5 ---- .../freemarker/lib/lib-properties.ftl | 4 +-- 10 files changed, 34 insertions(+), 40 deletions(-) create mode 100644 webapp/src/main/webapp/templates/freemarker/lib/lib-generator-classes.ftl delete mode 100644 webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java index 7d860c146..6a59b161a 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java @@ -30,7 +30,7 @@ public class JspToGeneratorMapping { map.put("dateTimeValueForm.jsp", edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DateTimeValueFormGenerator.class.getName()); map.put("defaultAddMissingIndividualForm.jsp", - edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultAddMissingIndividualFormGenerator.getImplementationName()); + edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultAddMissingIndividualFormGenerator.class.getName()); map.put("defaultDatapropForm.jsp", edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.DefaultDataPropertyFormGenerator.class.getName()); map.put("defaultObjPropForm.jsp", @@ -56,4 +56,18 @@ public class JspToGeneratorMapping { log.error( "could not load VIVO jsp mappings",th ); } } + + public static T createFor(String jsp, Class clazz) { + try { + if (jspsToGenerators.containsKey(jsp)) { + Class classDefinition = Class.forName(jspsToGenerators.get(jsp)); + if (clazz.isAssignableFrom(classDefinition)) { + return (T) classDefinition.newInstance(); + } + } + } catch (Throwable th) { + } + + return null; + } } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java index ab6380235..9404ce6e4 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultAddMissingIndividualFormGenerator.java @@ -46,31 +46,13 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati protected static String objectVarName = "newIndividual"; private static HashMap defaultsForXSDtypes ; - private static Class defaultGeneratorClass = DefaultAddMissingIndividualFormGenerator.class; - static { defaultsForXSDtypes = new HashMap(); //defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","2001-01-01T12:00:00"); defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","#Unparseable datetime defaults to now"); } - protected DefaultAddMissingIndividualFormGenerator() { } - - public static final DefaultAddMissingIndividualFormGenerator create() { - try { - return (DefaultAddMissingIndividualFormGenerator) defaultGeneratorClass.newInstance(); - } catch (InstantiationException e) { - throw new IllegalStateException("Unable to create DefaultAddMissingIndividualFormGenerator", e); - } catch (IllegalAccessException e) { - throw new IllegalStateException("Unable to create DefaultAddMissingIndividualFormGenerator", e); - } - } - - public static final String getImplementationName() { - return defaultGeneratorClass.getName(); - } - - //Method which checks whether this particular generator should be employed + //Method which checks whether this particular generator should be employed public static final boolean isCreateNewIndividual(VitroRequest vreq, HttpSession session) { String command = vreq.getParameter("cmd"); String predicateUri = EditConfigurationUtils.getPredicateUri(vreq); @@ -480,11 +462,4 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { } - - - protected static void registerGeneratorClass(Class clazz) { - if (DefaultAddMissingIndividualFormGenerator.class.isAssignableFrom(clazz)) { - defaultGeneratorClass = clazz; - } - } } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java index 7d1e06763..60fd889d8 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java @@ -12,6 +12,7 @@ import java.util.Map; import javax.servlet.http.HttpSession; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.JspToGeneratorMapping; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -98,7 +99,7 @@ public class DefaultObjectPropertyFormGenerator implements EditConfigurationGene //Check if create new and return specific edit configuration from that generator. if(DefaultAddMissingIndividualFormGenerator.isCreateNewIndividual(vreq, session)) { - DefaultAddMissingIndividualFormGenerator generator = DefaultAddMissingIndividualFormGenerator.create(); + EditConfigurationGenerator generator = JspToGeneratorMapping.createFor("defaultAddMissingIndividualForm.jsp", DefaultAddMissingIndividualFormGenerator.class); return generator.getEditConfiguration(vreq, session); } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java index f46d60022..98440ba14 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/NewIndividualFormGenerator.java @@ -37,11 +37,11 @@ public class NewIndividualFormGenerator implements EditConfigurationGenerator { private String template = "newIndividualForm.ftl"; private static HashMap defaultsForXSDtypes ; - static { + static { defaultsForXSDtypes = new HashMap(); //defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","2001-01-01T12:00:00"); defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","#Unparseable datetime defaults to now"); - } + } @Override public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) { diff --git a/webapp/src/main/webapp/templates/freemarker/body/menupage/page-pageList.ftl b/webapp/src/main/webapp/templates/freemarker/body/menupage/page-pageList.ftl index 80cef6ac6..eb587e880 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/menupage/page-pageList.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/menupage/page-pageList.ftl @@ -1,5 +1,7 @@ <#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> +<#import "lib-generator-classes.ftl" as generators /> +
<#if pages?has_content > @@ -25,7 +27,7 @@
- +
diff --git a/webapp/src/main/webapp/templates/freemarker/body/pagemanagement/page-pageList.ftl b/webapp/src/main/webapp/templates/freemarker/body/pagemanagement/page-pageList.ftl index 2884d8b09..628a284b7 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/pagemanagement/page-pageList.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/pagemanagement/page-pageList.ftl @@ -1,5 +1,7 @@ <#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> +<#import "lib-generator-classes.ftl" as generators /> +
<#if pages?has_content > @@ -25,7 +27,7 @@
- +
diff --git a/webapp/src/main/webapp/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl b/webapp/src/main/webapp/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl index f3092db01..c79a7c90b 100644 --- a/webapp/src/main/webapp/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl +++ b/webapp/src/main/webapp/templates/freemarker/body/siteAdmin/siteAdmin-dataInput.ftl @@ -3,6 +3,7 @@ <#-- Template for Site Administration data input panel --> <#import "lib-form.ftl" as form> +<#import "lib-generator-classes.ftl" as generators /> <#if dataInput?has_content>
@@ -12,7 +13,7 @@ - + diff --git a/webapp/src/main/webapp/templates/freemarker/lib/lib-generator-classes.ftl b/webapp/src/main/webapp/templates/freemarker/lib/lib-generator-classes.ftl new file mode 100644 index 000000000..d88ae03b5 --- /dev/null +++ b/webapp/src/main/webapp/templates/freemarker/lib/lib-generator-classes.ftl @@ -0,0 +1,4 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#assign ManageLabelsGenerator = "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.ManageLabelsGenerator" /> +<#assign NewIndividualFormGenerator = "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.NewIndividualFormGenerator" /> diff --git a/webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl deleted file mode 100644 index 0a8ee084a..000000000 --- a/webapp/src/main/webapp/templates/freemarker/lib/lib-properties-classes.ftl +++ /dev/null @@ -1,5 +0,0 @@ -<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> - -<#function class_ManageLabelsGenerator> - <#return "edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators.VIVOManageLabelsGenerator" /> - \ No newline at end of file diff --git a/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl index 7b6f86805..881e7e412 100644 --- a/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl +++ b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl @@ -4,7 +4,7 @@ Macros and functions for working with properties and property lists ------------------------------------------------------------------------------> -<#include "lib-properties-classes.ftl" /> +<#import "lib-generator-classes.ftl" as generators /> <#-- Return true iff there are statements for this property --> <#function hasStatements propertyGroups propertyName> @@ -304,7 +304,7 @@ name will be used as the label. --> <#if editable> <#assign imageAlt = "${i18n().manage}" /> <#assign linkTitle = "${i18n().manage_list_of_labels}"> - <#assign labelLink= "${urls.base}/editRequestDispatch?subjectUri=${individualUri}&editForm=${class_ManageLabelsGenerator}&predicateUri=${labelPropertyUri}${extraParameters}"> + <#assign labelLink= "${urls.base}/editRequestDispatch?subjectUri=${individualUri}&editForm=${generators.ManageLabelsGenerator}&predicateUri=${labelPropertyUri}${extraParameters}"> <#else> <#assign linkTitle = "${i18n().view_list_of_labels}"> <#assign imageAlt = "${i18n().view}" /> From 825c81002bd150336d61b9ee33577208441a3768 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Wed, 25 May 2016 18:38:33 +0100 Subject: [PATCH 6/9] [VIVO-1245] Cleanup of MenuManagementDataUtils --- .../menuManagement/MenuManagementDataUtils.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/MenuManagementDataUtils.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/MenuManagementDataUtils.java index 9e7ebb44a..67553827a 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/MenuManagementDataUtils.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/MenuManagementDataUtils.java @@ -16,13 +16,23 @@ import org.apache.commons.logging.LogFactory; public class MenuManagementDataUtils { private static final Log log = LogFactory.getLog(MenuManagementDataUtils.class); + private static IMenuManagementDataUtils impl = null; + //Data that is to be returned to template that does not involve data getters //e.g. what are the current class groups, etc. public static void includeRequiredSystemData(ServletContext context, Map templateData) { - - + if (impl != null) { + impl.includeRequiredSystemData(context, templateData); + } + } + + public static void setImplementation(IMenuManagementDataUtils impl) { + MenuManagementDataUtils.impl = impl; } + public interface IMenuManagementDataUtils { + public void includeRequiredSystemData(ServletContext context, Map templateData); + } } \ No newline at end of file From 0e37b6a69ec05cec953508b3777bbf71d7bb026c Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Wed, 25 May 2016 18:56:14 +0100 Subject: [PATCH 7/9] [VIVO-1245] Remove SelectDataGetterUtils - can't find any uses --- .../menuManagement/SelectDataGetterUtils.java | 74 ------------------- 1 file changed, 74 deletions(-) delete mode 100644 api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/SelectDataGetterUtils.java diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/SelectDataGetterUtils.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/SelectDataGetterUtils.java deleted file mode 100644 index c14326c6d..000000000 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/menuManagement/SelectDataGetterUtils.java +++ /dev/null @@ -1,74 +0,0 @@ -/* $This file is distributed under the terms of the license in /doc/license.txt$ */ - -package edu.cornell.mannlib.vitro.webapp.utils.menuManagement; - -import java.util.Map; - -import javax.servlet.ServletContext; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.hp.hpl.jena.rdf.model.Model; -import com.hp.hpl.jena.rdf.model.ModelFactory; -import com.hp.hpl.jena.rdf.model.Resource; - -import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.utils.dataGetter.ClassGroupPageData; -import edu.cornell.mannlib.vitro.webapp.utils.dataGetter.IndividualsForClassesDataGetter; - -/* - * This class includes methods that help in selecting a data getter based on - * parameters, and VIVO will have its own version or extend this - */ -public class SelectDataGetterUtils { - private static final Log log = LogFactory.getLog(SelectDataGetterUtils.class); - - /**Get data for an existing page and set variables for the template accordingly**/ - - - public static void processAndRetrieveData(VitroRequest vreq, ServletContext context, Map pageData, String dataGetterClass, Map templateData) { - //The type of the data getter will show how to process the data from the data getter - ProcessDataGetter processor = selectProcessor(dataGetterClass); - processor.populateTemplate(vreq, pageData, templateData); - } - - //This will be different in VIVO than in VITRO - private static ProcessDataGetter selectProcessor(String dataGetterClass) { - if(dataGetterClass.equals(ClassGroupPageData.class.getName())) { - return new ProcessClassGroup(); - } else if(dataGetterClass.equals(IndividualsForClassesDataGetter.class.getName())) { - //below should be for vitro specific version - return new ProcessIndividualsForClasses(); - } - return null; - } - - - - - /**Process parameters from form and select appropriate data getter on this basis **/ - public static Model createDataGetterModel(VitroRequest vreq, Resource dataGetterResource) { - Model dataGetterModel = null; - if(dataGetterResource != null) { - //If "All selected" then use class group else use individuals for classes - dataGetterModel = ModelFactory.createDefaultModel(); - - ProcessIndividualsForClasses individualsProcess = new ProcessIndividualsForClasses(); - - ProcessClassGroup classGroupProcess = new ProcessClassGroup(); - if(individualsProcess.useProcessor(vreq)) { - dataGetterModel = individualsProcess.processSubmission(vreq, dataGetterResource); - } else { - dataGetterModel = classGroupProcess.processSubmission(vreq, dataGetterResource); - } - - - } else { - log.error("Data getter is null "); - } - return dataGetterModel; - - } - -} \ No newline at end of file From f3b66a9d428032cc97ceea5a8342bd612d37c4cd Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Wed, 25 May 2016 19:47:34 +0100 Subject: [PATCH 8/9] [VIVO-1245] Cleanup Template Model classes --- .../freemarker/IndividualListController.java | 3 ++- .../individual/IndividualResponseBuilder.java | 3 ++- .../GetRandomSearchIndividualsByVClass.java | 3 ++- .../GetRenderedSearchIndividualsByVClass.java | 3 ++- .../utils/dataGetter/BrowseDataGetter.java | 3 ++- .../SearchIndividualsDataGetter.java | 3 ++- .../individual/IndividualTemplateModel.java | 3 +-- .../IndividualTemplateModelBuilder.java | 25 +++++++++++++++++++ .../individuallist/BaseListedIndividual.java | 2 +- .../individuallist/ListedIndividual.java | 3 +-- .../ListedIndividualBuilder.java | 24 ++++++++++++++++++ .../webapp/web/widgets/BrowseWidget.java | 3 ++- 12 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModelBuilder.java create mode 100644 api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividualBuilder.java diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java index f03d5d3c9..728a4c77c 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualListController.java @@ -8,6 +8,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividualBuilder; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -100,7 +101,7 @@ public class IndividualListController extends FreemarkerHttpServlet { List indsTm = new ArrayList(); if (inds != null) { for ( Individual ind : inds ) { - indsTm.add(new ListedIndividual(ind,vreq)); + indsTm.add(ListedIndividualBuilder.build(ind,vreq)); } } body.put("individuals", indsTm); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualResponseBuilder.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualResponseBuilder.java index d52b48281..659936d8f 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualResponseBuilder.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualResponseBuilder.java @@ -9,6 +9,7 @@ import java.util.Map; import java.util.Properties; import com.hp.hpl.jena.rdf.model.RDFNode; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModelBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONException; @@ -268,7 +269,7 @@ class IndividualResponseBuilder { private IndividualTemplateModel getIndividualTemplateModel( Individual individual) { //individual.sortForDisplay(); - return new IndividualTemplateModel(individual, vreq); + return IndividualTemplateModelBuilder.build(individual, vreq); } private TemplateModel wrap(Object obj, BeansWrapper wrapper) throws TemplateModelException { diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRandomSearchIndividualsByVClass.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRandomSearchIndividualsByVClass.java index 7a15f8428..fb76f365d 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRandomSearchIndividualsByVClass.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRandomSearchIndividualsByVClass.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModelBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONArray; @@ -72,7 +73,7 @@ public class GetRandomSearchIndividualsByVClass extends GetSearchIndividualsByVC Map modelMap = new HashMap(); modelMap.put("individual", - new IndividualTemplateModel(individual, vreq)); + IndividualTemplateModelBuilder.build(individual, vreq)); modelMap.put("vclass", vclassName); ShortViewService svs = ShortViewServiceSetup.getService(ctx); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRenderedSearchIndividualsByVClass.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRenderedSearchIndividualsByVClass.java index ba95c69f4..d98cf5e6c 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRenderedSearchIndividualsByVClass.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/json/GetRenderedSearchIndividualsByVClass.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModelBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONArray; @@ -80,7 +81,7 @@ public class GetRenderedSearchIndividualsByVClass extends GetSearchIndividualsBy Map modelMap = new HashMap(); modelMap.put("individual", - new IndividualTemplateModel(individual, vreq)); + IndividualTemplateModelBuilder.build(individual, vreq)); modelMap.put("vclass", vclassName); ShortViewService svs = ShortViewServiceSetup.getService(ctx); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/BrowseDataGetter.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/BrowseDataGetter.java index 5873d7e4f..e1c9542f8 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/BrowseDataGetter.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/BrowseDataGetter.java @@ -11,6 +11,7 @@ import java.util.Map; import javax.servlet.ServletContext; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividualBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONArray; @@ -174,7 +175,7 @@ public class BrowseDataGetter extends DataGetterBase implements DataGetter { List tInds = new ArrayList(inds.size()); for( Individual ind : inds){ - tInds.add(new ListedIndividual(ind, vreq)); + tInds.add(ListedIndividualBuilder.build(ind, vreq)); } map.put("individualsInClass", tInds); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/SearchIndividualsDataGetter.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/SearchIndividualsDataGetter.java index 753f1c56c..6b731d147 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/SearchIndividualsDataGetter.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/SearchIndividualsDataGetter.java @@ -9,6 +9,7 @@ import java.util.Map; import javax.servlet.ServletContext; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividualBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -183,7 +184,7 @@ public class SearchIndividualsDataGetter extends DataGetterBase implements DataG List indsTm = new ArrayList(); if (inds != null) { for ( Individual ind : inds ) { - indsTm.add(new ListedIndividual(ind,vreq)); + indsTm.add(ListedIndividualBuilder.build(ind,vreq)); } } body.put("individuals", indsTm); diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java index a00129d10..c45020b47 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java @@ -12,8 +12,7 @@ public class IndividualTemplateModel extends BaseIndividualTemplateModel { private static final Log log = LogFactory.getLog(IndividualTemplateModel.class); - public IndividualTemplateModel(Individual individual, VitroRequest vreq) { + IndividualTemplateModel(Individual individual, VitroRequest vreq) { super(individual, vreq); } - } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModelBuilder.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModelBuilder.java new file mode 100644 index 000000000..c8e2e6eb6 --- /dev/null +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModelBuilder.java @@ -0,0 +1,25 @@ +package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual; + +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual; + +public class IndividualTemplateModelBuilder { + static IIndividualTemplateModelBuilder customBuilder = null; + + static public IndividualTemplateModel build(Individual individual, VitroRequest vreq) { + if (customBuilder != null) { + return customBuilder.build(individual, vreq); + } + + return new IndividualTemplateModel(individual, vreq); + } + + static public void setCustomBuilder(IIndividualTemplateModelBuilder builder) { + customBuilder = builder; + } + + public interface IIndividualTemplateModelBuilder { + public IndividualTemplateModel build(Individual individual, VitroRequest vreq); + } +} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/BaseListedIndividual.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/BaseListedIndividual.java index 3b93429ae..1d0a6426e 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/BaseListedIndividual.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/BaseListedIndividual.java @@ -30,7 +30,7 @@ public abstract class BaseListedIndividual extends BaseTemplateModel { public static List getIndividualTemplateModels(List individuals, VitroRequest vreq) { List models = new ArrayList(individuals.size()); for (Individual individual : individuals) { - models.add(new ListedIndividual(individual, vreq)); + models.add(ListedIndividualBuilder.build(individual, vreq)); } return models; } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividual.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividual.java index 328b4bfd8..1e10f5752 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividual.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividual.java @@ -12,8 +12,7 @@ public class ListedIndividual extends BaseListedIndividual { private static final Log log = LogFactory.getLog(ListedIndividual.class); - public ListedIndividual(Individual individual, VitroRequest vreq) { + ListedIndividual(Individual individual, VitroRequest vreq) { super(individual, vreq); } - } diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividualBuilder.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividualBuilder.java new file mode 100644 index 000000000..0970f7fa6 --- /dev/null +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individuallist/ListedIndividualBuilder.java @@ -0,0 +1,24 @@ +package edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist; + +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; + +public class ListedIndividualBuilder { + static ILIstedIndividualBuilder customBuilder = null; + + static public ListedIndividual build(Individual individual, VitroRequest vreq) { + if (customBuilder != null) { + return customBuilder.build(individual, vreq); + } + + return new ListedIndividual(individual, vreq); + } + + static public void setCustomBuilder(ILIstedIndividualBuilder builder) { + customBuilder = builder; + } + + public interface ILIstedIndividualBuilder { + public ListedIndividual build(Individual individual, VitroRequest vreq); + } +} diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/widgets/BrowseWidget.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/widgets/BrowseWidget.java index 5f2d05c11..e4ee39874 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/widgets/BrowseWidget.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/web/widgets/BrowseWidget.java @@ -11,6 +11,7 @@ import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividualBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.json.JSONArray; @@ -163,7 +164,7 @@ public class BrowseWidget extends Widget { List tInds = new ArrayList(inds.size()); for( Individual ind : inds){ - tInds.add(new ListedIndividual(ind, vreq)); + tInds.add(ListedIndividualBuilder.build(ind, vreq)); } map.put("individualsInClass", tInds); From 28a834d6d07d9d7ac32d043cda0a9ea3e9c5b7f1 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Wed, 25 May 2016 20:59:47 +0100 Subject: [PATCH 9/9] [VIVO-1245] Cleanup IndividualJsonWrapper --- .../individuallist/IndividualJsonWrapper.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individuallist/IndividualJsonWrapper.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individuallist/IndividualJsonWrapper.java index 1fda3985a..0fa24e252 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individuallist/IndividualJsonWrapper.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/controller/individuallist/IndividualJsonWrapper.java @@ -20,6 +20,12 @@ import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; * This will be overridden in VIVO so we can have more info in the display. */ public class IndividualJsonWrapper { + private static AddJSONFields addJSONFields = null; + + public static void setAddJSONFields(AddJSONFields add) { + addJSONFields = add; + } + static JSONObject packageIndividualAsJson(VitroRequest vreq, Individual ind) throws JSONException { // need an unfiltered dao to get firstnames and lastnames @@ -33,6 +39,9 @@ public class IndividualJsonWrapper { jo.put("imageUrl", ind.getImageUrl()); jo.put("profileUrl", UrlBuilder.getIndividualProfileUrl(ind, vreq)); jo.put("mostSpecificTypes", getMostSpecificTypes(ind, fullWdf)); + if (addJSONFields != null) { + addJSONFields.add(jo, vreq, ind); + } return jo; } @@ -45,4 +54,7 @@ public class IndividualJsonWrapper { return mostSpecificTypes.values(); } + public interface AddJSONFields { + public void add(JSONObject jo, VitroRequest vreq, Individual ind) throws JSONException; + } }