Package org.itsnat.impl.core.clientdoc

Examples of org.itsnat.impl.core.clientdoc.ClientDocumentAttachedClientImpl


        ClientDocumentStfulImpl[] res = new ClientDocumentStfulImpl[1 + attachedClients.size()];
        res[0] = ownerClient;
        int i = 1;
        for(Iterator<ClientDocumentAttachedClientImpl> it = attachedClients.iterator(); it.hasNext(); i++)
        {
            ClientDocumentAttachedClientImpl clientDoc = it.next();
            res[i] = clientDoc;
        }
        return res;
    }
View Full Code Here


        return (ClientDocumentAttachedClientImpl)getClientDocumentImpl();
    }

    public int getCommModeDeclared()
    {
        ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
        return clientDoc.getCommModeDeclared();
    }
View Full Code Here

        return clientDoc.getCommModeDeclared();
    }

    public int getPhase()
    {
        ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
        return clientDoc.getPhase();
    }
View Full Code Here

        return clientDoc.getPhase();
    }

    public long getEventTimeout()
    {
        ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
        return clientDoc.getEventTimeout();
    }
View Full Code Here

        return clientDoc.getEventTimeout();
    }

    public long getWaitDocTimeout()
    {
        ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
        return clientDoc.getWaitDocTimeout();
    }
View Full Code Here

        return clientDoc.getWaitDocTimeout();
    }
   
    public boolean isAccepted()
    {
        ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
        return clientDoc.isAccepted();
    }
View Full Code Here

        return clientDoc.isAccepted();
    }

    public void setAccepted(boolean accepted)
    {
        ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
        clientDoc.setAccepted(accepted);
    }
View Full Code Here

        clientDoc.setAccepted(accepted);
    }

    public boolean isReadOnly()
    {
        ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
        return clientDoc.isReadOnly();
    }
