fix missing X under substance

SPARK-1143 -  Add Plugin Dependencies
generic on user search

git-svn-id: http://svn.igniterealtime.org/svn/repos/spark/trunk@11737 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Michael Will
2010-06-24 14:22:05 +00:00
committed by michael.will
parent 5bacf95a64
commit 1ebb6c17ee
6 changed files with 226 additions and 35 deletions

View File

@ -19,21 +19,6 @@
*/
package org.jivesoftware.spark;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.jivesoftware.MainWindowListener;
import org.jivesoftware.Spark;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.plugin.PluginClassLoader;
import org.jivesoftware.spark.plugin.PublicPlugin;
import org.jivesoftware.spark.util.URLFileSystem;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.settings.JiveInfo;
import javax.swing.SwingUtilities;
import java.awt.EventQueue;
import java.io.File;
import java.io.FileOutputStream;
@ -41,7 +26,6 @@ import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
@ -54,6 +38,22 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.zip.ZipFile;
import javax.swing.SwingUtilities;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.jivesoftware.MainWindowListener;
import org.jivesoftware.Spark;
import org.jivesoftware.spark.plugin.Plugin;
import org.jivesoftware.spark.plugin.PluginClassLoader;
import org.jivesoftware.spark.plugin.PluginDependency;
import org.jivesoftware.spark.plugin.PublicPlugin;
import org.jivesoftware.spark.util.URLFileSystem;
import org.jivesoftware.spark.util.log.Log;
import org.jivesoftware.sparkimpl.settings.JiveInfo;
/**
* This manager is responsible for the loading of all Plugins and Workspaces within Spark environment.
*
@ -242,6 +242,22 @@ public class PluginManager implements MainWindowListener {
return null;
}
// set dependencies
try {
List dependencies = plugin.selectNodes("depends/plugin");
for (Object depend1 : dependencies) {
Element depend = (Element) depend1;
PluginDependency dependency = new PluginDependency();
dependency.setVersion(depend.selectSingleNode("version").getText());
dependency.setName(depend.selectSingleNode("name").getText());
publicPlugin.addDependency(dependency);
}
}
catch (Exception e) {
e.printStackTrace();
}
// Do operating system check.
boolean operatingSystemOK = isOperatingSystemOK(plugin);
if (!operatingSystemOK) {
@ -406,6 +422,63 @@ public class PluginManager implements MainWindowListener {
public void initializePlugins() {
try
{
int j = 0;
boolean dependsfound = false;
// Dependency check
for (int i = 0; i< publicPlugins.size(); i++) {
// if dependencies are available, check these
if(((PublicPlugin)publicPlugins.get(i)).getDependency().size()>0) {
List<PluginDependency> dependencies = ((PublicPlugin)publicPlugins.get(i)).getDependency();
// go trough all dependencies
for( PluginDependency dependency : dependencies) {
j = 0;
dependsfound = false;
// look for the specific plugin
for(PublicPlugin plugin1 :publicPlugins) {
if(plugin1.getName()!= null
&& plugin1.getName().equals(dependency.getName())) {
// if the version is compatible then reorder
if(dependency.compareVersion(plugin1.getVersion())){
dependsfound = true;
// when depended Plugin hadn't been installed yet
if(j>i){
// change the order
publicPlugins.add(i, publicPlugins.get(j));
publicPlugins.remove(j+1);
plugins.add(i, plugins.get(j));
plugins.remove(j+1);
// start again, to check the other dependencies
i--;
}
}
// else don't load the plugin and show an error
else {
Log.error("Depended Plugin " + dependency.getName() + " hasn't the right version (" + dependency.getVersion() + "<>" + ((PublicPlugin)publicPlugins.get(i)).getVersion());
}
break;
}
j++;
}
// if the depended Plugin wasn't found, then show error
if(!dependsfound) {
Log.error("Depended Plugin " + dependency.getName() + " is missing for the Plugin " + ((PublicPlugin)publicPlugins.get(i)).getName());
// delete the Plugin, because the depended Plugin is missing
publicPlugins.remove(i);
plugins.remove(i);
i--;
break;
}
}
}
}
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
for (Plugin plugin1 : plugins) {

View File

@ -0,0 +1,71 @@
package org.jivesoftware.spark.plugin;
import net.java.sipmack.common.Log;
public class PluginDependency
{
private String name;
private String version;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public boolean compareVersion(String version) {
if(version != null && getVersion() != null) {
String checkVersion[] = version.split("\\.");
String originalVersion[] = getVersion().split("\\.");
int maxlength = (originalVersion.length >= checkVersion.length)?originalVersion.length:checkVersion.length;
// go through all Version-parts
for(int i= 0; i < maxlength; i++) {
// if the checked version is too short
if ( checkVersion.length <= i
&& originalVersion[i].equals(0))
return true;
else if (checkVersion.length <= i)
return false;
// if the original version is long enough
if(originalVersion.length > i) {
// convert to integer
try {
int originalVersNumber = Integer.valueOf(originalVersion[i]).intValue();
int checkVersNumber = Integer.valueOf(checkVersion[i]).intValue();
// check the numbers
if(checkVersNumber > originalVersNumber) {
return true;
}
else if(checkVersNumber < originalVersNumber) {
return false;
}
}
catch(Exception e) {
Log.error("Version " + checkVersion + " contains letters.", e);
return false;
}
}
else {
return true;
}
}
return true;
}
return false;
}
}

View File

@ -20,6 +20,8 @@
package org.jivesoftware.spark.plugin;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class PublicPlugin {
private String name;
@ -35,8 +37,8 @@ public class PublicPlugin {
private boolean smallIconAvailable;
private boolean largeIconAvailable;
private String minVersion;
private File pluginDir;
private List<PluginDependency> dependencies = new ArrayList<PluginDependency>();
public String getName() {
return name;
@ -149,4 +151,12 @@ public class PublicPlugin {
public void setMinVersion(String minVersion) {
this.minVersion = minVersion;
}
public void addDependency(PluginDependency dependency) {
dependencies.add(dependency);
}
public List<PluginDependency> getDependency() {
return dependencies;
}
}

View File

@ -1151,13 +1151,6 @@ public class ChatContainer extends SparkTabbedPane implements MessageListener, C
chatFrame = new ChatFrame();
}
// The ultimate workground for 1.6
chatFrame.dispose();
chatFrame.setFocusableWindowState(false);
chatFrame.setFocusableWindowState(true);
chatFrame.dispose();
chatFrame.addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent windowEvent) {
stopFlashing();

View File

@ -20,6 +20,7 @@
package org.jivesoftware.sparkimpl.search.users;
import org.jivesoftware.Spark;
import org.jivesoftware.resource.Res;
import org.jivesoftware.resource.SparkRes;
import org.jivesoftware.smack.XMPPException;
@ -61,10 +62,11 @@ import java.io.IOException;
* UserSearchForm is used to do explicit searching of users using the JEP 55 Search Service.
*/
public class UserSearchForm extends JPanel {
private static final long serialVersionUID = -9192188543673595941L;
private JComboBox servicesBox;
private UserSearchManager searchManager;
private Collection searchServices;
private Collection<String> searchServices;
private CardLayout cardLayout = new CardLayout();
private JPanel cardPanel = new JPanel();
@ -74,14 +76,14 @@ public class UserSearchForm extends JPanel {
private Map<String,SearchForm> serviceMap = new HashMap<String,SearchForm>();
private static File pluginsettings = new File(System.getProperty("user.home") + "\\Spark\\search.properties"); //new
private static File pluginsettings = new File(Spark.getSparkUserHome() + File.separator + "search.properties"); //new
/**
* Initializes the UserSearchForm with all available search services.
*
* @param searchServices a Collection of all search services found.
*/
public UserSearchForm(Collection searchServices) {
public UserSearchForm(Collection<String> searchServices) {
setLayout(new GridBagLayout());
cardPanel.setLayout(cardLayout);
@ -104,8 +106,8 @@ public class UserSearchForm extends JPanel {
// Populate with Search Services
servicesBox = new JComboBox();
for (Object searchService : searchServices) {
String service = (String) searchService;
for (String searchService : searchServices) {
String service = searchService;
servicesBox.addItem(service);
}
@ -122,12 +124,10 @@ public class UserSearchForm extends JPanel {
props.load(new FileInputStream(pluginsettings));
String testsearch;
numbprop_bool=true;
while (numbprop_bool)
{
while (numbprop_bool) {
nextprop = "search"+numbprop;
testsearch = props.getProperty(nextprop);
if (null != testsearch)
{
if (null != testsearch) {
Log.warning("Search-Info: SearchService-" + numbprop + " from properties-file is " + nextprop + " : " + testsearch);
servicesBox.addItem(testsearch);
numbprop++;

View File

@ -0,0 +1,44 @@
package org.jivesoftware.spark.plugin;
import org.jivesoftware.spark.plugin.PluginDependency;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
public class PluginDependencyTest
{
@Test
public void testCompare()
{
PluginDependency depend = new PluginDependency();
depend.setName("Test");
depend.setVersion("1.0.0");
assertTrue(depend.compareVersion("1.0.0"));
assertTrue(depend.compareVersion("1.1"));
assertTrue(depend.compareVersion("1.1.1"));
assertFalse(depend.compareVersion("0.9.0"));
assertTrue(depend.compareVersion("1.9.0.0"));
assertFalse(depend.compareVersion("0.9.1"));
assertTrue(depend.compareVersion("1.9.1"));
depend.setVersion("2.0.0.0");
assertTrue(depend.compareVersion("2.1"));
assertTrue(depend.compareVersion("2.1.1"));
assertFalse(depend.compareVersion("0.9.0"));
assertTrue(depend.compareVersion("2.9.0.0"));
assertFalse(depend.compareVersion("0.9.1"));
assertTrue(depend.compareVersion("2.9.1"));
depend.setVersion("2.1");
assertTrue(depend.compareVersion("2.1"));
assertTrue(depend.compareVersion("2.1.1"));
assertTrue(depend.compareVersion("2.1.0"));
assertFalse(depend.compareVersion("0.9.0"));
assertTrue(depend.compareVersion("2.9.0.0"));
assertFalse(depend.compareVersion("0.9.1"));
assertTrue(depend.compareVersion("2.9.1"));
}
}