Adding linked data. NIHVIVO-49

This commit is contained in:
bdc34 2010-03-15 20:23:02 +00:00
parent 619f0dc646
commit 5da0eeff46
3 changed files with 398 additions and 243 deletions

View file

@ -4,8 +4,11 @@ package edu.cornell.mannlib.vitro.webapp.controller;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.RequestDispatcher;
@ -13,6 +16,7 @@ import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@ -20,6 +24,7 @@ import org.apache.commons.logging.LogFactory;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.ModelMaker;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
@ -35,7 +40,9 @@ import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
import edu.cornell.mannlib.vitro.webapp.dao.ObjectPropertyDao;
import edu.cornell.mannlib.vitro.webapp.search.beans.VitroQuery;
import edu.cornell.mannlib.vitro.webapp.search.beans.VitroQueryWrapper;
import edu.cornell.mannlib.vitro.webapp.web.EntityWebUtils;
import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapper;
import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapperFactory;
import edu.cornell.mannlib.vitro.webapp.web.ContentType;
import edu.cornell.mannlib.vitro.webapp.web.jsptags.StringProcessorTag;
/**
@ -52,157 +59,44 @@ public class EntityController extends VitroHttpServlet {
private String default_body_jsp = Controllers.ENTITY_JSP;
private ApplicationBean appBean;
/**
*
* @author bdc34
*/
public void doGet( HttpServletRequest req, HttpServletResponse res )
throws IOException, ServletException {
try {
super.doGet(req, res);
log.debug("In doGet");
VitroRequest vreq = new VitroRequest(req);
IndividualDao iwDao = vreq.getWebappDaoFactory().getIndividualDao();
ObjectPropertyDao opDao = vreq.getWebappDaoFactory().getObjectPropertyDao();
//get URL without hostname or servlet context
String url = req.getRequestURI().substring(req.getContextPath().length());
Individual entity = null;
//Check to see if the request is for a non-information resource, redirect if it is.
String redirectURL = checkForRedirect ( url, req.getHeader("accept") );
if( redirectURL != null ){
doRedirect( req, res, redirectURL );
return;
}
ContentType rdfFormat = checkForLinkedDataRequest(url,req.getHeader("accept"));
if( rdfFormat != null ){
doRdf( vreq, res, rdfFormat );
return;
}
Individual indiv = null;
try{
entity = EntityWebUtils.getEntityFromRequest(vreq);
indiv = getEntityFromRequest( vreq);
}catch(Throwable th){
doHelp(res);
return;
}
if( entity == null ){
doNotFound(req, res );
return;
if( indiv == null || checkForHidden(vreq, indiv) || checkForSunset(vreq, indiv)){
doNotFound(vreq, res);
return;
}
if ( checkForHidden( vreq, entity ) ||
checkForSunset( vreq, entity ) ){
doNotFound( req, res);
return;
}
doHtml( vreq, res , indiv);
return;
//Check if a "relatedSubjectUri" parameter has been supplied, and,
//if so, retrieve the related individual.t
//Some individuals make little sense standing alone and should
//be displayed in the context of their relationship to another.
String relatedSubjectUri = vreq.getParameter("relatedSubjectUri");
if (relatedSubjectUri != null) {
Individual relatedSubjectInd = iwDao.getIndividualByURI(relatedSubjectUri);
if (relatedSubjectInd != null) {
vreq.setAttribute("relatedSubject", relatedSubjectInd);
}
}
String relatingPredicateUri = vreq.getParameter("relatingPredicateUri");
if (relatingPredicateUri != null) {
ObjectProperty relatingPredicateProp = opDao.getObjectPropertyByURI(relatingPredicateUri);
if (relatingPredicateProp != null) {
vreq.setAttribute("relatingPredicate", relatingPredicateProp);
}
}
entity.setKeywords(iwDao.getKeywordsForIndividualByMode(entity.getURI(),"visible"));
entity.sortForDisplay();
String vclassName = "unknown";
String customView = null;
String customCss = null;
if( entity.getVClass() != null ){
vclassName = entity.getVClass().getName();
List<VClass> clasList = entity.getVClasses(true);
for (VClass clas : clasList) {
customView = clas.getCustomDisplayView();
if (customView != null) {
if (customView.length()>0) {
vclassName = clas.getName(); // reset entity vclassname to name of class where a custom view
log.debug("Found direct class ["+clas.getName()+"] with custom view "+customView+"; resetting entity vclassName to this class");
break;
} else {
customView = null;
}
}
}
if (customView == null) { //still
clasList = entity.getVClasses(false);
for (VClass clas : clasList) {
customView = clas.getCustomDisplayView();
if (customView != null) {
if (customView.length()>0) {
// note that NOT changing entity vclassName here yet
log.debug("Found inferred class ["+clas.getName()+"] with custom view "+customView);
break;
} else {
customView = null;
}
}
}
}
} else {
log.error("Entity " + entity.getURI() + " with vclass URI " +
entity.getVClassURI() + ", no vclass with that URI exists");
}
if (customView!=null) {
// insert test for whether a css files of the same name exists, and populate the customCss string for use when construction the header
}
String netid = iwDao.getNetId(entity.getURI());
vreq.setAttribute("netid", netid);
vreq.setAttribute("vclassName", vclassName);
vreq.setAttribute("entity",entity);
Portal portal = vreq.getPortal();
vreq.setAttribute("portal",String.valueOf(portal));
String view= getViewFromRequest(req);
if( view == null){
if (customView == null) {
view = default_jsp;
vreq.setAttribute("bodyJsp","/"+Controllers.ENTITY_JSP);
log.debug("no custom view and no view parameter in request for rendering "+entity.getName());
} else {
view = default_jsp;
log.debug("setting custom view templates/entity/"+ customView + " for rendering "+entity.getName());
vreq.setAttribute("bodyJsp", "/templates/entity/"+customView);
}
vreq.setAttribute("entityPropsListJsp",Controllers.ENTITY_PROP_LIST_JSP);
vreq.setAttribute("entityDatapropsListJsp",Controllers.ENTITY_DATAPROP_LIST_JSP);
vreq.setAttribute("entityMergedPropsListJsp",Controllers.ENTITY_MERGED_PROP_LIST_GROUPED_JSP);
vreq.setAttribute("entityKeywordsListJsp",Controllers.ENTITY_KEYWORDS_LIST_JSP);
} else if (view.equals("rdf.rdf")) {
writeRDF(entity, req, res);
// BJL23 temporarily disabling this until we add filtering of hidden properties (get RDF through Vitro API with filtering DAOs)
} else {
log.debug("Found view parameter "+view+" in request for rendering "+entity.getName());
}
//set title before we do the highlighting so we don't get markup in it.
vreq.setAttribute("title",entity.getName());
//setup highlighter for search terms
checkForSearch(req, entity);
// set CSS and script elements
String contextPath = "";
if (req.getContextPath().length()>1) {
contextPath = req.getContextPath();
}
String css = "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\""
+ contextPath + "/" + portal.getThemeDir() + "css/entity.css\"/>\n"
+ "<script language='JavaScript' type='text/javascript' src='"+contextPath+"/js/toggle.js'></script> \n";
if (customCss!=null) {
css += customCss;
}
// generate link to RDF representation for semantic web clients like Piggy Bank
// BJL 2008-07-16: I'm temporarily commenting this out because I forgot we need to make sure it filters out the hidden properties
// generate url for this entity
// String individualToRDF = "http://"+vreq.getServerName()+":"+vreq.getServerPort()+vreq.getContextPath()+"/entity?home=1&uri="+forURL(entity.getURI())+"&view=rdf.rdf";
//css += "<link rel='alternate' type='application/rdf+xml' title='"+entity.getName()+"' href='"+individualToRDF+"' />";
vreq.setAttribute("css",css);
vreq.setAttribute("scripts", "/templates/entity/entity_inject_head.jsp");
RequestDispatcher rd = vreq.getRequestDispatcher( view );
rd.forward(vreq,res);
} catch (Throwable e) {
log.error(e);
req.setAttribute("javax.servlet.jsp.jspException",e);
@ -211,7 +105,365 @@ public class EntityController extends VitroHttpServlet {
}
}
private boolean checkForSunset(VitroRequest vreq, Individual entity) {
private void doHtml(VitroRequest vreq, HttpServletResponse res, Individual indiv) throws ServletException, IOException {
IndividualDao iwDao = vreq.getWebappDaoFactory().getIndividualDao();
ObjectPropertyDao opDao = vreq.getWebappDaoFactory().getObjectPropertyDao();
//Check if a "relatedSubjectUri" parameter has been supplied, and,
//if so, retrieve the related individual.t
//Some individuals make little sense standing alone and should
//be displayed in the context of their relationship to another.
String relatedSubjectUri = vreq.getParameter("relatedSubjectUri");
if (relatedSubjectUri != null) {
Individual relatedSubjectInd = iwDao.getIndividualByURI(relatedSubjectUri);
if (relatedSubjectInd != null) {
vreq.setAttribute("relatedSubject", relatedSubjectInd);
}
}
String relatingPredicateUri = vreq.getParameter("relatingPredicateUri");
if (relatingPredicateUri != null) {
ObjectProperty relatingPredicateProp = opDao.getObjectPropertyByURI(relatingPredicateUri);
if (relatingPredicateProp != null) {
vreq.setAttribute("relatingPredicate", relatingPredicateProp);
}
}
indiv.setKeywords(iwDao.getKeywordsForIndividualByMode(indiv.getURI(),"visible"));
indiv.sortForDisplay();
String vclassName = "unknown";
String customView = null;
String customCss = null;
if( indiv.getVClass() != null ){
vclassName = indiv.getVClass().getName();
List<VClass> clasList = indiv.getVClasses(true);
for (VClass clas : clasList) {
customView = clas.getCustomDisplayView();
if (customView != null) {
if (customView.length()>0) {
vclassName = clas.getName(); // reset entity vclassname to name of class where a custom view
log.debug("Found direct class ["+clas.getName()+"] with custom view "+customView+"; resetting entity vclassName to this class");
break;
} else {
customView = null;
}
}
}
if (customView == null) { //still
clasList = indiv.getVClasses(false);
for (VClass clas : clasList) {
customView = clas.getCustomDisplayView();
if (customView != null) {
if (customView.length()>0) {
// note that NOT changing entity vclassName here yet
log.debug("Found inferred class ["+clas.getName()+"] with custom view "+customView);
break;
} else {
customView = null;
}
}
}
}
} else {
log.error("Entity " + indiv.getURI() + " with vclass URI " +
indiv.getVClassURI() + ", no vclass with that URI exists");
}
if (customView!=null) {
// insert test for whether a css files of the same name exists, and populate the customCss string for use when construction the header
}
String netid = iwDao.getNetId(indiv.getURI());
vreq.setAttribute("netid", netid);
vreq.setAttribute("vclassName", vclassName);
vreq.setAttribute("entity",indiv);
Portal portal = vreq.getPortal();
vreq.setAttribute("portal",String.valueOf(portal));
String view= getViewFromRequest(vreq);
if( view == null){
if (customView == null) {
view = default_jsp;
vreq.setAttribute("bodyJsp","/"+Controllers.ENTITY_JSP);
log.debug("no custom view and no view parameter in request for rendering "+indiv.getName());
} else {
view = default_jsp;
log.debug("setting custom view templates/entity/"+ customView + " for rendering "+indiv.getName());
vreq.setAttribute("bodyJsp", "/templates/entity/"+customView);
}
vreq.setAttribute("entityPropsListJsp",Controllers.ENTITY_PROP_LIST_JSP);
vreq.setAttribute("entityDatapropsListJsp",Controllers.ENTITY_DATAPROP_LIST_JSP);
vreq.setAttribute("entityMergedPropsListJsp",Controllers.ENTITY_MERGED_PROP_LIST_GROUPED_JSP);
vreq.setAttribute("entityKeywordsListJsp",Controllers.ENTITY_KEYWORDS_LIST_JSP);
} else if (view.equals("rdf.rdf")) {
writeRDF(indiv, vreq, res);
// BJL23 temporarily disabling this until we add filtering of hidden properties (get RDF through Vitro API with filtering DAOs)
} else {
log.debug("Found view parameter "+view+" in request for rendering "+indiv.getName());
}
//set title before we do the highlighting so we don't get markup in it.
vreq.setAttribute("title",indiv.getName());
//setup highlighter for search terms
checkForSearch(vreq, indiv);
// set CSS and script elements
String contextPath = "";
if (vreq.getContextPath().length()>1) {
contextPath = vreq.getContextPath();
}
String css = "<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\""
+ contextPath + "/" + portal.getThemeDir() + "css/entity.css\"/>\n"
+ "<script language='JavaScript' type='text/javascript' src='"+contextPath+"/js/toggle.js'></script> \n";
if (customCss!=null) {
css += customCss;
}
// generate link to RDF representation for semantic web clients like Piggy Bank
// BJL 2008-07-16: I'm temporarily commenting this out because I forgot we need to make sure it filters out the hidden properties
// generate url for this entity
// String individualToRDF = "http://"+vreq.getServerName()+":"+vreq.getServerPort()+vreq.getContextPath()+"/entity?home=1&uri="+forURL(entity.getURI())+"&view=rdf.rdf";
//css += "<link rel='alternate' type='application/rdf+xml' title='"+entity.getName()+"' href='"+individualToRDF+"' />";
vreq.setAttribute("css",css);
vreq.setAttribute("scripts", "/templates/entity/entity_inject_head.jsp");
RequestDispatcher rd = vreq.getRequestDispatcher( view );
rd.forward(vreq,res);
}
private void doRdf(VitroRequest vreq, HttpServletResponse res,
ContentType rdfFormat) throws IOException, ServletException {
Individual indiv = getEntityFromRequest(vreq);
if( indiv == null ){
doNotFound(vreq, res);
return;
}
Model ontModel = null;
HttpSession session = vreq.getSession(false);
if( session != null )
ontModel =(Model)session.getAttribute("jenaOntModel");
if( ontModel == null)
ontModel = (Model)getServletContext().getAttribute("jenaOntModel");
Model newModel = getRDF(indiv, ontModel, ModelFactory.createDefaultModel(), true);
res.setContentType(rdfFormat.getMediaType());
String format = "";
if ( RDFXML_MIMETYPE.equals(rdfFormat.getMediaType()))
format = "RDF/XML";
else if( N3_MIMETYPE.equals(rdfFormat.getMediaType()))
format = "N3";
else if ( TTL_MIMETYPE.equals(rdfFormat.getMediaType()))
format ="TTL";
newModel.write( res.getOutputStream(), format );
}
private void doRedirect(HttpServletRequest req, HttpServletResponse res,
String redirectURL) {
// It seems like there must be a better way to do this
String hn = req.getHeader("Host");
res.setHeader("Location", res.encodeURL( "http://" + hn + req.getContextPath() + redirectURL ));
res.setStatus(res.SC_SEE_OTHER);
}
private static Pattern LINKED_DATA_URL = Pattern.compile("^/individual/([^/]*)$");
private static Pattern NS_PREFIX_URL = Pattern.compile("^/individual/([^/]*)/([^/]*)$");
/**
Gets the entity id from the request.
Works for the following styles of URLs:
/individual?id=individualLocalName
/individual?entityId=individualLocalName
/individual?uri=urlencodedURI
/individual?nedit=bdc34
/individual?nedIt=bdc34
/individual/nsprefix/localname
/individual/localname
/individual/localname/localname.rdf
/individual/localname/localname.n3
/individual/localname/localname.ttl
/individual/localname/localname.html
@return null on failure.
*/
public static Individual getEntityFromRequest(VitroRequest vreq) {
String netIdStr = null;
Individual entity = null;
IndividualDao iwDao = vreq.getWebappDaoFactory().getIndividualDao();
String entityIdStr = vreq.getParameter("id");
if (entityIdStr == null || entityIdStr.equals(""))
entityIdStr = vreq.getParameter("entityId");
if( entityIdStr != null){
try {
String entityURI = vreq.getWebappDaoFactory().getDefaultNamespace()+"individual"+entityIdStr;
entity = iwDao.getIndividualByURI(entityURI);
} catch ( Exception e ) {
log.warn("Could not parse entity id: " + entityIdStr);
return null;
}
return entity;
}
String entityURIStr = vreq.getParameter("uri");
if (entityURIStr != null) {
try {
entity = iwDao.getIndividualByURI(entityURIStr);
} catch (Exception e) {
log.warn("Could not retrieve entity "+entityURIStr);
return null;
}
return entity;
}
//get URL without hostname or servlet context
String url = vreq.getRequestURI().substring(vreq.getContextPath().length());
/* check for parts of URL that indicate request for RDF
http://vivo.cornell.edu/individual/n23/n23.rdf
http://vivo.cornell.edu/individual/n23/n23.n3
http://vivo.cornell.edu/individual/n23/n23.ttl */
String uri = null;
Matcher m = RDF_REQUEST.matcher(url);
if( m.matches() && m.groupCount() == 1)
uri = m.group(1);
m = N3_REQUEST.matcher(url);
if( m.matches() && m.groupCount() == 1)
uri = m.group(1);
m = TTL_REQUEST.matcher(url);
if( m.matches() && m.groupCount() == 1)
uri= m.group(1);
m = HTML_REQUEST.matcher(url);
if( m.matches() && m.groupCount() == 1)
uri= m.group(1);
if( uri != null )
return iwDao.getIndividualByURI(vreq.getWebappDaoFactory().getDefaultNamespace() + uri);
// see if we can get the URI from a name space prefix and a local name
Matcher prefix_match = NS_PREFIX_URL.matcher(url);
if( prefix_match.matches() && prefix_match.groupCount() == 2){
String prefix = prefix_match.group(1);
String localName = prefix_match.group(2);
//String[] requestParts = requestURI.split("/individual/");
//String[] URIParts = requestParts[1].split("/");
//String localName = URIParts[1];
String namespace = "";
NamespaceMapper namespaceMapper = NamespaceMapperFactory.getNamespaceMapper(vreq.getSession().getServletContext());
String t;
namespace = ( (t = namespaceMapper.getNamespaceForPrefix(prefix)) != null) ? t : "";
return iwDao.getIndividualByURI(namespace+localName);
}
// see if we can get a local name
Matcher linkedDataMatch = LINKED_DATA_URL.matcher(url);
if( linkedDataMatch.matches() && linkedDataMatch.groupCount() == 1){
String localName = linkedDataMatch.group(1);
String ns = vreq.getWebappDaoFactory().getDefaultNamespace();
return iwDao.getIndividualByURI( ns + localName );
}
//so we try to get the netid
netIdStr = vreq.getParameter("netId");
if (netIdStr==null || netIdStr.equals(""))
netIdStr = vreq.getParameter("netid");
if ( netIdStr != null ){
uri = iwDao.getIndividualURIFromNetId(netIdStr);
return iwDao.getIndividualByURI(uri);
}
return null;
}
private static Pattern URI_PATTERN = Pattern.compile("^/individual/([^/]*)$");
//Redirect if the request is for http://hostname/individual/localname
// if accept is nothing or text/html redirect to ???
// if accept is some RDF thing redirect to the URL for RDF
private String checkForRedirect(String url, String acceptHeader) {
Matcher m = URI_PATTERN.matcher(url);
if( m.matches() && m.groupCount() == 1 ){
ContentType c = checkForLinkedDataRequest(url, acceptHeader);
if( c != null ){
String redirectUrl = "/individual/" + m.group(1) + "/" + m.group(1) ;
if( RDFXML_MIMETYPE.equals( c.getMediaType()) ){
return redirectUrl + ".rdf";
}else if( N3_MIMETYPE.equals( c.getMediaType() )){
return redirectUrl + ".n3";
}else if( TTL_MIMETYPE.equals( c.getMediaType() )){
return redirectUrl + ".ttl";
}else{ //this case shouldn't happen
return redirectUrl + ".rdf";
}
}else{
//redirect to HTML representation
return "/individual/" + m.group(1) + "/" + m.group(1) + ".html";
}
}else{
return null;
}
}
private static Pattern RDF_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.rdf$");
private static Pattern N3_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.n3$");
private static Pattern TTL_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.ttl$");
private static Pattern HTML_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.html$");
/**
* @return null if this is not a linked data request, returns content type if it is a
* linked data request.
*/
private ContentType checkForLinkedDataRequest(String url, String acceptHeader) {
try {
//check the accept header
if (acceptHeader != null) {
List<ContentType> actualContentTypes = new ArrayList<ContentType>();
actualContentTypes.add(new ContentType( XHTML_MIMETYPE ));
actualContentTypes.add(new ContentType( HTML_MIMETYPE ));
actualContentTypes.add(new ContentType( RDFXML_MIMETYPE ));
actualContentTypes.add(new ContentType( N3_MIMETYPE ));
actualContentTypes.add(new ContentType( TTL_MIMETYPE ));
ContentType best = ContentType.getBestContentType(acceptHeader,actualContentTypes);
if (best!=null && (
RDFXML_MIMETYPE.equals(best.getMediaType()) ||
N3_MIMETYPE.equals(best.getMediaType()) ||
TTL_MIMETYPE.equals(best.getMediaType()) ))
return best;
}
/*
* check for parts of URL that indicate request for RDF
http://vivo.cornell.edu/individual/n23/n23.rdf
http://vivo.cornell.edu/individual/n23/n23.n3
http://vivo.cornell.edu/individual/n23/n23.ttl
*/
Matcher m = RDF_REQUEST.matcher(url);
if( m.matches() )
return new ContentType(RDFXML_MIMETYPE);
m = N3_REQUEST.matcher(url);
if( m.matches() )
return new ContentType(N3_MIMETYPE);
m = TTL_REQUEST.matcher(url);
if( m.matches() )
return new ContentType(TTL_MIMETYPE);
} catch (Throwable th) {
log.error("problem while checking accept header " , th);
}
return null;
}
private boolean checkForSunset(VitroRequest vreq, Individual entity) {
// TODO Auto-generated method stub
return false;
}
@ -266,6 +518,7 @@ public class EntityController extends VitroHttpServlet {
Property dp = ontModel.getProperty(ds.getDatapropURI());
//if(!(dp instanceof DatatypeProperty)) System.out.println("not datatype prop "+dp.getURI());
//TODO: improve to handle languages and XSD data types
Literal lit = newModel.createLiteral(ds.getData());
newModel.add(newModel.createStatement(subj, dp, lit));
}
@ -283,8 +536,6 @@ public class EntityController extends VitroHttpServlet {
}
private void checkForSearch(HttpServletRequest req, Individual ent) {
if (req.getSession().getAttribute("LastQuery") != null) {
VitroQueryWrapper qWrap = (VitroQueryWrapper) req.getSession()
.getAttribute("LastQuery");

View file

@ -28,8 +28,12 @@ public class VitroHttpServlet extends HttpServlet
private WebappDaoFactory myAssertionsWebappDaoFactory = null;
private WebappDaoFactory myDeductionsWebappDaoFactory = null;
public final static String XHTML_MIMETYPE ="application/xhtml+xml";
public final static String HTML_MIMETYPE ="text/html";
public final static String RDFXML_MIMETYPE ="application/rdf+xml";
public final static String N3_MIMETYPE ="text/rdf+n3"; //unofficial and unregistered
public final static String N3_MIMETYPE ="text/n3"; //unofficial and unregistered
public final static String TTL_MIMETYPE = "text/turtle"; //unofficial and unregistered
/**
* Setup the auth flag, portal flag and portal bean objects.

View file

@ -1,100 +0,0 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.web;
import java.util.HashMap;
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.dao.IndividualDao;
import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapper;
import edu.cornell.mannlib.vitro.webapp.utils.NamespaceMapperFactory;
public class EntityWebUtils {
private static final Log log = LogFactory.getLog(EntityWebUtils.class.getName());
/**
Gets the entity id from the request.
Works for entities.id and NetId's
@return -1 on faliure.
This is copied from EntityServlet.java.
Maybe this should be in package like vivo.web.EntityWebUtil?
*/
public static Individual getEntityFromRequest(VitroRequest vreq) {
String netIdStr = null;
Individual entity = null;
IndividualDao iwDao = vreq.getWebappDaoFactory().getIndividualDao();
String entityIdStr = vreq.getParameter("id");
if (entityIdStr == null || entityIdStr.equals(""))
entityIdStr = vreq.getParameter("entityId");
if( entityIdStr != null){
try {
String entityURI = vreq.getWebappDaoFactory().getDefaultNamespace()+"individual"+entityIdStr;
entity = iwDao.getIndividualByURI(entityURI);
} catch ( Exception e ) {
log.error("Could not parse entity id: " + entityIdStr);
return null; //some error message to logs here
}
return entity;
}
String entityURIStr = vreq.getParameter("uri");
if (entityURIStr != null) {
try {
entity = iwDao.getIndividualByURI(entityURIStr);
} catch (Exception e) {
e.printStackTrace();
log.error("Could not retrieve entity "+entityURIStr);
return null;
}
return entity;
}
netIdStr = vreq.getParameter("netId"); //so we try to get the netid
if (netIdStr==null || netIdStr.equals(""))
netIdStr = vreq.getParameter("netid");
if ( netIdStr != null ){
String uri = iwDao.getIndividualURIFromNetId(netIdStr);
return iwDao.getIndividualByURI(uri);
}
// see if we can get the URI from a namespace prefix and a local name
String requestURI = vreq.getRequestURI();
String[] requestParts = requestURI.split("/individual/");
String[] URIParts = requestParts[1].split("/");
String namespace = "";
NamespaceMapper namespaceMapper = NamespaceMapperFactory.getNamespaceMapper(vreq.getSession().getServletContext());
String t;
namespace = ( (t = namespaceMapper.getNamespaceForPrefix(URIParts[0])) != null) ? t : "";
String localName = URIParts[1];
return vreq.getWebappDaoFactory().getIndividualDao().getIndividualByURI(namespace+localName);
// entityIdStr = vreq.getParameter("adw");
// if (entityIdStr != null && !entityIdStr.equals("")){
// return vreq.getWebappDaoFactory.getIndividualDao().getIndividualByExternalId(ExternalIdDaoDb.ADW_DEPT_ID,entityIdStr);
// }
// entityIdStr = vreq.getParameter("ohr");
// if (entityIdStr != null && !entityIdStr.equals("")){
// return vreq.getWebappDaoFactory.getIndividualDao().getIndividualByExternalId(ExternalIdDaoDb.OHR_DEPT_ID,entityIdStr);
// }
// entityIdStr = vreq.getParameter("osp");
// if (entityIdStr!=null && !entityIdStr.equals("")){
// return vreq.getWebappDaoFactory.getIndividualDao().getIndividualByExternalId(ExternalIdDaoDb.OSP_DEPT_ID,entityIdStr);
// }
//return null;
}
private static String DEFAULT_THUMB_IMG_WIDTH = "100";
private static String IMG_DIR = "images/";
private static String NO_IMG_ALT = "no picture available";
}