1 package org.columba.core.plugin; 19 20 import java.io.InputStream ; 21 import java.util.Enumeration ; 22 import java.util.Hashtable ; 23 import java.util.Vector ; 24 25 import org.columba.api.plugin.ExtensionMetadata; 26 import org.columba.api.plugin.IExtension; 27 import org.columba.api.plugin.IExtensionHandler; 28 import org.columba.api.plugin.PluginMetadata; 29 30 37 public class ExtensionHandler implements IExtensionHandler { 38 39 private static final java.util.logging.Logger LOG = java.util.logging.Logger 40 .getLogger("org.columba.core.plugin"); 41 42 private String id; 43 private String parent; 44 45 protected Hashtable map = new Hashtable (); 46 47 51 public ExtensionHandler(String id, String parent) { 52 if ( id == null ) throw new IllegalArgumentException ("id == null"); 53 54 this.id = id; 55 } 56 57 61 public void addExtension(String id, IExtension extension) { 62 if (id == null) 63 throw new IllegalArgumentException ("id == null"); 64 if (extension == null) 65 throw new IllegalArgumentException ("extension == null"); 66 67 if (map.containsKey(id)) { 68 LOG.severe("duplicate id=" + id); 69 return; 70 } 71 72 map.put(id, extension); 73 74 } 75 76 79 public IExtension getExtension(String id) { 80 if (id == null) 81 throw new IllegalArgumentException ("id == null"); 82 83 if (map.containsKey(id)) 84 return (IExtension) map.get(id); 85 86 return null; 87 } 88 89 92 public String getId() { 93 return id; 94 } 95 96 99 public boolean exists(String id) { 100 return map.containsKey(id); 101 } 102 103 106 107 110 public void handlePluginError(String id) { 111 112 IExtension extension = getExtension(id); 114 ExtensionMetadata metadata = extension.getMetadata(); 115 116 LOG.severe("Failed to load extension= " + metadata.getId()); 117 LOG.severe("Classname= " + metadata.getClassname()); 118 119 125 127 } 128 129 132 135 public Hashtable getMap() { 136 return map; 137 } 138 139 142 public String [] getPluginIdList() { 143 Vector result = new Vector (); 144 Enumeration _enum = map.elements(); 145 while (_enum.hasMoreElements()) { 146 IExtension extension = (IExtension) _enum.nextElement(); 147 String id = extension.getMetadata().getId(); 148 149 result.add(id); 150 } 151 152 return (String []) result.toArray(new String [0]); 153 } 154 155 158 public Enumeration getExtensionEnumeration() { 159 return map.elements(); 160 } 161 162 165 public Enumeration getExternalExtensionsEnumeration() { 166 Enumeration e = getExtensionEnumeration(); 167 168 Vector v = new Vector (); 169 while (e.hasMoreElements()) { 170 IExtension extension = (IExtension) e.nextElement(); 171 if (extension.isInternal() == false) 172 v.add(extension); 173 } 174 175 return v.elements(); 176 } 177 178 181 public void loadExtensionsFromStream(InputStream is) { 182 Enumeration e = new ExtensionXMLParser().loadExtensionsFromStream(is, 183 null, true); 184 while (e.hasMoreElements()) { 185 IExtension extension = (IExtension) e.nextElement(); 186 addExtension(extension.getMetadata().getId(), extension); 187 } 188 } 189 190 public void loadExternalExtensionsFromStream(PluginMetadata pluginMetadata, 191 InputStream is) { 192 Enumeration e = new ExtensionXMLParser().loadExtensionsFromStream(is, 193 pluginMetadata, false); 194 while (e.hasMoreElements()) { 195 IExtension extension = (IExtension) e.nextElement(); 196 addExtension(extension.getMetadata().getId(), extension); 197 } 198 } 199 } | Popular Tags |