diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java index 9cbe0c38e..529fd887e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java @@ -60,7 +60,7 @@ import edu.cornell.mannlib.vitro.webapp.utils.jena.ExtendedLinkedDataUtils; import edu.cornell.mannlib.vitro.webapp.web.ContentType; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individuallist.ListedIndividual; -import freemarker.ext.beans.BeansWrapper; +import freemarker.ext.beans.ReadOnlyBeansWrapper; /** * Handles requests for entity information. @@ -140,11 +140,14 @@ public class IndividualController extends FreemarkerHttpServlet { * This is still safe, because we are only putting BaseTemplateModel objects * into the data model: no real data can be modified. */ - body.put("individual", wrap(itm, BeansWrapper.EXPOSE_SAFE)); + //body.put("individual", wrap(itm, BeansWrapper.EXPOSE_SAFE)); + body.put("individual", wrap(itm, new ReadOnlyBeansWrapper())); + body.put("headContent", getRdfLinkTag(itm)); //If special values required for individuals like menu, include values in template values - this.includeSpecialEditingValues(vreq, body); + body.putAll(getSpecialEditingValues(vreq)); + String template = getIndividualTemplate(individual, vreq); return new TemplateResponseValues(template, body); @@ -214,10 +217,15 @@ public class IndividualController extends FreemarkerHttpServlet { } //Get special values for cases such as Menu Management editing - private void includeSpecialEditingValues(VitroRequest vreq, Map body) { + private Map getSpecialEditingValues(VitroRequest vreq) { + + Map map = new HashMap(); + if(vreq.getAttribute(VitroRequest.SPECIAL_WRITE_MODEL) != null) { - body.put("reorderUrl", vreq.getContextPath() + DisplayVocabulary.REORDER_MENU_URL); + map.put("reorderUrl", UrlBuilder.getUrl(DisplayVocabulary.REORDER_MENU_URL)); } + + return map; } private Map getRelatedSubject(VitroRequest vreq) { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java index 0208a9f70..287735a43 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/GroupedPropertyList.java @@ -276,7 +276,7 @@ public class GroupedPropertyList extends BaseTemplateModel { * there are groups or not. */ if (groupCount == 0) { - log.warn("groupList has no groups on entering addPropertiesToGroups(); will create a new group"); + log.warn("groupList has no groups on entering addPropertiesToGroups(); creating a dummy group"); PropertyGroup dummyGroup = pgDao.createDummyPropertyGroup(null, 1); dummyGroup.getPropertyList().addAll(propertyList); groupList.add(dummyGroup); @@ -312,7 +312,7 @@ public class GroupedPropertyList extends BaseTemplateModel { } groupCount -= removedCount; } catch (Exception ex) { - log.error("Exception on trying to prune groups list with properties: " + log.error("Exception on trying to prune unpopulated groups from group list: " + ex.getMessage()); } diff --git a/webapp/src/freemarker/ext/beans/ReadOnlyBeansWrapper.java b/webapp/src/freemarker/ext/beans/ReadOnlyBeansWrapper.java index 3bd07b9d7..7561c6009 100644 --- a/webapp/src/freemarker/ext/beans/ReadOnlyBeansWrapper.java +++ b/webapp/src/freemarker/ext/beans/ReadOnlyBeansWrapper.java @@ -27,11 +27,13 @@ public class ReadOnlyBeansWrapper extends BeansWrapper { @Override protected void finetuneMethodAppearance(Class cls, Method method, MethodAppearanceDecision decision) { - if ( method.getName().startsWith("set") || - method.getReturnType() == null ) { + // How to define a setter? This is an approximation: a method whose name + // starts with "set" or returns void. + if ( method.getName().startsWith("set") ) { decision.setExposeMethodAs(null); - } - + } else if ( method.getReturnType().getName().equals("void") ) { + decision.setExposeMethodAs(null); + } } }