diff options
author | Michael Wenz | 2016-08-30 11:31:24 +0000 |
---|---|---|
committer | Gerrit Code Review @ Eclipse.org | 2016-08-30 11:31:24 +0000 |
commit | 795eb2ac84e70f80f17b69bfe9a0a5e3363d74db (patch) | |
tree | 6d4ac103c1b5b919190d544b34dbd28ad3004c49 | |
parent | a5e69526e6d33497249c6894f202e8ff1131e462 (diff) | |
parent | 129c87d1023d4e76f28614b7d9c4fea68012b475 (diff) | |
download | org.eclipse.graphiti-795eb2ac84e70f80f17b69bfe9a0a5e3363d74db.tar.gz org.eclipse.graphiti-795eb2ac84e70f80f17b69bfe9a0a5e3363d74db.tar.xz org.eclipse.graphiti-795eb2ac84e70f80f17b69bfe9a0a5e3363d74db.zip |
Merge "Bug 498164 : Providing a JFace ResourceManager in DiagramBehavior to manage SWT resources"
3 files changed, 147 insertions, 3 deletions
diff --git a/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/editor/DiagramBehavior.java b/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/editor/DiagramBehavior.java index efd3feb6..b1330fb6 100644 --- a/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/editor/DiagramBehavior.java +++ b/plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/editor/DiagramBehavior.java @@ -21,7 +21,7 @@ * mwenz - Bug 470150 - NullPointerException in DiagramBehavior.getAdapter * mwenz - Bug 477526 - NullPointerException in DiagramBehavior.addGefListeners * mwenz - Bug 480961 - NullPointerException below ScrollingGraphicalViewer.reveal - * + * edeley - Bug 498164 - Providing a JFace ResourceManager in DiagramBehavior to manage SWT resources * </copyright> * *******************************************************************************/ @@ -117,6 +117,9 @@ import org.eclipse.graphiti.ui.platform.IConfigurationProvider; import org.eclipse.graphiti.ui.services.GraphitiUi; import org.eclipse.jface.action.IAction; import org.eclipse.jface.commands.ActionHandler; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.jface.resource.LocalResourceManager; +import org.eclipse.jface.resource.ResourceManager; import org.eclipse.jface.util.TransferDropTargetListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionProvider; @@ -183,6 +186,8 @@ public class DiagramBehavior implements IDiagramBehaviorUI { private ContextMenuProvider contextMenuProvider = null; + private ResourceManager resourceManager = null; + public DiagramBehavior(IDiagramContainerUI diagramContainer) { super(); this.setDiagramContainer(diagramContainer); @@ -1789,7 +1794,7 @@ public class DiagramBehavior implements IDiagramBehaviorUI { if (getEditDomain() != null) { getEditDomain().setCommandStack(null); } - + resourceManager.dispose(); } /** @@ -1842,4 +1847,37 @@ public class DiagramBehavior implements IDiagramBehaviorUI { protected IWorkbenchPart getParentPart() { return parentPart; } + + /** + * Creates a new instance of a {@link ResourceManager} implementation. + * <p> + * By default this creates a {@link LocalResourceManager} instance. + * Subclasses may override this method to enforce the usage of another + * implementation. + * </p> + * @return A new instance of a {@link ResourceManager}. + * + * @since 0.14 + */ + protected ResourceManager createResourceManager() { + return new LocalResourceManager(JFaceResources.getResources()); + } + + /** + * + * @return the JFace {@link ResourceManager} to be used to create images, + * fonts etc for an open diagram. + * + * @since 0.14 + */ + public ResourceManager getResourceManager() { + synchronized(this) { + // don't initialize in the constructor as that seems to break mock + // DiagramBehavior instances in e.g. CustomUndoableFeatureTest. + if(resourceManager==null) { + resourceManager = createResourceManager(); + } + } + return resourceManager; + } } diff --git a/tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/AllTests.java b/tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/AllTests.java index e4a89b49..fc62549c 100644 --- a/tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/AllTests.java +++ b/tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/AllTests.java @@ -37,6 +37,6 @@ import org.junit.runners.Suite; CustomUndoableFeatureTest.class, RollbackTest.class, LayoutServiceTest.class, CommandTest.class, CompatibilityTests.class, GFFigureUtilTest.class, CustomUndoRedoFeatureTest.class, DefaultDeleteFeatureTest.class, DefaultRemoveFeatureTest.class, GFPaletteRootTest.class, - CreateConnectionCommandTest.class }) + CreateConnectionCommandTest.class, ResourceManagerTest.class }) public class AllTests { } diff --git a/tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/ResourceManagerTest.java b/tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/ResourceManagerTest.java new file mode 100644 index 00000000..f34a58d2 --- /dev/null +++ b/tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/ResourceManagerTest.java @@ -0,0 +1,106 @@ +/******************************************************************************* + * Copyright (c) 2016 iSencia Belgium NV. + * 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: + * Erwin De Ley - initial implementation + *******************************************************************************/ +package org.eclipse.graphiti.ui.tests; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertSame; + +import org.easymock.EasyMock; +import org.eclipse.graphiti.tests.reuse.GFAbstractTestCase; +import org.eclipse.graphiti.ui.editor.DiagramBehavior; +import org.eclipse.graphiti.ui.editor.IDiagramContainerUI; +import org.eclipse.jface.resource.FontDescriptor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.RGB; +import org.eclipse.swt.widgets.Display; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +// TODO : figure out a way to test the disposal, via an invocation on DiagramBehavior.disposeAfterGefDispose() +// but this method is not visible for our test code... +public class ResourceManagerTest extends GFAbstractTestCase { + + private static TestDiagramBehavior diagramBehavior; + private static Display display; + + @BeforeClass + public static void before() { + GFAbstractTestCase.before(); + display = Display.getDefault(); + diagramBehavior = new TestDiagramBehavior(EasyMock.createNiceMock(IDiagramContainerUI.class)); + } + + @AfterClass + public static void after() { + diagramBehavior.getResourceManager().dispose(); + display.dispose(); + } + + @Test + public void testResourceManagerIsPresent() throws Exception { + assertNotNull("JFace ResourceManager must be present on DiagramBehavior", diagramBehavior.getResourceManager()); + } + + @Test + public void testColorCreation() throws Exception { + Color color = diagramBehavior.getResourceManager().createColor(new RGB(100, 100, 100)); + assertNotNull(color); + } + + @Test + public void testColorReuse() throws Exception { + Color color1 = diagramBehavior.getResourceManager().createColor(new RGB(100, 100, 100)); + Color color2 = diagramBehavior.getResourceManager().createColor(new RGB(100, 100, 100)); + assertSame(color1, color2); + } + + @Test + public void testFontCreation() throws Exception { + Font font = diagramBehavior.getResourceManager().createFont(FontDescriptor.createFrom("Arial", 10, SWT.NORMAL)); + assertNotNull(font); + } + + @Test + public void testFontReuse() throws Exception { + Font f1 = diagramBehavior.getResourceManager().createFont(FontDescriptor.createFrom("Arial", 10, SWT.NORMAL)); + Font f2 = diagramBehavior.getResourceManager().createFont(FontDescriptor.createFrom("Arial", 10, SWT.NORMAL)); + assertSame(f1, f2); + } + + @Test + public void testDisposal() throws Exception { + FontDescriptor fontDescr = FontDescriptor.createFrom("Arial", 10, SWT.NORMAL); + Font f1 = diagramBehavior.getResourceManager().createFont(fontDescr); + RGB colorDescr = new RGB(100, 100, 100); + Color c1 = diagramBehavior.getResourceManager().createColor(colorDescr); + diagramBehavior.disposeAfterGefDispose(); + Font f2 = diagramBehavior.getResourceManager().createFont(fontDescr); + Color c2 = diagramBehavior.getResourceManager().createColor(colorDescr); + assertNotSame(f1, f2); + assertNotSame(c1, c2); + } + + private static class TestDiagramBehavior extends DiagramBehavior { + public TestDiagramBehavior(IDiagramContainerUI diagramContainer) { + super(diagramContainer); + } + + @Override + protected void disposeAfterGefDispose() { + // TODO Auto-generated method stub + super.disposeAfterGefDispose(); + } + } +} |