From 1f95c6cd61c4c8024128b903bd40cca5a572a551 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Sat, 23 Apr 2016 21:15:14 -0400 Subject: [PATCH] Allow rename of launch targets. Add property tester for target type. Change-Id: I1e87f8012e4c5bcd11cf1fce62c8a0dcf1d25e1e --- bundles/org.eclipse.launchbar.core/plugin.xml | 10 ++++++ .../target/LaunchTargetPropertyTester.java | 25 +++++++++++++++ .../target/LaunchTargetWorkingCopy.java | 32 ++++++++++++++++--- .../launchbar/core/target/ILaunchTarget.java | 4 +-- .../core/target/ILaunchTargetWorkingCopy.java | 12 +++++-- 5 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetPropertyTester.java diff --git a/bundles/org.eclipse.launchbar.core/plugin.xml b/bundles/org.eclipse.launchbar.core/plugin.xml index a85371f601e..13b7ef1dfd0 100644 --- a/bundles/org.eclipse.launchbar.core/plugin.xml +++ b/bundles/org.eclipse.launchbar.core/plugin.xml @@ -33,5 +33,15 @@ provider="org.eclipse.launchbar.core.internal.target.LocalLaunchTargetProvider"> + + + + diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetPropertyTester.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetPropertyTester.java new file mode 100644 index 00000000000..82269f5abf5 --- /dev/null +++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetPropertyTester.java @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2016 QNX Software Systems 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 + *******************************************************************************/ +package org.eclipse.launchbar.core.internal.target; + +import org.eclipse.core.expressions.PropertyTester; +import org.eclipse.launchbar.core.target.ILaunchTarget; + +public class LaunchTargetPropertyTester extends PropertyTester { + + @Override + public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { + if (receiver instanceof ILaunchTarget) { + if (property.equals("launchTargetType")) { //$NON-NLS-1$ + return ((ILaunchTarget) receiver).getTypeId().equals(expectedValue); + } + } + return false; + } + +} diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetWorkingCopy.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetWorkingCopy.java index 380b5ce2985..b256188df89 100644 --- a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetWorkingCopy.java +++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetWorkingCopy.java @@ -13,6 +13,7 @@ import java.util.Map; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.launchbar.core.internal.Activator; import org.eclipse.launchbar.core.target.ILaunchTarget; +import org.eclipse.launchbar.core.target.ILaunchTargetManager; import org.eclipse.launchbar.core.target.ILaunchTargetWorkingCopy; import org.osgi.service.prefs.BackingStoreException; @@ -20,6 +21,7 @@ public class LaunchTargetWorkingCopy extends PlatformObject implements ILaunchTa private final LaunchTarget original; private final Map changes = new HashMap<>(); + private String newId; public LaunchTargetWorkingCopy(LaunchTarget original) { this.original = original; @@ -37,7 +39,12 @@ public class LaunchTargetWorkingCopy extends PlatformObject implements ILaunchTa @Override public String getId() { - return original.getId(); + return newId != null ? newId : original.getId(); + } + + @Override + public void setId(String id) { + newId = id; } @Override @@ -62,14 +69,29 @@ public class LaunchTargetWorkingCopy extends PlatformObject implements ILaunchTa @Override public ILaunchTarget save() { try { - for (Map.Entry entry : changes.entrySet()) { - original.attributes.put(entry.getKey(), entry.getValue()); + LaunchTarget target; + if (newId == null) { + target = original; + } else { + // make a new one and remove the old one + ILaunchTargetManager manager = Activator.getLaunchTargetManager(); + target = (LaunchTarget) manager.addLaunchTarget(original.getTypeId(), newId); + for (String key : original.attributes.keys()) { + target.attributes.put(key, original.getAttribute(key, "")); //$NON-NLS-1$ + } + manager.removeLaunchTarget(original); } - original.attributes.flush(); + + // set the changed attributes + for (Map.Entry entry : changes.entrySet()) { + target.attributes.put(entry.getKey(), entry.getValue()); + } + target.attributes.flush(); + return target; } catch (BackingStoreException e) { Activator.log(e); + return original; } - return original; } } diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTarget.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTarget.java index 9aee390223c..6cb14a1fb4d 100644 --- a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTarget.java +++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTarget.java @@ -65,8 +65,8 @@ public interface ILaunchTarget extends IAdaptable { String getAttribute(String key, String defValue); /** - * Create a working copy of this launch target to allow setting of attributes. Note that when - * saving the attributes this target is updated. A new one is not created. + * Create a working copy of this launch target to allow setting of attributes. It also allows + * changing the id, which results in a new launch target when saved. * * @return launch target working copy */ diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTargetWorkingCopy.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTargetWorkingCopy.java index f425270a7cf..25823e2a15e 100644 --- a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTargetWorkingCopy.java +++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/target/ILaunchTargetWorkingCopy.java @@ -19,6 +19,14 @@ public interface ILaunchTargetWorkingCopy extends ILaunchTarget { */ ILaunchTarget getOriginal(); + /** + * Gives the target a new ID. The save method will return a new target with the given name.e + * + * @param id + * new target ID + */ + void setId(String id); + /** * Set an attribute. * @@ -30,9 +38,9 @@ public interface ILaunchTargetWorkingCopy extends ILaunchTarget { void setAttribute(String key, String value); /** - * Save the changed attributes to the original working copy. + * Save the changes to the original working copy. * - * @return original launch target + * @return original launch target unless the id was changed in which case returns a new target */ ILaunchTarget save();