1 11 package org.eclipse.core.runtime.model; 12 13 import java.net.URL ; 14 import java.util.HashMap ; 15 import java.util.List ; 16 import org.eclipse.core.internal.model.PluginMap; 17 import org.eclipse.core.internal.model.RegistryResolver; 18 import org.eclipse.core.internal.plugins.InternalPlatform; 19 import org.eclipse.core.runtime.Assert; 20 import org.eclipse.core.runtime.IStatus; 21 22 31 public class PluginRegistryModel { 32 33 protected PluginMap plugins = new PluginMap(new HashMap (30), false, true); 35 protected PluginMap fragments = new PluginMap(new HashMap (30), false, true); 36 private boolean readOnly = false; 37 private boolean resolved = false; 38 39 42 public PluginRegistryModel() { 43 super(); 44 } 45 46 53 public void addFragment(PluginFragmentModel fragment) { 54 assertIsWriteable(); 55 fragments.add(fragment); 56 } 57 58 65 public void addPlugin(PluginDescriptorModel plugin) { 66 assertIsWriteable(); 67 plugins.add(plugin); 68 } 69 70 74 protected void assertIsWriteable() { 75 Assert.isTrue(!isReadOnly(), "Model is read-only"); } 77 78 88 public PluginFragmentModel getFragment(String id) { 89 return (PluginFragmentModel) fragments.getAny(id); 90 } 91 92 102 public PluginFragmentModel getFragment(String id, String version) { 103 return (PluginFragmentModel) fragments.get(id, version); 104 } 105 106 111 public PluginFragmentModel[] getFragments() { 112 PluginFragmentModel[] result = new PluginFragmentModel[fragments.size()]; 113 fragments.copyToArray(result); 114 return result; 115 } 116 117 127 public PluginFragmentModel[] getFragments(String id) { 128 List versions = fragments.getVersions(id); 129 if (versions == null || versions.isEmpty()) 130 return new PluginFragmentModel[0]; 131 return (PluginFragmentModel[]) versions.toArray(new PluginFragmentModel[versions.size()]); 132 } 133 134 144 public PluginDescriptorModel getPlugin(String pluginId) { 145 return (PluginDescriptorModel) plugins.getAny(pluginId); 146 } 147 148 159 public PluginDescriptorModel getPlugin(String pluginId, String version) { 160 PluginDescriptorModel[] list = getPlugins(pluginId); 161 if (list == null || list.length == 0) 162 return null; 163 if (version == null) 164 return list[0]; 166 167 for (int i = 0; i < list.length; i++) { 168 PluginDescriptorModel element = list[i]; 169 if (element.getVersion().equals(version)) 170 return element; 171 } 172 return null; 173 } 174 175 180 public PluginDescriptorModel[] getPlugins() { 181 PluginDescriptorModel[] result = new PluginDescriptorModel[plugins.size()]; 182 plugins.copyToArray(result); 183 return result; 184 } 185 186 196 public PluginDescriptorModel[] getPlugins(String pluginId) { 197 List versions = plugins.getVersions(pluginId); 198 if (versions == null || versions.isEmpty()) 199 return new PluginDescriptorModel[0]; 200 return (PluginDescriptorModel[]) versions.toArray(new PluginDescriptorModel[versions.size()]); 201 202 } 203 204 211 public boolean isReadOnly() { 212 return readOnly; 213 } 214 215 221 public boolean isResolved() { 222 return resolved; 223 } 224 225 231 public void markReadOnly() { 232 readOnly = true; 233 plugins.markReadOnly(); 234 fragments.markReadOnly(); 235 } 236 237 240 public void markResolved() { 241 resolved = true; 242 } 243 244 252 public void removeFragment(String id, String version) { 253 assertIsWriteable(); 254 fragments.remove(id, version); 255 } 256 257 263 public void removeFragments(String id) { 264 assertIsWriteable(); 265 fragments.removeVersions(id); 266 } 267 268 276 public void removePlugin(String pluginId, String version) { 277 assertIsWriteable(); 278 plugins.remove(pluginId, version); 279 } 280 281 287 public void removePlugins(String pluginId) { 288 assertIsWriteable(); 289 plugins.removeVersions(pluginId); 290 } 291 292 312 public IStatus resolve(boolean trimDisabledPlugins, boolean doCrossLinking) { 313 RegistryResolver resolver = new RegistryResolver(); 314 resolver.setTrimPlugins(trimDisabledPlugins); 315 resolver.setCrossLink(doCrossLinking); 316 return resolver.resolve(this); 317 } 318 319 338 public static PluginRegistryModel parsePlugins(URL [] pluginPath, Factory factory) { 339 return InternalPlatform.parsePlugins(pluginPath, factory, false); 340 } 341 } 342 | Popular Tags |