📄 xcookiemanager.java
字号:
/****************************************************************
* XBrowser - eXtended web Browser *
* *
* Copyright (c) 2000-2001 Armond Avanes *
* Refer to ReadMe & License files for more information *
* *
* *
* By: Armond Avanes *
* Armond555@yahoo.com & Armond333@yahoo.com *
* http://xbrowser.sourceforge.net/ *
*****************************************************************/
package xbrowser.cookie;
import java.net.*;
import java.util.*;
import xbrowser.*;
import xbrowser.cookie.event.*;
public final class XCookieManager
{
public void load()
{
try
{
String file_name = XProjectConstants.CONFIG_DIR+XRepository.getConfiguration().getCookieFileName();
XRepository.getConfiguration().getActiveCookieSerializer().getSerializer().importCookie(file_name, this);
}
catch( Exception e )
{
XRepository.getLogger().warning(this, "An error occured on loading the cookies!");
XRepository.getLogger().warning(this, e);
clearCookies();
//save();
}
}
public void save()
{
try
{
String file_name = XProjectConstants.CONFIG_DIR+XRepository.getConfiguration().getCookieFileName();
validateAllCookies();
XRepository.getConfiguration().getActiveCookieSerializer().getSerializer().exportCookie(file_name, this);
}
catch( Exception e )
{
XRepository.getLogger().warning(this, "An error occured while saving the cookies!");
XRepository.getLogger().warning(this, e);
}
}
public void addCookie(XCookie cookie)
{
int index = cookies.indexOf(cookie);
if( index != -1)
{
XCookie old = (XCookie)cookies.get( index);
if( old.sameData(cookie) )
return;
else
{
cookies.remove(index);
XRepository.getLogger().message(this, "Updating cookie: "+cookie);
}
}
else
XRepository.getLogger().message(this, "Adding cookie: "+cookie);
cookies.add(cookie);
for( int i=0; i<cookieListeners.size(); i++ )
((XCookieListener)cookieListeners.get(i)).cookieAdded(cookie);
}
public void removeCookie(XCookie cookie)
{
if( !cookies.contains(cookie) )
return;
cookies.remove(cookie);
for( int i=0; i<cookieListeners.size(); i++ )
((XCookieListener)cookieListeners.get(i)).cookieRemoved(cookie);
}
public void clearCookies()
{
cookies.clear();
for( int i=0; i<cookieListeners.size(); i++ )
((XCookieListener)cookieListeners.get(i)).cookiesCleaned();
}
public Iterator getCookies()
{
return cookies.iterator();
}
public void addCookieListener(XCookieListener listener)
{
if( !cookieListeners.contains(listener) )
{
cookieListeners.add(listener);
updateListener(listener);
}
}
public void removeCookieListener(XCookieListener listener)
{
cookieListeners.remove(listener);
}
public void setCookies(URL url, String cookie_str)
{
List new_cookies = parse(url, cookie_str);
Iterator it = new_cookies.iterator();
// validate the new cookies
while( it.hasNext() )
{
XCookie cookie = (XCookie)it.next();
XRepository.getLogger().message(this, cookie);
//if( !hasSamePath(url,cookie.getPath()) )
// continue;
addCookie(cookie);
}
}
private boolean hasSamePath(URL url, String path)
{
if( url.getFile().equals("") && path.equals("/") )
return true;
return( url.getFile().startsWith(path) );
}
private List parse(URL url, String cookie_str)
{
List list = new ArrayList();
if( cookie_str.startsWith("$Version") )
{
StringTokenizer tk = new StringTokenizer(cookie_str, ",");
while( tk.hasMoreElements() )
list.add( parseCookie(url, (String)tk.nextElement()) );
}
else
list.add( parseCookie(url, cookie_str) );
return list;
}
private XCookie parseCookie(URL url, String cookie_str)
{
XCookie cookie = new XCookie();
StringTokenizer tk = new StringTokenizer(cookie_str, ";");
String name_value = tk.nextToken();
int equals_index = name_value.indexOf("=");
cookie.setName(name_value.substring(0, equals_index));
cookie.setValue(name_value.substring(equals_index + 1));
while( tk.hasMoreTokens() )
{
String pair = tk.nextToken().trim();
int index = pair.indexOf("=");
if( index<0 )
{
String name = pair;
if(name.equalsIgnoreCase("secure"))
cookie.setSecure(true);
}
else
{
String name = pair.substring(0, index);
String value = pair.substring(index + 1);
if( name.equalsIgnoreCase("expires") )
cookie.setExpires(value);
else if( name.equalsIgnoreCase("path") )
cookie.setPath(value);
else if( name.equalsIgnoreCase("comment") )
cookie.setComment(value);
else if( name.equalsIgnoreCase("domain") )
cookie.setDomain(value);
else if( name.equalsIgnoreCase("version") )
cookie.setVersion(value);
}
}
if( cookie.getDomain()==null )
cookie.setDomain(url.getHost());
if(cookie.getPath() == null)
{
String url_file = url.getFile();
int index = url_file.lastIndexOf("/");
if( index>=url_file.length()-1 )
cookie.setPath(url_file);
else
cookie.setPath(url_file.substring(0, index));
}
return cookie;
}
public Iterator getApplicableCookies(URL url)
{
ArrayList applicable_cookies = new ArrayList();
Iterator it = cookies.iterator();
while(it.hasNext())
{
XCookie cookie = (XCookie)it.next();
if( !url.getHost().endsWith(cookie.getDomain()) )
continue;
if( !hasSamePath(url,cookie.getPath()) )
continue;
applicable_cookies.add(cookie);
}
return applicable_cookies.iterator();
}
public void validateAllCookies()
{
ArrayList to_remove = new ArrayList();
Iterator it = cookies.iterator();
while(it.hasNext())
{
XCookie cookie = (XCookie)it.next();
if( !cookie.isValid() )
to_remove.add(cookie);
}
cookies.removeAll(to_remove);
}
private void updateListener(XCookieListener listener)
{
Iterator it = cookies.iterator();
while( it.hasNext() )
listener.cookieAdded( (XCookie)it.next() );
}
// Attributes:
private LinkedList cookieListeners = new LinkedList();
private LinkedList cookies = new LinkedList();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -