diff options
author | Leo Denault | 2014-03-21 12:55:16 +0000 |
---|---|---|
committer | Leo Denault | 2014-04-07 21:30:46 +0000 |
commit | 7222c584ddfa76d867f679d7568670cd0830b9b6 (patch) | |
tree | aa54cf6dc0d53225f79aa9ad386d601f6dfd4131 | |
parent | 6a113089889fb86df228f97118cd48c56ebe42b8 (diff) | |
download | org.eclipse.e4.tools-7222c584ddfa76d867f679d7568670cd0830b9b6.tar.gz org.eclipse.e4.tools-7222c584ddfa76d867f679d7568670cd0830b9b6.tar.xz org.eclipse.e4.tools-7222c584ddfa76d867f679d7568670cd0830b9b6.zip |
Bug 426397 - Provide an eclipse editor based on OrionEditorControlI20140418-0615I20140417-2200I20140416-2200I20140415-2200I20140414-2200I20140413-2200I20140412-2200I20140411-2200I20140411-0615I20140410-2200I20140409-2200I20140408-2200
Implemented revert feature.
Change-Id: I382ae1d57f3599b18e3625b916616a07cf7ba433
Signed-off-by: Leo Denault <ldena023@uottawa.ca>
8 files changed, 162 insertions, 36 deletions
diff --git a/bundles/org.eclipse.e4.tools.orion.text.editor/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.tools.orion.text.editor/META-INF/MANIFEST.MF index 31dc62fc..21c3a9c4 100644 --- a/bundles/org.eclipse.e4.tools.orion.text.editor/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.e4.tools.orion.text.editor/META-INF/MANIFEST.MF @@ -12,4 +12,5 @@ Require-Bundle: org.eclipse.ui, org.eclipse.ui.ide;bundle-version="3.10.0" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy -Export-Package: org.eclipse.e4.tools.orion.text.editor +Export-Package: org.eclipse.e4.tools.orion.text.editor, + org.eclipse.e4.tools.orion.text.editor.handlers diff --git a/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditor.java b/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditor.java index fa88e770..beb1750e 100755 --- a/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditor.java +++ b/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditor.java @@ -28,14 +28,17 @@ import org.eclipse.e4.tools.orion.editor.builder.html.HTMLBuilder; import org.eclipse.e4.tools.orion.editor.builder.js.JSBuilder; import org.eclipse.e4.tools.orion.editor.swt.IDirtyListener; import org.eclipse.e4.tools.orion.editor.swt.OrionEditorControl; +import org.eclipse.e4.tools.orion.text.editor.handlers.RevertOrionEditorHandler; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.ISaveablePart; +import org.eclipse.ui.IWorkbenchCommandConstants; import org.eclipse.ui.PartInitException; import org.eclipse.ui.dialogs.SaveAsDialog; +import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.EditorPart; import org.eclipse.ui.part.FileEditorInput; @@ -105,11 +108,7 @@ public class OrionEditor extends EditorPart implements IDirtyListener { } } catch (Exception e) { success = false; - Activator - .getDefault() - .getLog() - .log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "Failed to save file", e)); + logError("Failed to save file", e); } if (success) { @@ -133,6 +132,12 @@ public class OrionEditor extends EditorPart implements IDirtyListener { setInput(input); setPartName(input.getName()); + // Set up the revert file handler + IHandlerService handlerService = (IHandlerService) site + .getService(IHandlerService.class); + handlerService.activateHandler(IWorkbenchCommandConstants.FILE_REVERT, + new RevertOrionEditorHandler(this)); + FileEditorInput fileInput = ((FileEditorInput) input); if (fileInput != null) { source = fileInput.getFile(); @@ -173,11 +178,7 @@ public class OrionEditor extends EditorPart implements IDirtyListener { control.addDirtyListener(this); control.setText(text); } catch (Exception e) { - Activator - .getDefault() - .getLog() - .log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, - "Failed to load file", e)); + logError("Failed to load file", e); } } @@ -245,6 +246,28 @@ public class OrionEditor extends EditorPart implements IDirtyListener { firePropertyChange(ISaveablePart.PROP_DIRTY); } + public void revert() { + if (control != null) { + if (source == null) { + control.setText(""); + } else { + try { + control.setText(loadFile(source.getContents(), 1024)); + control.setDirty(false); + } catch (Exception e) { + logError("Failed to revert file", e); + } + } + } + } + + private void logError(String message, Exception e) { + Activator + .getDefault() + .getLog() + .log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, message, e)); + } + private IStatusLineManager getStatusLineManager() { return getEditorSite().getActionBars().getStatusLineManager(); } diff --git a/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditorActionBarContributor.java b/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditorActionBarContributor.java index 8128f1af..b8406bc7 100644 --- a/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditorActionBarContributor.java +++ b/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/OrionEditorActionBarContributor.java @@ -10,27 +10,8 @@ *******************************************************************************/ package org.eclipse.e4.tools.orion.text.editor; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.IEditorActionBarContributor; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbenchPage; - -public class OrionEditorActionBarContributor implements - IEditorActionBarContributor { - - @Override - public void init(IActionBars bars, IWorkbenchPage page) { - // Intentionally empty. - } - - @Override - public void setActiveEditor(IEditorPart targetEditor) { - // Intentionally empty. - } - - @Override - public void dispose() { - // Intentionally empty. - } +import org.eclipse.ui.part.EditorActionBarContributor; +public class OrionEditorActionBarContributor extends EditorActionBarContributor { + // Intentionally empty } diff --git a/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/handlers/RevertOrionEditorHandler.java b/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/handlers/RevertOrionEditorHandler.java new file mode 100644 index 00000000..ac45e664 --- /dev/null +++ b/bundles/org.eclipse.e4.tools.orion.text.editor/src/org/eclipse/e4/tools/orion/text/editor/handlers/RevertOrionEditorHandler.java @@ -0,0 +1,33 @@ +package org.eclipse.e4.tools.orion.text.editor.handlers; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.e4.tools.orion.text.editor.OrionEditor; +import org.eclipse.ui.IPropertyListener; +import org.eclipse.ui.ISaveablePart; + +public class RevertOrionEditorHandler extends AbstractHandler implements + IPropertyListener { + + private OrionEditor editor; + + public RevertOrionEditorHandler(OrionEditor editor) { + this.editor = editor; + setBaseEnabled(editor.isDirty()); + editor.addPropertyListener(this); + } + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + editor.revert(); + return null; + } + + @Override + public void propertyChanged(Object source, int propId) { + if (editor.equals(source) && propId == ISaveablePart.PROP_DIRTY) { + setBaseEnabled(editor.isDirty()); + } + } +} diff --git a/tests/org.eclipse.e4.tools.orion.text.editor.test/META-INF/MANIFEST.MF b/tests/org.eclipse.e4.tools.orion.text.editor.test/META-INF/MANIFEST.MF index 223421fc..dc34ca4f 100755 --- a/tests/org.eclipse.e4.tools.orion.text.editor.test/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.e4.tools.orion.text.editor.test/META-INF/MANIFEST.MF @@ -10,7 +10,8 @@ Require-Bundle: org.eclipse.ui, org.eclipse.core.resources;bundle-version="3.9.0", org.eclipse.ui.ide;bundle-version="3.10.0", org.eclipse.e4.tools.orion.text.editor;bundle-version="0.16.0", - org.eclipse.e4.tools.orion.editor;bundle-version="0.15.0" + org.eclipse.e4.tools.orion.editor;bundle-version="0.15.0", + org.mockito;bundle-version="1.8.4" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.ui.tests.harness.util diff --git a/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTest.java b/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTest.java index d6b72466..04872567 100644 --- a/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTest.java +++ b/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTest.java @@ -248,4 +248,21 @@ public class OrionEditorTest extends UITestCase { fail("The PartInitException should be caught internally."); } } + + public void testRevertFile() throws Throwable { + proj = FileUtil.createProject("testOpenEditor"); + String fileContents = "#simple {display: inline-block;}"; + + IFile file = FileUtil.createFile("test.css", proj); + InputStream in = new ByteArrayInputStream( + fileContents.getBytes("UTF-8")); + file.setContents(in, IFile.NONE, null); + IEditorPart editor = openEditor(file); + + OrionEditor orionEditor = (OrionEditor) editor; + orionEditor.setContents(".newCss {display: none;}"); + assertTrue(orionEditor.isDirty()); + orionEditor.revert(); + assertEquals(fileContents, orionEditor.getContents()); + } } diff --git a/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTestSuite.java b/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTestSuite.java index 6e0d1d86..d470b2c2 100644 --- a/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTestSuite.java +++ b/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/OrionEditorTestSuite.java @@ -18,9 +18,10 @@ public class OrionEditorTestSuite extends TestCase { public static Test suite() { TestSuite suite = new TestSuite(OrionEditorTestSuite.class.getName()); - //$JUnit-BEGIN$ + // $JUnit-BEGIN$ suite.addTestSuite(OrionEditorTest.class); - //$JUnit-END$ + suite.addTestSuite(RevertOrionEditorHandlerTest.class); + // $JUnit-END$ return suite; } } diff --git a/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/RevertOrionEditorHandlerTest.java b/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/RevertOrionEditorHandlerTest.java new file mode 100644 index 00000000..a1acab36 --- /dev/null +++ b/tests/org.eclipse.e4.tools.orion.text.editor.test/src/org/eclipse/e4/tools/orion/text/editor/test/RevertOrionEditorHandlerTest.java @@ -0,0 +1,69 @@ +package org.eclipse.e4.tools.orion.text.editor.test; + +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import junit.framework.TestCase; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.e4.tools.orion.text.editor.OrionEditor; +import org.eclipse.e4.tools.orion.text.editor.handlers.RevertOrionEditorHandler; +import org.eclipse.ui.ISaveablePart; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class RevertOrionEditorHandlerTest extends TestCase { + + private RevertOrionEditorHandler handler; + + @Mock + private OrionEditor mockEditor; + + @Override + protected void setUp() throws Exception { + super.setUp(); + MockitoAnnotations.initMocks(this); + when(mockEditor.isDirty()).thenReturn(false); + handler = new RevertOrionEditorHandler(mockEditor); + } + + public void testExecuteCallsOrionEditorRevert() throws ExecutionException { + handler = new RevertOrionEditorHandler(mockEditor); + assertNull(handler.execute(null)); + verify(mockEditor).revert(); + } + + public void testIsEnabledReturnsFalseUponConstructionIfOrionEditorIsNotDirty() { + assertFalse(handler.isEnabled()); + } + + public void testIsEnabledReturnsTrueUponConstructionIfOrionEditorIsDirty() { + when(mockEditor.isDirty()).thenReturn(true); + handler = new RevertOrionEditorHandler(mockEditor); + assertTrue(handler.isEnabled()); + } + + public void testIsEnabledReturnsTrueWhenEditorBecomesDirty() { + when(mockEditor.isDirty()).thenReturn(true); + handler.propertyChanged(mockEditor, ISaveablePart.PROP_DIRTY); + assertTrue(handler.isEnabled()); + } + + public void testIsEnabledReturnsFalseWhenEditorIsNotDirty() { + when(mockEditor.isDirty()).thenReturn(false); + handler.propertyChanged(mockEditor, ISaveablePart.PROP_DIRTY); + assertFalse(handler.isEnabled()); + } + + public void testIsEnabledReturnsSameValueWhenPropertyChangedSourceNotEditor() { + assertFalse(handler.isEnabled()); + handler.propertyChanged(null, ISaveablePart.PROP_DIRTY); + assertFalse(handler.isEnabled()); + + } + + public void testIsEnabledReturnsSameValueWhenPropertyChangedIdNotDirtyProperty() { + assertFalse(handler.isEnabled()); + handler.propertyChanged(mockEditor, 0); + assertFalse(handler.isEnabled()); + } +} |