Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Wenz2016-08-30 11:31:24 +0000
committerGerrit Code Review @ Eclipse.org2016-08-30 11:31:24 +0000
commit795eb2ac84e70f80f17b69bfe9a0a5e3363d74db (patch)
tree6d4ac103c1b5b919190d544b34dbd28ad3004c49
parenta5e69526e6d33497249c6894f202e8ff1131e462 (diff)
parent129c87d1023d4e76f28614b7d9c4fea68012b475 (diff)
downloadorg.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"
-rw-r--r--plugins/org.eclipse.graphiti.ui/src/org/eclipse/graphiti/ui/editor/DiagramBehavior.java42
-rw-r--r--tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/AllTests.java2
-rw-r--r--tests/org.eclipse.graphiti.ui.tests/src/org/eclipse/graphiti/ui/tests/ResourceManagerTest.java106
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();
+ }
+ }
+}

Back to the top