diff --git a/core/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/debug/DebugConfigurationsManager.java b/core/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/debug/DebugConfigurationsManager.java
new file mode 100644
index 00000000000..2350437b34d
--- /dev/null
+++ b/core/ide/che-core-ide-api/src/main/java/org/eclipse/che/ide/api/debug/DebugConfigurationsManager.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2016 Codenvy, S.A.
+ * 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:
+ * Codenvy, S.A. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.che.ide.api.debug;
+
+import com.google.common.base.Optional;
+
+import org.eclipse.che.commons.annotation.Nullable;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Facade for debug configuration related operations.
+ *
Also holds the current debug configuration.
+ * Current means the configuration which should be used for connecting to the debugger.
+ *
+ * @author Artem Zatsarynnyi
+ */
+public interface DebugConfigurationsManager {
+
+ /** Returns current debug configuration. */
+ Optional getCurrentDebugConfiguration();
+
+ /** Set current debug configuration. */
+ void setCurrentDebugConfiguration(@Nullable DebugConfiguration debugConfiguration);
+
+ /** Returns all debug configurations. */
+ List getConfigurations();
+
+ /**
+ * Creates new configuration with the given parameters.
+ *
+ * @return created {@link DebugConfiguration}
+ */
+ DebugConfiguration createConfiguration(String typeId,
+ String name,
+ String host,
+ int port,
+ Map connectionProperties);
+
+ /** Remove the given debug configuration. */
+ void removeConfiguration(DebugConfiguration configuration);
+
+ /** Add listener to be notified when some debug configuration has been changed. */
+ void addConfigurationsChangedListener(ConfigurationChangedListener listener);
+
+ /** Remove the given listener. */
+ void removeConfigurationsChangedListener(ConfigurationChangedListener listener);
+
+ /** Listener that will be called when debug configuration has been changed. */
+ interface ConfigurationChangedListener {
+ void onConfigurationAdded(DebugConfiguration configuration);
+
+ void onConfigurationRemoved(DebugConfiguration configuration);
+ }
+}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerExtension.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerExtension.java
index a5d93a99f04..4208a4619f1 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerExtension.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerExtension.java
@@ -25,18 +25,16 @@
import org.eclipse.che.ide.ext.debugger.client.actions.EditConfigurationsAction;
import org.eclipse.che.ide.ext.debugger.client.actions.EvaluateExpressionAction;
import org.eclipse.che.ide.ext.debugger.client.actions.ResumeExecutionAction;
-import org.eclipse.che.ide.ext.debugger.client.actions.SelectDebugConfigurationComboBoxAction;
import org.eclipse.che.ide.ext.debugger.client.actions.ShowHideDebuggerPanelAction;
import org.eclipse.che.ide.ext.debugger.client.actions.StepIntoAction;
import org.eclipse.che.ide.ext.debugger.client.actions.StepOutAction;
import org.eclipse.che.ide.ext.debugger.client.actions.StepOverAction;
+import org.eclipse.che.ide.ext.debugger.client.configuration.DebugConfigurationsGroup;
import org.eclipse.che.ide.ext.debugger.client.debug.DebuggerPresenter;
import org.eclipse.che.ide.util.input.KeyCodeMap;
-import static org.eclipse.che.ide.api.action.IdeActions.GROUP_CENTER_TOOLBAR;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_DEBUG_CONTEXT_MENU;
import static org.eclipse.che.ide.api.action.IdeActions.GROUP_RUN;
-import static org.eclipse.che.ide.api.constraints.Constraints.FIRST;
import static org.eclipse.che.ide.api.constraints.Constraints.LAST;
/**
@@ -52,23 +50,20 @@
@Extension(title = "Debugger", version = "4.1.0")
public class DebuggerExtension {
- public static final String GROUP_DEBUG_CONFIGURATIONS_LIST = "DebugConfigurationsListGroup";
-
- private static final String GROUP_DEBUG_TOOLBAR = "DebugGroupToolbar";
- private static final String GROUP_DEBUG_CONFIGURATIONS_LIST_DISPLAY_NAME = "Debug";
- private static final String EDIT_DEBUG_CONF_ID = "editDebugConfigurations";
- private static final String DEBUG_ID = "debug";
- private static final String DISCONNECT_DEBUG_ID = "disconnectDebug";
- private static final String STEP_INTO_ID = "stepInto";
- private static final String STEP_OVER_ID = "stepOver";
- private static final String STEP_OUT_ID = "stepOut";
- private static final String RESUME_EXECUTION_ID = "resumeExecution";
- private static final String EVALUATE_EXPRESSION_ID = "evaluateExpression";
- private static final String CHANGE_VARIABLE_VALUE_ID = "changeVariableValue";
- private static final String SHOW_HIDE_DEBUGGER_PANEL_ID = "showHideDebuggerPanel";
+ private static final String EDIT_DEBUG_CONF_ID = "editDebugConfigurations";
+ private static final String DEBUG_ID = "debug";
+ private static final String DISCONNECT_DEBUG_ID = "disconnectDebug";
+ private static final String STEP_INTO_ID = "stepInto";
+ private static final String STEP_OVER_ID = "stepOver";
+ private static final String STEP_OUT_ID = "stepOut";
+ private static final String RESUME_EXECUTION_ID = "resumeExecution";
+ private static final String EVALUATE_EXPRESSION_ID = "evaluateExpression";
+ private static final String CHANGE_VARIABLE_VALUE_ID = "changeVariableValue";
+ private static final String SHOW_HIDE_DEBUGGER_PANEL_ID = "showHideDebuggerPanel";
@Inject
public DebuggerExtension(DebuggerResources debuggerResources,
+ DebuggerLocalizationConstant localizationConstants,
ActionManager actionManager,
DebugAction debugAction,
DisconnectDebuggerAction disconnectDebuggerAction,
@@ -81,7 +76,7 @@ public DebuggerExtension(DebuggerResources debuggerResources,
ChangeVariableValueAction changeVariableValueAction,
ShowHideDebuggerPanelAction showHideDebuggerPanelAction,
EditConfigurationsAction editConfigurationsAction,
- SelectDebugConfigurationComboBoxAction selectDebugConfigurationComboBoxAction,
+ DebugConfigurationsGroup configurationsGroup,
DebuggerPresenter debuggerPresenter,
KeyBindingAgent keyBinding) {
debuggerResources.getCss().ensureInjected();
@@ -89,7 +84,6 @@ public DebuggerExtension(DebuggerResources debuggerResources,
final DefaultActionGroup runMenu = (DefaultActionGroup)actionManager.getAction(GROUP_RUN);
// register actions
- actionManager.registerAction("selectDebugConfigurationComboBox", selectDebugConfigurationComboBoxAction);
actionManager.registerAction(EDIT_DEBUG_CONF_ID, editConfigurationsAction);
actionManager.registerAction(DEBUG_ID, debugAction);
actionManager.registerAction(DISCONNECT_DEBUG_ID, disconnectDebuggerAction);
@@ -101,9 +95,17 @@ public DebuggerExtension(DebuggerResources debuggerResources,
actionManager.registerAction(CHANGE_VARIABLE_VALUE_ID, changeVariableValueAction);
actionManager.registerAction(SHOW_HIDE_DEBUGGER_PANEL_ID, showHideDebuggerPanelAction);
+ // create group for selecting (changing) debug configurations
+ final DefaultActionGroup debugConfigurationsGroup = new DefaultActionGroup(localizationConstants.debugConfigurationsActionTitle(),
+ true,
+ actionManager);
+ debugConfigurationsGroup.add(editConfigurationsAction);
+ debugConfigurationsGroup.addSeparator();
+ debugConfigurationsGroup.add(configurationsGroup);
+
// add actions in main menu
runMenu.addSeparator();
- runMenu.add(editConfigurationsAction, LAST);
+ runMenu.add(debugConfigurationsGroup, LAST);
runMenu.add(debugAction, LAST);
runMenu.add(disconnectDebuggerAction, LAST);
runMenu.addSeparator();
@@ -114,23 +116,6 @@ public DebuggerExtension(DebuggerResources debuggerResources,
runMenu.addSeparator();
runMenu.add(evaluateExpressionAction, LAST);
- // add actions on central toolbar
- final DefaultActionGroup debugToolbarGroup = new DefaultActionGroup(GROUP_DEBUG_TOOLBAR, false, actionManager);
- actionManager.registerAction(GROUP_DEBUG_TOOLBAR, debugToolbarGroup);
- debugToolbarGroup.add(selectDebugConfigurationComboBoxAction);
- final DefaultActionGroup debugGroup = new DefaultActionGroup(actionManager);
- debugGroup.add(debugAction);
- debugToolbarGroup.add(debugGroup);
- final DefaultActionGroup centralToolbarGroup = (DefaultActionGroup)actionManager.getAction(GROUP_CENTER_TOOLBAR);
- centralToolbarGroup.add(debugToolbarGroup);
-
- // add group for debug configurations list
- final DefaultActionGroup debugConfigurationsList = new DefaultActionGroup(GROUP_DEBUG_CONFIGURATIONS_LIST_DISPLAY_NAME,
- true,
- actionManager);
- actionManager.registerAction(GROUP_DEBUG_CONFIGURATIONS_LIST, debugConfigurationsList);
- debugConfigurationsList.add(editConfigurationsAction, FIRST);
-
// create debugger toolbar action group
DefaultActionGroup debuggerToolbarActionGroup = new DefaultActionGroup(actionManager);
debuggerToolbarActionGroup.add(resumeExecutionAction);
@@ -145,7 +130,7 @@ public DebuggerExtension(DebuggerResources debuggerResources,
// add actions in 'Debug' context menu
final DefaultActionGroup debugContextMenuGroup = (DefaultActionGroup)actionManager.getAction(GROUP_DEBUG_CONTEXT_MENU);
- debugContextMenuGroup.add(debugConfigurationsList);
+ debugContextMenuGroup.add(debugAction);
debugContextMenuGroup.addSeparator();
// keys binding
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.java
index 355c15e4a03..db6dc9b18d4 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.java
@@ -18,15 +18,12 @@
public interface DebuggerLocalizationConstant extends com.google.gwt.i18n.client.Messages {
/* actions */
+ @Key("debugConfigurationsActionTitle")
+ String debugConfigurationsActionTitle();
+
@Key("editDebugConfigurationsActionTitle")
String editDebugConfigurationsActionTitle();
- @Key("selectConfigurationActionText")
- String selectConfigurationActionText();
-
- @Key("selectConfigurationActionDescription")
- String selectConfigurationActionDescription();
-
@Key("breakpoints")
String breakpoints();
@@ -73,6 +70,9 @@ public interface DebuggerLocalizationConstant extends com.google.gwt.i18n.client
@Key("editDebugConfigurationsActionDescription")
String editDebugConfigurationsActionDescription();
+ @Key("debugConfigurationActionDescription")
+ String debugConfigurationActionDescription();
+
@Key("resumeExecutionDescription")
String resumeExecutionDescription();
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugAction.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugAction.java
index ed5d16a475b..227882a9959 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugAction.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugAction.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.che.ide.ext.debugger.client.actions;
+import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -19,6 +20,7 @@
import org.eclipse.che.ide.api.action.AbstractPerspectiveAction;
import org.eclipse.che.ide.api.action.ActionEvent;
import org.eclipse.che.ide.api.debug.DebugConfiguration;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
import org.eclipse.che.ide.debug.Debugger;
import org.eclipse.che.ide.debug.DebuggerManager;
import org.eclipse.che.ide.ext.debugger.client.DebuggerLocalizationConstant;
@@ -32,45 +34,52 @@
import static org.eclipse.che.ide.workspace.perspectives.project.ProjectPerspective.PROJECT_PERSPECTIVE_ID;
/**
- * Action that allows to connect to the debugger with the selected debug configuration.
+ * Action that allows to connect to the debugger with the current debug configuration.
*
* @author Artem Zatsarynnyi
*/
@Singleton
public class DebugAction extends AbstractPerspectiveAction {
- private final SelectDebugConfigurationComboBoxAction selectConfigurationAction;
- private final DebuggerLocalizationConstant localizationConstants;
- private final DebuggerManager debuggerManager;
- private final DialogFactory dialogFactory;
+ private final DebuggerLocalizationConstant localizationConstants;
+ private final DebuggerManager debuggerManager;
+ private final DialogFactory dialogFactory;
+ private final DebugConfigurationsManager configurationsManager;
@Inject
- public DebugAction(SelectDebugConfigurationComboBoxAction selectConfigurationAction,
- DebuggerLocalizationConstant localizationConstants,
+ public DebugAction(DebuggerLocalizationConstant localizationConstants,
DebuggerResources resources,
DebuggerManager debuggerManager,
- DialogFactory dialogFactory) {
+ DialogFactory dialogFactory,
+ DebugConfigurationsManager debugConfigurationsManager) {
super(Collections.singletonList(PROJECT_PERSPECTIVE_ID),
localizationConstants.debugActionTitle(),
localizationConstants.debugActionDescription(),
null,
resources.debug());
- this.selectConfigurationAction = selectConfigurationAction;
this.localizationConstants = localizationConstants;
this.debuggerManager = debuggerManager;
this.dialogFactory = dialogFactory;
+ this.configurationsManager = debugConfigurationsManager;
}
@Override
public void updateInPerspective(ActionEvent event) {
- event.getPresentation().setVisible(selectConfigurationAction.getSelectedConfiguration() != null);
+ Optional configurationOptional = configurationsManager.getCurrentDebugConfiguration();
+
+ event.getPresentation().setEnabled(configurationOptional.isPresent());
+ if (configurationOptional.isPresent()) {
+ event.getPresentation().setText(localizationConstants.debugActionTitle() + " '" + configurationOptional.get().getName() + "'");
+ } else {
+ event.getPresentation().setText(localizationConstants.debugActionTitle());
+ }
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
- final DebugConfiguration debugConfiguration = selectConfigurationAction.getSelectedConfiguration();
- if (debugConfiguration != null) {
- connect(debugConfiguration);
+ Optional configurationOptional = configurationsManager.getCurrentDebugConfiguration();
+ if (configurationOptional.isPresent()) {
+ connect(configurationOptional.get());
}
}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/actions/SelectDebugConfigurationComboBoxAction.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/actions/SelectDebugConfigurationComboBoxAction.java
deleted file mode 100644
index d44803fdde3..00000000000
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/actions/SelectDebugConfigurationComboBoxAction.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012-2016 Codenvy, S.A.
- * 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:
- * Codenvy, S.A. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.che.ide.ext.debugger.client.actions;
-
-import com.google.gwt.user.client.ui.FlowPanel;
-import com.google.gwt.user.client.ui.Widget;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.google.web.bindery.event.shared.EventBus;
-
-import org.eclipse.che.api.machine.gwt.client.events.WsAgentStateEvent;
-import org.eclipse.che.api.machine.gwt.client.events.WsAgentStateHandler;
-import org.eclipse.che.commons.annotation.Nullable;
-import org.eclipse.che.ide.api.action.AbstractPerspectiveAction;
-import org.eclipse.che.ide.api.action.ActionEvent;
-import org.eclipse.che.ide.api.action.ActionManager;
-import org.eclipse.che.ide.api.action.CustomComponentAction;
-import org.eclipse.che.ide.api.action.DefaultActionGroup;
-import org.eclipse.che.ide.api.action.Presentation;
-import org.eclipse.che.ide.api.debug.DebugConfiguration;
-import org.eclipse.che.ide.ext.debugger.client.DebuggerLocalizationConstant;
-import org.eclipse.che.ide.ext.debugger.client.DebuggerResources;
-import org.eclipse.che.ide.ext.debugger.client.configuration.DebugConfigurationsManager;
-import org.eclipse.che.ide.ext.debugger.client.configuration.EditDebugConfigurationsPresenter;
-import org.eclipse.che.ide.ui.dropdown.DropDownListFactory;
-import org.eclipse.che.ide.ui.dropdown.DropDownWidget;
-import org.vectomatic.dom.svg.ui.SVGImage;
-
-import javax.validation.constraints.NotNull;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-
-import static org.eclipse.che.ide.ext.debugger.client.DebuggerExtension.GROUP_DEBUG_CONFIGURATIONS_LIST;
-import static org.eclipse.che.ide.workspace.perspectives.project.ProjectPerspective.PROJECT_PERSPECTIVE_ID;
-
-/**
- * Action that allows user to select debug configuration from the list of all existing configurations.
- *
- * @author Artem Zatsarynnyi
- */
-@Singleton
-public class SelectDebugConfigurationComboBoxAction extends AbstractPerspectiveAction implements CustomComponentAction,
- EditDebugConfigurationsPresenter.ConfigurationChangedListener,
- WsAgentStateHandler {
-
- private static final String GROUP_DEBUG_CONFIGURATIONS = "DebugConfigurationsGroup";
- private static final Comparator CONFIGURATIONS_COMPARATOR = new ConfigurationsComparator();
-
- private final DropDownWidget dropDownHeaderWidget;
- private final DebugConfigurationsManager debugConfigurationsManager;
- private final ActionManager actionManager;
- private final DebuggerResources resources;
-
- private List configurations;
- private DefaultActionGroup configurationActions;
-
- @Inject
- public SelectDebugConfigurationComboBoxAction(DebuggerLocalizationConstant locale,
- DebuggerResources resources,
- ActionManager actionManager,
- EventBus eventBus,
- DropDownListFactory dropDownListFactory,
- EditDebugConfigurationsPresenter editConfigurationsPresenter,
- DebugConfigurationsManager debugConfigurationsManager) {
- super(Collections.singletonList(PROJECT_PERSPECTIVE_ID),
- locale.selectConfigurationActionText(),
- locale.selectConfigurationActionDescription(),
- null, null);
- this.resources = resources;
- this.actionManager = actionManager;
-
- this.debugConfigurationsManager = debugConfigurationsManager;
- this.dropDownHeaderWidget = dropDownListFactory.createDropDown(GROUP_DEBUG_CONFIGURATIONS);
-
- configurations = new LinkedList<>();
-
- eventBus.addHandler(WsAgentStateEvent.TYPE, this);
- editConfigurationsPresenter.addConfigurationsChangedListener(this);
-
- configurationActions = new DefaultActionGroup(GROUP_DEBUG_CONFIGURATIONS, false, actionManager);
- actionManager.registerAction(GROUP_DEBUG_CONFIGURATIONS, configurationActions);
- }
-
- @Override
- public void updateInPerspective(@NotNull ActionEvent event) {
- }
-
- @Override
- public void actionPerformed(ActionEvent e) {
- }
-
- @Override
- public Widget createCustomComponent(Presentation presentation) {
- FlowPanel customComponentHeader = new FlowPanel();
- FlowPanel debugIconPanel = new FlowPanel();
-
- customComponentHeader.setStyleName(resources.getCss().selectConfigurationBox());
- debugIconPanel.setStyleName(resources.getCss().selectConfigurationsBoxIconPanel());
- debugIconPanel.add(new SVGImage(resources.debugIcon()));
- customComponentHeader.add(debugIconPanel);
- customComponentHeader.add((Widget)dropDownHeaderWidget);
-
- return customComponentHeader;
- }
-
- /** Returns the selected debug configuration. */
- @Nullable
- public DebugConfiguration getSelectedConfiguration() {
- if (configurations.isEmpty()) {
- return null;
- }
-
- final String selectedConfigurationName = dropDownHeaderWidget.getSelectedName();
-
- for (DebugConfiguration configuration : configurations) {
- if (configuration.getName().equals(selectedConfigurationName)) {
- return configuration;
- }
- }
- return null;
- }
-
- public void setSelectedConfiguration(DebugConfiguration configuration) {
- dropDownHeaderWidget.selectElement(configuration.getName(), configuration.getName());
- }
-
- /**
- * Load all saved debug configurations.
- *
- * @param configurationToSelect
- * debug configuration that should be selected after loading all configurations
- */
- private void loadConfigurations(@Nullable final DebugConfiguration configurationToSelect) {
- List debugConfigurations = debugConfigurationsManager.readConfigurations();
- setDebugConfigurations(debugConfigurations, configurationToSelect);
- }
-
- /**
- * Sets debug configurations to the drop-down list.
- *
- * @param debugConfigurations
- * collection of debug configurations to set
- * @param configurationToSelect
- * configuration that should be selected or {@code null} if none
- */
- private void setDebugConfigurations(List debugConfigurations,
- @Nullable DebugConfiguration configurationToSelect) {
- final DefaultActionGroup configurationsList = (DefaultActionGroup)actionManager.getAction(GROUP_DEBUG_CONFIGURATIONS_LIST);
-
- configurations.clear();
-
- configurationActions.removeAll();
- if (configurationsList != null) {
- configurationActions.addAll(configurationsList);
- }
- Collections.sort(debugConfigurations, CONFIGURATIONS_COMPARATOR);
- DebugConfiguration prevConf = null;
- for (DebugConfiguration configuration : debugConfigurations) {
- if (prevConf == null || !configuration.getType().getId().equals(prevConf.getType().getId())) {
- configurationActions.addSeparator(configuration.getType().getDisplayName());
- }
- configurationActions
- .add(dropDownHeaderWidget.createAction(configuration.getName(), configuration.getName()));
- prevConf = configuration;
- }
- configurations.addAll(debugConfigurations);
-
- if (configurationToSelect != null) {
- setSelectedConfiguration(configurationToSelect);
- } else {
- selectLastUsedConfiguration();
- }
- }
-
- /** Selects the last used configuration. */
- private void selectLastUsedConfiguration() {
- final String configName = configurations.isEmpty() ? null : configurations.get(0).getName();
- dropDownHeaderWidget.selectElement(configName, configName);
- // TODO: consider to saving last used configuration name somewhere
- // for now, we always select the first configuration
- }
-
- @Override
- public void onConfigurationAdded(DebugConfiguration configuration) {
- loadConfigurations(null);
- }
-
- @Override
- public void onConfigurationRemoved(DebugConfiguration configuration) {
- loadConfigurations(null);
- }
-
- @Override
- public void onConfigurationsUpdated(DebugConfiguration configuration) {
- loadConfigurations(configuration);
- }
-
- @Override
- public void onWsAgentStarted(WsAgentStateEvent event) {
- loadConfigurations(null);
- }
-
- @Override
- public void onWsAgentStopped(WsAgentStateEvent event) {
- }
-
- private static class ConfigurationsComparator implements Comparator {
- @Override
- public int compare(DebugConfiguration o1, DebugConfiguration o2) {
- return o1.getType().getId().compareTo(o2.getType().getId());
- }
- }
-}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationAction.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationAction.java
new file mode 100644
index 00000000000..8408839ccac
--- /dev/null
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationAction.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2016 Codenvy, S.A.
+ * 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:
+ * Codenvy, S.A. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.che.ide.ext.debugger.client.configuration;
+
+import com.google.common.base.Optional;
+import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
+
+import org.eclipse.che.ide.api.action.AbstractPerspectiveAction;
+import org.eclipse.che.ide.api.action.ActionEvent;
+import org.eclipse.che.ide.api.debug.DebugConfiguration;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
+import org.eclipse.che.ide.ext.debugger.client.DebuggerLocalizationConstant;
+
+import java.util.Collections;
+
+import static org.eclipse.che.ide.workspace.perspectives.project.ProjectPerspective.PROJECT_PERSPECTIVE_ID;
+
+/**
+ * Action for selecting (changing) current debug configuration.
+ *
+ * @author Artem Zatsarynnyi
+ */
+public class DebugConfigurationAction extends AbstractPerspectiveAction {
+
+ private static final String TICK = "> ";
+
+ private final DebugConfigurationsManager configurationsManager;
+ private final DebugConfiguration configuration;
+
+ @Inject
+ public DebugConfigurationAction(DebugConfigurationsManager debugConfigurationsManager,
+ @Assisted DebugConfiguration configuration,
+ DebuggerLocalizationConstant localizationConstants) {
+ super(Collections.singletonList(PROJECT_PERSPECTIVE_ID),
+ configuration.getName(),
+ localizationConstants.debugConfigurationActionDescription(),
+ null,
+ null);
+ configurationsManager = debugConfigurationsManager;
+ this.configuration = configuration;
+ }
+
+ @Override
+ public void updateInPerspective(ActionEvent event) {
+ Optional configurationOptional = configurationsManager.getCurrentDebugConfiguration();
+ if (configurationOptional.isPresent() && configuration.equals(configurationOptional.get())) {
+ event.getPresentation().setText(TICK + configuration.getName());
+ } else {
+ event.getPresentation().setText(configuration.getName());
+ }
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ configurationsManager.setCurrentDebugConfiguration(configuration);
+ }
+}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationActionFactory.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationActionFactory.java
new file mode 100644
index 00000000000..6f600023819
--- /dev/null
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationActionFactory.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2016 Codenvy, S.A.
+ * 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:
+ * Codenvy, S.A. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.che.ide.ext.debugger.client.configuration;
+
+import org.eclipse.che.ide.api.action.Action;
+import org.eclipse.che.ide.api.debug.DebugConfiguration;
+
+/**
+ * Factory for creating instances of {@link DebugConfigurationAction}.
+ *
+ * @author Artem Zatsarynnyi
+ */
+public interface DebugConfigurationActionFactory {
+ Action createAction(DebugConfiguration configuration);
+}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsGroup.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsGroup.java
new file mode 100644
index 00000000000..99dd70fb69c
--- /dev/null
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsGroup.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2016 Codenvy, S.A.
+ * 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:
+ * Codenvy, S.A. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.che.ide.ext.debugger.client.configuration;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+import org.eclipse.che.ide.api.action.ActionManager;
+import org.eclipse.che.ide.api.action.DefaultActionGroup;
+import org.eclipse.che.ide.api.debug.DebugConfiguration;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager.ConfigurationChangedListener;
+
+/**
+ * Group of {@link DebugConfigurationAction}s.
+ *
+ * @author Artem Zatsarynnyi
+ */
+@Singleton
+public class DebugConfigurationsGroup extends DefaultActionGroup implements ConfigurationChangedListener {
+
+ private final DebugConfigurationsManager configurationsManager;
+ private final DebugConfigurationActionFactory debugConfigurationActionFactory;
+
+ @Inject
+ public DebugConfigurationsGroup(ActionManager actionManager,
+ DebugConfigurationsManager debugConfigurationsManager,
+ DebugConfigurationActionFactory debugConfigurationActionFactory) {
+ super(actionManager);
+ configurationsManager = debugConfigurationsManager;
+ this.debugConfigurationActionFactory = debugConfigurationActionFactory;
+
+ debugConfigurationsManager.addConfigurationsChangedListener(this);
+
+ fillActions();
+ }
+
+ @Override
+ public void onConfigurationAdded(DebugConfiguration configuration) {
+ fillActions();
+ }
+
+ @Override
+ public void onConfigurationRemoved(DebugConfiguration configuration) {
+ fillActions();
+ }
+
+ private void fillActions() {
+ removeAll();
+
+ for (DebugConfiguration configuration : configurationsManager.getConfigurations()) {
+ add(debugConfigurationActionFactory.createAction(configuration));
+ }
+ }
+}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsManager.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsManager.java
deleted file mode 100644
index fd63aeb8410..00000000000
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsManager.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012-2016 Codenvy, S.A.
- * 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:
- * Codenvy, S.A. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.che.ide.ext.debugger.client.configuration;
-
-import com.google.common.base.Optional;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
-import org.eclipse.che.ide.dto.DtoFactory;
-import org.eclipse.che.ide.api.debug.DebugConfiguration;
-import org.eclipse.che.ide.api.debug.DebugConfigurationType;
-import org.eclipse.che.ide.ext.debugger.shared.DebugConfigurationDto;
-import org.eclipse.che.ide.util.loging.Log;
-import org.eclipse.che.ide.util.storage.LocalStorage;
-import org.eclipse.che.ide.util.storage.LocalStorageProvider;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Helps to manage debug configurations in browser's local storage.
- *
- * @author Artem Zatsarynnyi
- */
-@Singleton
-public class DebugConfigurationsManager {
-
- public static final String LOCAL_STORAGE_DEBUG_CONF_KEY = "che-debug-configurations";
-
- private final Optional localStorageOptional;
- private final DtoFactory dtoFactory;
- private final DebugConfigurationTypeRegistry debugConfigurationTypeRegistry;
-
- @Inject
- public DebugConfigurationsManager(LocalStorageProvider localStorageProvider,
- DtoFactory dtoFactory,
- DebugConfigurationTypeRegistry debugConfigurationTypeRegistry) {
- this.dtoFactory = dtoFactory;
- this.debugConfigurationTypeRegistry = debugConfigurationTypeRegistry;
- localStorageOptional = Optional.fromNullable(localStorageProvider.get());
- }
-
- public List readConfigurations() {
- final List configurationList = new ArrayList<>();
-
- for (DebugConfigurationDto descriptor : readConfList()) {
- final DebugConfigurationType type = debugConfigurationTypeRegistry.getConfigurationTypeById(descriptor.getType());
- // skip configuration if it's type isn't registered
- if (type != null) {
- try {
- configurationList.add(new DebugConfiguration(type,
- descriptor.getName(),
- descriptor.getHost(),
- descriptor.getPort(),
- descriptor.getConnectionProperties()));
- } catch (IllegalArgumentException e) {
- Log.warn(EditDebugConfigurationsPresenter.class, e.getMessage());
- }
- }
- }
-
- return configurationList;
- }
-
- public void addConfiguration(DebugConfiguration configuration) {
- if (localStorageOptional.isPresent()) {
- final DebugConfigurationDto configurationDto = dtoFactory.createDto(DebugConfigurationDto.class)
- .withName(configuration.getName())
- .withHost(configuration.getHost())
- .withPort(configuration.getPort())
- .withConnectionProperties(configuration.getConnectionProperties())
- .withType(configuration.getType().getId());
-
- final List confList = readConfList();
- confList.add(configurationDto);
- localStorageOptional.get().setItem(LOCAL_STORAGE_DEBUG_CONF_KEY, dtoFactory.toJson(confList));
- }
- }
-
- public void removeConfiguration(String name) {
- final List newList = new ArrayList<>();
- for (DebugConfigurationDto debugConfigurationDto : readConfList()) {
- if (!name.equals(debugConfigurationDto.getName())) {
- newList.add(debugConfigurationDto);
- }
- }
-
- if (localStorageOptional.isPresent()) {
- localStorageOptional.get().setItem(LOCAL_STORAGE_DEBUG_CONF_KEY, dtoFactory.toJson(newList));
- }
- }
-
- private List readConfList() {
- List configurationsList;
-
- if (localStorageOptional.isPresent()) {
- final LocalStorage localStorage = localStorageOptional.get();
- final Optional data = Optional.fromNullable(localStorage.getItem(LOCAL_STORAGE_DEBUG_CONF_KEY));
- if (data.isPresent() && !data.get().isEmpty()) {
- configurationsList = dtoFactory.createListDtoFromJson(data.get(), DebugConfigurationDto.class);
- } else {
- configurationsList = new ArrayList<>(0);
- }
- } else {
- configurationsList = new ArrayList<>(0);
- }
-
- return configurationsList;
- }
-}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsManagerImpl.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsManagerImpl.java
new file mode 100644
index 00000000000..d6c91f80ac4
--- /dev/null
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsManagerImpl.java
@@ -0,0 +1,214 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2016 Codenvy, S.A.
+ * 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:
+ * Codenvy, S.A. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.che.ide.ext.debugger.client.configuration;
+
+import com.google.common.base.Optional;
+import com.google.inject.Inject;
+
+import org.eclipse.che.commons.annotation.Nullable;
+import org.eclipse.che.ide.api.debug.DebugConfiguration;
+import org.eclipse.che.ide.api.debug.DebugConfigurationType;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
+import org.eclipse.che.ide.dto.DtoFactory;
+import org.eclipse.che.ide.ext.debugger.shared.DebugConfigurationDto;
+import org.eclipse.che.ide.util.loging.Log;
+import org.eclipse.che.ide.util.storage.LocalStorage;
+import org.eclipse.che.ide.util.storage.LocalStorageProvider;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static java.util.Collections.emptyList;
+
+/**
+ * Implementation of {@link DebugConfigurationsManager}.
+ *
+ * @author Artem Zatsarynnyi
+ */
+public class DebugConfigurationsManagerImpl implements DebugConfigurationsManager {
+
+ private static final String LOCAL_STORAGE_DEBUG_CONF_KEY = "che-debug-configurations";
+
+ private final DtoFactory dtoFactory;
+ private final DebugConfigurationTypeRegistry configurationTypeRegistry;
+ private final Optional localStorageOptional;
+ private final Set configurationChangedListeners;
+ private final List configurations;
+
+ private DebugConfiguration currentDebugConfiguration;
+
+ @Inject
+ public DebugConfigurationsManagerImpl(LocalStorageProvider localStorageProvider,
+ DtoFactory dtoFactory,
+ DebugConfigurationTypeRegistry debugConfigurationTypeRegistry) {
+ this.dtoFactory = dtoFactory;
+ configurationTypeRegistry = debugConfigurationTypeRegistry;
+ localStorageOptional = Optional.fromNullable(localStorageProvider.get());
+ configurationChangedListeners = new HashSet<>();
+ configurations = new ArrayList<>();
+
+ loadConfigurations();
+ }
+
+ private void loadConfigurations() {
+ for (DebugConfigurationDto descriptor : retrieveConfigurations()) {
+ final DebugConfigurationType type = configurationTypeRegistry.getConfigurationTypeById(descriptor.getType());
+ // skip configuration if it's type isn't registered
+ if (type != null) {
+ try {
+ configurations.add(new DebugConfiguration(type,
+ descriptor.getName(),
+ descriptor.getHost(),
+ descriptor.getPort(),
+ descriptor.getConnectionProperties()));
+ } catch (IllegalArgumentException e) {
+ Log.warn(EditDebugConfigurationsPresenter.class, e.getMessage());
+ }
+ }
+ }
+ }
+
+ private List retrieveConfigurations() {
+ List configurationsList;
+
+ if (localStorageOptional.isPresent()) {
+ final LocalStorage localStorage = localStorageOptional.get();
+ final Optional data = Optional.fromNullable(localStorage.getItem(LOCAL_STORAGE_DEBUG_CONF_KEY));
+ if (data.isPresent() && !data.get().isEmpty()) {
+ configurationsList = dtoFactory.createListDtoFromJson(data.get(), DebugConfigurationDto.class);
+ } else {
+ configurationsList = emptyList();
+ }
+ } else {
+ configurationsList = emptyList();
+ }
+
+ return configurationsList;
+ }
+
+ @Override
+ public Optional getCurrentDebugConfiguration() {
+ return Optional.fromNullable(currentDebugConfiguration);
+ }
+
+ @Override
+ public void setCurrentDebugConfiguration(@Nullable DebugConfiguration debugConfiguration) {
+ currentDebugConfiguration = debugConfiguration;
+ }
+
+ @Override
+ public List getConfigurations() {
+ return new ArrayList<>(configurations);
+ }
+
+ @Override
+ public DebugConfiguration createConfiguration(String typeId,
+ String name,
+ String host,
+ int port,
+ Map connectionProperties) {
+ final DebugConfigurationType configurationType = configurationTypeRegistry.getConfigurationTypeById(typeId);
+
+ final DebugConfiguration configuration = new DebugConfiguration(configurationType,
+ generateUniqueConfigurationName(configurationType, name),
+ host,
+ port,
+ connectionProperties);
+ configurations.add(configuration);
+ saveConfigurations();
+ fireConfigurationAdded(configuration);
+
+ return configuration;
+ }
+
+ private String generateUniqueConfigurationName(DebugConfigurationType configurationType, String customName) {
+ Set configurationNames = new HashSet<>(configurations.size());
+ for (DebugConfiguration configuration : configurations) {
+ configurationNames.add(configuration.getName());
+ }
+
+ final String configurationName;
+
+ if (customName == null || customName.isEmpty()) {
+ configurationName = "Remote " + configurationType.getDisplayName();
+ } else {
+ if (!configurationNames.contains(customName)) {
+ return customName;
+ }
+ configurationName = customName + " copy";
+ }
+
+ if (!configurationNames.contains(configurationName)) {
+ return configurationName;
+ }
+
+ for (int count = 1; count < 1000; count++) {
+ if (!configurationNames.contains(configurationName + "-" + count)) {
+ return configurationName + "-" + count;
+ }
+ }
+
+ return configurationName;
+ }
+
+ @Override
+ public void removeConfiguration(DebugConfiguration configuration) {
+ if (getCurrentDebugConfiguration().isPresent() && getCurrentDebugConfiguration().get().equals(configuration)) {
+ setCurrentDebugConfiguration(null);
+ }
+
+ configurations.remove(configuration);
+ saveConfigurations();
+ fireConfigurationRemoved(configuration);
+ }
+
+ private void saveConfigurations() {
+ if (localStorageOptional.isPresent()) {
+ List configurationDtos = new ArrayList<>();
+
+ for (DebugConfiguration configuration : configurations) {
+ configurationDtos.add(dtoFactory.createDto(DebugConfigurationDto.class)
+ .withType(configuration.getType().getId())
+ .withName(configuration.getName())
+ .withHost(configuration.getHost())
+ .withPort(configuration.getPort())
+ .withConnectionProperties(configuration.getConnectionProperties()));
+ }
+
+ localStorageOptional.get().setItem(LOCAL_STORAGE_DEBUG_CONF_KEY, dtoFactory.toJson(configurationDtos));
+ }
+ }
+
+ @Override
+ public void addConfigurationsChangedListener(ConfigurationChangedListener listener) {
+ configurationChangedListeners.add(listener);
+ }
+
+ @Override
+ public void removeConfigurationsChangedListener(ConfigurationChangedListener listener) {
+ configurationChangedListeners.remove(listener);
+ }
+
+ private void fireConfigurationAdded(DebugConfiguration configuration) {
+ for (ConfigurationChangedListener listener : configurationChangedListeners) {
+ listener.onConfigurationAdded(configuration);
+ }
+ }
+
+ private void fireConfigurationRemoved(DebugConfiguration configuration) {
+ for (ConfigurationChangedListener listener : configurationChangedListeners) {
+ listener.onConfigurationRemoved(configuration);
+ }
+ }
+}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsPresenter.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsPresenter.java
index fa5e0074cc2..0bcdf2bc147 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsPresenter.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsPresenter.java
@@ -13,12 +13,12 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.api.debug.DebugConfiguration;
import org.eclipse.che.ide.api.debug.DebugConfigurationPage;
import org.eclipse.che.ide.api.debug.DebugConfigurationPage.DirtyStateListener;
import org.eclipse.che.ide.api.debug.DebugConfigurationType;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
import org.eclipse.che.ide.ext.debugger.client.DebuggerLocalizationConstant;
import org.eclipse.che.ide.ui.dialogs.ConfirmCallback;
import org.eclipse.che.ide.ui.dialogs.DialogFactory;
@@ -29,10 +29,8 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* Presenter for managing debug configurations.
@@ -42,15 +40,12 @@
@Singleton
public class EditDebugConfigurationsPresenter implements EditDebugConfigurationsView.ActionDelegate {
- private final EditDebugConfigurationsView view;
- private final DebugConfigurationTypeRegistry debugConfigurationTypeRegistry;
- private final DialogFactory dialogFactory;
- private final DebuggerLocalizationConstant locale;
- private final CoreLocalizationConstant coreLocale;
- private final DebugConfigurationsManager debugConfigurationsManager;
- private final Set configurationChangedListeners;
- /** Set of the existing configuration names. */
- private final Set configurationNames;
+ private final EditDebugConfigurationsView view;
+ private final DebugConfigurationTypeRegistry debugConfigurationTypeRegistry;
+ private final DialogFactory dialogFactory;
+ private final DebuggerLocalizationConstant locale;
+ private final CoreLocalizationConstant coreLocale;
+ private final DebugConfigurationsManager debugConfigurationsManager;
private DebugConfiguration editedConfiguration;
private String editedConfigurationOriginName;
@@ -69,8 +64,6 @@ protected EditDebugConfigurationsPresenter(EditDebugConfigurationsView view,
this.locale = locale;
this.coreLocale = coreLocale;
this.debugConfigurationsManager = debugConfigurationsManager;
- configurationChangedListeners = new HashSet<>();
- configurationNames = new HashSet<>();
view.setDelegate(this);
}
@@ -98,25 +91,29 @@ public void onSaveClicked() {
updateConfiguration(selectedConfiguration);
fetchConfigurations();
- fireConfigurationUpdated(selectedConfiguration);
}
- private void updateConfiguration(final DebugConfiguration selectedConfiguration) {
+ private void updateConfiguration(DebugConfiguration selectedConfiguration) {
if (editedConfigurationOriginName.trim().equals(selectedConfiguration.getName())) {
- debugConfigurationsManager.removeConfiguration(selectedConfiguration.getName());
- debugConfigurationsManager.addConfiguration(selectedConfiguration);
+ debugConfigurationsManager.removeConfiguration(selectedConfiguration);
+ debugConfigurationsManager.createConfiguration(selectedConfiguration.getType().getId(),
+ selectedConfiguration.getName(),
+ selectedConfiguration.getHost(),
+ selectedConfiguration.getPort(),
+ selectedConfiguration.getConnectionProperties());
} else {
onNameChanged();
- //generate a new unique name if input one already exists
- final String newName = getUniqueConfigurationName(selectedConfiguration.getType(), selectedConfiguration.getName());
+ debugConfigurationsManager.removeConfiguration(editedConfiguration);
+ DebugConfiguration conf = debugConfigurationsManager.createConfiguration(selectedConfiguration.getType().getId(),
+ selectedConfiguration.getName(),
+ selectedConfiguration.getHost(),
+ selectedConfiguration.getPort(),
+ selectedConfiguration.getConnectionProperties());
if (selectedConfiguration.equals(view.getSelectedConfiguration())) {
//update selected configuration name
- view.getSelectedConfiguration().setName(newName);
+ view.getSelectedConfiguration().setName(conf.getName());
}
-
- debugConfigurationsManager.removeConfiguration(editedConfigurationOriginName);
- debugConfigurationsManager.addConfiguration(selectedConfiguration);
}
}
@@ -139,7 +136,7 @@ public void onDuplicateClicked() {
public void onAddClicked() {
final DebugConfigurationType selectedType = view.getSelectedConfigurationType();
if (selectedType != null) {
- createNewConfiguration(selectedType, null, null);
+ createNewConfiguration(selectedType, null, new HashMap());
}
}
@@ -183,43 +180,14 @@ public void accepted() {
private void createConfiguration(DebugConfigurationType type,
String customName,
- @Nullable Map connectionProperties) {
- final DebugConfiguration conf = new DebugConfiguration(type,
- getUniqueConfigurationName(type, customName),
- "localhost",
- 8000,
- (connectionProperties != null) ? connectionProperties
- : new HashMap());
- debugConfigurationsManager.addConfiguration(conf);
-
+ Map connectionProperties) {
+ final DebugConfiguration configuration = debugConfigurationsManager.createConfiguration(type.getId(),
+ customName,
+ "localhost",
+ 8000,
+ connectionProperties);
fetchConfigurations();
- fireConfigurationAdded(conf);
- view.setSelectedConfiguration(conf);
- }
-
- private String getUniqueConfigurationName(DebugConfigurationType configurationType, String customName) {
- final String configurationName;
-
- if (customName == null || customName.isEmpty()) {
- configurationName = "Remote " + configurationType.getDisplayName();
- } else {
- if (!configurationNames.contains(customName)) {
- return customName;
- }
- configurationName = customName + " copy";
- }
-
- if (!configurationNames.contains(configurationName)) {
- return configurationName;
- }
-
- for (int count = 1; count < 1000; count++) {
- if (!configurationNames.contains(configurationName + "-" + count)) {
- return configurationName + "-" + count;
- }
- }
-
- return configurationName;
+ view.setSelectedConfiguration(configuration);
}
@Override
@@ -231,11 +199,10 @@ public void onRemoveClicked(final DebugConfiguration selectedConfiguration) {
final ConfirmCallback confirmCallback = new ConfirmCallback() {
@Override
public void accepted() {
- debugConfigurationsManager.removeConfiguration(selectedConfiguration.getName());
+ debugConfigurationsManager.removeConfiguration(selectedConfiguration);
view.selectNextItem();
fetchConfigurations();
- fireConfigurationRemoved(selectedConfiguration);
}
};
@@ -283,7 +250,6 @@ public void accepted() {
updateConfiguration(editedConfiguration);
fetchConfigurations();
- fireConfigurationUpdated(editedConfiguration);
handleConfigurationSelection(configuration);
}
};
@@ -354,9 +320,7 @@ private void fetchConfigurations() {
view.setCancelButtonState(false);
view.setSaveButtonState(false);
- final List configurationsList = debugConfigurationsManager.readConfigurations();
-
- configurationNames.clear();
+ final List configurationsList = debugConfigurationsManager.getConfigurations();
final Map> categories = new HashMap<>();
@@ -365,7 +329,6 @@ private void fetchConfigurations() {
for (DebugConfiguration configuration : configurationsList) {
if (type.getId().equals(configuration.getType().getId())) {
settingsCategory.add(configuration);
- configurationNames.add(configuration.getName());
if (configuration.getName().equals(originName)) {
view.setSelectedConfiguration(configuration);
}
@@ -394,39 +357,4 @@ private boolean isViewModified() {
}
return editedPage.isDirty() || !editedConfigurationOriginName.equals(view.getConfigurationName());
}
-
- private void fireConfigurationAdded(DebugConfiguration configuration) {
- for (ConfigurationChangedListener listener : configurationChangedListeners) {
- listener.onConfigurationAdded(configuration);
- }
- }
-
- private void fireConfigurationRemoved(DebugConfiguration configuration) {
- for (ConfigurationChangedListener listener : configurationChangedListeners) {
- listener.onConfigurationRemoved(configuration);
- }
- }
-
- private void fireConfigurationUpdated(DebugConfiguration configuration) {
- for (ConfigurationChangedListener listener : configurationChangedListeners) {
- listener.onConfigurationsUpdated(configuration);
- }
- }
-
- public void addConfigurationsChangedListener(ConfigurationChangedListener listener) {
- configurationChangedListeners.add(listener);
- }
-
- public void removeConfigurationsChangedListener(ConfigurationChangedListener listener) {
- configurationChangedListeners.remove(listener);
- }
-
- /** Listener that will be called when debug configuration changed. */
- public interface ConfigurationChangedListener {
- void onConfigurationAdded(DebugConfiguration configuration);
-
- void onConfigurationRemoved(DebugConfiguration configuration);
-
- void onConfigurationsUpdated(DebugConfiguration configuration);
- }
}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsViewImpl.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsViewImpl.java
index ecf980a1fa4..bc3eb47c3b1 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsViewImpl.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/configuration/EditDebugConfigurationsViewImpl.java
@@ -39,7 +39,6 @@
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
-import com.google.inject.Singleton;
import org.eclipse.che.commons.annotation.Nullable;
import org.eclipse.che.ide.CoreLocalizationConstant;
@@ -64,7 +63,6 @@
*
* @author Artem Zatsarynnyi
*/
-@Singleton
public class EditDebugConfigurationsViewImpl extends Window implements EditDebugConfigurationsView {
private static final EditDebugConfigurationsViewImplUiBinder UI_BINDER = GWT.create(EditDebugConfigurationsViewImplUiBinder.class);
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/inject/DebuggerGinModule.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/inject/DebuggerGinModule.java
index 8a2eb7e925b..d7999572b4b 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/inject/DebuggerGinModule.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/java/org/eclipse/che/ide/ext/debugger/client/inject/DebuggerGinModule.java
@@ -11,9 +11,15 @@
package org.eclipse.che.ide.ext.debugger.client.inject;
import com.google.gwt.inject.client.AbstractGinModule;
+import com.google.gwt.inject.client.assistedinject.GinFactoryModuleBuilder;
import com.google.inject.Singleton;
+import org.eclipse.che.ide.api.action.Action;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
import org.eclipse.che.ide.api.extension.ExtensionGinModule;
+import org.eclipse.che.ide.ext.debugger.client.configuration.DebugConfigurationAction;
+import org.eclipse.che.ide.ext.debugger.client.configuration.DebugConfigurationActionFactory;
+import org.eclipse.che.ide.ext.debugger.client.configuration.DebugConfigurationsManagerImpl;
import org.eclipse.che.ide.ext.debugger.client.configuration.EditDebugConfigurationsView;
import org.eclipse.che.ide.ext.debugger.client.configuration.EditDebugConfigurationsViewImpl;
import org.eclipse.che.ide.ext.debugger.client.debug.DebuggerToolbar;
@@ -28,6 +34,8 @@
import org.eclipse.che.ide.util.storage.LocalStorageProvider;
/**
+ * GIN module for Debugger extension.
+ *
* @author Andrey Plotnikov
* @author Artem Zatsarynnyi
*/
@@ -41,6 +49,10 @@ protected void configure() {
bind(ChangeValueView.class).to(ChangeValueViewImpl.class).in(Singleton.class);
bind(EditDebugConfigurationsView.class).to(EditDebugConfigurationsViewImpl.class).in(Singleton.class);
+ bind(DebugConfigurationsManager.class).to(DebugConfigurationsManagerImpl.class).in(Singleton.class);
+ install(new GinFactoryModuleBuilder().implement(Action.class, DebugConfigurationAction.class)
+ .build(DebugConfigurationActionFactory.class));
+
bind(LocalStorageProvider.class).to(BrowserLocalStorageProviderImpl.class).in(Singleton.class);
bind(ToolbarPresenter.class).annotatedWith(DebuggerToolbar.class).to(ToolbarPresenter.class).in(Singleton.class);
}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.properties b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.properties
index 71f576297c9..85d433b2b7d 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.properties
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/debugger/client/DebuggerLocalizationConstant.properties
@@ -10,9 +10,8 @@
#
##### Actions #####
+debugConfigurationsActionTitle=Debug Configurations
editDebugConfigurationsActionTitle=Edit Debug Configurations...
-selectConfigurationActionText=Select Command
-selectConfigurationActionDescription=Select configuration to connect to the remote debugger
breakpoints = Breakpoints
debug = Debug
variables = Variables
@@ -34,6 +33,7 @@ showHideDebuggerPanel=Show/Hide Debugger Panel
##### Descriptions #####
editDebugConfigurationsActionDescription = Edit debug configurations
+debugConfigurationActionDescription=Mark configuration as current
resumeExecutionDescription = Resume
disconnectDebuggerDescription = End Debug Session
stepIntoDescription = Step Into
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugActionTest.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugActionTest.java
index 0f7cdf8bad5..c9edea1db5d 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugActionTest.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/actions/DebugActionTest.java
@@ -10,9 +10,12 @@
*******************************************************************************/
package org.eclipse.che.ide.ext.debugger.client.actions;
+import com.google.common.base.Optional;
+
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.ide.api.debug.DebugConfiguration;
import org.eclipse.che.ide.api.debug.DebugConfigurationType;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
import org.eclipse.che.ide.debug.Debugger;
import org.eclipse.che.ide.debug.DebuggerManager;
import org.eclipse.che.ide.ext.debugger.client.DebuggerLocalizationConstant;
@@ -42,15 +45,15 @@
public class DebugActionTest {
@Mock
- private SelectDebugConfigurationComboBoxAction selectConfigurationAction;
+ private DebugConfigurationsManager debugConfigurationsManager;
@Mock
- private DebuggerLocalizationConstant localizationConstant;
+ private DebuggerLocalizationConstant localizationConstant;
@Mock
- private DebuggerResources javaRuntimeResources;
+ private DebuggerResources javaRuntimeResources;
@Mock
- private DebuggerManager debuggerManager;
+ private DebuggerManager debuggerManager;
@Mock
- private DialogFactory dialogFactory;
+ private DialogFactory dialogFactory;
@InjectMocks
private DebugAction action;
@@ -72,7 +75,10 @@ public void actionShouldBePerformed() {
connectionProperties.put("prop1", "val1");
connectionProperties.put("prop2", "val2");
when(debugConfiguration.getConnectionProperties()).thenReturn(connectionProperties);
- when(selectConfigurationAction.getSelectedConfiguration()).thenReturn(debugConfiguration);
+ Optional configurationOptional = mock(Optional.class);
+ when(configurationOptional.isPresent()).thenReturn(Boolean.TRUE);
+ when(configurationOptional.get()).thenReturn(debugConfiguration);
+ when(debugConfigurationsManager.getCurrentDebugConfiguration()).thenReturn(configurationOptional);
Debugger debugger = mock(Debugger.class);
when(debugger.attachDebugger(anyMap())).thenReturn(mock(Promise.class));
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationActionTest.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationActionTest.java
new file mode 100644
index 00000000000..637558465f8
--- /dev/null
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationActionTest.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2016 Codenvy, S.A.
+ * 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:
+ * Codenvy, S.A. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.che.ide.ext.debugger.client.configuration;
+
+import com.google.common.base.Optional;
+import com.google.gwtmockito.GwtMockitoTestRunner;
+
+import org.eclipse.che.ide.api.action.ActionEvent;
+import org.eclipse.che.ide.api.action.Presentation;
+import org.eclipse.che.ide.api.debug.DebugConfiguration;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
+import org.eclipse.che.ide.ext.debugger.client.DebuggerLocalizationConstant;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author Artem Zatsarynnyi
+ */
+@RunWith(GwtMockitoTestRunner.class)
+public class DebugConfigurationActionTest {
+
+ @Mock
+ private DebuggerLocalizationConstant localizationConstant;
+ @Mock
+ private DebugConfigurationsManager debugConfigurationsManager;
+ @Mock
+ private DebugConfiguration debugConfiguration;
+
+ @InjectMocks
+ private DebugConfigurationAction action;
+
+ @Test
+ public void verifyActionConstruction() {
+ verify(debugConfiguration).getName();
+ verify(localizationConstant).debugConfigurationActionDescription();
+ }
+
+ @Test
+ public void shouldSetTitleOnUpdate() {
+ String confName = "test_conf";
+ when(debugConfiguration.getName()).thenReturn(confName);
+
+ DebugConfiguration configuration = mock(DebugConfiguration.class);
+ Optional configurationOptional = mock(Optional.class);
+ when(configurationOptional.isPresent()).thenReturn(Boolean.TRUE);
+ when(configurationOptional.get()).thenReturn(configuration);
+ when(debugConfigurationsManager.getCurrentDebugConfiguration()).thenReturn(configurationOptional);
+
+ ActionEvent event = mock(ActionEvent.class);
+ Presentation presentation = mock(Presentation.class);
+ when(event.getPresentation()).thenReturn(presentation);
+
+ action.updateInPerspective(event);
+
+ verify(presentation).setText(eq(confName));
+ }
+
+ @Test
+ public void shouldSetCurrentConfigurationOnActionPerformed() {
+ action.actionPerformed(null);
+
+ verify(debugConfigurationsManager).setCurrentDebugConfiguration(eq(debugConfiguration));
+ }
+}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsGroupTest.java b/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsGroupTest.java
new file mode 100644
index 00000000000..d5e3c075297
--- /dev/null
+++ b/plugins/plugin-debugger/che-plugin-debugger-ide/src/test/java/org/eclipse/che/ide/ext/debugger/client/configuration/DebugConfigurationsGroupTest.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2012-2016 Codenvy, S.A.
+ * 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:
+ * Codenvy, S.A. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.che.ide.ext.debugger.client.configuration;
+
+import org.eclipse.che.ide.api.action.ActionManager;
+import org.eclipse.che.ide.api.debug.DebugConfiguration;
+import org.eclipse.che.ide.api.debug.DebugConfigurationsManager;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author Artem Zatsarynnyi
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class DebugConfigurationsGroupTest {
+
+ @Mock
+ private ActionManager actionManager;
+ @Mock
+ private DebugConfigurationsManager debugConfigurationsManager;
+ @Mock
+ private DebugConfigurationActionFactory debugConfigurationActionFactory;
+ @Mock
+ private DebugConfiguration debugConfiguration;
+
+ @InjectMocks
+ private DebugConfigurationsGroup actionGroup;
+
+ @Before
+ public void setUp() {
+ List debugConfigurations = new ArrayList<>();
+ debugConfigurations.add(debugConfiguration);
+ when(debugConfigurationsManager.getConfigurations()).thenReturn(debugConfigurations);
+ }
+
+ @Test
+ public void verifyActionConstruction() {
+ verify(debugConfigurationsManager).addConfigurationsChangedListener(actionGroup);
+ verify(debugConfigurationsManager).getConfigurations();
+ }
+
+ @Test
+ public void shouldFillActionsOnConfigurationAdded() {
+ actionGroup.onConfigurationAdded(mock(DebugConfiguration.class));
+
+ verifyChildActionsFilled();
+ }
+
+ @Test
+ public void shouldFillActionsOnConfigurationRemoved() {
+ actionGroup.onConfigurationRemoved(mock(DebugConfiguration.class));
+
+ verifyChildActionsFilled();
+ }
+
+ private void verifyChildActionsFilled() {
+ verify(debugConfigurationsManager, times(2)).getConfigurations();
+ verify(debugConfigurationActionFactory).createAction(debugConfiguration);
+
+ assertEquals(1, actionGroup.getChildrenCount());
+ }
+}
diff --git a/plugins/plugin-debugger/che-plugin-debugger-shared/src/main/java/org/eclipse/che/ide/ext/debugger/shared/DebugConfigurationDto.java b/plugins/plugin-debugger/che-plugin-debugger-shared/src/main/java/org/eclipse/che/ide/ext/debugger/shared/DebugConfigurationDto.java
index 042d04ce021..b49c37aa4db 100644
--- a/plugins/plugin-debugger/che-plugin-debugger-shared/src/main/java/org/eclipse/che/ide/ext/debugger/shared/DebugConfigurationDto.java
+++ b/plugins/plugin-debugger/che-plugin-debugger-shared/src/main/java/org/eclipse/che/ide/ext/debugger/shared/DebugConfigurationDto.java
@@ -44,7 +44,7 @@ public interface DebugConfigurationDto {
Map getConnectionProperties();
- void setConnectionProperties(Map attributes);
+ void setConnectionProperties(Map connectionProperties);
- DebugConfigurationDto withConnectionProperties(Map attributes);
+ DebugConfigurationDto withConnectionProperties(Map connectionProperties);
}
diff --git a/plugins/plugin-java/che-plugin-java-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/java/jdi/client/JavaRuntimeLocalizationConstant.properties b/plugins/plugin-java/che-plugin-java-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/java/jdi/client/JavaRuntimeLocalizationConstant.properties
index df5985c6320..6ccbccd929d 100644
--- a/plugins/plugin-java/che-plugin-java-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/java/jdi/client/JavaRuntimeLocalizationConstant.properties
+++ b/plugins/plugin-java/che-plugin-java-debugger-ide/src/main/resources/org/eclipse/che/ide/ext/java/jdi/client/JavaRuntimeLocalizationConstant.properties
@@ -11,6 +11,6 @@
# JavaDebugConfigurationPage
view.javaDebugConfigurationPage.notice=The hostname or IP address where debugger process is running. If your debugger process is in your workspace, use the workspace agent URL and port number. This is displayed in the servers tab in the operations perspective.
-view.javaDebugConfigurationPage.devHostCheckbox=Connect to process on dev machine
+view.javaDebugConfigurationPage.devHostCheckbox=Connect to process on workspace machine
view.javaDebugConfigurationPage.hostLabel=Host
view.javaDebugConfigurationPage.portLabel=Port