/* * $Id: JspPage.java,v 1.5.2.1 2007/01/12 19:31:48 idegaweb Exp $ * Created on 17.12.2004 * * Copyright (C) 2004 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.builder.business; import java.io.File; import java.io.FileWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.logging.Logger; import com.idega.idegaweb.IWMainApplication; /** * <p> * This is an implementation for a a "JSP" based Builder page that is rendered through JSF.<br/> * This means that the page is based on a JSP page and the rendering is dispatched to the * Servlet/JSP container (e.g. Tomcat) for processing the rendering. * </p> * Last modified: $Date: 2007/01/12 19:31:48 $ by $Author: idegaweb $ * * @author <a href="mailto:tryggvil@idega.com">Tryggvi Larusson</a> * @version $Revision: 1.5.2.1 $ */ public class JspPage extends CachedBuilderPage { public String getURI() { /*String parentUri = getParent().getURI(); String pageUri = getPageUri(); String newUri = parentUri+pageUri; return newUri;*/ return super.getURI(); } private static Logger log = Logger.getLogger(JspPage.class.getName()); private boolean isLoadedToDisk=false; private static File jspTmpDir; private String resourceURI; public JspPage(String pageId){ super(pageId); super.setResourceBased(true); } protected void readPageStream(InputStream pageStream){ File jspTmpDirectory = getJSPTmpDirectory(); File jspFile = new File(jspTmpDirectory,getJSPFileName()); streamToFile(pageStream,jspFile); setLoadedToDisk(true); } private String getJSPFileName(){ return "builderpage_"+getPageKey()+".jsp"; } private String getJspFilesFolderName(){ return "jsps"; } private File getJSPTmpDirectory(){ if(jspTmpDir==null){ IWMainApplication iwma = this.getIWMainApplication(); String appRealPath = iwma.getApplicationRealPath(); File appRealDir = new File(appRealPath); jspTmpDir = new File(appRealDir,getJspFilesFolderName()); if(!jspTmpDir.exists()){ jspTmpDir.mkdir(); } } return jspTmpDir; } private void streamToFile(InputStream pageStream,File jspFile){ try { if(!jspFile.exists()){ jspFile.createNewFile(); } //OutputStream jspStream = new FileOutputStream(jspFile); /* log.info("Writing to JSP page: "+jspFile.toString()); //ICPage icPage = getICPage(); //InputStream pageStream = icPage.getPageValue(); int bufferLen=1000; byte[] buffer = new byte[bufferLen]; int read = pageStream.read(buffer); while(read!=-1){ jspStream.write(buffer); read = pageStream.read(buffer); } pageStream.close(); jspStream.close();*/ log.finer("Streaming builder page with uri: "+getURI()+" to disk in file: "+jspFile.toURL().toString()); InputStreamReader reader = new InputStreamReader(pageStream,"UTF-8");//,encoding); int bufferlength=1000; char[] buf = new char[bufferlength]; StringBuffer sbuffer = new StringBuffer(); int read = reader.read(buf); while(read!=-1){ sbuffer.append(buf,0,read); read = reader.read(buf); } String xml = sbuffer.toString(); this.setSourceFromString(xml); reader.close(); FileWriter fw = new FileWriter(jspFile); PrintWriter out = new PrintWriter(fw); out.write(xml); out.close(); fw.close(); //jspStream.write(); } catch (Exception e) { e.printStackTrace(); } } /** * @return Returns the isLoadedToDisk. */ public boolean isLoadedToDisk() { return this.isLoadedToDisk; } /** * @param isLoadedToDisk The isLoadedToDisk to set. */ public void setLoadedToDisk(boolean isLoadedToDisk) { this.isLoadedToDisk = isLoadedToDisk; } public String getResourceURI(){ if(this.resourceURI==null){ this.resourceURI="/"+getJspFilesFolderName()+"/"+getJSPFileName(); } return this.resourceURI; } public void initializeEmptyPage(){ String templateKey = this.getTemplateKey(); String templateReference = ""; if(templateKey!=null){ if (!templateKey.equals("-1")){ templateReference="template=\""+templateKey+"\""; } } String source = "<?xml version=\"1.0\"?>\n<jsp:root xmlns:jsp=\"http://java.sun.com/JSP/Page\"\nxmlns:h=\"http://java.sun.com/jsf/html\"\nxmlns:jsf=\"http://java.sun.com/jsf/core\"\nxmlns:builder=\"http://xmlns.idega.com/com.idega.builder\"\n version=\"1.2\">\n<jsp:directive.page contentType=\"text/html;charset=UTF-8\" pageEncoding=\"UTF-8\"/>\n<jsf:view>\n<builder:page id=\"builderpage_"+getPageKey()+"\" "+templateReference+">\n</builder:page>\n</jsf:view>\n</jsp:root>"; try { setSourceFromString(source); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }