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 237310 Details for
Bug 418883
Image visible while "Save As..." is not enabled after patch for bug 417427
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch
0001-Sprint-task-SaveImageAs-enabled-if-and-only-if-image.patch (text/plain), 21.20 KB, created by
Sebastian Struckmann
on 2013-11-08 08:04:04 EST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Sebastian Struckmann
Created:
2013-11-08 08:04:04 EST
Size:
21.20 KB
patch
obsolete
>From b5e82558bfdd78309ff78a1e11c970aca72f6d76 Mon Sep 17 00:00:00 2001 >From: Sebastian Struckmann <sebastian.struckmann@bredex.de> >Date: Thu, 7 Nov 2013 13:11:05 +0100 >Subject: [PATCH] Sprint task - SaveImageAs enabled if and only if image is > visible > >--- > .../jubula/client/core/model/TestResultNode.java | 24 +++++++ > org.eclipse.jubula.client.ui.rcp/plugin.xml | 27 ++------ > .../client/ui/rcp/handlers/SaveImageAsHandler.java | 80 ++++++++-------------- > .../propertytester/ImageViewPropertyTester.java | 53 -------------- > org.eclipse.jubula.client.ui/META-INF/MANIFEST.MF | 1 + > org.eclipse.jubula.client.ui/plugin.xml | 8 +++ > .../jubula/client/ui/constants/Constants.java | 7 ++ > .../client/ui/views/imageview/ImageProvider.java | 6 ++ > .../client/ui/views/imageview/ImageView.java | 53 +++++++++++++- > .../imageview/TestResultNodeImageProvider.java | 11 +++ > 10 files changed, 141 insertions(+), 129 deletions(-) > delete mode 100644 org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/propertytester/ImageViewPropertyTester.java > >diff --git a/org.eclipse.jubula.client.core/src/org/eclipse/jubula/client/core/model/TestResultNode.java b/org.eclipse.jubula.client.core/src/org/eclipse/jubula/client/core/model/TestResultNode.java >index fa34ea9..93a123a 100644 >--- a/org.eclipse.jubula.client.core/src/org/eclipse/jubula/client/core/model/TestResultNode.java >+++ b/org.eclipse.jubula.client.core/src/org/eclipse/jubula/client/core/model/TestResultNode.java >@@ -10,6 +10,8 @@ > *******************************************************************************/ > package org.eclipse.jubula.client.core.model; > >+import java.text.DateFormat; >+import java.text.SimpleDateFormat; > import java.util.ArrayList; > import java.util.Collections; > import java.util.Date; >@@ -681,4 +683,26 @@ public class TestResultNode { > } > return StringConstants.EMPTY; > } >+ >+ /** >+ * returns an array containing the name and date of the screenshot >+ * @return the array containing the name and date of the screenshot >+ */ >+ public String[] getScreenshotInfo() { >+ >+ TestResultNode parent = this; >+ while (parent.getParent() != null) { >+ parent = parent.getParent(); >+ } >+ >+ // get the date of test from time stamp >+ DateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss-SSS"); //$NON-NLS-1$ >+ String date = format.format(m_timestamp); >+ >+ String fileName = "ErrorInTest_" + parent.getName() + "_" //$NON-NLS-1$ //$NON-NLS-2$ >+ + m_node.getName(); >+ // eliminate whitespaces and characters which are illegal in a file name >+ fileName = fileName.replaceAll("[\\s\\?\\\\/:|<>\\*\"]", ""); //$NON-NLS-1$ //$NON-NLS-2$ >+ return new String[] {fileName, date}; >+ } > } >diff --git a/org.eclipse.jubula.client.ui.rcp/plugin.xml b/org.eclipse.jubula.client.ui.rcp/plugin.xml >index c879d81..ac84921 100644 >--- a/org.eclipse.jubula.client.ui.rcp/plugin.xml >+++ b/org.eclipse.jubula.client.ui.rcp/plugin.xml >@@ -144,13 +144,6 @@ > properties="isPasteAllowed" > type="java.util.Collection"> > </propertyTester> >- <propertyTester >- class="org.eclipse.jubula.client.ui.rcp.propertytester.ImageViewPropertyTester" >- id="org.eclipse.jubula.client.ui.rcp.propertytester.ImageViewPropertyTester" >- namespace="org.eclipse.jubula.client.ui.rcp.ImageView" >- properties="hasImage" >- type="org.eclipse.jubula.client.core.model.TestResultNode"> >- </propertyTester> > </extension> > <extension > id="jbMarker" >@@ -1979,21 +1972,11 @@ > class="org.eclipse.jubula.client.ui.rcp.handlers.SaveImageAsHandler" > commandId="org.eclipse.jubula.client.ui.commands.SaveImageAs"> > <enabledWhen> >- <and> >- <count >- value="1"> >- </count> >- <iterate >- ifEmpty="false" >- operator="or"> >- <and> >- <instanceof >- value="org.eclipse.jubula.client.core.model.TestResultNode"> >- </instanceof> >- <test property="org.eclipse.jubula.client.ui.rcp.ImageView.hasImage"/> >- </and> >- </iterate> >- </and> >+ <with variable="activeContexts"> >+ <iterate ifEmpty="false" operator="or"> >+ <equals value="org.eclipse.jubula.contexts.ImageViewDisplaysImage"/> >+ </iterate> >+ </with> > </enabledWhen> > </handler> > <handler >diff --git a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/handlers/SaveImageAsHandler.java b/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/handlers/SaveImageAsHandler.java >index 6f0ca8f..4f1fa8a 100644 >--- a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/handlers/SaveImageAsHandler.java >+++ b/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/handlers/SaveImageAsHandler.java >@@ -12,86 +12,60 @@ package org.eclipse.jubula.client.ui.rcp.handlers; > > import org.apache.commons.lang.StringUtils; > import org.eclipse.core.commands.ExecutionEvent; >-import org.eclipse.jface.viewers.IStructuredSelection; >-import org.eclipse.jubula.client.core.model.TestResultNode; >+import org.eclipse.jubula.client.ui.constants.Constants; > import org.eclipse.jubula.client.ui.handlers.AbstractSelectionBasedHandler; >-import org.eclipse.jubula.client.ui.utils.ErrorHandlingUtil; >-import org.eclipse.jubula.tools.messagehandling.MessageIDs; >+import org.eclipse.jubula.client.ui.views.imageview.ImageView; > import org.eclipse.swt.SWT; >+import org.eclipse.swt.graphics.ImageData; >+import org.eclipse.swt.graphics.ImageLoader; > import org.eclipse.swt.widgets.FileDialog; >+import org.eclipse.ui.IViewPart; > import org.eclipse.ui.handlers.HandlerUtil; > >-import java.io.File; >-import java.io.FileNotFoundException; >-import java.io.FileOutputStream; >-import java.io.IOException; >-import java.io.OutputStream; >-import java.text.DateFormat; >-import java.text.SimpleDateFormat; >- > /** > * @author BREDEX GmbH > * @created 11.09.2013 > */ > public class SaveImageAsHandler extends AbstractSelectionBasedHandler { > >- /** >- * suggest only 255 character long file names >- */ >- private static final int MAX_FILE_NAME_LENGTH = 255; >+ > > /** > * {@inheritDoc} > */ > protected Object executeImpl(ExecutionEvent event) { >- IStructuredSelection structuredSelection = getSelection(); >- Object selectedObject = structuredSelection.getFirstElement(); >- if (selectedObject instanceof TestResultNode) { >- TestResultNode result = (TestResultNode) selectedObject; >- >- // necessary to get test suite name >- TestResultNode parent = result; >- while (parent.getParent() != null) { >- parent = parent.getParent(); >- } >- >- // get the date of test from time stamp >- DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$ >- String date = format.format(result.getTimeStamp()); >- >+ IViewPart view = HandlerUtil.getActiveSite(event). >+ getPage().findView(Constants.IMAGEVIEW_ID); >+ >+ if (view != null && view instanceof ImageView) { >+ ImageView imageView = (ImageView)view; >+ int maxFileNameLength = 255; >+ >+ String[] imageInfo = imageView.getImageName(); >+ String imageName = imageInfo[0]; >+ String imageDate = imageInfo[1]; >+ > FileDialog saveDialog = new FileDialog(HandlerUtil > .getActiveWorkbenchWindow(event).getShell(), SWT.SAVE); >- String fileName = "ErrorInTest_" + parent.getName() + "_" //$NON-NLS-1$ //$NON-NLS-2$ >- + result.getNode().getName(); >- // eliminate whitespaces and characters which are illegal in a file name >- fileName = fileName.replaceAll("[\\s\\?\\\\/:|<>\\*\"]", ""); //$NON-NLS-1$ //$NON-NLS-2$ >- >- String fileEnding = "_" + date + ".png"; //$NON-NLS-1$ //$NON-NLS-2$ >- fileName = StringUtils.substring(fileName, 0, >- MAX_FILE_NAME_LENGTH >+ String fileEnding = "_" + imageDate + ".png"; //$NON-NLS-1$ //$NON-NLS-2$ >+ String fileName = StringUtils.substring(imageName, 0, >+ maxFileNameLength > - fileEnding.length() > - saveDialog.getFilterPath().length()); > fileName = fileName + fileEnding; >+ > saveDialog.setFileName(fileName); > saveDialog.setFilterExtensions(new String[] { "*.png" }); //$NON-NLS-1$ > saveDialog.setOverwrite(true); > String path = saveDialog.open(); > >+ ImageData imageData = imageView.getImage(); >+ > if (path != null) { >- if (result.getScreenshot() != null) { >- try { >- File file = new File(path); >- OutputStream out = new FileOutputStream(file); >- out.write(result.getScreenshot()); >- out.flush(); >- out.close(); >- } catch (FileNotFoundException e) { >- ErrorHandlingUtil.createMessageDialog(MessageIDs. >- E_FILE_NO_PERMISSION); >- } catch (IOException e) { >- ErrorHandlingUtil.createMessageDialog(MessageIDs. >- E_IO_EXCEPTION); >- } >+ if (imageData != null) { >+ ImageLoader loader = new ImageLoader(); >+ loader.data = new ImageData[] { imageData }; >+ loader.save(path, SWT.IMAGE_PNG); > } > } > } >diff --git a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/propertytester/ImageViewPropertyTester.java b/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/propertytester/ImageViewPropertyTester.java >deleted file mode 100644 >index e4d7928..0000000 >--- a/org.eclipse.jubula.client.ui.rcp/src/org/eclipse/jubula/client/ui/rcp/propertytester/ImageViewPropertyTester.java >+++ /dev/null >@@ -1,53 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2013 BREDEX GmbH. >- * 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: >- * BREDEX GmbH - initial API and implementation and/or initial documentation >- *******************************************************************************/ >-package org.eclipse.jubula.client.ui.rcp.propertytester; >- >-import org.eclipse.jubula.client.core.model.TestResultNode; >-import org.eclipse.jubula.client.core.propertytester.AbstractBooleanPropertyTester; >- >-/** >- * PropertyTester for TestResultSummary. >- * >- * @author BREDEX GmbH >- * @created Sep 13, 2013 >- */ >-public class ImageViewPropertyTester >- extends AbstractBooleanPropertyTester { >- /** the id of the "hasMonitoringData" property */ >- private static final String HAS_IMAGE = "hasImage"; //$NON-NLS-1$ >- >- /** >- * <code>PROPERTIES</code> >- */ >- private static final String[] PROPERTIES = new String[] { >- HAS_IMAGE }; >- >- /** {@inheritDoc} */ >- public boolean testImpl(Object receiver, String property, Object[] args) { >- if (property.equals(HAS_IMAGE)) { >- TestResultNode node = (TestResultNode) receiver; >- if (node.getScreenshot() != null) { >- return true; >- } >- } >- return false; >- } >- >- /** {@inheritDoc} */ >- public Class<? extends Object> getType() { >- return TestResultNode.class; >- } >- >- /** {@inheritDoc} */ >- public String[] getProperties() { >- return PROPERTIES; >- } >-} >diff --git a/org.eclipse.jubula.client.ui/META-INF/MANIFEST.MF b/org.eclipse.jubula.client.ui/META-INF/MANIFEST.MF >index b012682..f78195a 100644 >--- a/org.eclipse.jubula.client.ui/META-INF/MANIFEST.MF >+++ b/org.eclipse.jubula.client.ui/META-INF/MANIFEST.MF >@@ -46,5 +46,6 @@ Export-Package: org.eclipse.jubula.client.ui.adapter, > org.eclipse.jubula.client.ui.utils, > org.eclipse.jubula.client.ui.validator.cell, > org.eclipse.jubula.client.ui.views, >+ org.eclipse.jubula.client.ui.views.imageview, > org.eclipse.jubula.client.ui.widgets > Bundle-Activator: org.eclipse.jubula.client.ui.Plugin >diff --git a/org.eclipse.jubula.client.ui/plugin.xml b/org.eclipse.jubula.client.ui/plugin.xml >index 478e5ce..74660b1 100644 >--- a/org.eclipse.jubula.client.ui/plugin.xml >+++ b/org.eclipse.jubula.client.ui/plugin.xml >@@ -351,4 +351,12 @@ > <adapter type="org.eclipse.ui.views.properties.IPropertySource" /> > </factory> > </extension> >+ <extension >+ point="org.eclipse.ui.contexts"> >+ <context >+ id="org.eclipse.jubula.contexts.ImageViewDisplaysImage" >+ name="org.eclipse.jubula.contexts.ImageViewDisplaysImage" >+ parentId="org.eclipse.ui.contexts.dialogAndWindow"> >+ </context> >+ </extension> > </plugin> >diff --git a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/constants/Constants.java b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/constants/Constants.java >index 1ac7556..e6338c5 100644 >--- a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/constants/Constants.java >+++ b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/constants/Constants.java >@@ -129,6 +129,13 @@ public interface Constants { > "org.eclipse.jubula.client.ui.rcp.views.RunningAuts"; //$NON-NLS-1$ > > // ------------------------------------------------------------- >+ // Keys for Contexts >+ // ------------------------------------------------------------- >+ /** if there is an image displayed in the image view */ >+ public static final String IMAGEVIEW_DISPLAYS_IMAGE = >+ "org.eclipse.jubula.contexts.ImageViewDisplaysImage"; //$NON-NLS-1$ >+ >+ // ------------------------------------------------------------- > // decorator ids > // ------------------------------------------------------------- > /** ID of the completeness check decorator */ >diff --git a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageProvider.java b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageProvider.java >index e9a0f6c..55cab1e 100644 >--- a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageProvider.java >+++ b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageProvider.java >@@ -29,4 +29,10 @@ public interface ImageProvider { > * @return {@link Image} > */ > Image getImage(Device target); >+ >+ /** >+ * returns the name of the image >+ * @return the name >+ */ >+ String[] getImageName(); > } >diff --git a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageView.java b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageView.java >index c06b2f6..317a45d 100644 >--- a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageView.java >+++ b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/ImageView.java >@@ -17,14 +17,17 @@ import org.eclipse.core.runtime.IStatus; > import org.eclipse.core.runtime.Platform; > import org.eclipse.core.runtime.Status; > import org.eclipse.core.runtime.jobs.Job; >+import org.eclipse.jface.action.MenuManager; > import org.eclipse.jface.viewers.ISelection; > import org.eclipse.jface.viewers.ISelectionChangedListener; > import org.eclipse.jface.viewers.ISelectionProvider; > import org.eclipse.jface.viewers.IStructuredSelection; >+import org.eclipse.jubula.client.ui.constants.Constants; > import org.eclipse.jubula.client.ui.i18n.Messages; > import org.eclipse.jubula.client.ui.utils.JobUtils; > import org.eclipse.jubula.client.ui.views.IJBPart; > import org.eclipse.jubula.client.ui.views.NonSortedPropertySheetPage; >+import org.eclipse.jubula.tools.constants.StringConstants; > import org.eclipse.swt.SWT; > import org.eclipse.swt.custom.ScrolledComposite; > import org.eclipse.swt.dnd.DND; >@@ -34,6 +37,7 @@ import org.eclipse.swt.dnd.DragSourceListener; > import org.eclipse.swt.dnd.ImageTransfer; > import org.eclipse.swt.dnd.Transfer; > import org.eclipse.swt.graphics.Image; >+import org.eclipse.swt.graphics.ImageData; > import org.eclipse.swt.layout.FillLayout; > import org.eclipse.swt.widgets.Composite; > import org.eclipse.swt.widgets.Label; >@@ -41,9 +45,10 @@ import org.eclipse.swt.widgets.Menu; > import org.eclipse.ui.ISelectionListener; > import org.eclipse.ui.ISelectionService; > import org.eclipse.ui.IWorkbenchPart; >+import org.eclipse.ui.contexts.IContextActivation; >+import org.eclipse.ui.contexts.IContextService; > import org.eclipse.ui.part.ViewPart; > import org.eclipse.ui.views.properties.IPropertySheetPage; >-import org.eclipse.jface.action.MenuManager; > > > /** >@@ -62,6 +67,12 @@ public class ImageView extends ViewPart implements IJBPart, ISelectionProvider { > private Image m_img; > > /** >+ * the name of the image >+ */ >+ private String[] m_imgName = >+ new String[] {StringConstants.EMPTY, StringConstants.EMPTY}; >+ >+ /** > * <code>m_oldSelection</code> > */ > private ISelection m_currSelection = null; >@@ -77,6 +88,11 @@ public class ImageView extends ViewPart implements IJBPart, ISelectionProvider { > private Composite m_child; > > /** >+ * context activation >+ */ >+ private IContextActivation m_contextActivation; >+ >+ /** > * The selectionListener listens for changes in the workbench's selection > * service. > */ >@@ -212,14 +228,21 @@ public class ImageView extends ViewPart implements IJBPart, ISelectionProvider { > protected void setImage(final ImageProvider provider) { > m_scrollComposite.getDisplay().syncExec(new Runnable() { > >+ > public void run() { > clearImage(); > m_img = provider.getImage(m_scrollComposite.getDisplay()); >+ m_imgName = provider.getImageName(); > m_imgWidget.setImage(m_img); > if (m_img != null) { > m_imgWidget.setSize( > m_img.getBounds().width, > m_img.getBounds().height); >+ IContextService cs = (IContextService) getSite(). >+ getWorkbenchWindow(). >+ getService(IContextService.class); >+ m_contextActivation = cs.activateContext( >+ Constants.IMAGEVIEW_DISPLAYS_IMAGE); > } > m_scrollComposite.setMinSize(m_child.computeSize(SWT.DEFAULT, > SWT.DEFAULT)); >@@ -236,6 +259,10 @@ public class ImageView extends ViewPart implements IJBPart, ISelectionProvider { > if (oldImage != null) { > oldImage.dispose(); > } >+ >+ IContextService cs = (IContextService) getSite(). >+ getService(IContextService.class); >+ cs.deactivateContext(m_contextActivation); > } > > /** >@@ -300,4 +327,28 @@ public class ImageView extends ViewPart implements IJBPart, ISelectionProvider { > } > return super.getAdapter(key); > } >+ >+ /** >+ * returns the data of the displayed image >+ * @return the image data >+ */ >+ public ImageData getImage() { >+ return m_img.getImageData(); >+ } >+ >+ /** >+ * sets the name for the image >+ * @param imgName the name >+ */ >+ public void setImageName(String[] imgName) { >+ m_imgName = imgName; >+ } >+ >+ /** >+ * returns the name of the image >+ * @return the name >+ */ >+ public String[] getImageName() { >+ return m_imgName; >+ } > } >diff --git a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/TestResultNodeImageProvider.java b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/TestResultNodeImageProvider.java >index b5a84ce..928af2a 100644 >--- a/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/TestResultNodeImageProvider.java >+++ b/org.eclipse.jubula.client.ui/src/org/eclipse/jubula/client/ui/views/imageview/TestResultNodeImageProvider.java >@@ -12,6 +12,7 @@ package org.eclipse.jubula.client.ui.views.imageview; > > import org.eclipse.jubula.client.core.model.TestResultNode; > import org.eclipse.jubula.client.ui.utils.ImageUtils; >+import org.eclipse.jubula.tools.constants.StringConstants; > import org.eclipse.swt.graphics.Device; > import org.eclipse.swt.graphics.Image; > >@@ -44,4 +45,14 @@ public class TestResultNodeImageProvider implements ImageProvider { > } > return null; > } >+ >+ /** >+ * {@inheritDoc} >+ */ >+ public String[] getImageName() { >+ if (m_testResultNode.getScreenshot() != null) { >+ return m_testResultNode.getScreenshotInfo(); >+ } >+ return new String[] {StringConstants.EMPTY, StringConstants.EMPTY}; >+ } > } >-- >1.7.11 >
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 Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 418883
:
237310
|
237311