View Full Code Here

    public void processRequest(ClientDocumentStfulImpl clientDocStateless)
    {
        // Procesamos el request suministrado en un URL

        ItsNatStfulDocumentImpl itsNatDoc = null;
        final ClientDocumentAttachedClientImpl clientDoc;

        // Vemos si este request proviene de un iframe/object/embed/applet
        ClientDocumentAttachedClientImpl parentClientDoc = getParentClientDocumentAttachedClient();
        if (parentClientDoc != null) // S�
        {
            ItsNatStfulDocumentImpl parentItsNatDoc = parentClientDoc.getItsNatStfulDocument();

            BoundElementDocContainerImpl bindInfo = delegate.getBoundElementDocContainer(parentItsNatDoc);
            if (bindInfo == null)
            {
                processParentElementNotFound();
                return;
            }

            // Obtenemos el documento a trav�s del documento padre en un caso de binding a trav�s de iframe/object
            // Si devuelve null es que todav�a no se ha cargado por parte del iframe/object cliente owner.
            itsNatDoc = (ItsNatStfulDocumentImpl)bindInfo.getContentItsNatDocument();

            // El timeout NO es necesario pasarlo como par�metro pues
            // ya lo tenemos aqu�, en el cliente.
            long timeout = parentClientDoc.getWaitDocTimeout();

            if ((itsNatDoc == null)&&(timeout > 0)) // Podr�amos considerar timeout = -1 como espera indefinida pero es peligroso permitir esto como par�metro "libre". Consideramos el valor 0 como "no esperar"
            {
                // Probamos en intervalos de tiempo hasta el timeout, pero no
                // en intervalos regulares sino en intervalos m�s cortos al ppio
                // y m�s largos al final, a partir de un intervalo inicial
                // esperar sucesivamente algo m�s (el doble sucesivamente es demasiado r�pido
                // al ppio y demasiado lento al final pues es una progresi�n geom�trica):
                // t + 2t + 3t + 4t ... = timeout => (1+2+3+4...)t = timeout
                // Si an = a1 + (n ? 1)d (donde a1 = 1, d = 1) la suma
                // de n t�rminos es: n*(a1+an)/2 => n(1+n)/2
                // http://es.wikipedia.org/wiki/Progresi%C3%B3n_aritm%C3%A9tica
                // Podemos considerar n=50 intentos => 50(1+50)/2 = 1275
                // => 1275 * t = timeout => t = timeout / 1275

                long lapse = 0;
                long t = timeout / 1275; // Divisi�n entera
                if (t == 0) t = 1; // 1 ms el m�nimo
                for(int i = 1; i <= 50; i++)
                {
                    try { Thread.sleep(t); } catch(Exception ex) { throw new ItsNatException(ex); }

                    itsNatDoc = (ItsNatStfulDocumentImpl)bindInfo.getContentItsNatDocument();
                    if (itsNatDoc != null) break;

                    lapse = lapse + t;
                    if (lapse >= timeout) break;

                    t = ((i+1) * timeout) / 1275;
                    if (t == 0) t = 1; // 1 ms el m�nimo
                }
            }

            if ((itsNatDoc == null) || itsNatDoc.isInvalid()) // El caso itsNatDoc.isInvalid() devolviendo true es muy raro porque al invalidarse se desregistra de su sesi�n pero puede ocurrir, as� tenemos la seguridad de que la request se realiza sobre un documento v�lido
            {
                processChildDocInDocContainerNotFound();
                return;
            }

            // Las propiedades de attachment las heredamos del cliente padre
            String refreshMethod = parentClientDoc.getRefreshMethod();
            int refreshInterval = -1;
            if (parentClientDoc instanceof ClientDocumentAttachedClientTimerImpl)
                refreshInterval = ((ClientDocumentAttachedClientTimerImpl)parentClientDoc).getRefreshInterval();
            int commMode = parentClientDoc.getCommModeDeclared();
            long eventTimeout = parentClientDoc.getEventTimeout();
            long waitDocTimeout = parentClientDoc.getWaitDocTimeout();
            boolean readOnly = parentClientDoc.isReadOnly();

            clientDoc = requestAuthorization(itsNatDoc,refreshMethod,refreshInterval,commMode,eventTimeout,waitDocTimeout,readOnly);
        }
        else
        {
View Full Code Here

        Browser browser = itsNatDoc.getItsNatStfulDocumentTemplateVersion().getBrowser(itsNatRequest); // No hay problema de sincronizaci�n (multihilo) en estas llamadas

        ItsNatSessionImpl itsNatSession = itsNatRequest.getItsNatSessionImpl();

        // Phase ItsNatAttachedClientEvent.REQUEST;
        ClientDocumentAttachedClientImpl clientDoc = null;

        if (refreshMethod.equals("timer"))
        {
            clientDoc = new ClientDocumentAttachedClientTimerImpl(readOnly,refreshInterval,commMode,eventTimeout,waitDocTimeout,browser,itsNatSession,itsNatDoc);
        }
        else if (refreshMethod.equals("comet"))
        {
            clientDoc = new ClientDocumentAttachedClientCometImpl(readOnly,commMode,eventTimeout,waitDocTimeout,browser,itsNatSession,itsNatDoc);
        }
        else if (refreshMethod.equals("none"))
        {
            clientDoc = new ClientDocumentAttachedClientNotRefreshImpl(readOnly,commMode,eventTimeout,waitDocTimeout,browser,itsNatSession,itsNatDoc);
        }
        else throw new ItsNatException("Unrecognized refresh method: \"" + refreshMethod + "\"",itsNatRequest);

        bindClientToRequest(clientDoc,false);

        ItsNatAttachedClientEventImpl requestEvent = createItsNatAttachedClientEvent(clientDoc);

        // clientDoc por defecto est� en modo REQUEST y acepted = false

        boolean wasProcessed = ItsNatAttachedClientEventListenerUtil.handleEventIncludingGlobalListeners(requestEvent);
        if (!requestEvent.isAccepted())
        {
            if (wasProcessed) return null; // El c�digo del usuario tuvo oportunidad para hacer lo que sea
            else throw new ItsNatException("Request to remote control the document/page \"" + itsNatDoc.getItsNatDocumentTemplateImpl().getName() + "\" is not accepted",itsNatRequest);
        }

        commMode = clientDoc.getCommModeDeclared();
        if (!clientDoc.isReadOnly() && (clientDoc instanceof ClientDocumentAttachedClientCometImpl) &&
            ((commMode == CommMode.XHR_ASYNC_HOLD) || (commMode == CommMode.XHR_SYNC) ||
             (commMode == CommMode.SCRIPT_HOLD)) )
        {
            // No podemos permitir que el evento Comet al volver deje bloqueado el cliente pues dicho
            // request puede quedarse indefinidamente en el servidor, impidiendo los eventos normales del usuario en el cliente remoto.
View Full Code Here

TOP

Related Classes of org.itsnat.impl.core.clientdoc.ClientDocumentAttachedClientImpl

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.