Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 146652 Details for
Bug 282114
enable snippet view to work with objects not only strings
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
polished - java doc, removed snippet transfer, exception handling improved
patch_snippets_08_09.txt (text/plain), 104.67 KB, created by
Dimitar Giormov
on 2009-09-08 09:05:12 EDT
(
hide
)
Description:
polished - java doc, removed snippet transfer, exception handling improved
Filename:
MIME Type:
Creator:
Dimitar Giormov
Created:
2009-09-08 09:05:12 EDT
Size:
104.67 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.wst.common.snippets.tests >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/webtools/common/tests/org.eclipse.wst.common.snippets.tests/META-INF/MANIFEST.MF,v >retrieving revision 1.9 >diff -u -r1.9 MANIFEST.MF >--- META-INF/MANIFEST.MF 1 Jun 2008 07:24:12 -0000 1.9 >+++ META-INF/MANIFEST.MF 8 Sep 2009 13:06:53 -0000 >@@ -17,6 +17,7 @@ > org.eclipse.ui, > org.eclipse.wst.common.snippets, > org.eclipse.ui.ide, >- org.eclipse.ui.workbench.texteditor >+ org.eclipse.ui.workbench.texteditor, >+ org.eclipse.gef > Eclipse-LazyStart: true > Bundle-RequiredExecutionEnvironment: J2SE-1.4 >Index: .settings/org.eclipse.pde.prefs >=================================================================== >RCS file: /cvsroot/webtools/common/tests/org.eclipse.wst.common.snippets.tests/.settings/org.eclipse.pde.prefs,v >retrieving revision 1.1 >diff -u -r1.1 org.eclipse.pde.prefs >--- .settings/org.eclipse.pde.prefs 16 Apr 2006 19:36:43 -0000 1.1 >+++ .settings/org.eclipse.pde.prefs 8 Sep 2009 13:06:53 -0000 >@@ -1,15 +1,28 @@ >-#Sun Apr 16 14:05:29 EDT 2006 >+#Mon Aug 31 16:56:48 EDT 2009 >+compilers.f.unresolved-features=1 >+compilers.f.unresolved-plugins=1 >+compilers.incompatible-environment=1 > compilers.p.build=0 > compilers.p.deprecated=1 >+compilers.p.discouraged-class=1 > compilers.p.illegal-att-value=0 >+compilers.p.internal=1 >+compilers.p.missing-packages=2 >+compilers.p.missing-version-export-package=2 >+compilers.p.missing-version-import-package=2 >+compilers.p.missing-version-require-bundle=2 > compilers.p.no-required-att=0 > compilers.p.not-externalized-att=0 > compilers.p.unknown-attribute=0 > compilers.p.unknown-class=0 > compilers.p.unknown-element=0 >+compilers.p.unknown-identifier=1 > compilers.p.unknown-resource=0 > compilers.p.unresolved-ex-points=0 > compilers.p.unresolved-import=0 > compilers.p.unused-element-or-attribute=0 >+compilers.s.create-docs=false >+compilers.s.doc-folder=doc >+compilers.s.open-tags=1 > compilers.use-project=true > eclipse.preferences.version=1 >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/webtools/common/tests/org.eclipse.wst.common.snippets.tests/plugin.xml,v >retrieving revision 1.5 >diff -u -r1.5 plugin.xml >--- plugin.xml 27 Feb 2006 09:18:56 -0000 1.5 >+++ plugin.xml 8 Sep 2009 13:06:53 -0000 >@@ -29,5 +29,33 @@ > </item> > </category> > </extension> >+ <extension >+ point="org.eclipse.wst.common.snippets.SnippetProvider"> >+ <provider >+ class="org.eclipse.wst.common.snippets.tests.helpers.TextSnippetProvider2" >+ priority="101"> >+ <enablement> >+ <instanceof >+ value="org.eclipse.ui.texteditor.ITextEditor"> >+ </instanceof></enablement> >+ </provider> >+ <provider >+ class="org.eclipse.wst.common.snippets.tests.helpers.DummyProvider" >+ priority="2"> >+ <enablement> >+ <instanceof >+ value="org.eclipse.wst.common.snippets.tests.helpers.CommonApplicableInterface"> >+ </instanceof> >+ </enablement> >+ </provider> >+ <provider >+ class="org.eclipse.wst.common.snippets.tests.helpers.ComplexProvider" >+ priority="20"> >+ <enablement> >+ <instanceof >+ value="org.eclipse.wst.common.snippets.tests.helpers.SApplicableEditor"> >+ </instanceof></enablement> >+ </provider> >+ </extension> > > </plugin> >Index: src/org/eclipse/wst/common/snippets/tests/AllTests.java >=================================================================== >RCS file: /cvsroot/webtools/common/tests/org.eclipse.wst.common.snippets.tests/src/org/eclipse/wst/common/snippets/tests/AllTests.java,v >retrieving revision 1.1 >diff -u -r1.1 AllTests.java >--- src/org/eclipse/wst/common/snippets/tests/AllTests.java 30 Nov 2005 11:36:42 -0000 1.1 >+++ src/org/eclipse/wst/common/snippets/tests/AllTests.java 8 Sep 2009 13:06:53 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2005 IBM Corporation and others. >+ * Copyright (c) 2005, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -15,6 +15,9 @@ > import junit.framework.TestSuite; > > import org.eclipse.wst.common.snippets.core.tests.SnippetCoreTests; >+import org.eclipse.wst.common.snippets.tests.providers.SnippetProviderExtensionTests; >+import org.eclipse.wst.common.snippets.tests.providers.TextProviderTests; >+import org.eclipse.wst.common.snippets.tests.scenarios.ObjectOrientedSnippetScenario; > import org.eclipse.wst.common.snippets.ui.tests.SnippetUITests; > > >@@ -27,6 +30,9 @@ > public AllTests() { > super(); > addTest(new TestSuite(SnippetCoreTests.class)); >+ addTest(new TestSuite(SnippetProviderExtensionTests.class)); >+ addTest(new TestSuite(TextProviderTests.class)); > addTest(new TestSuite(SnippetUITests.class)); >+ addTest(new TestSuite(ObjectOrientedSnippetScenario.class)); > } > } >Index: src/org/eclipse/wst/common/snippets/tests/TestsPlugin.java >=================================================================== >RCS file: /cvsroot/webtools/common/tests/org.eclipse.wst.common.snippets.tests/src/org/eclipse/wst/common/snippets/tests/TestsPlugin.java,v >retrieving revision 1.1 >diff -u -r1.1 TestsPlugin.java >--- src/org/eclipse/wst/common/snippets/tests/TestsPlugin.java 30 Nov 2005 11:36:42 -0000 1.1 >+++ src/org/eclipse/wst/common/snippets/tests/TestsPlugin.java 8 Sep 2009 13:06:53 -0000 >@@ -9,6 +9,7 @@ > */ > public class TestsPlugin extends AbstractUIPlugin { > >+ public static final String PLUGIN_ID = "org.eclipse.wst.common.snippets.tests"; > //The shared instance. > private static TestsPlugin plugin; > >Index: src/org/eclipse/wst/common/snippets/tests/scenarios/ObjectOrientedSnippetScenario.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/scenarios/ObjectOrientedSnippetScenario.java >diff -N src/org/eclipse/wst/common/snippets/tests/scenarios/ObjectOrientedSnippetScenario.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/scenarios/ObjectOrientedSnippetScenario.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,130 @@ >+package org.eclipse.wst.common.snippets.tests.scenarios; >+ >+import java.io.BufferedReader; >+import java.io.ByteArrayInputStream; >+import java.io.File; >+import java.io.FileReader; >+import java.io.IOException; >+ >+import junit.framework.TestCase; >+ >+import org.eclipse.core.resources.IFile; >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.resources.ResourcesPlugin; >+import org.eclipse.core.runtime.NullProgressMonitor; >+import org.eclipse.gef.palette.PaletteDrawer; >+import org.eclipse.swt.widgets.Display; >+import org.eclipse.swt.widgets.Shell; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.ui.PlatformUI; >+import org.eclipse.ui.ide.IDE; >+import org.eclipse.wst.common.snippets.core.ISnippetsEntry; >+import org.eclipse.wst.common.snippets.internal.SnippetsPlugin; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawerFactory; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteRoot; >+import org.eclipse.wst.common.snippets.internal.ui.SnippetsView; >+import org.eclipse.wst.common.snippets.tests.helpers.ComplexProvider; >+ >+public class ObjectOrientedSnippetScenario extends TestCase { >+ >+ >+ private IFile file; >+ >+ protected void setUp() throws Exception { >+ super.setUp(); >+ String projectName = System.currentTimeMillis() + ""; >+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); >+ if (!project.exists()){ >+ project.create(new NullProgressMonitor()); >+ } >+ if (!project.isOpen()){ >+ project.open(new NullProgressMonitor()); >+ } >+ file = project.getFile("testTextSnippet.txt"); >+ if (!file.exists()){ >+ ByteArrayInputStream sr = new ByteArrayInputStream("test Text Snippet Provider".getBytes()); >+ file.create(sr, true, new NullProgressMonitor()); >+ } >+ } >+ >+ public void testSave() throws Exception { >+ SnippetsView view; >+ SnippetPaletteRoot anchor = null; >+ view = (SnippetsView) SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(SnippetsPlugin.NAMES.VIEW_ID); >+ if (view == null) { >+ view = (SnippetsView) SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(SnippetsPlugin.NAMES.VIEW_ID); >+ } >+ if (view != null) { >+ anchor = view.getRoot(); >+ } >+ Shell activeShell = Display.getDefault().getActiveShell(); >+ assertNotNull(activeShell); >+ PaletteDrawer drawer = (PaletteDrawer) new SnippetPaletteDrawerFactory().createNewEntry(activeShell, anchor); >+ drawer.setLabel("testName"); >+ >+ ComplexProvider provider = new ComplexProvider(); >+ IEditorPart openEditor = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file); >+ provider.setEditor(openEditor); >+ SnippetPaletteItem createSnippet = provider.createSnippet(drawer); >+ assertNotNull(createSnippet); >+ File f = new File (createSnippet.getStorageLocation().toOSString()); >+ assertTrue(f.exists()); >+ assertEquals(1, f.list().length); >+ assertEquals(ComplexProvider.TEST_TXT, f.listFiles()[0].getName()); >+ assertEquals(ComplexProvider.TESTING.trim(), getContents(f.listFiles()[0]).trim()); >+} >+ >+ public void testProviderBasedSourceType() throws Exception { >+ SnippetsView view; >+ SnippetPaletteRoot anchor = null; >+ view = (SnippetsView) SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(SnippetsPlugin.NAMES.VIEW_ID); >+ if (view == null) { >+ view = (SnippetsView) SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(SnippetsPlugin.NAMES.VIEW_ID); >+ } >+ if (view != null) { >+ anchor = view.getRoot(); >+ } >+ Shell activeShell = Display.getDefault().getActiveShell(); >+ assertNotNull(activeShell); >+ PaletteDrawer drawer = (PaletteDrawer) new SnippetPaletteDrawerFactory().createNewEntry(activeShell, anchor); >+ drawer.setLabel(getName()); >+ >+ ComplexProvider provider = new ComplexProvider(); >+ IEditorPart openEditor = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file); >+ provider.setEditor(openEditor); >+ SnippetPaletteItem createSnippet = provider.createSnippet(drawer); >+ assertNotNull(createSnippet); >+ File f = new File (createSnippet.getStorageLocation().toOSString()); >+ assertTrue(f.exists()); >+ assertEquals(1, f.list().length); >+ assertEquals(ComplexProvider.TEST_TXT, f.listFiles()[0].getName()); >+ assertEquals(ComplexProvider.TESTING.trim(), getContents(f.listFiles()[0]).trim()); >+ >+ assertEquals(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS, createSnippet.getSourceType()); >+} >+ >+ >+ public String getContents(File aFile) { >+ StringBuffer contents = new StringBuffer(); >+ >+ try { >+ BufferedReader input = new BufferedReader(new FileReader(aFile)); >+ try { >+ String line = null; //not declared within while loop >+ while (( line = input.readLine()) != null){ >+ contents.append(line); >+ contents.append(System.getProperty("line.separator")); >+ } >+ } >+ finally { >+ input.close(); >+ } >+ } >+ catch (IOException ex){ >+ ex.printStackTrace(); >+ } >+ >+ return contents.toString(); >+ } >+} >Index: src/org/eclipse/wst/common/snippets/tests/helpers/SApplicableEditor.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/helpers/SApplicableEditor.java >diff -N src/org/eclipse/wst/common/snippets/tests/helpers/SApplicableEditor.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/helpers/SApplicableEditor.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,103 @@ >+package org.eclipse.wst.common.snippets.tests.helpers; >+ >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.ui.IEditorInput; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.ui.IEditorSite; >+import org.eclipse.ui.IPropertyListener; >+import org.eclipse.ui.IWorkbenchPartSite; >+import org.eclipse.ui.PartInitException; >+ >+public class SApplicableEditor implements IEditorPart { >+ >+ public IEditorInput getEditorInput() { >+ return null; >+ } >+ >+ public IEditorSite getEditorSite() { >+ return null; >+ } >+ >+ public void init(IEditorSite site, IEditorInput input) >+ throws PartInitException { >+ >+ } >+ >+ public void addPropertyListener(IPropertyListener listener) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void createPartControl(Composite parent) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void dispose() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public IWorkbenchPartSite getSite() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public String getTitle() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public Image getTitleImage() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public String getTitleToolTip() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public void removePropertyListener(IPropertyListener listener) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void setFocus() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public Object getAdapter(Class adapter) { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public void doSave(IProgressMonitor monitor) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void doSaveAs() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public boolean isDirty() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+ public boolean isSaveAsAllowed() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+ public boolean isSaveOnCloseNeeded() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+} >Index: src/org/eclipse/wst/common/snippets/tests/helpers/CommonApplicableInterface.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/helpers/CommonApplicableInterface.java >diff -N src/org/eclipse/wst/common/snippets/tests/helpers/CommonApplicableInterface.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/helpers/CommonApplicableInterface.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,106 @@ >+package org.eclipse.wst.common.snippets.tests.helpers; >+ >+import org.eclipse.core.runtime.IProgressMonitor; >+import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.widgets.Composite; >+import org.eclipse.ui.IEditorInput; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.ui.IEditorSite; >+import org.eclipse.ui.IPropertyListener; >+import org.eclipse.ui.IWorkbenchPartSite; >+import org.eclipse.ui.PartInitException; >+ >+public class CommonApplicableInterface implements IEditorPart{ >+ >+ public IEditorInput getEditorInput() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public IEditorSite getEditorSite() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public void init(IEditorSite site, IEditorInput input) >+ throws PartInitException { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void addPropertyListener(IPropertyListener listener) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void createPartControl(Composite parent) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void dispose() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public IWorkbenchPartSite getSite() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public String getTitle() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public Image getTitleImage() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public String getTitleToolTip() { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public void removePropertyListener(IPropertyListener listener) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void setFocus() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public Object getAdapter(Class adapter) { >+ // TODO Auto-generated method stub >+ return null; >+ } >+ >+ public void doSave(IProgressMonitor monitor) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void doSaveAs() { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public boolean isDirty() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+ public boolean isSaveAsAllowed() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+ public boolean isSaveOnCloseNeeded() { >+ // TODO Auto-generated method stub >+ return false; >+ } >+ >+} >Index: src/org/eclipse/wst/common/snippets/tests/helpers/DummyProvider.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/helpers/DummyProvider.java >diff -N src/org/eclipse/wst/common/snippets/tests/helpers/DummyProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/helpers/DummyProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,27 @@ >+package org.eclipse.wst.common.snippets.tests.helpers; >+ >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.wst.common.snippets.internal.AbstractSnippetProvider; >+import org.eclipse.wst.common.snippets.ui.ISnippetInsertion; >+ >+public class DummyProvider extends AbstractSnippetProvider { >+ >+ public String getId() { >+ return "dummy"; >+ } >+ >+ public ISnippetInsertion getSnippetInsertion() { >+ return null; >+ } >+ >+ public boolean isActionEnabled(ISelection selection) { >+ return false; >+ } >+ >+ public IStatus saveAdditionalContent(IPath path) { >+ return null; >+ } >+ >+} >Index: src/org/eclipse/wst/common/snippets/tests/providers/SnippetProviderExtensionTests.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/providers/SnippetProviderExtensionTests.java >diff -N src/org/eclipse/wst/common/snippets/tests/providers/SnippetProviderExtensionTests.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/providers/SnippetProviderExtensionTests.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,39 @@ >+package org.eclipse.wst.common.snippets.tests.providers; >+ >+import junit.framework.TestCase; >+ >+import org.eclipse.ui.texteditor.AbstractTextEditor; >+import org.eclipse.wst.common.snippets.core.ISnippetProvider; >+import org.eclipse.wst.common.snippets.internal.util.SnippetProviderManager; >+import org.eclipse.wst.common.snippets.tests.helpers.CommonApplicableInterface; >+import org.eclipse.wst.common.snippets.tests.helpers.TextSnippetProvider2; >+import org.eclipse.wst.common.snippets.ui.TextSnippetProvider; >+ >+public class SnippetProviderExtensionTests extends TestCase { >+ >+ public void testEnablement() throws Exception { >+ ISnippetProvider applicableProvider = SnippetProviderManager.getApplicableProvider(new AbstractTextEditor(){}); >+ assertNotNull(applicableProvider); >+ applicableProvider = SnippetProviderManager.getApplicableProvider(new CommonApplicableInterface(){}); >+ assertNotNull(applicableProvider); >+ assertEquals("dummy", applicableProvider.getId()); >+ >+ } >+ >+ public void testDefaultTextSnippetProviderRegistration() throws Exception { >+ ISnippetProvider applicableProvider = SnippetProviderManager.getApplicableProvider(new AbstractTextEditor(){}); >+ assertNotNull(applicableProvider); >+ assertEquals(applicableProvider.getClass(), TextSnippetProvider.class); >+ } >+ >+ >+ public void testPriority() throws Exception { >+ ISnippetProvider applicableProvider = SnippetProviderManager.getApplicableProvider(new AbstractTextEditor(){}); >+ assertNotNull(applicableProvider); >+ assertEquals(applicableProvider.getClass(), TextSnippetProvider.class); >+ assertNotNull(SnippetProviderManager.findProvider(TextSnippetProvider2.class.getName())); >+ } >+ >+ >+ >+} >Index: src/org/eclipse/wst/common/snippets/tests/helpers/ComplexProvider.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/helpers/ComplexProvider.java >diff -N src/org/eclipse/wst/common/snippets/tests/helpers/ComplexProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/helpers/ComplexProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,66 @@ >+package org.eclipse.wst.common.snippets.tests.helpers; >+ >+import java.io.BufferedWriter; >+import java.io.File; >+import java.io.FileNotFoundException; >+import java.io.FileWriter; >+import java.io.IOException; >+ >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.Status; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.wst.common.snippets.internal.AbstractSnippetProvider; >+import org.eclipse.wst.common.snippets.tests.TestsPlugin; >+import org.eclipse.wst.common.snippets.ui.ISnippetInsertion; >+ >+public class ComplexProvider extends AbstractSnippetProvider { >+ >+ public static final String TEST_TXT = "test.txt"; >+ public static final String TESTING = "testing 1, 2, 3, 4, 5, 6"; >+ >+ public String getId() { >+ return "Complex_Example"; >+ } >+ >+ public ISnippetInsertion getSnippetInsertion() { >+ return new ComplexInsertion(); >+ } >+ >+ public boolean isActionEnabled(ISelection selection) { >+ return true; >+ } >+ >+ public IStatus saveAdditionalContent(IPath path) { >+ if (path == null){ >+ throw new IllegalArgumentException("path is null"); >+ } >+ File f = new File(path.toOSString()); >+ if (!f.exists()){ >+ f.mkdir(); >+ } >+ File testSave = new File(f, TEST_TXT); >+ try { >+ saveTextFile(testSave); >+ } catch (IOException e) { >+ return new Status(IStatus.ERROR, TestsPlugin.PLUGIN_ID, "could not save file"); >+ } >+ return Status.OK_STATUS; >+ } >+ >+ private void saveTextFile(File testSave) throws IOException { >+ BufferedWriter bw = null; >+ try { >+ bw = new BufferedWriter(new FileWriter(testSave)); >+ bw.write(TESTING); >+ >+ } catch (FileNotFoundException e) { >+ e.printStackTrace(); >+ } finally { >+ if (bw != null){ >+ bw.close(); >+ } >+ } >+ } >+ >+} >Index: src/org/eclipse/wst/common/snippets/tests/providers/TextProviderTests.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/providers/TextProviderTests.java >diff -N src/org/eclipse/wst/common/snippets/tests/providers/TextProviderTests.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/providers/TextProviderTests.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,76 @@ >+package org.eclipse.wst.common.snippets.tests.providers; >+ >+import java.io.ByteArrayInputStream; >+ >+import junit.framework.TestCase; >+ >+import org.eclipse.core.resources.IFile; >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.resources.ResourcesPlugin; >+import org.eclipse.core.runtime.NullProgressMonitor; >+import org.eclipse.gef.palette.PaletteDrawer; >+import org.eclipse.swt.widgets.Display; >+import org.eclipse.swt.widgets.Shell; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.ui.PlatformUI; >+import org.eclipse.ui.ide.IDE; >+import org.eclipse.ui.texteditor.ITextEditor; >+import org.eclipse.wst.common.snippets.internal.SnippetsPlugin; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawerFactory; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteRoot; >+import org.eclipse.wst.common.snippets.internal.ui.SnippetsView; >+import org.eclipse.wst.common.snippets.ui.TextSnippetProvider; >+ >+public class TextProviderTests extends TestCase { >+ >+ private IFile file; >+ >+ protected void setUp() throws Exception { >+ super.setUp(); >+ String projectName = System.currentTimeMillis() + ""; >+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); >+ if (!project.exists()){ >+ project.create(new NullProgressMonitor()); >+ } >+ if (!project.isOpen()){ >+ project.open(new NullProgressMonitor()); >+ } >+ file = project.getFile("testTextSnippet.txt"); >+ if (!file.exists()){ >+ ByteArrayInputStream sr = new ByteArrayInputStream("test Text Snippet Provider".getBytes()); >+ file.create(sr, true, new NullProgressMonitor()); >+ } >+ } >+ >+ public void testTextSnippetCreation() throws Exception { >+ SnippetsView view; >+ SnippetPaletteRoot anchor = null; >+ view = (SnippetsView) SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(SnippetsPlugin.NAMES.VIEW_ID); >+ if (view == null) { >+ view = (SnippetsView) SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(SnippetsPlugin.NAMES.VIEW_ID); >+ } >+ if (view != null) { >+ anchor = view.getRoot(); >+ } >+ Shell activeShell = Display.getDefault().getActiveShell(); >+ assertNotNull(activeShell); >+ PaletteDrawer drawer = (PaletteDrawer) new SnippetPaletteDrawerFactory().createNewEntry(activeShell, anchor); >+ drawer.setLabel("testName"); >+ TextSnippetProvider textSnippetProvider = new TextSnippetProvider(); >+ IEditorPart openEditor = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), file); >+ assertNotNull(openEditor); >+ textSnippetProvider.setEditor(openEditor); >+ >+ >+ SnippetPaletteItem createSnippet = textSnippetProvider.createSnippet(drawer); >+ assertNotNull(createSnippet); >+ ITextEditor editor = (ITextEditor) openEditor; >+ editor.selectAndReveal(0, 5); >+ >+ assertFalse(textSnippetProvider.isActionEnabled(null)); >+ assertTrue(textSnippetProvider.isActionEnabled(editor.getSelectionProvider().getSelection())); >+ editor.selectAndReveal(0, 0); >+ assertFalse(textSnippetProvider.isActionEnabled(editor.getSelectionProvider().getSelection())); >+ } >+} >Index: src/org/eclipse/wst/common/snippets/tests/helpers/ComplexInsertion.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/helpers/ComplexInsertion.java >diff -N src/org/eclipse/wst/common/snippets/tests/helpers/ComplexInsertion.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/helpers/ComplexInsertion.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,36 @@ >+package org.eclipse.wst.common.snippets.tests.helpers; >+ >+import org.eclipse.swt.dnd.DragSourceEvent; >+import org.eclipse.swt.dnd.Transfer; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.wst.common.snippets.core.ISnippetItem; >+import org.eclipse.wst.common.snippets.ui.ISnippetInsertion; >+ >+public class ComplexInsertion implements ISnippetInsertion { >+ >+ public void dragSetData(DragSourceEvent event, ISnippetItem item) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public Transfer[] getTransfers() { >+ // TODO Auto-generated method stub >+ return new Transfer[0]; >+ } >+ >+ public void insert(IEditorPart editorPart) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void setEditorPart(IEditorPart targetPart) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+ public void setItem(ISnippetItem item) { >+ // TODO Auto-generated method stub >+ >+ } >+ >+} >Index: src/org/eclipse/wst/common/snippets/tests/helpers/TextSnippetProvider2.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/tests/helpers/TextSnippetProvider2.java >diff -N src/org/eclipse/wst/common/snippets/tests/helpers/TextSnippetProvider2.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/tests/helpers/TextSnippetProvider2.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,8 @@ >+package org.eclipse.wst.common.snippets.tests.helpers; >+ >+import org.eclipse.wst.common.snippets.ui.TextSnippetProvider; >+ >+public class TextSnippetProvider2 extends TextSnippetProvider { >+ >+ >+} >#P org.eclipse.wst.common.snippets >Index: src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java,v >retrieving revision 1.4 >diff -u -r1.4 SnippetsCustomizer.java >--- src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java 10 Apr 2007 17:23:35 -0000 1.4 >+++ src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -10,9 +10,11 @@ > *******************************************************************************/ > package org.eclipse.wst.common.snippets.internal.ui; > >+import java.io.File; > import java.util.ArrayList; > import java.util.List; > >+import org.eclipse.core.runtime.IPath; > import org.eclipse.gef.palette.PaletteContainer; > import org.eclipse.gef.palette.PaletteDrawer; > import org.eclipse.gef.palette.PaletteEntry; >@@ -31,8 +33,10 @@ > > > public class SnippetsCustomizer extends PaletteCustomizer { >+ > protected List activeEditors = new ArrayList(); > protected List factories = null; >+ private List deletedIds = new ArrayList(); > > public SnippetsCustomizer() { > super(); >@@ -117,6 +121,13 @@ > Logger.logException(e); > } > } >+ >+ for (int i = 0; i < deletedIds.size(); i++) { >+ IPath path = SnippetManager.getInstance().getStorageLocation(deletedIds.get(i).toString()); >+ File folder = new File(path.toOSString()); >+ deleteFolders(folder); >+ } >+ deletedIds.clear(); > > activeEditors = new ArrayList(0); > >@@ -127,4 +138,25 @@ > Logger.logException(e); > } > } >+ >+ private void deleteFolders(File folder) { >+ if (!folder.exists()){ >+ return; >+ } >+ File[] listFiles = folder.listFiles(); >+ for (int i = 0; i < listFiles.length; i++) { >+ if (listFiles[i].isDirectory()){ >+ deleteFolders(listFiles[i]); >+ } else { >+ listFiles[i].delete(); >+ } >+ } >+ folder.delete(); >+ } >+ >+ public void performDelete(PaletteEntry entry) { >+ deletedIds.add(entry.getId()); >+ super.performDelete(entry); >+ } >+ > } >Index: src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java,v >retrieving revision 1.5 >diff -u -r1.5 SnippetTemplateEntryPage.java >--- src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java 10 Apr 2007 17:23:35 -0000 1.5 >+++ src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -38,17 +38,21 @@ > editor.addModifyListener(this); > editor.setItem((SnippetPaletteItem) entry); > editor.createContents((Composite) getControl()); >- // it can't be known in advance since the editor is unknown as >- // well >+ /* >+ * Can't be known in advance since the editor content is unknown >+ */ > ((Composite) getControl()).setTabList(null); > } > } > > protected ISnippetEditor getEditor(SnippetPaletteItem item) { > ISnippetEditor snippetEditor = null; >- if (item.getSourceType() != ISnippetsEntry.SNIPPET_SOURCE_PLUGINS) { >+ if (item.getSourceType() == ISnippetsEntry.SNIPPET_SOURCE_USER || item.getSourceType() == ISnippetsEntry.SNIPPET_SOURCE_WORKSPACE) { > snippetEditor = new VariableItemEditor(); > } >+ else if (item.getProvider() != null) { >+ // TODO: let a provider provide its own editor? >+ } > return snippetEditor; > } > >Index: src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java,v >retrieving revision 1.8 >diff -u -r1.8 SnippetsView.java >--- src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java 9 Dec 2008 06:00:26 -0000 1.8 >+++ src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java 8 Sep 2009 13:06:58 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2008 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -83,7 +83,6 @@ > import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteRoot; > import org.eclipse.wst.common.snippets.internal.util.UserDrawerSelector; > import org.eclipse.wst.common.snippets.internal.util.VisibilityUtil; >-import org.eclipse.wst.common.snippets.ui.DefaultSnippetInsertion; > import org.eclipse.wst.common.snippets.ui.ISnippetInsertion; > import org.osgi.framework.Bundle; > >@@ -199,8 +198,11 @@ > } > } > } >+ > if (insertion == null) { >- insertion = new DefaultSnippetInsertion(); >+ if (item.getProvider()!= null){ >+ insertion = item.getProvider().getSnippetInsertion(); >+ } > } > return insertion; > } >@@ -828,6 +830,8 @@ > insertion.setItem(item); > insertion.setEditorPart(getSite().getPage().getActiveEditor()); > supportedTypes = insertion.getTransfers(); >+ } else { >+ supportedTypes = new Transfer[]{TextTransfer.getInstance()}; > } > } > else { >Index: src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java,v >retrieving revision 1.5 >diff -u -r1.5 EntryDeserializer.java >--- src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java 10 Apr 2007 17:23:35 -0000 1.5 >+++ src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -22,6 +22,7 @@ > import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem; > import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable; > import org.eclipse.wst.common.snippets.internal.util.CommonXML; >+import org.eclipse.wst.common.snippets.internal.util.SnippetProviderManager; > import org.w3c.dom.Document; > import org.w3c.dom.Element; > import org.w3c.dom.Node; >@@ -72,6 +73,7 @@ > item.setCategoryName(element.getAttribute(SnippetsPlugin.NAMES.CATEGORY)); > item.setClassName(element.getAttribute(SnippetsPlugin.NAMES.CLASSNAME)); > item.setEditorClassName(element.getAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME)); >+ item.setProvider(SnippetProviderManager.findProvider(element.getAttribute(SnippetsPlugin.NAMES.PROVIDER_ID))); > NodeList children = element.getChildNodes(); > int length = children.getLength(); > for (int i = 0; i < length; i++) { >Index: src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java,v >retrieving revision 1.5 >diff -u -r1.5 EntrySerializer.java >--- src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java 10 Apr 2007 17:23:35 -0000 1.5 >+++ src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -116,6 +116,8 @@ > element.setAttribute(SnippetsPlugin.NAMES.CLASSNAME, item.getClassName()); > if (item.getEditorClassName() != null) > element.setAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME, item.getEditorClassName()); >+ if (item.getProvider() != null) >+ element.setAttribute(SnippetsPlugin.NAMES.PROVIDER_ID, item.getProvider().getId()); > if (item.getContentString() != null) > element.appendChild(createContent(doc, item)); > ISnippetVariable[] variables = item.getVariables(); >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/META-INF/MANIFEST.MF,v >retrieving revision 1.20 >diff -u -r1.20 MANIFEST.MF >--- META-INF/MANIFEST.MF 26 Jan 2009 20:07:49 -0000 1.20 >+++ META-INF/MANIFEST.MF 8 Sep 2009 13:06:56 -0000 >@@ -25,6 +25,7 @@ > org.eclipse.ui;bundle-version="[3.4.0,4.0.0)", > org.eclipse.jface.text;bundle-version="[3.4.0,4.0.0)", > org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)", >- org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)" >+ org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)", >+ org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)" > Bundle-ActivationPolicy: lazy > Bundle-RequiredExecutionEnvironment: J2SE-1.4 >Index: src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java,v >retrieving revision 1.8 >diff -u -r1.8 ModelFactoryForPlugins.java >--- src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java 10 Apr 2007 17:23:34 -0000 1.8 >+++ src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java 8 Sep 2009 13:06:56 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -169,6 +169,7 @@ > setProperty(item, SnippetsPlugin.NAMES.ID, element.getAttribute(SnippetsPlugin.NAMES.ID)); > setProperty(item, SnippetsPlugin.NAMES.LABEL, element.getAttribute(SnippetsPlugin.NAMES.LABEL)); > setProperty(item, SnippetsPlugin.NAMES.LARGEICON, element.getAttribute(SnippetsPlugin.NAMES.LARGEICON)); >+ setProperty(item, SnippetsPlugin.NAMES.PROVIDER_ID, element.getAttribute(SnippetsPlugin.NAMES.PROVIDER_ID)); > > IConfigurationElement[] children = element.getChildren(); > for (int i = 0; i < children.length; i++) { >Index: src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java,v >retrieving revision 1.8 >diff -u -r1.8 UserModelDumper.java >--- src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java 9 Dec 2008 18:15:46 -0000 1.8 >+++ src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -178,6 +178,8 @@ > element.setAttribute(SnippetsPlugin.NAMES.CLASSNAME, ((SnippetPaletteItem) item).getClassName()); > if (((SnippetPaletteItem) item).getEditorClassName() != null) > element.setAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME, ((SnippetPaletteItem) item).getEditorClassName()); >+ if (((SnippetPaletteItem) item).getProvider() != null) >+ element.setAttribute(SnippetsPlugin.NAMES.PROVIDER_ID, ((SnippetPaletteItem) item).getProvider().getId()); > element.appendChild(createContent(doc, item)); > ISnippetVariable[] variables = item.getVariables(); > for (int i = 0; i < variables.length; i++) { >@@ -279,13 +281,8 @@ > Logger.log(Logger.ERROR, "could not save " + stream, e); //$NON-NLS-1$ > } > finally { >- try { >- stream.close(); >- document = null; >- } >- catch (IOException e) { >- // nothing to be done while closing >- } >+ // stream.close(); >+ document = null; > } > } > >Index: src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java,v >retrieving revision 1.7 >diff -u -r1.7 SnippetCustomizerDialog.java >--- src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java 25 Feb 2009 21:18:54 -0000 1.7 >+++ src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2008 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -10,12 +10,23 @@ > *******************************************************************************/ > package org.eclipse.wst.common.snippets.internal.palette; > >+import java.io.BufferedInputStream; >+import java.io.BufferedOutputStream; >+import java.io.File; >+import java.io.FileInputStream; > import java.io.FileNotFoundException; > import java.io.FileOutputStream; > import java.io.IOException; >+import java.io.InputStream; > import java.io.OutputStream; >+import java.util.Enumeration; > import java.util.List; >+import java.util.zip.ZipEntry; >+import java.util.zip.ZipException; >+import java.util.zip.ZipFile; >+import java.util.zip.ZipOutputStream; > >+import org.eclipse.core.runtime.Platform; > import org.eclipse.gef.palette.PaletteDrawer; > import org.eclipse.gef.palette.PaletteEntry; > import org.eclipse.gef.palette.PaletteRoot; >@@ -32,16 +43,24 @@ > import org.eclipse.swt.widgets.Shell; > import org.eclipse.ui.PlatformUI; > import org.eclipse.wst.common.snippets.core.ISnippetCategory; >+import org.eclipse.wst.common.snippets.core.ISnippetItem; > import org.eclipse.wst.common.snippets.internal.IHelpContextIds; > import org.eclipse.wst.common.snippets.internal.SnippetDefinitions; > import org.eclipse.wst.common.snippets.internal.SnippetsMessages; >+import org.eclipse.wst.common.snippets.internal.SnippetsPlugin; > import org.eclipse.wst.common.snippets.internal.SnippetsPluginImageHelper; > import org.eclipse.wst.common.snippets.internal.SnippetsPluginImages; > import org.eclipse.wst.common.snippets.internal.model.SnippetManager; > import org.eclipse.wst.common.snippets.internal.ui.SnippetsCustomizer; >+import org.osgi.framework.Bundle; > > public class SnippetCustomizerDialog extends PaletteCustomizerDialog { > >+ private static class EXPORT_IMPORT_STRATEGY { >+ static EXPORT_IMPORT_STRATEGY ARCHIVE = new EXPORT_IMPORT_STRATEGY(); >+ static EXPORT_IMPORT_STRATEGY XML = new EXPORT_IMPORT_STRATEGY(); >+ } >+ > private class ExportAction extends PaletteCustomizationAction { > public ExportAction() { > setEnabled(false); >@@ -54,33 +73,92 @@ > > protected void handleExport() { > PaletteDrawer exportCategory = (PaletteDrawer) getSelectedPaletteEntry(); >+ EXPORT_IMPORT_STRATEGY strategy = exportStrategy(exportCategory); > >- final FileDialog fileDialog = new FileDialog(getShell(), SWT.SAVE); >- fileDialog.setText(SnippetsMessages.Export_Snippets); >- fileDialog.setFileName("snippets.xml"); //$NON-NLS-1$ >- String[] filterExtensions = new String[2]; >- filterExtensions[0] = "*.xml"; //$NON-NLS-1$ >- filterExtensions[1] = "*.*"; //$NON-NLS-1$ >- fileDialog.setFilterExtensions(filterExtensions); >- String filename = fileDialog.open(); >+ if (EXPORT_IMPORT_STRATEGY.ARCHIVE == strategy){ >+ exportArchive(exportCategory); >+ } else { >+ exportXML(exportCategory); >+ } >+ updateActions(); >+ } >+ >+ private EXPORT_IMPORT_STRATEGY exportStrategy(PaletteDrawer exportCategory) { >+ List children = exportCategory.getChildren(); >+ for (int i = 0; i < children.size(); i++) { >+ ISnippetItem snippetItem = (ISnippetItem) children.get(i); >+ File folder = new File(SnippetManager.getInstance().getStorageLocation(snippetItem.getId()).toOSString()); >+ if (folder.exists()){ >+ return EXPORT_IMPORT_STRATEGY.ARCHIVE; >+ } >+ } >+ return EXPORT_IMPORT_STRATEGY.XML; >+ } >+ >+ private void exportArchive(PaletteDrawer exportCategory) { >+ String filename = openFileDialog("*.zip");//$NON-NLS-1$ > if (filename != null) { >- SnippetDefinitions definitions = ModelFactoryForUser.getInstance().load(filename); >- ISnippetCategory existingCategory = definitions.getCategory(exportCategory.getId()); >+ ZipOutputStream outputStream = null; >+ try { >+ SnippetDefinitions definitions = getCategory(exportCategory, filename); >+ outputStream = new ZipOutputStream(new FileOutputStream(filename)); >+ ZipEntry descriptorFile = new ZipEntry("snippets.xml"); >+ outputStream.putNextEntry(descriptorFile); >+ new UserModelDumper().write(definitions, outputStream); >+ ISnippetCategory existingCategory = definitions.getCategory(exportCategory.getId()); >+ ISnippetItem[] items = existingCategory.getItems(); >+ for (int i = 0; i < items.length; i++) { >+ File folder = new File(SnippetManager.getInstance().getStorageLocation(items[i].getId()).toOSString()); >+ if (folder.exists()){ >+ addToZip(folder.getParentFile(), folder, outputStream); >+ } >+ } >+ } >+ catch (FileNotFoundException e) { >+ // should not have problem finding the output file >+ e.printStackTrace(); >+ } catch (IOException e) { >+ e.printStackTrace(); >+ } >+ finally { >+ if (outputStream != null) >+ try { >+ outputStream.close(); >+ } >+ catch (IOException e) { >+ // should not have problem closing the output file >+ e.printStackTrace(); >+ } >+ } >+ } >+ } > >- if (existingCategory == null) >- definitions.getCategories().add(exportCategory); >- else { >- String title = SnippetsMessages.SnippetCustomizerDialog_2; //$NON-NLS-1$ >- String message = NLS.bind(SnippetsMessages.SnippetCustomizerDialog_4, new String[]{existingCategory.getLabel()}); >- boolean answer = MessageDialog.openConfirm(getShell(), title, message); >- if (answer) { >- definitions.getCategories().remove(existingCategory); >- definitions.getCategories().add(exportCategory); >+ private void addToZip(File root, File folder, ZipOutputStream outputStream) throws IOException { >+ File[] listedFiles = folder.listFiles(); >+ for (int i = 0; i < listedFiles.length; i++) { >+ if (listedFiles[i].isDirectory()){ >+ addToZip(root, listedFiles[i], outputStream); >+ } else { >+ ZipEntry ze = new ZipEntry(listedFiles[i].getAbsolutePath().substring(root.getAbsolutePath().length()+1)); >+ outputStream.putNextEntry(ze); >+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(listedFiles[i]), 1024); >+ byte[] data = new byte[1024]; >+ int count; >+ while ((count = bis.read(data, 0, 1024)) != -1) { >+ outputStream.write(data, 0, count); > } >+ bis.close(); > } >+ } >+ } > >- OutputStream outputStream = null; >- try { >+ private void exportXML(PaletteDrawer exportCategory) { >+ String filename = openFileDialog("*.xml");//$NON-NLS-1$ >+ >+ OutputStream outputStream = null; >+ if (filename != null) { >+ try{ >+ SnippetDefinitions definitions = getCategory(exportCategory, filename); > outputStream = new FileOutputStream(filename); > new UserModelDumper().write(definitions, outputStream); > } >@@ -93,14 +171,46 @@ > try { > outputStream.close(); > } >- catch (IOException e) { >- // should not have problem closing the output file >- e.printStackTrace(); >- } >+ catch (IOException e) { >+ // should not have problem closing the output file >+ e.printStackTrace(); >+ } > } > >- updateActions(); > } >+ >+ >+ } >+ >+ private SnippetDefinitions getCategory(PaletteDrawer exportCategory, >+ String fileName) { >+ SnippetDefinitions definitions = ModelFactoryForUser.getInstance().load(fileName); >+ ISnippetCategory existingCategory = definitions.getCategory(exportCategory.getId()); >+ >+ if (existingCategory == null) >+ definitions.getCategories().add(exportCategory); >+ else { >+ String title = SnippetsMessages.SnippetCustomizerDialog_2; //$NON-NLS-1$ >+ String message = NLS.bind(SnippetsMessages.SnippetCustomizerDialog_4, new String[]{existingCategory.getLabel()}); >+ boolean answer = MessageDialog.openConfirm(getShell(), title, message); >+ if (answer) { >+ definitions.getCategories().remove(existingCategory); >+ definitions.getCategories().add(exportCategory); >+ } >+ } >+ return definitions; >+ } >+ >+ private String openFileDialog(String extension) { >+ final FileDialog fileDialog = new FileDialog(getShell(), SWT.SAVE); >+ fileDialog.setText(SnippetsMessages.Export_Snippets); >+ fileDialog.setFileName("snippets"+ extension.substring(1)); //$NON-NLS-1$ >+ String[] filterExtensions = new String[2]; >+ filterExtensions[0] = extension; >+ filterExtensions[1] = "*.*"; //$NON-NLS-1$ >+ fileDialog.setFilterExtensions(filterExtensions); >+ String filename = fileDialog.open(); >+ return filename; > } > > public void run() { >@@ -132,14 +242,38 @@ > protected void handleImport() { > final FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); > fileDialog.setText(SnippetsMessages.Import_Snippets); >- fileDialog.setFileName("snippets.xml"); //$NON-NLS-1$ >+// fileDialog.setFileName("snippets.xml"); //$NON-NLS-1$ > String[] filterExtensions = new String[2]; >- filterExtensions[0] = "*.xml"; //$NON-NLS-1$ >+ filterExtensions[0] = "*.xml; *.zip"; //$NON-NLS-1$ > filterExtensions[1] = "*.*"; //$NON-NLS-1$ > fileDialog.setFilterExtensions(filterExtensions); > String filename = fileDialog.open(); >- if (filename != null) { >- SnippetDefinitions definitions = ModelFactoryForUser.getInstance().load(filename); >+ try { >+ if (filename.toLowerCase().endsWith(".zip")){ >+ ZipFile zip = new ZipFile(new File(filename)); >+ ZipEntry entry = zip.getEntry("snippets.xml"); >+ loadMetadata(zip.getInputStream(entry)); >+ Bundle bundle = Platform.getBundle(SnippetsPlugin.BUNDLE_ID); >+ unzip(zip, Platform.getStateLocation(bundle).toOSString()); >+ } else { >+ loadMetadata(new FileInputStream(filename)); >+ } >+ >+ >+ } catch (FileNotFoundException e) { >+ e.printStackTrace(); >+ } catch (ZipException e) { >+ // TODO Auto-generated catch block >+ e.printStackTrace(); >+ } catch (IOException e) { >+ // TODO Auto-generated catch block >+ e.printStackTrace(); >+ } >+ } >+ >+ private void loadMetadata(InputStream fileInputStream) { >+ if (fileInputStream != null) { >+ SnippetDefinitions definitions = ModelFactoryForUser.getInstance().load(fileInputStream); > List importCategories = definitions.getCategories(); > List currentCategories = SnippetManager.getInstance().getDefinitions().getCategories(); > PaletteEntry lastImportEntry = null; >@@ -215,4 +349,42 @@ > > return super.open(); > } >+ >+ public static final void copyInputStream(InputStream in, OutputStream out) >+ throws IOException >+ { >+ byte[] buffer = new byte[1024]; >+ int len; >+ >+ while((len = in.read(buffer)) >= 0) >+ out.write(buffer, 0, len); >+ >+ in.close(); >+ out.close(); >+ } >+ >+ public void unzip(ZipFile zipFile, String path) throws FileNotFoundException, IOException { >+ Enumeration entries; >+ entries = zipFile.entries(); >+ >+ while(entries.hasMoreElements()) { >+ ZipEntry entry = (ZipEntry)entries.nextElement(); >+ File file = new File(path + File.separator+ entry.getName()); >+ if(entry.isDirectory()) { >+ file.mkdir(); >+ continue; >+ } >+ if (!file.getParentFile().exists()){ >+ file.getParentFile().mkdirs(); >+ } >+ if (entry.getName().toLowerCase().equals("snippets.xml")){ >+ continue; >+ } >+ >+ copyInputStream(zipFile.getInputStream(entry), new BufferedOutputStream(new FileOutputStream(file))); >+ } >+ >+ zipFile.close(); >+ } >+ > } >Index: src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java,v >retrieving revision 1.12 >diff -u -r1.12 ModelFactoryForUser.java >--- src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java 9 Dec 2008 18:15:46 -0000 1.12 >+++ src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2006 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -219,11 +219,47 @@ > > return definitions; > } >- >+ > public SnippetDefinitions loadCurrent() { > return load(getFilename()); > } > >+ public SnippetDefinitions load(InputStream in) { >+ SnippetDefinitions definitions = new SnippetDefinitions(); >+ Document document = null; >+ try { >+ DocumentBuilder builder = CommonXML.getDocumentBuilder(); >+ if (builder != null) { >+ document = builder.parse(new InputSource(in)); >+ } >+ else { >+ Logger.log(Logger.ERROR, "Couldn't obtain a DocumentBuilder"); //$NON-NLS-1$ >+ } >+ } >+ catch (FileNotFoundException e) { >+ // typical of new workspace, don't log it >+ document = null; >+ } >+ catch (IOException e) { >+ Logger.logException("Could not load user items", e); //$NON-NLS-1$ >+ return definitions; >+ } >+ catch (SAXException e) { >+ Logger.logException("Could not load user items", e); //$NON-NLS-1$ >+ return definitions; >+ } >+ if (document == null) >+ return definitions; >+ Element library = document.getDocumentElement(); >+ if (library == null || !library.getNodeName().equals(SnippetsPlugin.NAMES.SNIPPETS)) >+ return definitions; >+ loadDefinitions(definitions, library); >+ >+ connectItemsAndCategories(definitions); >+ >+ return definitions; >+ } >+ > protected void loadDefinitions(SnippetDefinitions definitions, Node library) { > NodeList children = library.getChildNodes(); > int length = children.getLength(); >@@ -313,6 +349,7 @@ > setProperty(item, SnippetsPlugin.NAMES.ID, element.getAttribute(SnippetsPlugin.NAMES.ID)); > setProperty(item, SnippetsPlugin.NAMES.LABEL, element.getAttribute(SnippetsPlugin.NAMES.LABEL)); > setProperty(item, SnippetsPlugin.NAMES.LARGEICON, element.getAttribute(SnippetsPlugin.NAMES.LARGEICON)); >+ setProperty(item, SnippetsPlugin.NAMES.PROVIDER_ID, element.getAttribute(SnippetsPlugin.NAMES.PROVIDER_ID)); > > NodeList children = element.getChildNodes(); > for (int i = 0; i < children.getLength(); i++) { >Index: src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java,v >retrieving revision 1.4 >diff -u -r1.4 SnippetPaletteItem.java >--- src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java 10 Apr 2007 17:23:34 -0000 1.4 >+++ src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java 8 Sep 2009 13:06:57 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -16,12 +16,15 @@ > import java.util.Arrays; > import java.util.List; > >+import org.eclipse.core.runtime.IPath; > import org.eclipse.gef.palette.PaletteContainer; > import org.eclipse.gef.palette.PaletteTemplateEntry; > import org.eclipse.jface.resource.ImageDescriptor; > import org.eclipse.wst.common.snippets.core.ISnippetCategory; > import org.eclipse.wst.common.snippets.core.ISnippetItem; >+import org.eclipse.wst.common.snippets.core.ISnippetProvider; > import org.eclipse.wst.common.snippets.core.ISnippetVariable; >+import org.eclipse.wst.common.snippets.internal.model.SnippetManager; > > public class SnippetPaletteItem extends PaletteTemplateEntry implements ISnippetItem { > >@@ -38,6 +41,7 @@ > protected Object fSourceDescriptor; > protected Object fSourceType = SNIPPET_SOURCE_USER; > protected List fVariables; >+ private ISnippetProvider provider; > > /** > * @param label >@@ -219,4 +223,17 @@ > fVariables = new ArrayList(variables.length); > fVariables.addAll(Arrays.asList(variables)); > } >+ >+ public IPath getStorageLocation() { >+ return SnippetManager.getInstance().getStorageLocation(getId()); >+ } >+ >+ >+ public ISnippetProvider getProvider() { >+ return provider; >+ } >+ >+ public void setProvider(ISnippetProvider provider) { >+ this.provider = provider; >+ } > } >Index: src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java,v >retrieving revision 1.7 >diff -u -r1.7 AbstractModelFactory.java >--- src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java 10 Apr 2007 17:23:34 -0000 1.7 >+++ src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java 8 Sep 2009 13:06:56 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -20,6 +20,7 @@ > import org.eclipse.wst.common.snippets.internal.Logger; > import org.eclipse.wst.common.snippets.internal.SnippetDefinitions; > import org.eclipse.wst.common.snippets.internal.SnippetsPlugin; >+import org.eclipse.wst.common.snippets.internal.util.SnippetProviderManager; > > public abstract class AbstractModelFactory { > >@@ -73,6 +74,7 @@ > setProperties(item, source); > > migrate50to51(item); >+ > return item; > } > >@@ -176,6 +178,8 @@ > item.setContentString(propertyValue.toString()); > else if (property.equals(SnippetsPlugin.NAMES.EDITORCLASSNAME)) > item.setEditorClassName(propertyValue.toString()); >+ else if (property.equals(SnippetsPlugin.NAMES.PROVIDER_ID)) >+ item.setProvider(SnippetProviderManager.findProvider(propertyValue.toString())); > else > setEntryProperty(item, property, propertyValue); > } >Index: src/org/eclipse/wst/common/snippets/internal/actions/AddToSnippetsEditorActionDelegate.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AddToSnippetsEditorActionDelegate.java,v >retrieving revision 1.5 >diff -u -r1.5 AddToSnippetsEditorActionDelegate.java >--- src/org/eclipse/wst/common/snippets/internal/actions/AddToSnippetsEditorActionDelegate.java 10 Apr 2007 17:23:36 -0000 1.5 >+++ src/org/eclipse/wst/common/snippets/internal/actions/AddToSnippetsEditorActionDelegate.java 8 Sep 2009 13:06:56 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2006 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -10,35 +10,29 @@ > *******************************************************************************/ > package org.eclipse.wst.common.snippets.internal.actions; > >+import org.eclipse.core.runtime.CoreException; > import org.eclipse.gef.palette.PaletteDrawer; > import org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog; > import org.eclipse.jface.action.IAction; >-import org.eclipse.jface.text.BadLocationException; >-import org.eclipse.jface.text.IDocument; >-import org.eclipse.jface.text.ITextSelection; >-import org.eclipse.jface.text.TextSelection; > import org.eclipse.jface.viewers.ISelection; > import org.eclipse.ui.IEditorActionDelegate; > import org.eclipse.ui.IEditorPart; > import org.eclipse.ui.IViewActionDelegate; > import org.eclipse.ui.IViewPart; >-import org.eclipse.ui.IWorkbenchPart; > import org.eclipse.ui.PartInitException; >-import org.eclipse.ui.texteditor.ITextEditor; >+import org.eclipse.wst.common.snippets.core.ISnippetProvider; > import org.eclipse.wst.common.snippets.internal.Logger; > import org.eclipse.wst.common.snippets.internal.SnippetsPlugin; > import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem; >-import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItemFactory; > import org.eclipse.wst.common.snippets.internal.ui.SnippetsView; >-import org.eclipse.wst.common.snippets.internal.util.StringUtils; >+import org.eclipse.wst.common.snippets.internal.util.SnippetProviderManager; > import org.eclipse.wst.common.snippets.internal.util.UserDrawerSelector; > > > public class AddToSnippetsEditorActionDelegate implements IEditorActionDelegate, IViewActionDelegate { > >- private IAction fAction; > private IEditorPart fEditorPart; >- private IViewPart fViewPart = null; >+ private ISnippetProvider snippetProvider; > > /** > * >@@ -47,35 +41,6 @@ > super(); > } > >- public IDocument getDocument() { >- return getTextEditor().getDocumentProvider().getDocument(fEditorPart.getEditorInput()); >- } >- >- protected ITextSelection getSelection() { >- ITextEditor editor = getTextEditor(); >- if (editor != null) { >- ISelection selection = editor.getSelectionProvider().getSelection(); >- if (selection instanceof ITextSelection) { >- return (ITextSelection) selection; >- } >- } >- return new TextSelection(0, 0); >- } >- >- protected ITextEditor getTextEditor() { >- ITextEditor editor = null; >- IWorkbenchPart activePart = fViewPart; >- if (activePart == null) { >- activePart = fEditorPart; >- } >- if (activePart instanceof ITextEditor) { >- editor = (ITextEditor) activePart; >- } >- if (editor == null) { >- editor = (ITextEditor) activePart.getAdapter(ITextEditor.class); >- } >- return editor; >- } > > /** > * Prompts the user as needed to obtain a category to contain the new >@@ -90,15 +55,10 @@ > return drawer; > } > >- /* >- * (non-Javadoc) >- * >- * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart) >- */ > public void init(IViewPart view) { >- fViewPart = view; > } > >+ > /* > * (non-Javadoc) > * >@@ -108,25 +68,23 @@ > PaletteDrawer drawer = getUserDrawer(); > > if (drawer != null) { >- ITextSelection selection = getSelection(); >- String selectedText = null; >+ if (snippetProvider ==null){ >+ snippetProvider = SnippetProviderManager.getApplicableProvider(fEditorPart); >+ if (snippetProvider ==null){ >+ return; >+ } >+ } >+ > try { >- selectedText = getDocument().get(selection.getOffset(), selection.getLength()); >- >- SnippetPaletteItem item = (SnippetPaletteItem) new SnippetPaletteItemFactory().createNewEntry(fEditorPart.getSite().getShell(), drawer); >- item.setDescription(StringUtils.firstLineOf(selectedText).trim() + "..."); //$NON-NLS-1$ >- item.setContentString(selectedText); >- >- IViewPart snippets = fEditorPart.getEditorSite().getPage().showView(SnippetsPlugin.NAMES.VIEW_ID); //$NON-NLS-1$ >+ SnippetPaletteItem item = snippetProvider.createSnippet(drawer); >+ IViewPart snippets = fEditorPart.getEditorSite().getPage().showView(SnippetsPlugin.NAMES.VIEW_ID); > PaletteCustomizerDialog dialog = ((SnippetsView) snippets).getViewer().getCustomizerDialog(); > dialog.setDefaultSelection(item); > dialog.open(); >- } >- catch (BadLocationException e) { >+ } catch (PartInitException e) { >+ Logger.logException(e); >+ } catch (CoreException e) { > Logger.logException(e); >- } >- catch (PartInitException e1) { >- Logger.logException(e1); > } > } > } >@@ -138,8 +96,11 @@ > * org.eclipse.jface.viewers.ISelection) > */ > public void selectionChanged(IAction action, ISelection selection) { >- fAction = action; >- updateWith(selection); >+ if (selection != null && fEditorPart != null && snippetProvider != null) { >+ action.setEnabled(snippetProvider.isActionEnabled(selection)); >+ } >+ else >+ action.setEnabled(false); > } > > /* >@@ -150,26 +111,11 @@ > */ > public void setActiveEditor(IAction action, IEditorPart targetEditor) { > fEditorPart = targetEditor; >- fAction = action; >- if (targetEditor != null && targetEditor.getEditorSite() != null && targetEditor.getEditorSite().getSelectionProvider() != null) { >- updateWith(targetEditor.getEditorSite().getSelectionProvider().getSelection()); >- } >+ action.setEnabled(fEditorPart != null); >+ if (fEditorPart != null) >+ snippetProvider = SnippetProviderManager.getApplicableProvider(fEditorPart); >+ else >+ snippetProvider = null; > } > >- public void updateWith(ISelection selection) { >- if (fAction != null) { >- boolean enable = false; >- if (selection != null) { >- if (selection instanceof ITextSelection) { >- if (((ITextSelection) selection).getLength() > 0) { >- enable = true; >- } >- } >- else { >- enable = !selection.isEmpty(); >- } >- } >- fAction.setEnabled(enable); >- } >- } > } >Index: src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java,v >retrieving revision 1.6 >diff -u -r1.6 SnippetManager.java >--- src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java 18 Dec 2007 06:05:17 -0000 1.6 >+++ src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java 8 Sep 2009 13:06:56 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -13,9 +13,12 @@ > import java.beans.PropertyChangeEvent; > import java.beans.PropertyChangeListener; > import java.io.File; >+import java.io.FileInputStream; > import java.io.FileNotFoundException; > import java.io.FileOutputStream; > import java.io.IOException; >+import java.io.InputStream; >+import java.io.OutputStream; > import java.util.ArrayList; > import java.util.Arrays; > import java.util.Iterator; >@@ -23,6 +26,15 @@ > > import javax.xml.parsers.DocumentBuilder; > >+import org.eclipse.core.resources.IFile; >+import org.eclipse.core.resources.IProject; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.NullProgressMonitor; >+import org.eclipse.core.runtime.Path; >+import org.eclipse.core.runtime.Platform; >+import org.eclipse.core.runtime.Status; > import org.eclipse.gef.palette.PaletteContainer; > import org.eclipse.wst.common.snippets.core.ISnippetCategory; > import org.eclipse.wst.common.snippets.core.ISnippetsEntry; >@@ -40,6 +52,7 @@ > import org.eclipse.wst.common.snippets.internal.palette.WorkspaceModelDumper; > import org.eclipse.wst.common.snippets.internal.team.CategoryFileInfo; > import org.eclipse.wst.common.snippets.internal.util.CommonXML; >+import org.osgi.framework.Bundle; > import org.w3c.dom.Document; > import org.w3c.dom.Element; > import org.w3c.dom.Node; >@@ -55,6 +68,8 @@ > */ > public class SnippetManager implements ISnippetManager, PropertyChangeListener { > >+ private static final String STORAGE_FOLDER_NAME = "storage"; //$NON-NLS-1$ >+ > private static File hiddenStateFile = new File("/hidden.xml"); //$NON-NLS-1$ > > private static SnippetManager instance = null; >@@ -63,11 +78,19 @@ > if (instance == null) { > instance = new SnippetManager(); > try { >- hiddenStateFile = SnippetsPlugin.getDefault().getStateLocation().append("hidden.xml").toFile(); //$NON-NLS-1$ >+ hiddenStateFile = SnippetsPlugin.getDefault().getStateLocation().append("hidden.xml").toFile(); > } > catch (Exception e) { > hiddenStateFile = new File("/hidden.xml"); //$NON-NLS-1$ > } >+ >+ try { >+ File storageLocation = SnippetsPlugin.getDefault().getStateLocation().append(STORAGE_FOLDER_NAME).toFile(); >+ storageLocation.mkdirs(); >+ } >+ catch (SecurityException e) { >+ Logger.logException(e); >+ } > // hook resource listener and load categories from workspace > // nsd_TODO: disable in-workspace support until fully stabilized > // SnippetsPlugin.getDefault().initializeResourceChangeListener(); >@@ -407,5 +430,92 @@ > Logger.logException(e); > } > } >+ >+ /** >+ * @param id >+ * @return the computed storage location for a snippet with this ID >+ */ >+ public IPath getStorageLocation(String id) { >+ Bundle bundle = Platform.getBundle(SnippetsPlugin.BUNDLE_ID); >+ return Platform.getStateLocation(bundle).append(STORAGE_FOLDER_NAME).addTrailingSeparator().append(id); >+ } >+ >+ /** >+ * Helper method for saving resources in designated snippet resource folder. >+ * >+ * @param snippetId - UID of the snippet that is saving content. >+ * @param pathList - Project relative path list. The resources are copied in the same structure >+ * in the storage path. e.g. having test.jsp file in project root will result in >+ * test.jsp in the storage root. If the jsp is in [Project Root]/resources/test.jsp >+ * this will result in [Snippet Storage Root]/resources/test.jsp >+ * @return >+ */ >+ public IStatus moveFilesInStorageFolder(IPath snippetStorage, IPath[] pathList, IProject project){ >+ File storageFolder = new File(snippetStorage.toOSString()); >+ if (!storageFolder.exists()){ >+ if (!storageFolder.mkdirs()){ >+ return createErrorStatus("Could not create snippet storage folder.", null); >+ } >+ } >+ for (int i = 0; i < pathList.length; i++) { >+ IFile file = project.getFile(pathList[i]); >+ IPath destPath = snippetStorage.append(pathList[i]); >+ File destination = new File(destPath.toOSString()); >+ if (!destination.getParentFile().exists()){ >+ if (!destination.getParentFile().mkdirs()){ >+ return createErrorStatus("Could not create snippet storage folder.", null); >+ } >+ } >+ try { >+ copy(file, destination); >+ } catch (FileNotFoundException e) { >+ return createErrorStatus(e.getLocalizedMessage(), e); >+ } catch (IOException e) { >+ return createErrorStatus(e.getLocalizedMessage(), e); >+ } catch (CoreException e) { >+ return e.getStatus(); >+ } >+ } >+ >+ return Status.OK_STATUS; >+ } >+ >+ public IStatus moveFilesInWorkspace(File[] fileList, IProject target, IPath storagePath) { >+ for (int i = 0; i < fileList.length; i++) { >+ String fileRelativePath = fileList[i].getAbsolutePath().substring(storagePath.toOSString().length()); >+ IFile ifile = target.getFile(new Path(fileRelativePath)); >+ try { >+ ifile.create(new FileInputStream(fileList[i]), true, new NullProgressMonitor()); >+ } catch (FileNotFoundException e) { >+ return createErrorStatus(e.getLocalizedMessage(), e); >+ } catch (CoreException e) { >+ return createErrorStatus(e.getLocalizedMessage(), e); >+ } >+ } >+ >+ return Status.OK_STATUS; >+ } >+ >+ private void copy(IFile source, File destination) throws FileNotFoundException, IOException, CoreException{ >+ copy(source.getContents(), new FileOutputStream(destination)); >+ } >+ >+ private void copy(InputStream in, OutputStream out) throws IOException { >+ byte[] buffer = new byte[4096]; >+ try { >+ int n = in.read(buffer); >+ while (n > 0) { >+ out.write(buffer, 0, n); >+ n = in.read(buffer); >+ } >+ } finally { >+ in.close(); >+ out.close(); >+ } >+ } >+ >+ private IStatus createErrorStatus(String msg, Exception e) { >+ return new Status(IStatus.ERROR, SnippetsPlugin.BUNDLE_ID, msg, e); >+ } > > } >Index: plugin.xml >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/plugin.xml,v >retrieving revision 1.9 >diff -u -r1.9 plugin.xml >--- plugin.xml 30 Apr 2007 19:32:42 -0000 1.9 >+++ plugin.xml 8 Sep 2009 13:06:56 -0000 >@@ -6,6 +6,11 @@ > id="SnippetContributions" > name="%Snippets_View_Contributions_Extension.name" > schema="schema/SnippetContributions.exsd" /> >+ >+ <extension-point >+ id="SnippetProvider" >+ name="%extension-point.name.0" >+ schema="schema/SnippetProvider.exsd"/> > > <!-- the view itself --> > <extension point="org.eclipse.ui.views"> >@@ -175,4 +180,17 @@ > </action> > </viewerContribution> > </extension> >+ >+ <extension point="org.eclipse.wst.common.snippets.SnippetProvider"> >+ <provider >+ class="org.eclipse.wst.common.snippets.ui.TextSnippetProvider" >+ priority="100"> >+ <enablement> >+ <or> >+ <adapt type="org.eclipse.ui.texteditor.ITextEditor"/> >+ <instanceof value="org.eclipse.ui.texteditor.ITextEditor"/> >+ </or> >+ </enablement> >+ </provider> >+ </extension> > </plugin> >Index: plugin.properties >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/plugin.properties,v >retrieving revision 1.4 >diff -u -r1.4 plugin.properties >--- plugin.properties 10 Apr 2007 17:23:36 -0000 1.4 >+++ plugin.properties 8 Sep 2009 13:06:56 -0000 >@@ -13,3 +13,5 @@ > Snippets.name=Snippets > Snippets_View_Contributions_Extension.name=Snippets View Contributions Extension > Add_to_Snippets.name=Add to Snippets... >+ >+extension-point.name.0 = SnippetProvider >\ No newline at end of file >Index: .settings/org.eclipse.jdt.core.prefs >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/.settings/org.eclipse.jdt.core.prefs,v >retrieving revision 1.7 >diff -u -r1.7 org.eclipse.jdt.core.prefs >--- .settings/org.eclipse.jdt.core.prefs 28 Mar 2007 07:13:53 -0000 1.7 >+++ .settings/org.eclipse.jdt.core.prefs 8 Sep 2009 13:06:56 -0000 >@@ -1,4 +1,4 @@ >-#Wed Mar 28 03:12:48 EDT 2007 >+#Mon Aug 31 15:11:18 EDT 2009 > eclipse.preferences.version=1 > org.eclipse.jdt.core.builder.cleanOutputFolder=clean > org.eclipse.jdt.core.builder.duplicateResourceTask=warning >@@ -7,7 +7,7 @@ > org.eclipse.jdt.core.circularClasspath=error > org.eclipse.jdt.core.classpath.exclusionPatterns=enabled > org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled >-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled >+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled > org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 > org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve > org.eclipse.jdt.core.compiler.compliance=1.4 >Index: .settings/org.eclipse.pde.prefs >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/.settings/org.eclipse.pde.prefs,v >retrieving revision 1.6 >diff -u -r1.6 org.eclipse.pde.prefs >--- .settings/org.eclipse.pde.prefs 20 Aug 2006 01:15:35 -0000 1.6 >+++ .settings/org.eclipse.pde.prefs 8 Sep 2009 13:06:56 -0000 >@@ -1,16 +1,28 @@ >-#Mon Apr 17 02:01:33 EDT 2006 >+#Mon Aug 31 15:06:59 EDT 2009 >+compilers.f.unresolved-features=1 >+compilers.f.unresolved-plugins=1 > compilers.incompatible-environment=0 > compilers.p.build=0 > compilers.p.deprecated=1 >+compilers.p.discouraged-class=1 > compilers.p.illegal-att-value=0 >+compilers.p.internal=1 >+compilers.p.missing-packages=0 >+compilers.p.missing-version-export-package=2 >+compilers.p.missing-version-import-package=2 >+compilers.p.missing-version-require-bundle=0 > compilers.p.no-required-att=0 > compilers.p.not-externalized-att=0 > compilers.p.unknown-attribute=0 > compilers.p.unknown-class=0 > compilers.p.unknown-element=0 >+compilers.p.unknown-identifier=1 > compilers.p.unknown-resource=0 > compilers.p.unresolved-ex-points=0 > compilers.p.unresolved-import=0 > compilers.p.unused-element-or-attribute=0 >+compilers.s.create-docs=false >+compilers.s.doc-folder=doc >+compilers.s.open-tags=1 > compilers.use-project=true > eclipse.preferences.version=1 >Index: src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java,v >retrieving revision 1.5 >diff -u -r1.5 SnippetsPlugin.java >--- src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java 10 Apr 2007 17:23:35 -0000 1.5 >+++ src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java 8 Sep 2009 13:06:56 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2004, 2005 IBM Corporation and others. >+ * Copyright (c) 2004, 2009 IBM Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -43,6 +43,7 @@ > String VARIABLES = "variables"; //$NON-NLS-1$ > String VERSION = "version"; //$NON-NLS-1$ > String VIEW_ID = "org.eclipse.wst.common.snippets.internal.ui.SnippetsView"; //$NON-NLS-1$ >+ String PROVIDER_ID = "snippetProvider";//$NON-NLS-1$ > } > > public static final String BUNDLE_ID = "org.eclipse.wst.common.snippets"; //$NON-NLS-1$ >Index: src/org/eclipse/wst/common/snippets/internal/SnippetTransfer.java >=================================================================== >RCS file: /cvsroot/webtools/common/plugins/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetTransfer.java,v >retrieving revision 1.2 >diff -u -r1.2 SnippetTransfer.java >--- src/org/eclipse/wst/common/snippets/internal/SnippetTransfer.java 10 Apr 2007 17:23:34 -0000 1.2 >+++ src/org/eclipse/wst/common/snippets/internal/SnippetTransfer.java 8 Sep 2009 13:06:56 -0000 >@@ -29,6 +29,16 @@ > private static String[] names = null; > private static int types[] = null; > >+// /** >+// * This records the time at which the transfer data was recorded. >+// */ >+// protected long startTime; >+// >+// /** >+// * This records the data being transferred. >+// */ >+// protected Object object; >+ > /** > * @return the registered Transfer instance > */ >Index: schema/SnippetProvider.exsd >=================================================================== >RCS file: schema/SnippetProvider.exsd >diff -N schema/SnippetProvider.exsd >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ schema/SnippetProvider.exsd 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,115 @@ >+<?xml version='1.0' encoding='UTF-8'?> >+<!-- Schema file written by PDE --> >+<schema targetNamespace="org.eclipse.wst.common.snippets" xmlns="http://www.w3.org/2001/XMLSchema"> >+<annotation> >+ <appInfo> >+ <meta.schema plugin="org.eclipse.wst.common.snippets" id="SnippetProvider" name="SnippetProvider"/> >+ </appInfo> >+ <documentation> >+ [Enter description of this extension point.] >+ </documentation> >+ </annotation> >+ >+ <include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/> >+ >+ <element name="extension"> >+ <annotation> >+ <appInfo> >+ <meta.element /> >+ </appInfo> >+ </annotation> >+ <complexType> >+ <sequence> >+ <element ref="provider" minOccurs="1" maxOccurs="unbounded"/> >+ </sequence> >+ <attribute name="point" type="string" use="required"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="id" type="string"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ </annotation> >+ </attribute> >+ <attribute name="name" type="string"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ <appInfo> >+ <meta.attribute translatable="true"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <element name="provider"> >+ <complexType> >+ <sequence> >+ <element ref="enablement"/> >+ </sequence> >+ <attribute name="class" type="string"> >+ <annotation> >+ <documentation> >+ >+ </documentation> >+ <appInfo> >+ <meta.attribute kind="java" basedOn=":org.eclipse.wst.common.snippets.ui.ISnippetProvider"/> >+ </appInfo> >+ </annotation> >+ </attribute> >+ <attribute name="priority" type="string" use="required"> >+ <annotation> >+ <documentation> >+ 0 highest >+100 lowest >+ </documentation> >+ </annotation> >+ </attribute> >+ </complexType> >+ </element> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="since"/> >+ </appInfo> >+ <documentation> >+ [Enter the first release in which this extension point appears.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="examples"/> >+ </appInfo> >+ <documentation> >+ [Enter extension point usage example here.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="apiinfo"/> >+ </appInfo> >+ <documentation> >+ [Enter API information here.] >+ </documentation> >+ </annotation> >+ >+ <annotation> >+ <appInfo> >+ <meta.section type="implementation"/> >+ </appInfo> >+ <documentation> >+ [Enter information about supplied implementation of this extension point.] >+ </documentation> >+ </annotation> >+ >+ >+</schema> >Index: src/org/eclipse/wst/common/snippets/internal/SnippetContributor.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/internal/SnippetContributor.java >diff -N src/org/eclipse/wst/common/snippets/internal/SnippetContributor.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/internal/SnippetContributor.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,104 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 SAP AG and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * SAP AG - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.wst.common.snippets.internal; >+ >+import org.eclipse.core.expressions.EvaluationContext; >+import org.eclipse.core.expressions.EvaluationResult; >+import org.eclipse.core.expressions.Expression; >+import org.eclipse.core.expressions.ExpressionConverter; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IConfigurationElement; >+import org.eclipse.wst.common.snippets.core.ISnippetProvider; >+ >+public class SnippetContributor { >+ >+ public static final String ID_EXTENSION_POINT_PROVIDER = SnippetsPlugin.BUNDLE_ID + ".SnippetProvider"; //$NON-NLS-1$ >+ public static final String CLASS = "class"; //$NON-NLS-1$ >+ public static final String PRIO = "priority"; //$NON-NLS-1$ >+ public static final String ENABLEMENT = "enablement"; //$NON-NLS-1$ >+ >+ private ISnippetProvider provider; >+ private IConfigurationElement extPointElement; >+ // 100 = lowest, 0 = highest >+ private byte priority; >+ >+ private boolean initExecuted = false; >+ >+ >+ public SnippetContributor(IConfigurationElement extPointElement) { >+ super(); >+ this.extPointElement = extPointElement; >+ initPriority(); >+ } >+ >+ private void initPriority() { >+ if (extPointElement.getAttribute(PRIO) != null){ >+ try{ >+ priority = (byte) Integer.parseInt(extPointElement.getAttribute(PRIO)); >+ if(priority < 0 || priority >100){ >+ priority = 100; >+ } >+ }catch (NumberFormatException e){ >+ priority = 100; >+ Logger.logException(e); >+ } >+ } >+ } >+ >+ private void initProvider() { >+ initExecuted = true; >+ try { >+ provider = (ISnippetProvider) extPointElement.createExecutableExtension(CLASS); >+ } catch (CoreException e) { >+ Logger.logException(e); >+ } >+ >+ >+ } >+ >+ >+ public boolean isApplicable(Object o) { >+ IConfigurationElement[] configurationElements = extPointElement.getChildren(ENABLEMENT); >+ boolean enabled = false; >+ for (int i = 0; i < configurationElements.length; i++) { >+ try { >+ enabled |= testEnablement(configurationElements[i], o); >+ } catch (CoreException e) { >+ //nothing to do testEnablement fails. >+ return false; >+ } >+ } >+ return enabled; >+ } >+ >+ private boolean testEnablement(IConfigurationElement enable, Object o) throws CoreException{ >+ Expression exp= ExpressionConverter.getDefault().perform(enable); >+ EvaluationContext context = new EvaluationContext(null, o); >+ context.setAllowPluginActivation(true); >+ return EvaluationResult.TRUE == exp.evaluate(context); >+ } >+ >+ >+ public ISnippetProvider getProvider() { >+ if (!initExecuted){ >+ initProvider(); >+ } >+ return provider; >+ } >+ >+ public byte getPriority() { >+ return priority; >+ } >+ >+ public String toString() { >+ return super.toString() + ":" + extPointElement.getAttribute(CLASS); >+ } >+} >Index: src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTransfer.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTransfer.java >diff -N src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTransfer.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTransfer.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,116 @@ >+///******************************************************************************* >+// * Copyright (c) 2009 SAP AG and others. >+// * All rights reserved. This program and the accompanying materials >+// * are made available under the terms of the Eclipse Public License v1.0 >+// * which accompanies this distribution, and is available at >+// * http://www.eclipse.org/legal/epl-v10.html >+// * >+// * Contributors: >+// * SAP AG - initial API and implementation >+// *******************************************************************************/ >+//package org.eclipse.wst.common.snippets.internal.dnd; >+// >+// >+//import org.eclipse.swt.dnd.ByteArrayTransfer; >+//import org.eclipse.swt.dnd.TransferData; >+// >+// >+///** >+// * This derived implementation of a byte array transfer short circuits the transfer process >+// * so that a local transfer does not serialize the object >+// * and hence can and will return the original object, not just a clone. >+// * You only really need ever know about {@link #getInstance ObjectTransfer.getInstance()}, >+// * so that you can include it in when adding drag support to a viewer. >+// * See {@link EditingDomainViewerDropAdapter} and {@link ViewerDragAdapter} for more details. >+// * <p> >+// * As an addded guard, the time is recorded and serialized in javaToNative >+// * to that navive to java can ensure that it's returns the value that was really to have been transferred. >+// */ >+//public class SnippetTransfer extends ByteArrayTransfer >+//{ >+// /** >+// * This is the register transfer type name. >+// */ >+// protected static final String TYPE_NAME = "local-transfer-format"; >+// >+// /** >+// * This is the ID that is registered to the name. >+// */ >+// protected static final int TYPE_ID = registerType(TYPE_NAME); >+// >+// /** >+// * This is initialized and returned by {@link #getInstance}. >+// */ >+// protected static SnippetTransfer instance; >+// >+// /** >+// * This returns the one instance of this transfer agent. >+// */ >+// public static SnippetTransfer getInstance() >+// { >+// if (instance == null) >+// { >+// instance = new SnippetTransfer(); >+// } >+// >+// return instance; >+// } >+// >+// /** >+// * This records the time at which the transfer data was recorded. >+// */ >+// protected long startTime; >+// >+// /** >+// * This records the data being transferred. >+// */ >+// protected Object object; >+// >+// /** >+// * This creates an instance; typically you get one from {@link #getInstance}. >+// */ >+// protected SnippetTransfer() >+// { >+// } >+// >+// /** >+// * This returns the transfer ids that this agent supports. >+// */ >+// protected int[] getTypeIds() >+// { >+// return new int[] { TYPE_ID }; >+// } >+// >+// /** >+// * This returns the transfer names that this agent supports. >+// */ >+// public String[] getTypeNames() >+// { >+// return new String[] { TYPE_NAME }; >+// } >+// >+// /** >+// * This records the object and current time and encodes only the current time into the transfer data. >+// */ >+// public void javaToNative(Object object, TransferData transferData) >+// { >+// startTime = System.currentTimeMillis(); >+// this.object = object; >+// if (transferData != null) >+// { >+// super.javaToNative(String.valueOf(startTime).getBytes(), transferData); >+// } >+// } >+// >+// /** >+// * This decodes the time of the transfer and returns the recorded the object if the recorded time and the decoded time match. >+// */ >+// public Object nativeToJava(TransferData transferData) >+// { >+// long startTime = Long.valueOf(new String((byte[])super.nativeToJava(transferData))).longValue(); >+// return >+// this.startTime == startTime ? >+// object : >+// null; >+// } >+//} >Index: src/org/eclipse/wst/common/snippets/ui/TextSnippetProvider.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/ui/TextSnippetProvider.java >diff -N src/org/eclipse/wst/common/snippets/ui/TextSnippetProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/ui/TextSnippetProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,104 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 SAP AG and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * SAP AG - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.wst.common.snippets.ui; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.core.runtime.Status; >+import org.eclipse.gef.palette.PaletteEntry; >+import org.eclipse.jface.text.BadLocationException; >+import org.eclipse.jface.text.IDocument; >+import org.eclipse.jface.text.ITextSelection; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.ui.IWorkbenchPart; >+import org.eclipse.ui.texteditor.ITextEditor; >+import org.eclipse.wst.common.snippets.core.ISnippetProvider; >+import org.eclipse.wst.common.snippets.internal.AbstractSnippetProvider; >+import org.eclipse.wst.common.snippets.internal.Logger; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem; >+import org.eclipse.wst.common.snippets.internal.util.StringUtils; >+ >+public class TextSnippetProvider extends AbstractSnippetProvider implements ISnippetProvider { >+ >+ public SnippetPaletteItem createSnippet(PaletteEntry drawer) throws CoreException { >+ SnippetPaletteItem item = super.createSnippet(drawer); >+ ITextSelection selection = getTextSelection(); >+ try { >+ String selectedText = getDocument().get(selection.getOffset(), selection.getLength()); >+ item.setDescription(StringUtils.firstLineOf(selectedText).trim() + "..."); //$NON-NLS-1$ >+ item.setContentString(selectedText); >+ } >+ catch (BadLocationException e) { >+ Logger.logException(e); >+ } >+ return item; >+ } >+ >+ >+ protected ITextSelection getTextSelection() { >+ ITextEditor editor = getTextEditor(); >+ if (editor != null) { >+ ISelection selection = editor.getSelectionProvider().getSelection(); >+ if (selection instanceof ITextSelection) { >+ return (ITextSelection) selection; >+ } >+ } >+ return null; >+ } >+ >+ protected ITextEditor getTextEditor() { >+ ITextEditor editor = null; >+ IWorkbenchPart activePart = fEditorPart; >+ >+ if (activePart instanceof ITextEditor) { >+ editor = (ITextEditor) activePart; >+ } >+ if (editor == null) { >+ editor = (ITextEditor) activePart.getAdapter(ITextEditor.class); >+ } >+ return editor; >+ } >+ >+ public boolean isActionEnabled(ISelection selection) { >+ boolean enable = false; >+ if (selection != null) { >+ if (selection instanceof ITextSelection) { >+ if (((ITextSelection) selection).getLength() > 0) { >+ enable = true; >+ } >+ } >+ else { >+ enable = !selection.isEmpty(); >+ } >+ } >+ return enable; >+ } >+ >+ public IDocument getDocument() { >+ return getTextEditor().getDocumentProvider().getDocument(fEditorPart.getEditorInput()); >+ } >+ >+ public IStatus saveAdditionalContent(IPath path) { >+ return Status.OK_STATUS; >+ } >+ >+ >+ public ISnippetInsertion getSnippetInsertion() { >+ return new DefaultSnippetInsertion(); >+ } >+ >+ >+ public String getId() { >+ return TextSnippetProvider.class.getName(); >+ } >+ >+} >Index: src/org/eclipse/wst/common/snippets/core/ISnippetProvider.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/core/ISnippetProvider.java >diff -N src/org/eclipse/wst/common/snippets/core/ISnippetProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/core/ISnippetProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,26 @@ >+package org.eclipse.wst.common.snippets.core; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.gef.palette.PaletteEntry; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem; >+import org.eclipse.wst.common.snippets.ui.ISnippetInsertion; >+ >+public interface ISnippetProvider { >+ >+ public SnippetPaletteItem createSnippet(PaletteEntry drawer) throws CoreException ; >+ >+ public boolean isActionEnabled(ISelection selection); >+ >+ public IStatus saveAdditionalContent(IPath path); >+ >+ public ISnippetInsertion getSnippetInsertion(); >+ >+ public String getId(); >+ >+ public void setEditor(IEditorPart editor); >+ >+} >Index: src/org/eclipse/wst/common/snippets/internal/AbstractSnippetProvider.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/internal/AbstractSnippetProvider.java >diff -N src/org/eclipse/wst/common/snippets/internal/AbstractSnippetProvider.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/internal/AbstractSnippetProvider.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,46 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 SAP AG and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * SAP AG - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.wst.common.snippets.internal; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IStatus; >+import org.eclipse.gef.palette.PaletteEntry; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.wst.common.snippets.core.ISnippetProvider; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem; >+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItemFactory; >+ >+public abstract class AbstractSnippetProvider implements ISnippetProvider { >+ >+ protected IEditorPart fEditorPart; >+ >+ public void setEditor(IEditorPart editor) { >+ fEditorPart = editor; >+ >+ } >+ >+ public SnippetPaletteItem createSnippet(PaletteEntry drawer) throws CoreException { >+ SnippetPaletteItem snippet = createSnippetMetadata(drawer); >+ return snippet; >+ } >+ >+ protected SnippetPaletteItem createSnippetMetadata(PaletteEntry drawer) throws CoreException { >+ SnippetPaletteItem item = (SnippetPaletteItem) new SnippetPaletteItemFactory().createNewEntry(fEditorPart.getSite().getShell(), drawer); >+// item.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS); >+ item.setProvider(this); >+ IStatus status = saveAdditionalContent(item.getStorageLocation()); >+ if (status!= null && status.getSeverity() == IStatus.ERROR){ >+ throw new CoreException(status); >+ } >+ return item; >+ } >+ >+} >Index: src/org/eclipse/wst/common/snippets/internal/util/SnippetProviderManager.java >=================================================================== >RCS file: src/org/eclipse/wst/common/snippets/internal/util/SnippetProviderManager.java >diff -N src/org/eclipse/wst/common/snippets/internal/util/SnippetProviderManager.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/wst/common/snippets/internal/util/SnippetProviderManager.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,88 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 SAP AG and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * SAP AG - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.wst.common.snippets.internal.util; >+ >+import java.util.ArrayList; >+import java.util.List; >+ >+import org.eclipse.core.runtime.Assert; >+import org.eclipse.core.runtime.IConfigurationElement; >+import org.eclipse.core.runtime.IExtension; >+import org.eclipse.core.runtime.IExtensionPoint; >+import org.eclipse.core.runtime.Platform; >+import org.eclipse.ui.IEditorPart; >+import org.eclipse.wst.common.snippets.core.ISnippetProvider; >+import org.eclipse.wst.common.snippets.internal.SnippetContributor; >+import org.eclipse.wst.common.snippets.ui.TextSnippetProvider; >+ >+ >+public class SnippetProviderManager { >+ >+ private static ISnippetProvider[] getProviders() { >+ IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(SnippetContributor.ID_EXTENSION_POINT_PROVIDER); >+ IExtension[] extensions = extensionPoint.getExtensions(); >+ List providerList = new ArrayList(); >+ for (int i = 0; i < extensions.length; i++) { >+ IConfigurationElement[] configurationElements = extensions[i].getConfigurationElements(); >+ for (int j = 0; j < configurationElements.length; j++) { >+ SnippetContributor sc = new SnippetContributor(configurationElements[j]); >+ if (sc.getProvider() != null){ >+ providerList.add(sc.getProvider()); >+ } >+ } >+ >+ } >+ return (ISnippetProvider[]) providerList.toArray(new ISnippetProvider[providerList.size()]); >+ } >+ >+ public static ISnippetProvider findProvider(String id) { >+ Assert.isNotNull(id); >+ ISnippetProvider[] providers = getProviders(); >+ for (int i = 0; i < providers.length; i++) { >+ if(id.equals(providers[i].getId())) >+ return providers[i]; >+ } >+ >+ return new TextSnippetProvider(); >+ } >+ >+ public static ISnippetProvider getApplicableProvider(IEditorPart targetEditor) { >+ SnippetContributor applicableContributor = null; >+ IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(SnippetContributor.ID_EXTENSION_POINT_PROVIDER); >+ if (extensionPoint != null) { >+ IExtension[] extensions = extensionPoint.getExtensions(); >+ for (int i = 0; i < extensions.length; i++) { >+ IConfigurationElement[] configurationElements = extensions[i].getConfigurationElements(); >+ for (int j = 0; j < configurationElements.length; j++) { >+ SnippetContributor sc = new SnippetContributor(configurationElements[j]); >+ if (sc.isApplicable(targetEditor)) { >+ if (applicableContributor == null || applicableContributor.getPriority() > sc.getPriority()) { >+ applicableContributor = sc; >+ } >+ } >+ } >+ } >+ } >+ if (applicableContributor == null){ >+ return null; >+ } >+ ISnippetProvider provider = applicableContributor.getProvider(); >+ // a null provider is an error condition >+ if (provider != null) { >+ provider.setEditor(targetEditor); >+ } >+ return provider; >+ } >+ >+ >+ >+ >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 282114
:
140573
|
141047
|
141048
|
144819
|
144823
|
146236
|
146652
|
148521
|
148523