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/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; + } } 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/edit/n3editing/VTwo/JspToGeneratorMapping.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/JspToGeneratorMapping.java index c6f2e1029..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 @@ -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 dc9ef5acf..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 @@ -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,17 @@ 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 { + + 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"); - } - - //Method which checks whether this particular generator should be employed - public static boolean isCreateNewIndividual(VitroRequest vreq, HttpSession session) { + } + + //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); //This method also looks at domain and range uris and so is different than just getting the @@ -97,7 +98,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 +120,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 +214,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 +230,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 +272,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 +312,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 +395,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 +460,6 @@ public class DefaultAddMissingIndividualFormGenerator implements EditConfigurati } - - - + public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + } } 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..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 = new DefaultAddMissingIndividualFormGenerator(); + 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/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 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/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 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 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/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..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 @@ -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) { + log.error("Unable to create IndividualSearchResult", e); + } catch (InstantiationException e) { + log.error("Unable to create IndividualSearchResult", e); + } catch (IllegalAccessException e) { + log.error("Unable to create IndividualSearchResult", e); + } catch (InvocationTargetException e) { + log.error("Unable to create IndividualSearchResult", e); + } + } + 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 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); 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.ftl b/webapp/src/main/webapp/templates/freemarker/lib/lib-properties.ftl index ab06eaf47..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,6 +4,8 @@ Macros and functions for working with properties and property lists ------------------------------------------------------------------------------> +<#import "lib-generator-classes.ftl" as generators /> + <#-- 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=${generators.ManageLabelsGenerator}&predicateUri=${labelPropertyUri}${extraParameters}"> <#else> <#assign linkTitle = "${i18n().view_list_of_labels}"> <#assign imageAlt = "${i18n().view}" />