/* $This file is distributed under the terms of the license in /doc/license.txt$ */ package edu.cornell.mannlib.vitro.webapp.view; import java.util.ArrayList; import java.util.List; 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.beans.Link; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route; import edu.cornell.mannlib.vitro.webapp.utils.StringUtils; import edu.cornell.mannlib.vitro.webapp.view.ViewFinder.ClassView; public class IndividualView extends ViewObject { private static final Log log = LogFactory.getLog(IndividualView.class.getName()); private static final String PATH = Route.INDIVIDUAL.path(); private Individual individual; public IndividualView(Individual individual) { this.individual = individual; } /* These methods perform some manipulation of the data returned by the Individual methods */ public String getTagline() { String tagline = individual.getMoniker(); return StringUtils.isEmpty(tagline) ? individual.getVClass().getName() : tagline; } // Return link to individual's profile page. // There may be other urls associated with the individual. E.g., we might need // getEditUrl(), getDeleteUrl() to return the links computed by PropertyEditLinks. // RY **** Need to account for everything in URLRewritingHttpServlet // Currently this is incorrect for individuals that are not in the default namespace (e.g., geographic individuals). public String getProfileUrl() { return getUrl(PATH + "/" + individual.getLocalName()); } public String getSearchView() { return getView(ClassView.SEARCH); } public String getShortView() { return getView(ClassView.SHORT); } public String getDisplayView() { return getView(ClassView.DISPLAY); } private String getView(ClassView view) { ViewFinder vf = new ViewFinder(view); return vf.findClassView(individual, context); } public Link getPrimaryLink() { Link primaryLink = null; String anchor = individual.getAnchor(); String url = individual.getUrl(); if (anchor != null && url != null) { primaryLink = new Link(); primaryLink.setAnchor(individual.getAnchor()); primaryLink.setUrl(individual.getUrl()); } return primaryLink; } public List getLinks() { List additionalLinks = individual.getLinksList(); List links = new ArrayList(additionalLinks.size()+1); Link primaryLink = getPrimaryLink(); if (primaryLink != null) { links.add(primaryLink); } links.addAll(additionalLinks); return links; } /* These methods simply forward to the Individual methods. It would be desirable to implement a scheme for proxying or delegation so that the methods don't need to be simply listed here. A Ruby-style method missing method would be ideal. */ public String getName() { return individual.getName(); } public String getUri() { return individual.getURI(); } public String getDescription() { return individual.getDescription(); } public String getBlurb() { return individual.getBlurb(); } public String getCitation() { return individual.getBlurb(); } public List getKeywords() { return individual.getKeywords(); } public String getImageUrl() { return individual.getImageUrl(); } public String getThumbUrl() { return individual.getThumbUrl(); } }