|
What this is
Other links
The source code
/*
* PluginList.java - Plugin list downloaded from server
* :tabSize=8:indentSize=8:noTabs=false:
* :folding=explicit:collapseFolds=1:
*
* Copyright (C) 2001, 2003 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;
//{{{ Imports
import com.microstar.xml.*;
import java.io.*;
import java.net.URL;
import java.util.Hashtable;
import java.util.Vector;
import java.util.zip.GZIPInputStream;
import org.gjt.sp.util.Log;
import org.gjt.sp.jedit.*;
//}}}
/**
* Plugin list downloaded from server.
* @since jEdit 3.2pre2
*/
class PluginList
{
/**
* Magic numbers used for auto-detecting GZIP files.
*/
public static final int GZIP_MAGIC_1 = 0x1f;
public static final int GZIP_MAGIC_2 = 0x8b;
Vector plugins;
Hashtable pluginHash;
Vector pluginSets;
//{{{ PluginList constructor
PluginList() throws Exception
{
plugins = new Vector();
pluginHash = new Hashtable();
pluginSets = new Vector();
String path = jEdit.getProperty("plugin-manager.export-url");
String id = jEdit.getProperty("plugin-manager.mirror.id");
if (!id.equals(MirrorList.Mirror.NONE))
path += "?mirror="+id;
PluginListHandler handler = new PluginListHandler(this,path);
XmlParser parser = new XmlParser();
parser.setHandler(handler);
InputStream in = new BufferedInputStream(new URL(path).openStream());
try
{
if(in.markSupported())
{
in.mark(2);
int b1 = in.read();
int b2 = in.read();
in.reset();
if(b1 == GZIP_MAGIC_1 && b2 == GZIP_MAGIC_2)
in = new GZIPInputStream(in);
}
parser.parse(null,null,new InputStreamReader(in,"UTF8"));
}
finally
{
in.close();
}
} //}}}
//{{{ addPlugin() method
void addPlugin(Plugin plugin)
{
plugin.checkIfInstalled();
plugins.addElement(plugin);
pluginHash.put(plugin.name,plugin);
} //}}}
//{{{ addPluginSet() method
void addPluginSet(PluginSet set)
{
pluginSets.addElement(set);
} //}}}
//{{{ finished() method
void finished()
{
// after the entire list is loaded, fill out plugin field
// in dependencies
for(int i = 0; i < plugins.size(); i++)
{
Plugin plugin = (Plugin)plugins.elementAt(i);
for(int j = 0; j < plugin.branches.size(); j++)
{
Branch branch = (Branch)plugin.branches.elementAt(j);
for(int k = 0; k < branch.deps.size(); k++)
{
Dependency dep = (Dependency)branch.deps.elementAt(k);
if(dep.what.equals("plugin"))
dep.plugin = (Plugin)pluginHash.get(dep.pluginName);
}
}
}
} //}}}
//{{{ dump() method
void dump()
{
for(int i = 0; i < plugins.size(); i++)
{
System.err.println((Plugin)plugins.elementAt(i));
System.err.println();
}
} //}}}
//{{{ PluginSet class
static class PluginSet
{
String name;
String description;
Vector plugins = new Vector();
public String toString()
{
return plugins.toString();
}
} //}}}
//{{{ Plugin class
static public class Plugin
{
String jar;
String name;
String description;
String author;
Vector branches = new Vector();
//String installed;
//String installedVersion;
void checkIfInstalled()
{
/* // check if the plugin is already installed.
// this is a bit of hack
PluginJAR[] jars = jEdit.getPluginJARs();
for(int i = 0; i < jars.length; i++)
{
String path = jars[i].getPath();
if(!new File(path).exists())
continue;
if(MiscUtilities.getFileName(path).equals(jar))
{
installed = path;
EditPlugin plugin = jars[i].getPlugin();
if(plugin != null)
{
installedVersion = jEdit.getProperty(
"plugin." + plugin.getClassName()
+ ".version");
}
break;
}
}
String[] notLoaded = jEdit.getNotLoadedPluginJARs();
for(int i = 0; i < notLoaded.length; i++)
{
String path = notLoaded[i];
if(MiscUtilities.getFileName(path).equals(jar))
{
installed = path;
break;
}
} */
}
String getInstalledVersion()
{
PluginJAR[] jars = jEdit.getPluginJARs();
for(int i = 0; i < jars.length; i++)
{
String path = jars[i].getPath();
if(MiscUtilities.getFileName(path).equals(jar))
{
EditPlugin plugin = jars[i].getPlugin();
if(plugin != null)
{
return jEdit.getProperty(
"plugin." + plugin.getClassName()
+ ".version");
}
else
return null;
}
}
return null;
}
String getInstalledPath()
{
PluginJAR[] jars = jEdit.getPluginJARs();
for(int i = 0; i < jars.length; i++)
{
String path = jars[i].getPath();
if(MiscUtilities.getFileName(path).equals(jar))
return path;
}
return null;
}
/**
* Find the first branch compatible with the running jEdit release.
*/
Branch getCompatibleBranch()
{
for(int i = 0; i < branches.size(); i++)
{
Branch branch = (Branch)branches.elementAt(i);
if(branch.canSatisfyDependencies())
return branch;
}
return null;
}
boolean canBeInstalled()
{
Branch branch = getCompatibleBranch();
return branch != null && !branch.obsolete
&& branch.canSatisfyDependencies();
}
void install(Roster roster, String installDirectory, boolean downloadSource)
{
String installed = getInstalledPath();
Branch branch = getCompatibleBranch();
if(branch.obsolete)
{
if(installed != null)
roster.addRemove(installed);
return;
}
//branch.satisfyDependencies(roster,installDirectory,
// downloadSource);
if(installed != null)
{
installDirectory = MiscUtilities.getParentOfPath(
installed);
}
roster.addInstall(
installed,
(downloadSource ? branch.downloadSource : branch.download),
installDirectory,
(downloadSource ? branch.downloadSourceSize : branch.downloadSize));
}
public String toString()
{
return name;
}
} //}}}
//{{{ Branch class
static class Branch
{
String version;
String date;
int downloadSize;
String download;
int downloadSourceSize;
String downloadSource;
boolean obsolete;
Vector deps = new Vector();
boolean canSatisfyDependencies()
{
for(int i = 0; i < deps.size(); i++)
{
Dependency dep = (Dependency)deps.elementAt(i);
if(!dep.canSatisfy())
return false;
}
return true;
}
void satisfyDependencies(Roster roster, String installDirectory,
boolean downloadSource)
{
for(int i = 0; i < deps.size(); i++)
{
Dependency dep = (Dependency)deps.elementAt(i);
dep.satisfy(roster,installDirectory,downloadSource);
}
}
public String toString()
{
return "[version=" + version + ",download=" + download
+ ",obsolete=" + obsolete + ",deps=" + deps + "]";
}
} //}}}
//{{{ Dependency class
static class Dependency
{
String what;
String from;
String to;
// only used if what is "plugin"
String pluginName;
Plugin plugin;
Dependency(String what, String from, String to, String pluginName)
{
this.what = what;
this.from = from;
this.to = to;
this.pluginName = pluginName;
}
boolean isSatisfied()
{
if(what.equals("plugin"))
{
for(int i = 0; i < plugin.branches.size(); i++)
{
String installedVersion = plugin.getInstalledVersion();
if(installedVersion != null
&&
(from == null || MiscUtilities.compareStrings(
installedVersion,from,false) >= 0)
&&
(to == null || MiscUtilities.compareStrings(
installedVersion,to,false) <= 0))
{
return true;
}
}
return false;
}
else if(what.equals("jdk"))
{
String javaVersion = System.getProperty("java.version").substring(0,3);
if((from == null || MiscUtilities.compareStrings(
javaVersion,from,false) >= 0)
&&
(to == null || MiscUtilities.compareStrings(
javaVersion,to,false) <= 0))
return true;
else
return false;
}
else if(what.equals("jedit"))
{
String build = jEdit.getBuild();
if((from == null || MiscUtilities.compareStrings(
build,from,false) >= 0)
&&
(to == null || MiscUtilities.compareStrings(
build,to,false) <= 0))
return true;
else
return false;
}
else
{
Log.log(Log.ERROR,this,"Invalid dependency: " + what);
return false;
}
}
boolean canSatisfy()
{
if(isSatisfied())
return true;
else if(what.equals("plugin"))
{
return plugin.canBeInstalled();
}
else
return false;
}
void satisfy(Roster roster, String installDirectory,
boolean downloadSource)
{
if(what.equals("plugin"))
{
String installedVersion = plugin.getInstalledVersion();
for(int i = 0; i < plugin.branches.size(); i++)
{
Branch branch = (Branch)plugin.branches
.elementAt(i);
if((installedVersion == null
||
MiscUtilities.compareStrings(
installedVersion,branch.version,false) < 0)
&&
(from == null || MiscUtilities.compareStrings(
branch.version,from,false) >= 0)
&&
(to == null || MiscUtilities.compareStrings(
branch.version,to,false) <= 0))
{
plugin.install(roster,installDirectory,
downloadSource);
return;
}
}
}
}
public String toString()
{
return "[what=" + what + ",from=" + from
+ ",to=" + to + ",plugin=" + plugin + "]";
}
} //}}}
}
|
| ... 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.