KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > emf > importer > ui > contribution > ModelImporterUtil


1 /**
2  * <copyright>
3  *
4  * Copyright (c) 2005 IBM Corporation and others.
5  * All rights reserved. This program and the accompanying materials
6  * are made available under the terms of the Eclipse Public License v1.0
7  * which accompanies this distribution, and is available at
8  * http://www.eclipse.org/legal/epl-v10.html
9  *
10  * Contributors:
11  * IBM - Initial API and implementation
12  *
13  * </copyright>
14  *
15  * ModelImporterUtil.java,v 1.1 2005/05/12 17:10:24 marcelop Exp
16  */

17 package org.eclipse.emf.importer.ui.contribution;
18
19 import java.net.URL JavaDoc;
20 import java.util.ArrayList JavaDoc;
21 import java.util.Collections JavaDoc;
22 import java.util.HashMap JavaDoc;
23 import java.util.Iterator JavaDoc;
24 import java.util.List JavaDoc;
25 import java.util.Map JavaDoc;
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 /**
44  * @since 2.1.0
45  */

46 public class ModelImporterUtil
47 {
48   public static class ModelImporterDescriptorImpl implements ModelImporterDescriptor
49   {
50     protected String JavaDoc id;
51     protected String JavaDoc name;
52     protected List JavaDoc extensions;
53     protected int types = ModelImporterDescriptor.TYPE_DEFAULT;
54     protected Image icon;
55     protected String JavaDoc description;
56     
57     protected IConfigurationElement configurationElement;
58
59     public String JavaDoc getId()
60     {
61       return id;
62     }
63
64     public void setId(String JavaDoc 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 JavaDoc getName()
80     {
81       return name;
82     }
83
84     public void setName(String JavaDoc 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 JavaDoc getDescription()
100     {
101       return description;
102     }
103
104     public void setDescription(String JavaDoc description)
105     {
106       this.description = description;
107     }
108     
109     public List JavaDoc getExtensions()
110     {
111       if (extensions == null)
112       {
113         extensions = new ArrayList JavaDoc();
114       }
115       return extensions;
116     }
117
118     public IModelImporterWizard createWizard()
119     {
120       if (configurationElement != null)
121       {
122         try
123         {
124           Object JavaDoc 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 JavaDoc 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 JavaDoc getText(Object JavaDoc 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 JavaDoc MODEL_IMPORTER_DESCRIPTORS_EXTENSION_POINT = "modelImporterDescriptors";
217
218   private static List JavaDoc descriptors;
219
220   public static void dispose()
221   {
222     if (descriptors != null)
223     {
224       descriptors.clear();
225       descriptors = null;
226     }
227   }
228
229   /**
230    * @return a map in which the key is a {@link ModelImporterDescriptor} and
231    * the value is a {@link ModelImporterDescriptorWizardNode}
232    */

233   public static Map JavaDoc createModelImporterDescriptorWizardNodesMap()
234   {
235     if (descriptors != null)
236     {
237       Map JavaDoc map = new HashMap JavaDoc();
238       for (Iterator JavaDoc 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 JavaDoc getModelImporterDescriptors()
253   {
254     if (descriptors == null)
255     {
256       descriptors = retrieveContributedModelImporterDescriptors();
257     }
258     return descriptors;
259   }
260
261   public static ModelImporterDescriptor getModelImporterDescriptor(String JavaDoc id)
262   {
263     if (id != null)
264     {
265       for (Iterator JavaDoc 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 JavaDoc filterModelImporterDescriptors(int type)
278   {
279     List JavaDoc descriptors = new ArrayList JavaDoc();
280     for (Iterator JavaDoc 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 JavaDoc filterModelImporterDescriptors(String JavaDoc extension)
292   {
293     List JavaDoc descriptors = new ArrayList JavaDoc();
294     for (Iterator JavaDoc 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 JavaDoc retrieveContributedModelImporterDescriptors()
306   {
307     List JavaDoc descriptors = new ArrayList JavaDoc();
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 JavaDoc id = configurationElement.getAttribute("id");
330       String JavaDoc name = configurationElement.getAttribute("name");
331       String JavaDoc 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 JavaDoc imageKey = configurationElement.getAttribute("icon");
341         if (imageKey != null)
342         {
343           Bundle pluginBundle = Platform.getBundle(configurationElement.getDeclaringExtension().getNamespace());
344           URL JavaDoc path = pluginBundle.getEntry("/");
345           URL JavaDoc fullPathString = null;
346           try
347           {
348             fullPathString = new URL JavaDoc(path, imageKey);
349             ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(fullPathString);
350             descriptor.setIcon(imageDescriptor.createImage());
351           }
352           catch (Exception JavaDoc e)
353           {
354           }
355         }
356
357         String JavaDoc extensions = configurationElement.getAttribute("extensions");
358         if (extensions != null)
359         {
360           String JavaDoc[] exts = extensions.split(",");
361           for (int i = 0; i < exts.length; i++)
362           {
363             String JavaDoc ext = exts[i].trim();
364             if (ext.length() > 0)
365             {
366               descriptor.getExtensions().add(ext);
367             }
368           }
369         }
370
371         String JavaDoc typesAttribute = configurationElement.getAttribute("types");
372         if (typesAttribute != null)
373         {
374           descriptor.setTypes(0);
375           String JavaDoc[] types = typesAttribute.split(",");
376           for (int i = 0; i < types.length; i++)
377           {
378             String JavaDoc 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