package gr.ntua.ivml.athena.actions; import gr.ntua.ivml.athena.db.DB; import gr.ntua.ivml.athena.persistent.DataUpload; import gr.ntua.ivml.athena.persistent.Transformation; import gr.ntua.ivml.athena.persistent.XMLNode; import gr.ntua.ivml.athena.util.Config; import gr.ntua.ivml.athena.xml.transform.XMLFormatter; import gr.ntua.ivml.athena.xml.transform.XSLTransform; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import javax.servlet.ServletContext; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.apache.struts2.util.ServletContextAware; @Results({ @Result(name="error", location="xmlPreviewError.jsp"), @Result(name="success", location="xmlPreviewError.jsp" ) }) public class PreviewError extends GeneralAction implements ServletContextAware { protected final Logger log = Logger.getLogger(getClass()); private String nodeId; private Transformation tr; private String transformationId; private String errorSrc; private String error; private ServletContext sc; private String uploadId; private boolean truncated=false; private String eseXml=""; public String getNodeId(){ return nodeId; } public void setNodeId(String nodeId){ this.nodeId=nodeId; } public String getUploadId(){ return uploadId; } public void setUploadId(String uploadId){ this.uploadId=uploadId; } public String getTransformationId(){ return transformationId; } public void setTransformationId(String transformationId){ this.transformationId=transformationId; } public boolean isTruncated(){ return this.truncated; } public XMLNode getNode() { XMLNode result = null; if(( getNodeId() != null ) && ( getNodeId().trim().length() > 0 )) { try { long nodeId = Long.parseLong(getNodeId()); result = DB.getXMLNodeDAO().getById(nodeId, false); if(result.getSize()>20000){ truncated=true; } } catch( Exception e ) { log.error( e ); } } return result; } public Transformation getTr() { tr=DB.getTransformationDAO().findById(Long.parseLong(this.getTransformationId()), false); return tr; } /** * return XML for transformation node */ public String getItemPreview() { if( ! hasItemPreview() ) return ""; StringWriter xmlWriter = new StringWriter(); XMLNode node = getNode(); node.toXmlWrapped(new PrintWriter(xmlWriter)); String xml = xmlWriter.toString(); xml = XMLFormatter.format(xml); return xml; } public boolean hasItemPreview() { return getNode()!=null; } public String getEseXsl() { DataUpload u=DB.getDataUploadDAO().getById(Long.parseLong(this.getUploadId()), false); String eseFilePath = ""; if(!u.isLido10()) { eseFilePath = sc.getRealPath(Config.get( "lido_to_ese_xsl")); } else { eseFilePath = sc.getRealPath(Config.get( "lido1.0_to_ese_xsl")); } File eseFile = new File(eseFilePath); StringBuilder eseContents = new StringBuilder(); try { BufferedReader input = new BufferedReader(new FileReader(eseFile)); try { String line = null; //not declared within while loop while (( line = input.readLine()) != null){ eseContents.append(line); eseContents.append(System.getProperty("line.separator")); } } finally { input.close(); } } catch (IOException ex){ log.error( ex ); } return eseContents.toString(); } public String getEseXml() { return eseXml; } public void setEseXml() { String result = ""; String eseXsl = getEseXsl(); XSLTransform t = new XSLTransform(); try { if(eseXsl != null && eseXsl.length() > 0) { result = t.transform(getItemPreview(), getEseXsl()); result = XMLFormatter.format( result ); } } catch( Exception e ) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter( sw ); e.printStackTrace(pw); result = sw.toString(); } eseXml=result; } @Action(value="PreviewError") public String execute() throws Exception { setEseXml(); return SUCCESS; } public void setError(String error) { this.error = error; } public String getError() { return error; } public void setErrorSrc(String error) { this.errorSrc = error; } public String getErrorSrc() { return errorSrc; } public String getUploadName() { if(this.getUploadId()!=null){ DataUpload u=DB.getDataUploadDAO().getById(Long.parseLong(this.getUploadId()), false); return u.getOriginalFilename(); } return ""; } @Override public void setServletContext(ServletContext sc) { this.sc = sc; } }