1 17 package org.eclipse.emf.importer.ui.contribution; 18 19 import java.net.URL ; 20 import java.util.ArrayList ; 21 import java.util.Collections ; 22 import java.util.HashMap ; 23 import java.util.Iterator ; 24 import java.util.List ; 25 import java.util.Map ; 26 27 import org.osgi.framework.Bundle; 28 29 import org.eclipse.core.runtime.CoreException; 30 import org.eclipse.core.runtime.IConfigurationElement; 31 import org.eclipse.core.runtime.IExtensionPoint; 32 import org.eclipse.core.runtime.Platform; 33 import org.eclipse.jface.resource.ImageDescriptor; 34 import org.eclipse.jface.viewers.LabelProvider; 35 import org.eclipse.jface.wizard.IWizard; 36 import org.eclipse.jface.wizard.IWizardNode; 37 import org.eclipse.swt.graphics.Image; 38 import org.eclipse.swt.graphics.Point; 39 40 import org.eclipse.emf.importer.ImporterPlugin; 41 42 43 46 public class ModelImporterUtil 47 { 48 public static class ModelImporterDescriptorImpl implements ModelImporterDescriptor 49 { 50 protected String id; 51 protected String name; 52 protected List extensions; 53 protected int types = ModelImporterDescriptor.TYPE_DEFAULT; 54 protected Image icon; 55 protected String description; 56 57 protected IConfigurationElement configurationElement; 58 59 public String getId() 60 { 61 return id; 62 } 63 64 public void setId(String id) 65 { 66 this.id = id; 67 } 68 69 public Image getIcon() 70 { 71 return icon; 72 } 73 74 public void setIcon(Image icon) 75 { 76 this.icon = icon; 77 } 78 79 public String getName() 80 { 81 return name; 82 } 83 84 public void setName(String name) 85 { 86 this.name = name; 87 } 88 89 public int getTypes() 90 { 91 return types; 92 } 93 94 public void setTypes(int types) 95 { 96 this.types = types; 97 } 98 99 public String getDescription() 100 { 101 return description; 102 } 103 104 public void setDescription(String description) 105 { 106 this.description = description; 107 } 108 109 public List getExtensions() 110 { 111 if (extensions == null) 112 { 113 extensions = new ArrayList (); 114 } 115 return extensions; 116 } 117 118 public IModelImporterWizard createWizard() 119 { 120 if (configurationElement != null) 121 { 122 try 123 { 124 Object object = configurationElement.createExecutableExtension("wizard"); 125 if (object instanceof IModelImporterWizard) 126 { 127 return (IModelImporterWizard)object; 128 } 129 } 130 catch (CoreException e) 131 { 132 } 133 } 134 return null; 135 } 136 } 137 138 public static class ModelImporterDescriptorLabelProvider extends LabelProvider 139 { 140 public Image getImage(Object element) 141 { 142 if (element instanceof ModelImporterDescriptor) 143 { 144 return ((ModelImporterDescriptor)element).getIcon(); 145 } 146 else 147 { 148 return super.getImage(element); 149 } 150 } 151 152 public String getText(Object element) 153 { 154 if (element instanceof ModelImporterDescriptor) 155 { 156 return ((ModelImporterDescriptor)element).getName(); 157 } 158 else 159 { 160 return super.getText(element); 161 } 162 } 163 } 164 165 public static class ModelImporterDescriptorWizardNode implements IWizardNode 166 { 167 protected boolean contentCreated = false; 168 protected ModelImporterDescriptor descriptor; 169 protected IModelImporterWizard modelImporterWizard; 170 protected Point point; 171 172 public ModelImporterDescriptorWizardNode(ModelImporterDescriptor descriptor) 173 { 174 this.descriptor = descriptor; 175 } 176 177 public void dispose() 178 { 179 modelImporterWizard = null; 180 descriptor = null; 181 point = null; 182 } 183 184 public IWizard getWizard() 185 { 186 if (modelImporterWizard == null) 187 { 188 if (descriptor != null) 189 { 190 modelImporterWizard = descriptor.createWizard(); 191 } 192 } 193 return modelImporterWizard; 194 } 195 196 public boolean isContentCreated() 197 { 198 return contentCreated; 199 } 200 201 public void setContentCreated(boolean contentCreated) 202 { 203 this.contentCreated = contentCreated; 204 } 205 206 public Point getExtent() 207 { 208 if (point == null) 209 { 210 point = new Point(-1, -1); 211 } 212 return point; 213 } 214 } 215 216 public final static String MODEL_IMPORTER_DESCRIPTORS_EXTENSION_POINT = "modelImporterDescriptors"; 217 218 private static List descriptors; 219 220 public static void dispose() 221 { 222 if (descriptors != null) 223 { 224 descriptors.clear(); 225 descriptors = null; 226 } 227 } 228 229 233 public static Map createModelImporterDescriptorWizardNodesMap() 234 { 235 if (descriptors != null) 236 { 237 Map map = new HashMap (); 238 for (Iterator i = descriptors.iterator(); i.hasNext();) 239 { 240 ModelImporterDescriptor modelImporterDescriptor = (ModelImporterDescriptor)i.next(); 241 ModelImporterDescriptorWizardNode wizardNode = new ModelImporterDescriptorWizardNode(modelImporterDescriptor); 242 map.put(modelImporterDescriptor, wizardNode); 243 } 244 return map; 245 } 246 else 247 { 248 return Collections.EMPTY_MAP; 249 } 250 } 251 252 public static List getModelImporterDescriptors() 253 { 254 if (descriptors == null) 255 { 256 descriptors = retrieveContributedModelImporterDescriptors(); 257 } 258 return descriptors; 259 } 260 261 public static ModelImporterDescriptor getModelImporterDescriptor(String id) 262 { 263 if (id != null) 264 { 265 for (Iterator i = getModelImporterDescriptors().iterator(); i.hasNext();) 266 { 267 ModelImporterDescriptor modelImporterDescriptor = (ModelImporterDescriptor)i.next(); 268 if (id.equals(modelImporterDescriptor.getId())) 269 { 270 return modelImporterDescriptor; 271 } 272 } 273 } 274 return null; 275 } 276 277 public static List filterModelImporterDescriptors(int type) 278 { 279 List descriptors = new ArrayList (); 280 for (Iterator i = getModelImporterDescriptors().iterator(); i.hasNext();) 281 { 282 ModelImporterDescriptor descriptor = (ModelImporterDescriptor)i.next(); 283 if ((descriptor.getTypes() & type) == type) 284 { 285 descriptors.add(descriptor); 286 } 287 } 288 return descriptors; 289 } 290 291 public static List filterModelImporterDescriptors(String extension) 292 { 293 List descriptors = new ArrayList (); 294 for (Iterator i = getModelImporterDescriptors().iterator(); i.hasNext();) 295 { 296 ModelImporterDescriptor descriptor = (ModelImporterDescriptor)i.next(); 297 if (descriptor.getExtensions().contains(extension)) 298 { 299 descriptors.add(descriptor); 300 } 301 } 302 return descriptors; 303 } 304 305 public static List retrieveContributedModelImporterDescriptors() 306 { 307 List descriptors = new ArrayList (); 308 309 IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint( 310 ImporterPlugin.ID, 311 MODEL_IMPORTER_DESCRIPTORS_EXTENSION_POINT); 312 IConfigurationElement[] configurationElements = extensionPoint.getConfigurationElements(); 313 for (int i = 0; i < configurationElements.length; i++) 314 { 315 ModelImporterDescriptor modelImporterDescriptor = createFromContribution(configurationElements[i]); 316 if (modelImporterDescriptor != null) 317 { 318 descriptors.add(modelImporterDescriptor); 319 } 320 } 321 322 return descriptors; 323 } 324 325 public static ModelImporterDescriptor createFromContribution(IConfigurationElement configurationElement) 326 { 327 if ("modelImporterDescriptor".equals(configurationElement.getName())) 328 { 329 String id = configurationElement.getAttribute("id"); 330 String name = configurationElement.getAttribute("name"); 331 String wizard = configurationElement.getAttribute("wizard"); 332 if (id != null && name != null && wizard != null) 333 { 334 ModelImporterDescriptorImpl descriptor = new ModelImporterDescriptorImpl(); 335 descriptor.setId(id); 336 descriptor.setName(name); 337 descriptor.setDescription(configurationElement.getAttribute("description")); 338 descriptor.configurationElement = configurationElement; 339 340 String imageKey = configurationElement.getAttribute("icon"); 341 if (imageKey != null) 342 { 343 Bundle pluginBundle = Platform.getBundle(configurationElement.getDeclaringExtension().getNamespace()); 344 URL path = pluginBundle.getEntry("/"); 345 URL fullPathString = null; 346 try 347 { 348 fullPathString = new URL (path, imageKey); 349 ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(fullPathString); 350 descriptor.setIcon(imageDescriptor.createImage()); 351 } 352 catch (Exception e) 353 { 354 } 355 } 356 357 String extensions = configurationElement.getAttribute("extensions"); 358 if (extensions != null) 359 { 360 String [] exts = extensions.split(","); 361 for (int i = 0; i < exts.length; i++) 362 { 363 String ext = exts[i].trim(); 364 if (ext.length() > 0) 365 { 366 descriptor.getExtensions().add(ext); 367 } 368 } 369 } 370 371 String typesAttribute = configurationElement.getAttribute("types"); 372 if (typesAttribute != null) 373 { 374 descriptor.setTypes(0); 375 String [] types = typesAttribute.split(","); 376 for (int i = 0; i < types.length; i++) 377 { 378 String type = types[i].trim(); 379 if ("project".equalsIgnoreCase(type)) 380 { 381 descriptor.setTypes(descriptor.getTypes() | ModelImporterDescriptor.TYPE_PROJECT); 382 } 383 else if ("file".equalsIgnoreCase(type)) 384 { 385 descriptor.setTypes(descriptor.getTypes() | ModelImporterDescriptor.TYPE_FILE); 386 } 387 } 388 } 389 390 return descriptor; 391 } 392 } 393 394 return null; 395 } 396 } 397 | Popular Tags |