Package org.itsnat.impl.core.doc

Examples of org.itsnat.impl.core.doc.BoundElementDocContainerImpl


            // porque lo que interesa es el markup finalmente enviado al cliente
            // pues es el cliente el que va a cargar el iframe/object/embed, los
            // estados intermedios del DOM no nos interesan. En este caso
            // el proceso ya se hace al final, al serializar.
            ElementDocContainer elem = (ElementDocContainer)node;
            BoundElementDocContainerImpl bindInfo = elem.getElementDocContainerWrapper().getBoundElementDocContainer();

            if (bindInfo != null)
            {
                DocMutationEventListenerStfulImpl docMut = getDocMutationEventListenerStful();
                boolean modeOld = docMut.isEnabled();
                docMut.setEnabled(false);
                if (beforeRender)
                {
                    // Un iframe/object/embed/applet binding ha sido registrado, modificamos el atributo que define el URL
                    // para que al renderizar se env�e el nuevo
                    if (clientDoc instanceof ClientDocumentStfulOwnerImpl)
                        bindInfo.setURLForClientOwner((ClientDocumentStfulOwnerImpl)clientDoc);
                    else // attached
                        bindInfo.setURLForClientAttached((ClientDocumentAttachedClientImpl)clientDoc);
                }
                else // after
                {
                    // Como fue cambiado el URL, hay que restaurar
                    bindInfo.restoreOriginalURL(clientDoc);
                }
                docMut.setEnabled(modeOld);
            }
        }
View Full Code Here


            ClientDocumentAttachedClientImpl clientDoc = getClientDocumentAttachedClient();
            MapUniqueId<BoundElementDocContainerImpl> bindInfoList = itsNatDoc.getBoundElementDocContainerMap();
            for(Iterator<Map.Entry<String,BoundElementDocContainerImpl>> it = bindInfoList.entrySet().iterator(); it.hasNext(); )
            {
                Map.Entry<String,BoundElementDocContainerImpl> entry = it.next();
                BoundElementDocContainerImpl bindInfo = entry.getValue();

                bindInfo.setURLForClientAttached(clientDoc);
            }

            String docMarkup = super.serializeDocument();

            for(Iterator<Map.Entry<String,BoundElementDocContainerImpl>> it = bindInfoList.entrySet().iterator(); it.hasNext(); )
            {
                Map.Entry<String,BoundElementDocContainerImpl> entry = it.next();
                BoundElementDocContainerImpl bindInfo = entry.getValue();

                bindInfo.restoreOriginalURL(clientDoc);
            }

            return docMarkup;
        }
        else
View Full Code Here

        clientDoc.addCodeToSend(code.toString());
    }

    protected void fixGetSVGDocument()
    {
        BoundElementDocContainerImpl parent = getItsNatStfulDocument().getParentHTMLDocContainer();
        if (parent != null)
        {
            // El documento padre est� sincronizado, no hay problema
            // de hilos
            ElementDocContainer iframe = parent.getElementDocContainer();
            if (iframe instanceof HTMLIFrameElement)
            {
                // En ASV podemos acceder al documento padre via window.top.document (si es el mismo dominio)

                // A�adimos un try/catch para cuando no tenemos permiso de acceso
                // al padre porque el dominio del padre es diferente, dar� un error silencioso
                // y ya est�, obviamente el programador no podr� acceder al hijo ni al padre.

                // Intentamos NO usar la API de ItsNat en el cliente
                // para localizar el elemento contenedor, pues
                // si la carga del SVG es s�ncrona o por lo que sea se carga antes que el documento
                // padre del todo, el script de inicio de ItsNat no se ha ejecutado todav�a en el padre.
                // Hay que recordar que el documento padre es siempre Internet Explorer desktop


                ItsNatStfulDocumentImpl parentDoc = parent.getItsNatStfulDocument();
                ClientDocumentStfulImpl parentClientDoc = parentDoc.getClientDocumentStfulOwner();


                StringBuilder code = new StringBuilder();
View Full Code Here

        {
            ClientDocumentStfulOwnerImpl cliendDoc = getClientDocumentStfulOwner();
            for(Iterator<Node> it = elemList.iterator(); it.hasNext(); )
            {
                ElementDocContainer elem = (ElementDocContainer)it.next();
                BoundElementDocContainerImpl bindInfo = BoundElementDocContainerImpl.register(elem, itsNatDoc);
                if (bindInfo == null)
                    continue; // No tiene el formato de URL relativa esperado o los par�metros est�n malformados

                bindInfo.setURLForClientOwner(cliendDoc);

                if (boundHTMLElemDocContainerList == null) boundHTMLElemDocContainerList = new LinkedList<BoundElementDocContainerImpl>();
                boundHTMLElemDocContainerList.add(bindInfo);
            }
        }
View Full Code Here

        }
    }

    public ItsNatStfulDocumentImpl bindParentItsNatDocument(ItsNatDocumentImpl itsNatDoc)
    {
        BoundElementDocContainerImpl bindInfo = getBoundElementDocContainer();
        if (bindInfo == null) return null;

        ItsNatStfulDocumentImpl parentItsNatDoc = bindInfo.getItsNatStfulDocument();
        synchronized(parentItsNatDoc) // Yo creo que no es necesario sincronizar pero por si acaso. Afortunadamente itsNatDoc NO est� sincronizado
        {
            bindInfo.setContentItsNatDocument(itsNatDoc);
        }

        return parentItsNatDoc;
    }
View Full Code Here

        if (!newElem// En inserci�n (newElem true) el proceso ya se hace al insertar el elemento (recuerda que el elemento puede insertarse via innerHTML/XML y no pasar por aqu�)
        {
            ElementDocContainer elemDocCont = ElementDocContainerWrapperImpl.getElementDocContainerIfURLAttr(attr,elem);
            if (elemDocCont != null)
            {
                BoundElementDocContainerImpl bindInfo = elemDocCont.getElementDocContainerWrapper().getBoundElementDocContainer();
                if (bindInfo != null) // Si bindInfo es null es que el nuevo URL no cumple el formato esperado y no pudo registrarse
                {
                    String value;
                    if (clientDoc instanceof ClientDocumentStfulOwnerImpl)
                        value = bindInfo.generateURLForClientOwner((ClientDocumentStfulOwnerImpl)clientDoc);
                    else // attached
                        value = bindInfo.generateURLForClientAttached((ClientDocumentAttachedClientImpl)clientDoc);

                    return value;
                }
            }
        }
View Full Code Here

        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;

View Full Code Here

TOP

Related Classes of org.itsnat.impl.core.doc.BoundElementDocContainerImpl

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.