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.listener.dom;
015:
016: import org.itsnat.core.ItsNatException;
017: import org.itsnat.core.event.ParamTransport;
018: import org.itsnat.impl.core.*;
019: import org.itsnat.impl.core.js.listener.DOMBasedEventListenerJSRenderImpl;
020: import org.itsnat.impl.core.listener.DOMBasedEventTargetListenerList;
021: import org.itsnat.impl.core.js.listener.DOMEventListenerJSRenderImpl;
022: import org.itsnat.impl.core.listener.DOMBasedEventListenerRegistryByTargetTooImpl;
023: import org.w3c.dom.events.EventListener;
024: import org.w3c.dom.events.EventTarget;
025:
026: /**
027: *
028: * @author jmarranz
029: */
030: public class DOMEventListenerRegistryImpl extends
031: DOMBasedEventListenerRegistryByTargetTooImpl {
032:
033: /**
034: * Creates a new instance of DOMEventListenerRegistryImpl
035: */
036: public DOMEventListenerRegistryImpl(ItsNatDocumentImpl itsNatDoc) {
037: super (itsNatDoc);
038: }
039:
040: public boolean isValidEventTarget(EventTarget target,
041: boolean throwErr) {
042: if (target == null)
043: if (throwErr)
044: throw new ItsNatException(
045: "Null event target is not allowed");
046: else
047: return false;
048:
049: return super .isValidEventTarget(target, throwErr);
050: }
051:
052: public void addDOMEventListener(EventTarget nodeTarget,
053: String type, EventListener listener, boolean useCapture,
054: int syncMode, ParamTransport[] extraParams,
055: String preSendCode, long ajaxTimeout) {
056: if (!itsNatDoc.isAJAXEnabled())
057: return; // No damos error así en modo no AJAX no tenemos que detectarlo en los componentes etc
058:
059: checkValidEventTarget(nodeTarget);
060:
061: DOMEventListenerWrapperImpl listenerWrapper = new DOMEventListenerWrapperImpl(
062: itsNatDoc, nodeTarget, type, listener, useCapture,
063: syncMode, extraParams, preSendCode, ajaxTimeout);
064:
065: super .addDOMBasedEventListener(listenerWrapper);
066: }
067:
068: public DOMEventListenerWrapperImpl removeDOMEventListener(
069: EventTarget target, String type, EventListener listener,
070: boolean useCapture, boolean updateClient) {
071: if (!itsNatDoc.isAJAXEnabled())
072: return null;
073:
074: if (!isValidEventTarget(target, false))
075: return null; // No pudo registrarse, nos ahorramos una búsqueda inútil
076:
077: return (DOMEventListenerWrapperImpl) super
078: .removeDOMBasedEventListener(target, type, useCapture,
079: listener, updateClient);
080: }
081:
082: public void removeAllDOMEventListeners(EventTarget target,
083: boolean updateClient) {
084: removeAllDOMBasedEventListeners(target, updateClient);
085: }
086:
087: public EventListener[] getDOMEventListeners(EventTarget target,
088: String type, boolean useCapture) {
089: // A través de este método el usuario puede quitar algún mutationListenerJSRender metido por el framework
090: // tal y como el load y unload y cambiar así el comportamiento ante un back y forward por ejemplo
091: return (EventListener[]) super .getDOMBasedEventListeners(
092: target, type, useCapture);
093: }
094:
095: public DOMEventListenerWrapperImpl getDOMEventListenerById(
096: String listenerId) {
097: return (DOMEventListenerWrapperImpl) remoteListenersById
098: .get(listenerId);
099: }
100:
101: public DOMBasedEventTargetListenerList newDOMBasedEventTargetListenerList(
102: boolean concurrentAllowed) {
103: return new DOMEventTargetListenerList(concurrentAllowed);
104: }
105:
106: public DOMBasedEventListenerJSRenderImpl getJSRender() {
107: return DOMEventListenerJSRenderImpl.SINGLETON;
108: }
109:
110: }
|