Package org.itsnat.impl.core

Source Code of org.itsnat.impl.core.ItsNatImpl

/*
  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;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import org.itsnat.core.ItsNat;
import org.itsnat.core.ItsNatException;
import org.itsnat.core.ItsNatServlet;
import org.itsnat.impl.core.servlet.ItsNatServletContextImpl;
import org.itsnat.impl.core.servlet.ItsNatServletImpl;
import org.itsnat.impl.core.servlet.http.ItsNatHttpServletImpl;

/**
*
* @author jmarranz
*/
public class ItsNatImpl implements ItsNat
{
    protected final Map<String,ItsNatServletImpl> servletsByName = new HashMap<String,ItsNatServletImpl>();
    protected final Map<String,Object> features = Collections.synchronizedMap(new HashMap<String,Object>());
    protected final ItsNatUserDataImpl userData = new ItsNatUserDataImpl(true);
    // YA NO SE USA: protected static final boolean oldXerces = calcOldXerces(); // tras el primer valor no cambia

    /**
     * Creates a new instance of ItsNatImpl
     */
    public ItsNatImpl()
    {
    }

    public String getVersion()
    {
        return "1.3.2";
    }

    public ItsNatServletContextImpl getItsNatServletContext(ServletContext context)
    {
        ItsNatServletContextImpl itsNatContext =
                (ItsNatServletContextImpl)context.getAttribute("itsnat_servlet_context");
        if (itsNatContext == null)
        {
            // La primera vez es la �nica necesaria pero as� evitamos sincronizaciones.
            // Es rar�simo que este m�todo se llame en multihilo y menos a�n estado
            // el contexto no registrado como atributo.
            // En teor�a podr�amos usar un javax.servlet.ServletContextListener pero obligamos
            // al programador registrarlo en el web.xml haciendo p�blica
            // una API con un fin claramente interno.
            // Cre�ndolo la primera vez que se necesita podemos iniciarlo correctamente con el ServletContext
            // afortunadamente la de-serializaci�n la hemos mejorado para no necesitar el ItsNatServletContextImpl
            // hasta el primer request.
            itsNatContext = new ItsNatServletContextImpl(this,context);
            context.setAttribute("itsnat_servlet_context",itsNatContext);
        }

        return itsNatContext;
    }

    public ItsNatServlet createItsNatServlet(Servlet servlet)
    {
        // No se conoce otro tipo de Servlet que el Http
        ItsNatHttpServletImpl itsNatServlet = new ItsNatHttpServletImpl(this,(HttpServlet)servlet);
        String name = itsNatServlet.getName();
        synchronized(servletsByName)
        {
            servletsByName.put(name,itsNatServlet);
        }
        return itsNatServlet;
    }

    public ItsNatServletImpl getItsNatServletByName(String name)
    {
        synchronized(servletsByName)
        {
            return servletsByName.get(name);
        }
    }

    public Object getFeature(String name)
    {
        return features.get(name);
    }

    public Object setFeature(String name, Object value)
    {
        if (value == null) throw new ItsNatException("Null value is not allowed",this);
        throw new ItsNatException("Feature not supported: \"" + name + "\"",this);
        //return features.put(name,value);
    }

/*
    private static boolean calcOldXerces()
    {
        // Xerces 2.6.2 (el que incluye la Sun JVM 1.5) tiene errores en las
        // HTMLCollection devueltas, no se a partir de qu� versi�n deja de ternerlos, habr�a que determinarlo
        // Tomcat 5.5 pensado para la JVM 1.5 puede funcionar con la JVM 1.4 pero te dice que a�adas unos jar
        // entre ellos est� el Xerces 2.6.2
        // No estoy seguro si es este error: http://mail-archives.apache.org/mod_mbox/xerces-j-dev/200405.mbox/%3C803282686.1085102760820.JavaMail.apache@nagoya%3E
        // Al menos se sabe que la versi�n Xerces 2.8.0 incluida en el Tomcat 5.5.17 (includo en el NetBeans 5.5)
        // s� funciona bien.
        // http://today.java.net/pub/n/Tomcat5.5.17Stable
        // Es preciso distinguir versiones porque se sabe que:
        // En el Xerces 2.6.2 (el de la JVM 1.5) no funciona bien el getTBodies
        // el HTMLTableSectionElement.getRows() y HTMLTableRowElement.getCells()
        // La colecci�n "options" del <select> funciona bien en el Xerces antiguo

        String verStr = org.apache.xerces.impl.Version.getVersion();

        // Ej. de formato: "Xerces-J 2.6.2"
        int pos = verStr.lastIndexOf(' ');
        verStr = verStr.substring(pos + 1); // Aisla el "2.6.2"
        int[] version = getXercesFirstSecondVersion(verStr);

        return ((version[0]*10 + version[1]) < 28);
    }

    private static int[] getXercesFirstSecondVersion(String verStr)
    {
        // Formato esperado: "v1.v2.v3..."
        // Al menos debe existir v1.v2. en donde v1 y v2 son enteros
        int[] version = new int[2];

        int pos = verStr.indexOf('.');
        version[0] = Integer.parseInt(verStr.substring(0,pos));

        verStr = verStr.substring(pos + 1);
        pos = verStr.indexOf('.');
        if (pos != -1)
            verStr = verStr.substring(0,pos);
        version[1] = Integer.parseInt(verStr);
        return version;
    }

    public static boolean isOldXerces()
    {
        // YA NO SE USA PORQUE NO USAMOS EL DOM DE XERCES

        // Suponemos siempre "old Xerces" porque aunque tengamos una versi�n
        // moderna en el classpath si se han cargado clases de la versi�n
        // antigua de la JVM 1.4 se utilizar� la versi�n antigua
        // Aunque no se use el c�digo para false as� ya est� hecho para
        // cuando supongamos una versi�n m�nima superior sin errores.

        return true;
    }
*/

    public boolean containsUserValueName(String name)
    {
        return userData.containsUserValueName(name);
    }

    public Object getUserValue(String name)
    {
        return userData.getUserValue(name);
    }

    public Object setUserValue(String name, Object value)
    {
        return userData.setUserValue(name,value);
    }

    public Object removeUserValue(String name)
    {
        return userData.removeUserValue(name);
    }

    public String[] getUserValueNames()
    {
        return userData.getUserValueNames();
    }

}
TOP

Related Classes of org.itsnat.impl.core.ItsNatImpl

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.