Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Stieber2012-05-03 06:20:26 -0400
committerUwe Stieber2012-05-03 06:21:42 -0400
commit23b78ff68f8835172a86f7cfa2b93bdf5794229d (patch)
treee6b159d2681de27226f58236ebc28518957a62ca
parent3c010ba2d91f0576a7459a761c15687f9a23b1ab (diff)
downloadorg.eclipse.tcf-23b78ff68f8835172a86f7cfa2b93bdf5794229d.tar.gz
org.eclipse.tcf-23b78ff68f8835172a86f7cfa2b93bdf5794229d.tar.xz
org.eclipse.tcf-23b78ff68f8835172a86f7cfa2b93bdf5794229d.zip
Target Explorer: Added "Always Available Offline" command + handler
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties4
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml35
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/AlwaysAvailableOfflineCommandHandler.java101
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/OfflineCommandHandler.java221
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/help/IContextHelpIds.java5
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java7
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java3
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties4
8 files changed, 278 insertions, 102 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties
index 5969e1fa6..543e02513 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.properties
@@ -55,3 +55,7 @@ command.redirect.tooltip=Redirect communication to this node through a proxy
command.resetredirect.name=Reset Redirect Command
command.resetredirect.label=Reset Redirect
command.resetredirect.tooltip=Reset communication redirection of this node
+
+command.offline.name=Always Available Offline Command
+command.offline.label=Always Available Offline
+command.offline.tooltip=Creates an offline copy of the target attributes.
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml
index fe905e3b0..757d97411 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/plugin.xml
@@ -28,7 +28,7 @@
class="org.eclipse.tcf.te.tcf.ui.internal.PropertyTester"
id="org.eclipse.tcf.te.tcf.ui.propertyTester"
namespace="org.eclipse.tcf.te.tcf.ui"
- properties="canDelete"
+ properties="canDelete,canMakeAvailableOffline"
type="org.eclipse.jface.viewers.ISelection">
</propertyTester>
</extension>
@@ -265,6 +265,19 @@
</visibleWhen>
</command>
</menuContribution>
+
+ <menuContribution locationURI="popup:org.eclipse.tcf.te.ui.views.View#Popup?after=group.categories">
+ <command
+ commandId="org.eclipse.tcf.te.tcf.ui.command.offline"
+ helpContextId="org.eclipse.tcf.te.tcf.ui.command_Offline"
+ id="org.eclipse.tcf.te.tcf.ui.commands.offline"
+ label="%command.offline.label"
+ mnemonic="f"
+ style="push"
+ tooltip="%command.offline.tooltip">
+ <visibleWhen checkEnabled="true"/>
+ </command>
+ </menuContribution>
</extension>
@@ -282,6 +295,12 @@
id="org.eclipse.tcf.te.tcf.ui.command.resetredirect"
name="%command.resetredirect.name">
</command>
+ <command
+ categoryId="org.eclipse.tcf.te.ui.commands.category"
+ helpContextId="org.eclipse.tcf.te.tcf.ui.command_Offline"
+ id="org.eclipse.tcf.te.tcf.ui.command.offline"
+ name="%command.offline.name">
+ </command>
</extension>
<!-- Handler contributions -->
@@ -353,6 +372,20 @@
</enabledWhen>
</handler>
+ <handler
+ class="org.eclipse.tcf.te.tcf.ui.handler.OfflineCommandHandler"
+ commandId="org.eclipse.tcf.te.tcf.ui.command.offline">
+ <activeWhen>
+ <with variable="activePartId">
+ <equals value="org.eclipse.tcf.te.ui.views.View"/>
+ </with>
+ </activeWhen>
+ <enabledWhen>
+ <with variable="selection">
+ <test property="org.eclipse.tcf.te.tcf.ui.canMakeAvailableOffline" value="true"/>
+ </with>
+ </enabledWhen>
+ </handler>
</extension>
<!-- Tabbed properties view contributions -->
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/AlwaysAvailableOfflineCommandHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/AlwaysAvailableOfflineCommandHandler.java
deleted file mode 100644
index edb5d0ae0..000000000
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/AlwaysAvailableOfflineCommandHandler.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 Wind River Systems, Inc. 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:
- * Wind River Systems - initial API and implementation
- *******************************************************************************/
-package org.eclipse.tcf.te.tcf.ui.handler;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.tcf.core.TransientPeer;
-import org.eclipse.tcf.protocol.IPeer;
-import org.eclipse.tcf.protocol.Protocol;
-import org.eclipse.tcf.te.runtime.persistence.interfaces.IURIPersistenceService;
-import org.eclipse.tcf.te.runtime.services.ServiceManager;
-import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel;
-import org.eclipse.tcf.te.tcf.locator.interfaces.services.ILocatorModelRefreshService;
-import org.eclipse.tcf.te.tcf.locator.model.Model;
-import org.eclipse.tcf.te.tcf.ui.activator.UIPlugin;
-import org.eclipse.tcf.te.tcf.ui.nls.Messages;
-
-/**
- *
- */
-public class AlwaysAvailableOfflineCommandHandler extends AbstractHandler {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- @Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
- return null;
- }
-
- /**
- * Adds the given peer node to the "My Targets" list by creating
- * a static copy of the given peer.
- *
- * @param node The peer node. Must be not <code>null</code>.
- */
- public void addToMyTargets(final IPeerModel node) {
- Assert.isNotNull(node);
-
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- // If the peer node is a static node already, there is nothing to do here
- String value = node.getPeer().getAttributes().get("static.transient"); //$NON-NLS-1$
- boolean isStatic = value != null && Boolean.parseBoolean(value.trim());
- if (isStatic) {
- return;
- }
-
- // Not a static node yet, copy the peer attributes
- Map<String, String> attrs = new HashMap<String, String>();
- attrs.putAll(node.getPeer().getAttributes());
-
- // Remove attributes filled in by the discovery
- attrs.remove(IPeer.ATTR_AGENT_ID);
- attrs.remove(IPeer.ATTR_SERVICE_MANGER_ID);
- attrs.remove("ServerManagerID"); //$NON-NLS-1$
- attrs.remove(IPeer.ATTR_USER_NAME);
- attrs.remove(IPeer.ATTR_OS_NAME);
-
- // Persist the attributes
- try {
- IURIPersistenceService uRIPersistenceService = ServiceManager.getInstance().getService(IURIPersistenceService.class);
- if (uRIPersistenceService == null) {
- throw new IOException("Persistence service instance unavailable."); //$NON-NLS-1$
- }
- uRIPersistenceService.write(new TransientPeer(attrs), null);
-
- Model.getModel().getService(ILocatorModelRefreshService.class).refresh();
- } catch (IOException e) {
- IStatus status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
- NLS.bind(Messages.CategoryManager_dnd_failed, e.getLocalizedMessage()), e);
- UIPlugin.getDefault().getLog().log(status);
- }
- }
- };
-
- if (Protocol.isDispatchThread()) {
- runnable.run();
- }
- else {
- Protocol.invokeAndWait(runnable);
- }
- }
-}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/OfflineCommandHandler.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/OfflineCommandHandler.java
new file mode 100644
index 000000000..93e2789fe
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/handler/OfflineCommandHandler.java
@@ -0,0 +1,221 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Wind River Systems, Inc. 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:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tcf.te.tcf.ui.handler;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.tcf.core.TransientPeer;
+import org.eclipse.tcf.protocol.IPeer;
+import org.eclipse.tcf.protocol.Protocol;
+import org.eclipse.tcf.te.runtime.callback.Callback;
+import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback;
+import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer;
+import org.eclipse.tcf.te.runtime.persistence.interfaces.IURIPersistenceService;
+import org.eclipse.tcf.te.runtime.properties.PropertiesContainer;
+import org.eclipse.tcf.te.runtime.services.ServiceManager;
+import org.eclipse.tcf.te.runtime.statushandler.StatusHandlerManager;
+import org.eclipse.tcf.te.runtime.statushandler.interfaces.IStatusHandler;
+import org.eclipse.tcf.te.runtime.statushandler.interfaces.IStatusHandlerConstants;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.ILocatorModel;
+import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModel;
+import org.eclipse.tcf.te.tcf.locator.interfaces.services.ILocatorModelRefreshService;
+import org.eclipse.tcf.te.tcf.locator.model.Model;
+import org.eclipse.tcf.te.tcf.ui.activator.UIPlugin;
+import org.eclipse.tcf.te.tcf.ui.help.IContextHelpIds;
+import org.eclipse.tcf.te.tcf.ui.nls.Messages;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * "Always available offline" command handler implementation.
+ */
+public class OfflineCommandHandler extends AbstractHandler {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+
+ // Get the current selection
+ final ISelection selection = HandlerUtil.getCurrentSelection(event);
+ // Make the selection available offline
+ if (selection != null) makeAvailableOffline(selection, new Callback() {
+ @Override
+ protected void internalDone(Object caller, IStatus status) {
+ if (status.getSeverity() == IStatus.ERROR) {
+ // Fill in the status handler custom data
+ IPropertiesContainer data = new PropertiesContainer();
+ data.setProperty(IStatusHandlerConstants.PROPERTY_TITLE, Messages.OfflineCommandHandler_error_title);
+ data.setProperty(IStatusHandlerConstants.PROPERTY_CONTEXT_HELP_ID, IContextHelpIds.MESSAGE_MAKEOFFLINE_FAILED);
+ data.setProperty(IStatusHandlerConstants.PROPERTY_CALLER, this);
+
+ // Get the status handler
+ IStatusHandler[] handler = StatusHandlerManager.getInstance().getHandler(selection);
+ if (handler.length > 0) {
+ handler[0].handleStatus(status, data, null);
+ }
+ }
+
+ // Get the locator model
+ final ILocatorModel model = Model.getModel();
+ if (model != null) {
+ // Trigger a refresh of the model
+ final ILocatorModelRefreshService service = model.getService(ILocatorModelRefreshService.class);
+ if (service != null) {
+ Protocol.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ // Refresh the model now (must be executed within the TCF dispatch thread)
+ service.refresh();
+ }
+ });
+ }
+ }
+ }
+ });
+
+ return null;
+ }
+
+ /**
+ * Tests if the elements of the given selection can be made
+ * available offline.
+ *
+ * @param selection The selection. Must not be <code>null</code>.
+ * @return <code>True</code> if the elements can be made available offline, <code>false</code> otherwise.
+ */
+ public boolean canMakeAvailableOffline(ISelection selection) {
+ Assert.isNotNull(selection);
+
+ boolean enabled = false;
+
+ // The selection must be a structured selection and must not be empty
+ if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+ // Assume the selection to be deletable
+ enabled = true;
+ // Iterate the selection. All elements must be of type IPeerModel
+ Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
+ while (iterator.hasNext()) {
+ Object element = iterator.next();
+ if (!(element instanceof IPeerModel)) {
+ enabled = false;
+ break;
+ }
+
+ // Determine if the selected peer model is static
+ boolean isStatic = isStatic((IPeerModel)element);
+ if (isStatic) enabled = false;
+
+ if (!enabled) break;
+ }
+ }
+
+ return enabled;
+ }
+
+ /**
+ * Determines if the given peer model node is a static node.
+ *
+ * @param node The peer model node. Must not be <code>null</code>.
+ * @return <code>True</code> if the node is static, <code>false</code> otherwise.
+ */
+ private boolean isStatic(final IPeerModel node) {
+ Assert.isNotNull(node);
+
+ final AtomicBoolean isStatic = new AtomicBoolean();
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ String value = node.getPeer().getAttributes().get("static.transient"); //$NON-NLS-1$
+ isStatic.set(value != null && Boolean.parseBoolean(value.trim()));
+ }
+ };
+
+ if (Protocol.isDispatchThread()) runnable.run();
+ else Protocol.invokeAndWait(runnable);
+
+ return isStatic.get();
+ }
+
+ /**
+ * Creates an offline copy of the peer attributes.
+ *
+ * @param selection The selection. Must not be <code>null</code>.
+ * @param callback The callback. Must not be <code>null</code>.
+ */
+ public void makeAvailableOffline(final ISelection selection, final ICallback callback) {
+ Assert.isNotNull(selection);
+ Assert.isNotNull(callback);
+
+ Runnable runnable = new Runnable() {
+ @Override
+ public void run() {
+ // The status to report back
+ IStatus status = Status.OK_STATUS;
+ // The selection must be a structured selection and must not be empty
+ if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
+ // Iterate the selection. All elements must be of type IPeerModel
+ Iterator<?> iterator = ((IStructuredSelection)selection).iterator();
+ while (iterator.hasNext()) {
+ Object element = iterator.next();
+ Assert.isTrue(element instanceof IPeerModel);
+ IPeerModel node = (IPeerModel)element;
+
+ // Copy the peer attributes
+ Map<String, String> attrs = new HashMap<String, String>();
+ attrs.putAll(node.getPeer().getAttributes());
+
+ // Remove attributes filled in by the discovery
+ attrs.remove(IPeer.ATTR_AGENT_ID);
+ attrs.remove(IPeer.ATTR_SERVICE_MANGER_ID);
+ attrs.remove("ServerManagerID"); //$NON-NLS-1$
+ attrs.remove(IPeer.ATTR_USER_NAME);
+ attrs.remove(IPeer.ATTR_OS_NAME);
+
+ // Persist the attributes
+ try {
+ IURIPersistenceService service = ServiceManager.getInstance().getService(IURIPersistenceService.class);
+ if (service == null) {
+ throw new IOException("Persistence service instance unavailable."); //$NON-NLS-1$
+ }
+ service.write(new TransientPeer(attrs), null);
+
+ Model.getModel().getService(ILocatorModelRefreshService.class).refresh();
+ } catch (IOException e) {
+ status = new Status(IStatus.ERROR, UIPlugin.getUniqueIdentifier(),
+ NLS.bind(Messages.OfflineCommandHandler_error_makeOffline_failed, node.getName(), e.getLocalizedMessage()), e);
+ }
+
+ if (status != null) break;
+ }
+ }
+
+ // Invoke the callback
+ callback.done(OfflineCommandHandler.this, status);
+ }
+ };
+
+ Protocol.invokeLater(runnable);
+ }
+}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/help/IContextHelpIds.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/help/IContextHelpIds.java
index 7a3cf0c8d..0cb230183 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/help/IContextHelpIds.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/help/IContextHelpIds.java
@@ -63,4 +63,9 @@ public interface IContextHelpIds {
* Reset redirect command handler: Reset redirect operation failed.
*/
public final static String MESSAGE_RESET_REDIRECT_FAILED = PREFIX + ".status.messageResetRedirectFailed"; //$NON-NLS-1$
+
+ /**
+ * Offline command handler: Make offline operation failed.
+ */
+ public final static String MESSAGE_MAKEOFFLINE_FAILED = PREFIX + ".status.messageMakeOfflineFailed"; //$NON-NLS-1$
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java
index cd53d775f..5c7633a2a 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/internal/PropertyTester.java
@@ -12,6 +12,7 @@ package org.eclipse.tcf.te.tcf.ui.internal;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.tcf.te.tcf.ui.handler.DeleteHandler;
+import org.eclipse.tcf.te.tcf.ui.handler.OfflineCommandHandler;
@@ -21,6 +22,8 @@ import org.eclipse.tcf.te.tcf.ui.handler.DeleteHandler;
public class PropertyTester extends org.eclipse.core.expressions.PropertyTester {
// Reference to the peer model delete handler (to determine "canDelete")
private final DeleteHandler deleteHandler = new DeleteHandler();
+ // Reference to the peer model offline handler (to determine "canMakeAvailableOffline")
+ private final OfflineCommandHandler offlineHandler = new OfflineCommandHandler();
/* (non-Javadoc)
* @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
@@ -52,6 +55,10 @@ public class PropertyTester extends org.eclipse.core.expressions.PropertyTester
return deleteHandler.canDelete(selection);
}
+ if ("canMakeAvailableOffline".equals(property)) { //$NON-NLS-1$
+ return offlineHandler.canMakeAvailableOffline(selection);
+ }
+
return false;
}
}
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java
index da6ac060b..3cd5af88a 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.java
@@ -144,6 +144,9 @@ public class Messages extends NLS {
public static String ResetRedirectHandler_error_title;
public static String ResetRedirectHandler_error_resetRedirectFailed;
+ public static String OfflineCommandHandler_error_title;
+ public static String OfflineCommandHandler_error_makeOffline_failed;
+
public static String CategoryManager_dnd_failed;
public static String LoggingPreferencePage_label;
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties
index 05c4738f7..3f9a4b196 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.ui/src/org/eclipse/tcf/te/tcf/ui/nls/Messages.properties
@@ -93,6 +93,10 @@ RedirectAgentSelectionDialog_message=Select the proxy to redirect the communicat
ResetRedirectHandler_error_title=Error
ResetRedirectHandler_error_resetRedirectFailed=Failed to reset target communication redirect.
+OfflineCommandHandler_error_title=Error
+OfflineCommandHandler_error_makeOffline_failed=Failed to create offline copy of the attributes of target ''{0}''.\
+\n\nPossible cause:\n{1}
+
CategoryManager_dnd_failed=DND operation failed: {0}
# ***** Preference Pages *****

Back to the top