diff options
author | Axel Richard | 2013-05-31 09:29:33 +0000 |
---|---|---|
committer | Mikaƫl Barbero | 2013-05-31 12:27:07 +0000 |
commit | 34b85425f7a6bb92a1e97fdd2c6107991a8a7102 (patch) | |
tree | 00c01f92276fef41782eaff1b300e496248f9261 /plugins | |
parent | 09b0d18629aef3f0eae5e3c2698a32f940813385 (diff) | |
download | org.eclipse.emf.compare-34b85425f7a6bb92a1e97fdd2c6107991a8a7102.tar.gz org.eclipse.emf.compare-34b85425f7a6bb92a1e97fdd2c6107991a8a7102.tar.xz org.eclipse.emf.compare-34b85425f7a6bb92a1e97fdd2c6107991a8a7102.zip |
[402421] NotSerializableException when save the comparison model
Display popup when catching the not serializable exception.
Bug: 402421
Change-Id: I3743975da6b3aa3dd6cbce12254d4b4de3349ed4
Diffstat (limited to 'plugins')
3 files changed, 109 insertions, 1 deletions
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/EMFCompareRCPUIMessages.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/EMFCompareRCPUIMessages.java new file mode 100644 index 000000000..f9cd20aec --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/EMFCompareRCPUIMessages.java @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2006, 2013 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.emf.compare.rcp.ui.internal; + +import java.text.MessageFormat; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +/** + * Utility class to access externalized Strings for EMF Compare's rcp ui integration. + * + * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a> + */ +public final class EMFCompareRCPUIMessages { + /** Full qualified path to the properties file in which to seek the keys. */ + private static final String BUNDLE_NAME = "org.eclipse.emf.compare.rcp.ui.internal.emfcomparercpuimessages"; //$NON-NLS-1$ + + /** Contains the locale specific {@link String}s needed by this plug-in. */ + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); + + /** + * Utility classes don't need to (and shouldn't) be instantiated. + */ + private EMFCompareRCPUIMessages() { + // prevents instantiation + } + + /** + * This will return an unformatted String from the resource bundle. + * + * @param key + * Key of the String we seek. + * @return An unformatted String from the bundle. + */ + private static String internalGetString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } + + /** + * Returns the specified {@link String} from the resource bundle. + * + * @param key + * Key of the String we seek. + * @return The String from the resource bundle associated with <code>key</code>. + * <code>'!' + key + '!'</code> will be returned in case we didn't find it in the bundle. + */ + public static String getString(String key) { + // Pass through MessageFormat so that we're consistent in the handling + // of special chars such as the + // apostrophe + return MessageFormat.format(internalGetString(key), new Object[] {}); + } + + /** + * Returns a String from the resource bundle bound with the given arguments. + * + * @param key + * Key of the String we seek. + * @param arguments + * Arguments for the String formatting. + * @return formatted {@link String}. + * @see MessageFormat#format(String, Object[]) + */ + public static String getString(String key, Object... arguments) { + if (arguments == null) { + return getString(key); + } + return MessageFormat.format(internalGetString(key), arguments); + } + +} diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties new file mode 100644 index 000000000..286124f40 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/emfcomparercpuimessages.properties @@ -0,0 +1,12 @@ +################################################################################ +# Copyright (c) 2013 Obeo. +# 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: +# Obeo - initial API and implementation +################################################################################ +## note : apostrophes need to be doubled in these messages or they'll be ignored +resource.not.serializable = Resource is not serializable.
\ No newline at end of file diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/SaveComparisonModel.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/SaveComparisonModel.java index bc09fdc1f..a7045a22d 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/SaveComparisonModel.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/handler/SaveComparisonModel.java @@ -16,16 +16,20 @@ import com.google.common.collect.ImmutableList; import java.io.File; import java.io.IOException; +import java.io.NotSerializableException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin; import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants; +import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.EcoreUtil.Copier; @@ -36,6 +40,8 @@ import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.ISources; import org.eclipse.ui.handlers.HandlerUtil; +import org.eclipse.ui.statushandlers.StatusAdapter; +import org.eclipse.ui.statushandlers.StatusManager; /** * Handler that manages the save of the comparison model. @@ -100,9 +106,16 @@ public class SaveComparisonModel extends AbstractHandler { resource.getContents().add(comparisonCopy); try { resource.save(newHashMap()); + } catch (RuntimeException e) { + if (e.getCause() instanceof NotSerializableException) { + final Status status = new Status(IStatus.ERROR, EMFCompareRCPUIPlugin.PLUGIN_ID, + EMFCompareRCPUIMessages.getString("resource.not.serializable"), e); //$NON-NLS-1$ + StatusManager.getManager().handle(new StatusAdapter(status), StatusManager.SHOW); + } else { + EMFCompareRCPUIPlugin.getDefault().log(e); + } } catch (IOException e) { EMFCompareRCPUIPlugin.getDefault().log(e); } } - } |