added browser information (port of browser information functionality from
Venice-Dynamo, includes browscap.ini)
This commit is contained in:
		
							parent
							
								
									1351306780
								
							
						
					
					
						commit
						b4c7aa4c8b
					
				@ -115,6 +115,7 @@
 | 
				
			|||||||
    </javac>
 | 
					    </javac>
 | 
				
			||||||
    <copy todir="buildwork">
 | 
					    <copy todir="buildwork">
 | 
				
			||||||
      <fileset dir="src" includes="**/*.properties"/>
 | 
					      <fileset dir="src" includes="**/*.properties"/>
 | 
				
			||||||
 | 
					      <fileset dir="src" includes="**/*.ini"/>
 | 
				
			||||||
    </copy>
 | 
					    </copy>
 | 
				
			||||||
  </target>
 | 
					  </target>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
				
			||||||
 | 
					 * (the "License"); you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
				
			||||||
 | 
					 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
				
			||||||
 | 
					 * language governing rights and limitations under the License.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The Original Code is the Venice Web Communities System.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
				
			||||||
 | 
					 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
				
			||||||
 | 
					 * Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Contributor(s): 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package com.silverwrist.venice.ui.helpers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public interface BrowserInformation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  public String getAgent();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String getAttribute(String name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public boolean hasCapability(String name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // end interface BrowserInformation
 | 
				
			||||||
@ -415,6 +415,7 @@ public abstract class BaseServlet extends HttpServlet
 | 
				
			|||||||
	} // end if
 | 
						} // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ScriptManagerContainer.initialize(rootconf,ctxt);  // make sure container initialized
 | 
						ScriptManagerContainer.initialize(rootconf,ctxt);  // make sure container initialized
 | 
				
			||||||
 | 
						BrowserDatabase.get(ctxt);  // initialize browser database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      } // end synchronized block
 | 
					      } // end synchronized block
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										254
									
								
								src/com/silverwrist/venice/ui/servlet/BrowserDatabase.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										254
									
								
								src/com/silverwrist/venice/ui/servlet/BrowserDatabase.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,254 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * The contents of this file are subject to the Mozilla Public License Version 1.1
 | 
				
			||||||
 | 
					 * (the "License"); you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at <http://www.mozilla.org/MPL/>.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
 | 
				
			||||||
 | 
					 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
 | 
				
			||||||
 | 
					 * language governing rights and limitations under the License.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The Original Code is the Venice Web Communities System.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * The Initial Developer of the Original Code is Eric J. Bowersox <erbo@ricochet.com>,
 | 
				
			||||||
 | 
					 * for Silverwrist Design Studios.  Portions created by Eric J. Bowersox are
 | 
				
			||||||
 | 
					 * Copyright (C) 2004 Eric J. Bowersox/Silverwrist Design Studios.  All Rights Reserved.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Contributor(s): 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package com.silverwrist.venice.ui.servlet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.*;
 | 
				
			||||||
 | 
					import java.util.*;
 | 
				
			||||||
 | 
					import javax.servlet.*;
 | 
				
			||||||
 | 
					import org.apache.log4j.*;
 | 
				
			||||||
 | 
					import org.apache.regexp.*;
 | 
				
			||||||
 | 
					import com.silverwrist.util.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BrowserDatabase
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Static data members
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static Logger logger = Logger.getLogger(BrowserDatabase.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final String SERVLET_ATTR = "com.silverwrist.venice.ui.BrowserDatabase";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Attributes
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private boolean m_broken = false;                    // true if we had an error in loading
 | 
				
			||||||
 | 
					  private ArrayList m_browser_list = new ArrayList();  // the actual list
 | 
				
			||||||
 | 
					  private HashMap m_name_map = new HashMap();          // map names to elements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private BrowserDatabase()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    InputStream stm = null;
 | 
				
			||||||
 | 
					    BufferedReader rdr = null;
 | 
				
			||||||
 | 
					    try
 | 
				
			||||||
 | 
					    { // load the contents of the browscap.ini file
 | 
				
			||||||
 | 
					      stm = this.getClass().getResourceAsStream("browscap.ini");
 | 
				
			||||||
 | 
					      rdr = new BufferedReader(new InputStreamReader(stm));
 | 
				
			||||||
 | 
					      String line;
 | 
				
			||||||
 | 
					      BrowserEntry current = null;
 | 
				
			||||||
 | 
					      while ((line = rdr.readLine())!=null)
 | 
				
			||||||
 | 
					      { // read in lines from the resource
 | 
				
			||||||
 | 
						line = line.trim();
 | 
				
			||||||
 | 
						if ((line.length()==0) || line.startsWith(";"))
 | 
				
			||||||
 | 
						  continue;  // blank line or comment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (line.startsWith("[") && line.endsWith("]"))
 | 
				
			||||||
 | 
						{ // start of new browser entry
 | 
				
			||||||
 | 
						  current = new BrowserEntry(line.substring(1,line.length() - 1));
 | 
				
			||||||
 | 
						  m_name_map.put(current.getName(),current);
 | 
				
			||||||
 | 
						  m_browser_list.add(current);
 | 
				
			||||||
 | 
						  
 | 
				
			||||||
 | 
						} // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (current!=null)
 | 
				
			||||||
 | 
						{ // break the line at the equals sign
 | 
				
			||||||
 | 
						  int p = line.indexOf('=');
 | 
				
			||||||
 | 
						  if (p!=-1)
 | 
				
			||||||
 | 
						  { // separate the name and value, and stow them
 | 
				
			||||||
 | 
						    String name = line.substring(0,p).trim();
 | 
				
			||||||
 | 
						    String value = line.substring(p + 1).trim();
 | 
				
			||||||
 | 
						    if (value.startsWith("#"))
 | 
				
			||||||
 | 
						      value = value.substring(1);
 | 
				
			||||||
 | 
						    current.addValue(name,value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						} // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end while
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end try
 | 
				
			||||||
 | 
					    catch (IOException e)
 | 
				
			||||||
 | 
					    { // WTF?  this is bad!
 | 
				
			||||||
 | 
					      logger.fatal("Error loading BROWSCAP.INI database",e);
 | 
				
			||||||
 | 
					      m_broken = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end catch
 | 
				
			||||||
 | 
					    catch (RESyntaxException e)
 | 
				
			||||||
 | 
					    { // WTF?  this is bad!
 | 
				
			||||||
 | 
					      logger.fatal("Error loading BROWSCAP.INI database",e);
 | 
				
			||||||
 | 
					      m_broken = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end catch
 | 
				
			||||||
 | 
					    finally
 | 
				
			||||||
 | 
					    { // shut down the stream
 | 
				
			||||||
 | 
					      IOUtil.shutdown(rdr);
 | 
				
			||||||
 | 
					      IOUtil.shutdown(stm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end finally
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * External operations
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  BrowserEntry lookup(String agent)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    if (m_broken)
 | 
				
			||||||
 | 
					      return null;  // database wasn't loaded
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (Iterator it=m_browser_list.iterator(); it.hasNext(); )
 | 
				
			||||||
 | 
					    { // look for a matching agent
 | 
				
			||||||
 | 
					      BrowserEntry be = (BrowserEntry)(it.next());
 | 
				
			||||||
 | 
					      if (be.matches(agent))
 | 
				
			||||||
 | 
						return be;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end lookup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  BrowserEntry getByName(String name)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return (BrowserEntry)(m_name_map.get(name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getByName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * External static operations
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static synchronized BrowserDatabase get(ServletContext ctxt)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    BrowserDatabase rc = (BrowserDatabase)(ctxt.getAttribute(SERVLET_ATTR));
 | 
				
			||||||
 | 
					    if (rc==null)
 | 
				
			||||||
 | 
					    { // create database and add it to attributes
 | 
				
			||||||
 | 
					      rc = new BrowserDatabase();
 | 
				
			||||||
 | 
					      ctxt.setAttribute(SERVLET_ATTR,rc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end get
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // end class BrowserDatabase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BrowserEntry
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Static data members
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final String SPECIAL_CHARS = "*.?[](){}+|^$\\";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Attributes
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private String m_id;                            // ID of this entry
 | 
				
			||||||
 | 
					  private REProgram m_pattern;                    // pattern the entry matches
 | 
				
			||||||
 | 
					  private HashMap m_values = new HashMap();       // values table for this entry
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  BrowserEntry(String header) throws RESyntaxException
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    m_id = header.intern();
 | 
				
			||||||
 | 
					    RECompiler compiler = new RECompiler();
 | 
				
			||||||
 | 
					    m_pattern = compiler.compile(preprocess(header));
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Internal operations
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final String preprocess(String header)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    StringBuffer buf = new StringBuffer();
 | 
				
			||||||
 | 
					    char[] src = header.toCharArray();
 | 
				
			||||||
 | 
					    for (int i=0; i<src.length; i++)
 | 
				
			||||||
 | 
					    { // turn DOS-style glob characters into a proper regular expression
 | 
				
			||||||
 | 
					      if (src[i]=='*')
 | 
				
			||||||
 | 
						buf.append(".*");
 | 
				
			||||||
 | 
					      else if (src[i]=='?')
 | 
				
			||||||
 | 
						buf.append('.');
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					      { // append the standard character
 | 
				
			||||||
 | 
						if (SPECIAL_CHARS.indexOf(src[i])>=0)
 | 
				
			||||||
 | 
						  buf.append('\\');
 | 
				
			||||||
 | 
						buf.append(src[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return buf.toString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end preprocess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * External operations
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  String getName()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return m_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getName
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void addValue(String name, String value)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    m_values.put(name,value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end addValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  boolean matches(String agent)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    RE r = new RE(m_pattern);
 | 
				
			||||||
 | 
					    return r.match(agent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end matches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  String getValue(String name)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return (String)(m_values.get(name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // end class BrowserEntry
 | 
				
			||||||
@ -78,6 +78,8 @@ public class RequestImpl implements RequestInput
 | 
				
			|||||||
	return RequestImpl.this.queryService(klass);
 | 
						return RequestImpl.this.queryService(klass);
 | 
				
			||||||
      if (klass==ResourceLoader.class)
 | 
					      if (klass==ResourceLoader.class)
 | 
				
			||||||
	return RequestImpl.this.queryService(klass);
 | 
						return RequestImpl.this.queryService(klass);
 | 
				
			||||||
 | 
					      if (klass==BrowserInformation.class)
 | 
				
			||||||
 | 
						return RequestImpl.this.queryService(klass);
 | 
				
			||||||
      throw new NoSuchServiceException("RequestOutput",klass);
 | 
					      throw new NoSuchServiceException("RequestOutput",klass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } // end queryService
 | 
					    } // end queryService
 | 
				
			||||||
@ -557,6 +559,7 @@ public class RequestImpl implements RequestInput
 | 
				
			|||||||
  private HTMLRenderingImpl html_rendering = null;       // HTML rendering interface
 | 
					  private HTMLRenderingImpl html_rendering = null;       // HTML rendering interface
 | 
				
			||||||
  private ScriptSupportImpl script_support = null;       // script support interface
 | 
					  private ScriptSupportImpl script_support = null;       // script support interface
 | 
				
			||||||
  private ResourceLoaderImpl m_resource_loader = null;   // resource loader interface
 | 
					  private ResourceLoaderImpl m_resource_loader = null;   // resource loader interface
 | 
				
			||||||
 | 
					  private BrowserInformationImpl m_browser_info = null;  // browser information interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*--------------------------------------------------------------------------------
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
   * Constructor
 | 
					   * Constructor
 | 
				
			||||||
@ -914,6 +917,14 @@ public class RequestImpl implements RequestInput
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    } // end if
 | 
					    } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (klass==BrowserInformation.class)
 | 
				
			||||||
 | 
					    { // create browser information obejct and return it
 | 
				
			||||||
 | 
					      if (m_browser_info==null)
 | 
				
			||||||
 | 
						m_browser_info = new BrowserInformationImpl(request,ctxt);
 | 
				
			||||||
 | 
					      return m_browser_info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    throw new NoSuchServiceException("RequestInput",klass);
 | 
					    throw new NoSuchServiceException("RequestInput",klass);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  } // end queryService
 | 
					  } // end queryService
 | 
				
			||||||
@ -2426,3 +2437,105 @@ class ResourceLoaderImpl implements ResourceLoader
 | 
				
			|||||||
  } // end getMenuTemplate
 | 
					  } // end getMenuTemplate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // end class ResourceLoader
 | 
					} // end class ResourceLoader
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BrowserInformationImpl implements BrowserInformation
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Static data members
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private static final String AGENT_ATTR = "com.silverwrist.venice.BrowserInformation.agent";
 | 
				
			||||||
 | 
					  private static final String ENTRY_ATTR = "com.silverwrist.venice.BrowserInformation.entries";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Attributes
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private String m_agent;
 | 
				
			||||||
 | 
					  private List m_entries;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Constructor
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  BrowserInformationImpl(HttpServletRequest req, ServletContext ctxt)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    HttpSession sess = req.getSession(true);
 | 
				
			||||||
 | 
					    m_agent = (String)(sess.getAttribute(AGENT_ATTR));
 | 
				
			||||||
 | 
					    m_entries = (List)(sess.getAttribute(ENTRY_ATTR));
 | 
				
			||||||
 | 
					    if ((m_agent==null) || (m_entries==null))
 | 
				
			||||||
 | 
					    { // get the agent header
 | 
				
			||||||
 | 
					      m_agent = req.getHeader("User-Agent");
 | 
				
			||||||
 | 
					      if (m_agent==null)
 | 
				
			||||||
 | 
						m_agent = req.getHeader("HTTP_USER_AGENT");
 | 
				
			||||||
 | 
					      if (m_agent==null)
 | 
				
			||||||
 | 
						m_agent = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // get the browser database
 | 
				
			||||||
 | 
					      BrowserDatabase bdata = BrowserDatabase.get(ctxt);
 | 
				
			||||||
 | 
					      BrowserEntry ntry = bdata.lookup(m_agent);
 | 
				
			||||||
 | 
					      if (ntry!=null)
 | 
				
			||||||
 | 
					      { // get the list of entries
 | 
				
			||||||
 | 
						ArrayList tmp = new ArrayList();
 | 
				
			||||||
 | 
						tmp.add(ntry);
 | 
				
			||||||
 | 
						String s = ntry.getName();
 | 
				
			||||||
 | 
						while (!(s.equals("*")))
 | 
				
			||||||
 | 
						{ // follow "parent" links
 | 
				
			||||||
 | 
						  s = ntry.getValue("parent");
 | 
				
			||||||
 | 
						  if (s==null)
 | 
				
			||||||
 | 
						    s = "*";
 | 
				
			||||||
 | 
						  ntry = bdata.getByName(s);
 | 
				
			||||||
 | 
						  tmp.add(ntry);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						} // end while
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						tmp.trimToSize();
 | 
				
			||||||
 | 
						m_entries = Collections.unmodifiableList(tmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      } // end if
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
						m_entries = Collections.EMPTY_LIST;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      sess.setAttribute(AGENT_ATTR,m_agent);
 | 
				
			||||||
 | 
					      sess.setAttribute(ENTRY_ATTR,m_entries);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end if
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end constructor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /*--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   * Implementations from interface BrowserInformation
 | 
				
			||||||
 | 
					   *--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String getAgent()
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return m_agent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getAgent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public String getAttribute(String name)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    for (Iterator it=m_entries.iterator(); it.hasNext(); )
 | 
				
			||||||
 | 
					    { // get first BrowserEntry with the attribute in question
 | 
				
			||||||
 | 
					      BrowserEntry ntry = (BrowserEntry)(it.next());
 | 
				
			||||||
 | 
					      String rc = ntry.getValue(name);
 | 
				
			||||||
 | 
					      if (rc!=null)
 | 
				
			||||||
 | 
						return rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    } // end for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end getAttribute
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public boolean hasCapability(String name)
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    return StringUtil.isBooleanTrue(getAttribute(name));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } // end hasCapability
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} // end class BrowserInformationImpl
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										13164
									
								
								src/com/silverwrist/venice/ui/servlet/browscap.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13164
									
								
								src/com/silverwrist/venice/ui/servlet/browscap.ini
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user