This repository has been archived on 2024-05-07. You can view files and clone it, but cannot push or open issues or pull requests.
species-discovery/src/main/java/org/gcube/portlets/user/speciesdiscovery/server/ResultRowTable.java

338 lines
10 KiB
Java

package org.gcube.portlets.user.speciesdiscovery.server;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.gcube.application.framework.core.session.ASLSession;
import org.gcube.portlets.user.speciesdiscovery.client.util.SpeciesGridFields;
import org.gcube.portlets.user.speciesdiscovery.server.asl.SessionUtil;
import org.gcube.portlets.user.speciesdiscovery.server.persistence.dao.ResultRowPersistence;
import org.gcube.portlets.user.speciesdiscovery.shared.CommonName;
import org.gcube.portlets.user.speciesdiscovery.shared.ItemParameter;
import org.gcube.portlets.user.speciesdiscovery.shared.ResultRow;
import org.gcube.portlets.user.speciesdiscovery.shared.Taxon;
import org.gcube.portlets.user.speciesdiscovery.shared.util.NormalizeString;
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* @Sep 6, 2013
*
*/
public class ResultRowTable extends HttpServlet {
/**
*
*/
public static final String TEXT_HTML = "text/html; charset=UTF-8";
protected static final String UTF_8 = "UTF-8";
/**
*
*/
private static final long serialVersionUID = -9006347088111602996L;
protected Logger logger = Logger.getLogger(ResultRowTable.class);
public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
public static final String HTML = "<HTML>";
public static final String HTMLCLOSE = "</HTML>";
public static final String HEAD = "<HEAD>";
public static final String HEADCLOSE = "</HEAD>";
public static final String TITLE = "<TITLE>";
public static final String TITLECLOSE = "</TITLE>";
public static final String BODY = "<BODY>";
public static final String BODYCLOSE = "</BODY>";
public static String headWithTitle(String title) {
// return (DOCTYPE + "\n" + HTML+"\n<link type=\"text/css\" rel=\"stylesheet\" href=\"SpeciesDiscovery.css\">" + HEAD+TITLE + title + TITLECLOSE+HEADCLOSE+"\n");
return (DOCTYPE + "\n" + HTML+ "\n"+HEAD + "\n"+TITLE + title + TITLECLOSE+"\n"+HEADCLOSE+"\n");
}
protected ASLSession getASLSession(HttpServletRequest req)
{
return SessionUtil.getAslSession(req.getSession());
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String resultServiceRowID = "";
resp.setContentType(TEXT_HTML);
// PrintWriter out = resp.getWriter();
PrintWriter out = new PrintWriter(new OutputStreamWriter(resp.getOutputStream(), UTF_8), true);
// resp.setCharacterEncoding(UTF_8);
out.println(headWithTitle(""));
out.println(BODY);
try {
// get parameters
resultServiceRowID = req.getParameter("oid");
//IS VALID RR ID?
if(resultServiceRowID==null || resultServiceRowID.isEmpty()){
out.println(error("Parameter oid not found"));
}else{
logger.trace("found oid "+resultServiceRowID);
try {
ResultRowPersistence persistence = SessionUtil.getCurrentEJBResultRow(getASLSession(req));
if(persistence==null){
logger.trace("ResultRowPersistence not found in database");
out.println(error("Row id not found in database"));
out.close();
return;
}
CriteriaBuilder queryBuilder = persistence.getCriteriaBuilder();
CriteriaQuery<Object> cq = queryBuilder.createQuery();
Predicate pr1 = queryBuilder.equal(persistence.rootFrom(cq).get(ResultRow.SERVICE_ID_FIELD), resultServiceRowID);
cq.where(pr1);
Iterator<ResultRow> iterator = persistence.executeCriteriaQuery(cq).iterator();
ResultRow row = null;
while(iterator.hasNext()){
row = iterator.next();
break;
}
if(row==null){
logger.trace("Service Row id not found in database");
out.println(error("Service Row id not found in database"));
out.close();
return;
}
String table = getTableForResultRow(row, getClassification(row.getParents()));
logger.trace("table for ResultRowPersistence is empty "+table.isEmpty());
out.println(table);
} catch (Exception e) {
logger.error("Error in ResultRowTable servlet ",e);
throw new Exception("Error in ResultRowTable servlet ", e);
}
}
out.println(BODYCLOSE);
out.println(HTMLCLOSE);
out.close(); //CLOSE STREAM
}catch (Exception e) {
String error = "Sorry an error occurred when creating the table for result row with id: "+resultServiceRowID;
if(out!=null)
out.println(error);
// else
// throw new ServletException(error);
// logger.error(error, e);
out.println(BODYCLOSE);
out.println(HTMLCLOSE);
out.close(); //CLOSE STREAM
}
}
public String error(String message){
String errorPage = "";
errorPage +=("<p>Error: "+message+"</p>");
return errorPage;
}
//TODO modified
public static String getClassification(List<Taxon> listTaxon)
{
StringBuilder sb = new StringBuilder();
for (int i = listTaxon.size()-1; i >= 0; i--) {
Taxon taxon = listTaxon.get(i);
sb.append("<b>");
if(!NormalizeString.isUndefined(taxon.getRank()))
sb.append(taxon.getRank());
else
sb.append("Rank not found");
sb.append("</b>: ");
if(!NormalizeString.isUndefined(taxon.getName()))
sb.append(taxon.getName());
else
sb.append("Name not found");
if(i!=0)
sb.append(" -> ");
}
return sb.toString();
}
public String getTableForResultRow(ResultRow row, String classification){
//Init values
String dataSourceName = "";
String dataProviderName = "";
String dataSetName = "";
String dataSetCitation= "";
String matchingTaxonName= "";
String matchingAccordionTo= "";
String matchingRank= "";
String matchingCredits= "";
int occurencesCount = 0;
String scientificNameAuthorship = "";
String lsid = "";
String credits = "";
String propertiesHtml = "";
//Validate values
if(row.getParents()!=null){
if(row.getParents().get(0).getName()!=null) matchingTaxonName = row.getParents().get(0).getName();
if(row.getParents().get(0).getAccordingTo()!=null) matchingAccordionTo = row.getParents().get(0).getAccordingTo();
if(row.getParents().get(0).getRank()!=null) matchingRank = row.getParents().get(0).getRank();
}
if(row.getDataSourceName()!=null) dataSourceName = row.getDataSourceName();
if(row.getDataProviderName()!=null) dataProviderName = row.getDataProviderName();
if(row.getDataSetName()!=null) dataSetName = row.getDataSetName();
if(row.getDataSetCitation()!=null) dataSetCitation = row.getDataSetCitation();
if(row.getMatchingCredits()!=null) matchingCredits = row.getMatchingCredits();
if(row.getOccurencesCount()!=0) occurencesCount = row.getOccurencesCount();
String commonNames = "";
if(row.getCommonNames()!=null){
for (CommonName comName : row.getCommonNames()) {
commonNames+= "<b>"+comName.getName()+"</b>" +" ("+comName.getLanguage()+") - ";
}
}
if(row.getScientificNameAuthorship()!=null) scientificNameAuthorship = row.getScientificNameAuthorship();
if(row.getLsid()!=null) lsid = row.getLsid();
if(row.getCredits()!=null) credits = row.getCredits();
if(row.getProperties()!=null){
List<ItemParameter> listProperties = row.getProperties();
Collections.sort(listProperties, ItemParameter.COMPARATOR);
propertiesHtml+="<table class=\"parameters\">";
for (ItemParameter itemParameter : listProperties) {
propertiesHtml+=
"<tr>" +
" <td class=\"title\">"+itemParameter.getKey()+"</td>" +
" <td>"+itemParameter.getValue()+"</td>" +
"</tr>";
}
propertiesHtml+="</table>";
}
String table = "<table class=\"imagetable\">" +
"<tr>" +
" <th>"+matchingTaxonName+"</th>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.CLASSIFICATION_STRING.getName()+"</td>" +
" <td>"+classification+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.COMMON_NAMES.getName()+" (Language)</td>" +
" <td>"+commonNames+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.DATASOURCE.getName()+"</td>" +
" <td>"+dataSourceName+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.DATAPROVIDER.getName()+"</td>" +
" <td>"+dataProviderName+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.DATASET.getName()+"</td>" +
" <td>"+dataSetName+"</td>" +
"</tr>" +
// "<tr>" +
// " <td class=\"title\">"+SpeciesGridFields.MATCHING_AUTHOR.getName()+"</td>" +
// " <td>"+matchingAccordionTo+"</td>" +
// "</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.MATCHING_RANK.getName()+"</td>" +
" <td>"+matchingRank+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.DATASET_CITATION.getName()+"</td>" +
" <td>"+dataSetCitation+"</td>" +
"</tr>" +
// "<tr>" +
// " <td class=\"title\">"+SpeciesGridFields.MATCHING_CREDITS.getName()+"</td>" +
// " <td>"+matchingCredits+"</td>" +
// "</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.PRODUCT_OCCURRENCES.getName()+"</td>" +
" <td>"+occurencesCount+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.LSID.getName()+"</td>" +
" <td>"+lsid+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.SCIENTIFICNAMEAUTHORSHIP.getName()+"</td>" +
" <td>"+scientificNameAuthorship+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.CREDITS.getName()+"</td>" +
" <td>"+credits+"</td>" +
"</tr>" +
"<tr>" +
" <td class=\"title\">"+SpeciesGridFields.PROPERTIES.getName()+"</td>" +
" <td>"+propertiesHtml+"</td>" +
"</tr>" +
"</table>";
return table;
}
}