001: /*
002: ItsNat Java Web Application Framework
003: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
004: Author: Jose Maria Arranz Santamaria
005:
006: This program is free software: you can redistribute it and/or modify
007: it under the terms of the GNU Affero General Public License as published by
008: the Free Software Foundation, either version 3 of the License, or
009: (at your option) any later version. See the GNU Affero General Public
010: License for more details. See the copy of the GNU Affero General Public License
011: included in this program. If not, see <http://www.gnu.org/licenses/>.
012: */
013:
014: package org.itsnat.impl.core.response;
015:
016: import java.io.IOException;
017: import java.io.Writer;
018: import javax.servlet.ServletResponse;
019: import org.itsnat.core.ItsNatException;
020: import org.itsnat.core.UseGZip;
021: import org.itsnat.impl.core.*;
022:
023: /**
024: *
025: * @author jmarranz
026: */
027: public abstract class ResponseImpl {
028: protected ItsNatServletResponseImpl itsNatResponse;
029:
030: /** Creates a new instance of ResponseImpl */
031: public ResponseImpl(ItsNatServletResponseImpl itsNatResponse) {
032: this .itsNatResponse = itsNatResponse;
033: }
034:
035: public void sendPendingCode(Writer out) throws IOException {
036: String code = itsNatResponse.getCodeToSend();
037: if (code.length() > 0) {
038: code = "var itsNatDoc = document.getItsNatDoc(); \n" + code;
039: out.write(code);
040: }
041: }
042:
043: public void process() {
044: // Caso de carga del documento
045: // Se supone bloqueado el ItsNatDocumentImpl
046: preProcess();
047:
048: boolean useGZip = false;
049:
050: ItsNatDocumentImpl itsNatDoc = itsNatResponse
051: .getItsNatDocumentImpl();
052: if (itsNatDoc != null) {
053: int useGZipState = itsNatDoc.getUseGZip();
054: if (useGZipState != UseGZip.NONE) {
055: if (isJavaScript()) {
056: if (UseGZip.isScriptUsingGZip(useGZipState)) {
057: useGZip = true;
058: if (itsNatResponse
059: .getItsNatServletRequestImpl().isMSIE()
060: && (this instanceof ResponseLoadScriptImpl))
061: useGZip = false; // Porque en el MSIE si se comprime no se carga el script externo inmediatamente (por lo menos antes de ejecutar el handler onload de la página el cual puede necesitar registrar un monitor de eventos) y fallará en la primera carga por ejemplo el registro de un monitor de eventos en el onload (luego el script se cachea y no hay problema)
062: }
063: } else {
064: useGZip = UseGZip.isMarkupUsingGZip(useGZipState);
065: }
066: }
067: }
068:
069: try {
070: Writer out;
071: if (useGZip)
072: out = itsNatResponse.getWriterGZip();
073: else
074: out = itsNatResponse.getWriter();
075: process(out);
076: out.close();
077: } catch (IOException ex) {
078: throw new ItsNatException(ex);
079: }
080:
081: postProcess();
082: }
083:
084: public void preProcess() {
085: itsNatResponse.preProcess();
086:
087: ServletResponse response = itsNatResponse.getServletResponse();
088:
089: ItsNatDocumentImpl itsNatDoc = itsNatResponse
090: .getItsNatDocumentImpl();
091: if (itsNatDoc != null) {
092: DocumentTemplateVersionImpl template = itsNatDoc
093: .getDocumentTemplateVersion();
094: String mime;
095: if (isJavaScript())
096: mime = "text/javascript";
097: else
098: mime = template.getMIME();
099:
100: String encoding = template.getEncoding();
101: response.setContentType(mime + ";charset=" + encoding);
102: } else {
103: response.setContentType("text/html;charset=UTF-8"); // ;charset=ISO-8859-1
104: }
105: }
106:
107: public void postProcess() {
108: itsNatResponse.postProcess();
109: }
110:
111: protected abstract void process(Writer out) throws IOException;
112:
113: protected abstract boolean isJavaScript();
114: }
|