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.client;
015:
016: import java.util.Date;
017: import java.util.Iterator;
018: import java.util.LinkedList;
019: import java.util.List;
020: import org.itsnat.core.ItsNatDocument;
021: import org.itsnat.core.ItsNatSession;
022: import org.itsnat.core.ClientDocument;
023: import org.itsnat.core.ItsNatException;
024: import org.itsnat.core.event.CodeToSendListener;
025: import org.itsnat.impl.core.*;
026: import org.itsnat.impl.core.event.client2serv.CodeToSendEventImpl;
027:
028: /**
029: *
030: * @author jmarranz
031: */
032: public abstract class ClientDocumentImpl extends ItsNatUserDataImpl
033: implements ClientDocument {
034: protected String id;
035: protected ItsNatSessionImpl session;
036: protected List codeToSend = new LinkedList();
037: protected long creationDate = System.currentTimeMillis();
038: protected boolean enabledSendCode = true;
039: protected boolean invalid = false;
040: protected CodeToSendListenersImpl codeToSendListeners;
041:
042: /**
043: * Creates a new instance of ClientDocumentImpl
044: */
045: public ClientDocumentImpl(ItsNatSessionImpl session) {
046: super (false);
047:
048: this .id = session.generateUniqueId();
049: this .session = session;
050: }
051:
052: public ItsNatSession getItsNatSession() {
053: return session;
054: }
055:
056: public ItsNatSessionImpl getItsNatSessionImpl() {
057: return session;
058: }
059:
060: public String getId() {
061: return id;
062: }
063:
064: public boolean isInvalid() {
065: return invalid;
066: }
067:
068: public void setInvalid() {
069: this .invalid = true;
070: }
071:
072: public abstract ItsNatDocumentImpl getItsNatDocumentImpl();
073:
074: public ItsNatDocument getItsNatDocument() {
075: return getItsNatDocumentImpl();
076: }
077:
078: public void addCodeToSendListener(CodeToSendListener listener) {
079: getCodeToSendListeners().addCodeToSendListener(listener);
080: }
081:
082: public void removeCodeToSendListener(CodeToSendListener listener) {
083: getCodeToSendListeners().removeCodeToSendListener(listener);
084: }
085:
086: public boolean hasCodeToSendListeners() {
087: if (codeToSendListeners == null)
088: return false;
089: return codeToSendListeners.hasCodeToSendListeners();
090: }
091:
092: public CodeToSendListenersImpl getCodeToSendListeners() {
093: if (codeToSendListeners == null)
094: this .codeToSendListeners = new CodeToSendListenersImpl(this );
095: return codeToSendListeners;
096: }
097:
098: public void addCodeToSend(Object code) {
099: // code ha de ser o String o JSCodeFragmentImpl
100: if (!getItsNatDocumentImpl().isScriptingEnabled())
101: throw new ItsNatException("Scripting is disabled");
102:
103: if (!isSendCodeEnabled())
104: throw new ItsNatException("Send Code is disabled");
105:
106: CodeToSendEventImpl event = null;
107: if (hasCodeToSendListeners()) {
108: event = getCodeToSendListeners().preProcessCodeToSend(code);
109: code = event.getCode();
110: if (code == null)
111: return; // Ha sido rechazado
112: }
113:
114: codeToSend.add(code);
115:
116: if (event != null)
117: getCodeToSendListeners().postProcessCodeToSend(event);
118: }
119:
120: public String getCodeToSendAndReset() {
121: StringBuffer code = new StringBuffer();
122: if (!codeToSend.isEmpty()) {
123: for (Iterator it = codeToSend.iterator(); it.hasNext();) {
124: Object codeFragment = it.next();
125: code.append(codeFragment.toString());
126: }
127: codeToSend.clear();
128: }
129: return code.toString();
130: }
131:
132: public Date getCreationDate() {
133: return new Date(creationDate); // Si se modifica no afecta al instante original
134: }
135:
136: public boolean isSendCodeEnabled() {
137: return enabledSendCode;
138: }
139:
140: public void disableSendCode() {
141: this .enabledSendCode = false;
142: }
143:
144: public void enableSendCode() {
145: this .enabledSendCode = true;
146: }
147: }
|