| 
What this is
 Other links
 The source code
/*
 * PluginListHandler.java - XML handler for the plugin list
 * Copyright (C) 2001 Slava Pestov
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package org.gjt.sp.jedit.pluginmgr;
import com.microstar.xml.*;
import java.io.*;
import java.util.Stack;
import org.gjt.sp.util.Log;
class PluginListHandler extends HandlerBase
{
	PluginListHandler(PluginList pluginList, String path)
	{
		this.pluginList = pluginList;
		this.path = path;
		stateStack = new Stack();
	}
	public Object resolveEntity(String publicId, String systemId)
	{
		if("plugins.dtd".equals(systemId))
		{
			// this will result in a slight speed up, since we
			// don't need to read the DTD anyway, as AElfred is
			// non-validating
			return new StringReader("");
			/* try
			{
				return new BufferedReader(new InputStreamReader(
					getClass().getResourceAsStream(
					"/org/gjt/sp/jedit/pluginmgr/plugins.dtd")));
			}
			catch(Exception e)
			{
				Log.log(Log.ERROR,this,"Error while opening"
					+ " plugins.dtd:");
				Log.log(Log.ERROR,this,e);
			} */
		}
		return null;
	}
	public void attribute(String aname, String value, boolean isSpecified)
	{
		aname = (aname == null) ? null : aname.intern();
		value = (value == null) ? null : value.intern();
		if(aname == "NAME")
			name = value;
		else if(aname == "JAR")
			jar = value;
		else if(aname == "VERSION")
			version = value;
		else if(aname == "DATE")
			date = value;
		else if(aname == "OBSOLETE")
			obsolete = ("TRUE".equals(value));
		else if(aname == "WHAT")
			depWhat = value;
		else if(aname == "FROM")
			depFrom = value;
		else if(aname == "TO")
			depTo = value;
		else if(aname == "PLUGIN")
			depPlugin = value;
		else if(aname == "SIZE")
		{
			size = Integer.parseInt(value);
			if(size == 0)
				Log.log(Log.WARNING,this,"SIZE = 0");
		}
	}
	public void doctypeDecl(String name, String publicId,
		String systemId) throws Exception
	{
		if("PLUGINS".equals(name))
			return;
		Log.log(Log.ERROR,this,path + ": DOCTYPE must be PLUGINS");
	}
	public void charData(char[] c, int off, int len)
	{
		String tag = peekElement();
		String text = new String(c, off, len);
		if(tag == "DESCRIPTION")
		{
			description = text;
		}
		else if(tag == "PLUGIN_SET_ENTRY")
			pluginSetEntry = text;
		else if(tag == "AUTHOR")
		{
			if(author != null && author.length() != 0)
				author = author + ", " + text;
			else
				author = text;
		}
		else if(tag == "DOWNLOAD")
			download = text;
		else if(tag == "DOWNLOAD_SOURCE")
			downloadSource = text;
	}
	public void startElement(String tag)
	{
		tag = pushElement(tag);
		if(tag == "PLUGIN_SET")
		{
			description = null;
			pluginSet = new PluginList.PluginSet();
			pluginSet.name = name;
		}
		else if(tag == "PLUGIN")
		{
			description = null;
			author = null;
			branch = null;
			plugin = new PluginList.Plugin();
		}
		else if(tag == "BRANCH")
		{
			download = null;
			branch = new PluginList.Branch();
		}
		else if(tag == "DOWNLOAD")
			downloadSize = size;
		else if(tag == "DOWNLOAD_SOURCE")
			downloadSourceSize = size;
	}
	public void endElement(String tag)
	{
		if(tag == null)
			return;
		else
			tag = tag.intern();
		popElement();
		if(tag == "PLUGIN_SET")
		{
			pluginList.addPluginSet(pluginSet);
			pluginSet = null;
			pluginSetEntry = null;
		}
		else if(tag == "PLUGIN_SET_ENTRY")
		{
			pluginSet.plugins.addElement(pluginSetEntry);
			pluginSetEntry = null;
		}
		else if(tag == "PLUGIN")
		{
			plugin.jar = jar;
			plugin.name = name;
			plugin.author = author;
			plugin.description = description;
			pluginList.addPlugin(plugin);
			jar = null;
			name = null;
			author = null;
		}
		else if(tag == "BRANCH")
		{
			branch.version = version;
			branch.date = date;
			branch.download = download;
			branch.downloadSize = downloadSize;
			branch.downloadSource = downloadSource;
			branch.downloadSourceSize = downloadSourceSize;
			branch.obsolete = obsolete;
			plugin.branches.addElement(branch);
			version = null;
			download = null;
			obsolete = false;
		}
		else if(tag == "DEPEND")
		{
			PluginList.Dependency dep = new PluginList.Dependency(
				depWhat,depFrom,depTo,depPlugin);
			branch.deps.addElement(dep);
			depWhat = null;
			depFrom = null;
			depTo = null;
			depPlugin = null;
		}
	}
	public void startDocument()
	{
		try
		{
			pushElement(null);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
	public void endDocument()
	{
		pluginList.finished();
	}
	// end HandlerBase implementation
	// private members
	private String path;
	private PluginList pluginList;
	private PluginList.PluginSet pluginSet;
	private String pluginSetEntry;
	private PluginList.Plugin plugin;
	private String jar;
	private String author;
	private PluginList.Branch branch;
	private boolean obsolete;
	private String version;
	private String date;
	private String download;
	private int downloadSize;
	private String downloadSource;
	private int downloadSourceSize;
	private int size;
	private String depWhat;
	private String depFrom;
	private String depTo;
	private String depPlugin;
	private String name;
	private String description;
	private Stack stateStack;
	private String pushElement(String name)
	{
		name = (name == null) ? null : name.intern();
		stateStack.push(name);
		return name;
	}
	private String peekElement()
	{
		return (String) stateStack.peek();
	}
	private String popElement()
	{
		return (String) stateStack.pop();
	}
}
 | 
| ... this post is sponsored by my books ... | |
         
           #1 New Release!  | 
      
         
           FP Best Seller  | 
  
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse 
URI on this website is
paid back to open source projects.