Package org.itsnat.impl.core.req.norm

Source Code of org.itsnat.impl.core.req.norm.RequestIFrameFileUploadImpl

/*
  ItsNat Java Web Application Framework
  Copyright (C) 2007-2011 Jose Maria Arranz Santamaria, Spanish citizen

  This software is free software; you can redistribute it and/or modify it
  under the terms of the GNU Lesser General Public License as
  published by the Free Software Foundation; either version 3 of
  the License, or (at your option) any later version.
  This software is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  Lesser General Public License for more details. You should have received
  a copy of the GNU Lesser General Public License along with this program.
  If not, see <http://www.gnu.org/licenses/>.
*/

package org.itsnat.impl.core.req.norm;

import org.itsnat.core.ItsNatException;
import org.itsnat.impl.comp.iframe.HTMLIFrameFileUploadImpl;
import org.itsnat.impl.core.clientdoc.ClientDocumentWithoutDocumentDefaultImpl;
import org.itsnat.impl.core.clientdoc.ClientDocumentStfulImpl;
import org.itsnat.impl.core.doc.ItsNatStfulDocumentImpl;
import org.itsnat.impl.core.doc.ItsNatDocSynchronizerImpl;
import org.itsnat.impl.core.req.RequestAlreadyLoadedDocImpl;
import org.itsnat.impl.core.resp.norm.ResponseIFrameFileUploadErrorLostClientDocImpl;
import org.itsnat.impl.core.resp.norm.ResponseIFrameFileUploadErrorLostSessionImpl;
import org.itsnat.impl.core.resp.norm.ResponseIFrameFileUploadImpl;
import org.itsnat.impl.core.resp.norm.ResponseNormal;
import org.itsnat.impl.core.servlet.ItsNatServletRequestImpl;
import org.itsnat.impl.core.servlet.ItsNatSessionImpl;

/**
*
* @author jmarranz
*/
public class RequestIFrameFileUploadImpl extends RequestAlreadyLoadedDocImpl implements RequestNormal
{
    public RequestIFrameFileUploadImpl(ItsNatServletRequestImpl itsNatRequest)
    {
        super(itsNatRequest);
    }

    public static RequestIFrameFileUploadImpl createRequestIFrameFileUpload(ItsNatServletRequestImpl itsNatRequest)
    {
        // S�lo requests normales
        return new RequestIFrameFileUploadImpl(itsNatRequest);
    }

    public ResponseNormal getResponseNormal()
    {
        return (ResponseNormal)response;
    }

    public ClientDocumentStfulImpl getClientDocumentStfulById(String clientId)
    {
        ItsNatSessionImpl session = getItsNatSession();
        return session.getClientDocumentStfulById(clientId);
    }

    public void processClientDocument(final ClientDocumentStfulImpl clientDoc)
    {
        if (!clientDoc.canReceiveSOMENormalEvents())
        {
            // Aunque un request file upload no es estrictamente un evento
            // lo consideramos como una acci�n efectuada desde el cliente
            // por lo que no aceptamos el request si por ejemplo viene
            // de un cliente attached read only
            throw new ItsNatException("Security violation attempt");
        }

        final String listenerId = getAttrOrParamExist("itsnat_listener_id");

        // NO registramos el request en el documento porque el file upload es algo que
        // hacemos de forma paralela al proceso normal de la web por lo que la aplicaci�n
        // podr� seguir recibiendo eventos.
        // Por ello tampoco sincronizamos el documento pues obligar�a a que el servidor quedara
        // bloqueado hasta que se subiera el archivo, si el programador quiere podr�
        // sincronizar (bloquear) el documento en el proceso del file upload.

        bindClientToRequest(clientDoc,false); // �� DEBE SER false el segundo par�metro !!

        final HTMLIFrameFileUploadImpl[] listener = new HTMLIFrameFileUploadImpl[1];

        ItsNatStfulDocumentImpl itsNatDoc = clientDoc.getItsNatStfulDocument();

        // Esta sincronizaci�n es solamente para obtener el HTMLIFrameFileUploadImpl
        // a partir del listenerId
        ItsNatDocSynchronizerImpl syncTask = new ItsNatDocSynchronizerImpl()
        {
            protected void syncMethod()
            {
                listener[0] = clientDoc.getHTMLIFrameFileUploadImpl(listenerId);
            }
        };
        syncTask.exec(itsNatDoc);

        if (listener[0] == null)
        {
            // Este caso es muy raro, hemos eliminado el listener tras la petici�n de file upload,
            // no hacemos nada de la misma manera que ignoramos los requests en otros sitios
            // que han perdido el listener, la p�gina del <iframe> saldr� vac�a.
            return;
        }

        this.response = new ResponseIFrameFileUploadImpl(this,listener[0]);
        response.process();

        // NO llamar pues no hemos vinculado este request:  unbindRequestFromDocument();
        // por ello el try/finally no es necesario

    }

    public void processClientDocumentNotFound(String clientId)
    {
        ItsNatSessionImpl session = getItsNatSession();
        ClientDocumentWithoutDocumentDefaultImpl clientDoc = new ClientDocumentWithoutDocumentDefaultImpl(session);

        bindClientToRequest(clientDoc,false)// El documento es nulo, por tanto no se vincula el request al doc

        this.response = new ResponseIFrameFileUploadErrorLostClientDocImpl(this,clientId);
        response.process();
    }

    public void processLostSession(String sessionId,String sessionToken)
    {
        ItsNatSessionImpl session = getItsNatSession();
        ClientDocumentWithoutDocumentDefaultImpl clientDoc = new ClientDocumentWithoutDocumentDefaultImpl(session);

        bindClientToRequest(clientDoc,false)// El documento es nulo, por tanto no se vincula el request al doc

        this.response = new ResponseIFrameFileUploadErrorLostSessionImpl(sessionId,sessionToken,this);
        response.process();
    }

}
TOP

Related Classes of org.itsnat.impl.core.req.norm.RequestIFrameFileUploadImpl

TOP
Copyright © 2018 www.massapi.com. 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.