⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xcookiemanager.java

📁 XBrowser是一个完全免费并且开源的Web浏览器
💻 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 + -