/******************************************************************************* * Copyright (c) 2017 EclipseSource Services GmbH and others. * 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: * Martin Fleck - initial API and implementation *******************************************************************************/ package org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer; import com.google.common.collect.Sets; import java.util.Collections; import java.util.Enumeration; import java.util.HashSet; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * This resource bundle wraps the resource bundle of an EMF Compare content merge viewer to default to the * resource bundle of the Eclipse Compare TextMergeViewer for any non-defined keys. The TextMergeViewer * already defines the label, tooltip and image for the following actions: * <ul> * <li>CopyLeftToRight</li> * <li>CopyRightToLeft</li> * <li>CopyDiffLeftToRight</li> * <li>CopyDiffRightToLeft</li> * <li>NextDiff</li> * <li>PrevDiff</li> * <li>NextChange</li> * <li>PrevChange</li> * <li>EnableAncestor</li> * <li>IgnoreAncestor</li> * <li>SwitchLeftAndRight (added in Oxygen)</li> * </ul> * Specifically, this class avoids the problem of re-defining the images which may change between versions, * e.g., the change from gif to png done in Oxygen. * * @author Martin Fleck <mfleck@eclipsesource.com> */ public class EMFCompareContentMergeViewerResourceBundle extends ResourceBundle { private static final String FALLBACK_BUNDLE_NAME = "org.eclipse.compare.contentmergeviewer.TextMergeViewerResources"; //$NON-NLS-1$ protected ResourceBundle mergeViewerResources; protected ResourceBundle fallbackMergeViewerResources; public EMFCompareContentMergeViewerResourceBundle(ResourceBundle bundle) { this.mergeViewerResources = bundle; this.fallbackMergeViewerResources = ResourceBundle.getBundle(FALLBACK_BUNDLE_NAME); } @Override protected Object handleGetObject(String key) { Object object = null; try { object = mergeViewerResources.getObject(key); } catch (MissingResourceException e) { // ignore missing resources, try fallback } if (object == null && fallbackMergeViewerResources != null) { object = fallbackMergeViewerResources.getObject(key); } return object; } @Override public Enumeration<String> getKeys() { HashSet<String> bundleKeys = Sets.newHashSet(Collections.list(mergeViewerResources.getKeys())); if (fallbackMergeViewerResources != null) { bundleKeys.addAll(Collections.list(fallbackMergeViewerResources.getKeys())); } return Collections.enumeration(bundleKeys); } }