|
From: Matt K. <me...@us...> - 2005-12-13 15:19:34
|
Update of /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/rubyeditor/templates In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5607/src/org/rubypeople/rdt/internal/ui/rubyeditor/templates Modified Files: RubyTemplateAccess.java Log Message: added rubyTemplateProvider extension point for RadRails use Index: RubyTemplateAccess.java =================================================================== RCS file: /cvsroot/rubyeclipse/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/rubyeditor/templates/RubyTemplateAccess.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** RubyTemplateAccess.java 2 Mar 2005 00:56:52 -0000 1.2 --- RubyTemplateAccess.java 13 Dec 2005 15:19:21 -0000 1.3 *************** *** 12,21 **** --- 12,32 ---- import java.io.IOException; + import java.util.ArrayList; + import java.util.List; + + import org.eclipse.core.runtime.CoreException; + import org.eclipse.core.runtime.IConfigurationElement; + import org.eclipse.core.runtime.IExtension; + import org.eclipse.core.runtime.IExtensionPoint; + import org.eclipse.core.runtime.IExtensionRegistry; + import org.eclipse.core.runtime.Platform; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.templates.ContextTypeRegistry; + import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData; import org.eclipse.jface.text.templates.persistence.TemplateStore; import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry; import org.eclipse.ui.editors.text.templates.ContributionTemplateStore; import org.rubypeople.rdt.internal.ui.RubyPlugin; + import org.rubypeople.rdt.ui.extensions.IRubyTemplateProvider; *************** *** 60,66 **** --- 71,141 ---- RubyPlugin.log(e); } + + // Load extension templates + TemplatePersistenceData[] tempData = getExtensionTemplateData(); + for(int i = 0; i < tempData.length; i++) { + fStore.add(tempData[i]); + } } return fStore; } + + /** + * Finds all extensions to the rubyTemplateProvider extension point and return their template data. + * + * @return an array of TemplatePersistenceData + */ + private TemplatePersistenceData[] getExtensionTemplateData() { + List extensions = new ArrayList(); + IExtensionRegistry reg = Platform.getExtensionRegistry(); + + IExtensionPoint[] points = reg.getExtensionPoints(RubyPlugin.PLUGIN_ID); + IExtensionPoint point = null; + + // Search the extension registry for the rubyTemplateProvider extension point + if(points != null){ + for (int i = 0; i < points.length; i++) { + IExtensionPoint currentPoint = points[i]; + if(currentPoint.getUniqueIdentifier().endsWith("rubyTemplateProvider")){ + point = currentPoint; + break; + } + } + + // Find all extensions of the point + if(point != null){ + IExtension[] exts = point.getExtensions(); + + IRubyTemplateProvider prov = null; + + // Get the implementing class of the extension + for (int i = 0; i < exts.length; i++) { + IConfigurationElement[] elem = exts[i].getConfigurationElements(); + String attrs[] = elem[0].getAttributeNames(); + try { + Object tempProv = elem[0].createExecutableExtension("class"); + if (tempProv instanceof IRubyTemplateProvider) { + prov = (IRubyTemplateProvider) tempProv; + extensions.add(prov); + } + } catch (CoreException e) { + RubyPlugin.log(e); + } + } + } + } + + // Get the template data from the extensions + if(extensions.size() > 0){ + for(int i=0; i< extensions.size(); i++){ + IRubyTemplateProvider currentProvider = (IRubyTemplateProvider) extensions.get(i); + TemplatePersistenceData[] templates = currentProvider.getTemplateData(); + if(templates != null){ + return templates; + } + } + } + return null; + } /** |