From ce19d4f95a1bf6d128c262f32067b0cea4373af9 Mon Sep 17 00:00:00 2001 From: Vitaliy Guliy Date: Fri, 15 Apr 2016 16:34:26 +0300 Subject: [PATCH] CHE-994 Update the list of machines on toolbar and console panel Signed-off-by: Vitaliy Guliy --- .../che/ide/ui/listbox/CustomListBox.java | 34 +++++++- .../ide/ui/dropdown/DropDownListFactory.java | 14 ++-- .../che/ide/ui/dropdown/DropDownWidget.java | 22 +++-- .../ide/ui/dropdown/DropDownWidgetImpl.java | 38 +++++---- .../machine/gwt/client/MachineManager.java | 10 --- .../client/events/DevMachineStateEvent.java | 34 ++++++-- .../client/events/DevMachineStateHandler.java | 37 --------- ...electDebugConfigurationComboBoxAction.java | 2 +- .../maven/client/MavenExtension.java | 11 ++- .../machine/client/MachineExtension.java | 4 +- .../actions/ExecuteSelectedCommandAction.java | 11 ++- .../client/actions/RunCommandAction.java | 5 +- ...xReady.java => SelectCommandComboBox.java} | 80 +++++++++--------- .../command/edit/EditCommandsPresenter.java | 7 +- .../CurrentProjectPathProvider.java | 10 ++- .../DevMachineHostNameProvider.java | 10 ++- .../client/machine/MachineManagerImpl.java | 15 ++-- .../{events => }/MachineStateEvent.java | 81 ++++++++++++------- .../client/machine/MachineStatusNotifier.java | 6 +- .../machine/events/MachineStateHandler.java | 37 --------- .../terminal/container/TerminalContainer.java | 10 ++- .../machine/panel/MachinePanelPresenter.java | 9 ++- .../processes/ConsolesPanelPresenter.java | 16 ++-- .../client/targets/TargetsPresenter.java | 64 ++++++++++----- .../machine/client/targets/TargetsView.java | 10 ++- .../client/targets/TargetsViewImpl.java | 20 +++-- .../ExecuteSelectedCommandActionTest.java | 3 +- .../client/actions/RunCommandActionTest.java | 3 +- .../CurrentProjectPathProviderTest.java | 3 +- .../container/TerminalContainerTest.java | 5 +- .../panel/MachinePanelPresenterTest.java | 3 +- .../processes/ConsolesPanelPresenterTest.java | 7 +- 32 files changed, 336 insertions(+), 285 deletions(-) delete mode 100755 core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateHandler.java rename plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/{SelectCommandComboBoxReady.java => SelectCommandComboBox.java} (90%) rename plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/{events => }/MachineStateEvent.java (54%) delete mode 100755 plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/events/MachineStateHandler.java diff --git a/core/commons/che-core-commons-gwt/src/main/java/org/eclipse/che/ide/ui/listbox/CustomListBox.java b/core/commons/che-core-commons-gwt/src/main/java/org/eclipse/che/ide/ui/listbox/CustomListBox.java index 32c7416c169..c0edd59d4ee 100644 --- a/core/commons/che-core-commons-gwt/src/main/java/org/eclipse/che/ide/ui/listbox/CustomListBox.java +++ b/core/commons/che-core-commons-gwt/src/main/java/org/eclipse/che/ide/ui/listbox/CustomListBox.java @@ -53,7 +53,6 @@ public class CustomListBox extends FocusWidget implements HasChangeHandlers { private int defaultSelectedIndex = -1; private boolean isActive = false; - public static CustomListBox wrap(Element element) { // Assert that the element is attached. assert Document.get().getBody().isOrHasChild(element); @@ -411,17 +410,47 @@ public void setSelectedIndex(int index) { if (index < 0) { return; } + //set default index if not added options yet if (index >= getItemCount()) { defaultSelectedIndex = index; return; } + selectedIndex = index; currentItemLabel.setInnerText(getItemText(index)); - final InputElement inputElement = getListItemElement(index); + InputElement inputElement = getListItemElement(index); inputElement.setChecked(true); } + /** + * Selects an item with given text. + * + * @param text + * text of an item to be selected + */ + public void select(String text) { + // uncheck previous value + if (selectedIndex >= 0) { + InputElement inputElement = getListItemElement(selectedIndex); + inputElement.setChecked(false); + } + + // find and select a new one + if (text != null) { + for (int i = 0; i < getItemCount(); i++) { + if (text.equals(getItemText(i))) { + setSelectedIndex(i); + return; + } + } + } + + // clear the selection + selectedIndex = -1; + currentItemLabel.setInnerText(""); + } + /** * Sets the value associated with the item at a given index. * @@ -459,4 +488,5 @@ private native boolean isActive(Element element) /*-{ var activeElement = $doc.activeElement; return activeElement.isEqualNode(element); }-*/; + } diff --git a/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownListFactory.java b/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownListFactory.java index dade29faa89..4200a7aa170 100644 --- a/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownListFactory.java +++ b/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownListFactory.java @@ -18,13 +18,17 @@ * @author Valeriy Svydenko */ public interface DropDownListFactory { + /** - * Create an instance of {@link DropDownWidget} with a given identifier for registering. + * Create an instance of {@link DropDownWidget} managing action group registered in action manager. + * + * @param actionGroupId + * identifier of {@link org.eclipse.che.ide.api.action.ActionGroup} registered in action manager * - * @param listId - * list identifier - * @return an instance of {@link DropDownWidget} + * @return + * an instance of {@link DropDownWidget} */ @NotNull - DropDownWidget createList(@NotNull String listId); + DropDownWidget createDropDown(@NotNull String actionGroupId); + } diff --git a/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidget.java b/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidget.java index b1866859183..4f807ad616d 100644 --- a/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidget.java +++ b/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidget.java @@ -18,13 +18,25 @@ * * @author Valeriy Svydenko * @author Oleksii Orel + * @author Vitaliy Gulily */ public interface DropDownWidget { - /** returns name of the selected element* */ + + /** + * Returns name of the selected element. + * + * @return + * name of the selected element + */ @Nullable String getSelectedName(); - /** returns id of the selected element* */ + /** + * Returns id of the selected element. + * + * @return + * selected element identifier + */ @Nullable String getSelectedId(); @@ -39,7 +51,7 @@ public interface DropDownWidget { void selectElement(@Nullable String id, @Nullable String name); /** - * Create an instance of element action with given name amd id for displaying it. + * Creates an instance of element action with given name and id for displaying it. * * @param id * id of element @@ -51,8 +63,8 @@ public interface DropDownWidget { Action createAction(String id, String name); /** - * Update popup elements in drop down part of widget. + * Updates popup elements in drop down part of widget. */ void updatePopup(); -} \ No newline at end of file +} diff --git a/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidgetImpl.java b/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidgetImpl.java index 456de5e63a0..cdc40ec8707 100644 --- a/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidgetImpl.java +++ b/core/ide/che-core-ide-ui/src/main/java/org/eclipse/che/ide/ui/dropdown/DropDownWidgetImpl.java @@ -52,6 +52,7 @@ * * @author Valeriy Svydenko * @author Oleksii Orel + * @author Vitaliy Guliy */ public class DropDownWidgetImpl extends Composite implements ActionSelectedHandler, ClickHandler, DropDownWidget { @@ -62,14 +63,18 @@ interface DropDownWidgetImplUiBinder extends UiBinder managerProvider, @NotNull @Assisted String listId) { + public DropDownWidgetImpl(Resources resources, + ActionManager actionManager, + KeyBindingAgent keyBindingAgent, + Provider managerProvider, + @NotNull @Assisted String actionGroupId) { this.resources = resources; - this.listId = listId; + this.actionGroupId = actionGroupId; initWidget(UI_BINDER.createAndBindUi(this)); @@ -140,7 +148,7 @@ public void onClick(ClickEvent event) { int left = getAbsoluteLeft(); int top = getAbsoluteTop() + listHeader.getOffsetHeight(); int width = listHeader.getOffsetWidth(); - this.show(left, top, width, listId); + show(left, top, width); } /** {@inheritDoc} */ @@ -151,7 +159,7 @@ public void updatePopup() { } this.hide(); int top = getAbsoluteTop() + listHeader.getOffsetHeight(); - this.show(getAbsoluteLeft(), top, listHeader.getOffsetWidth(), listId); + show(getAbsoluteLeft(), top, listHeader.getOffsetWidth()); } /** {@inheritDoc} */ @@ -175,12 +183,10 @@ public void onActionSelected(Action action) { * vertical position * @param width * header width - * @param itemId - * list identifier */ - private void show(final int left, final int top, final int width, @NotNull String itemId) { + private void show(int left, int top, int width) { hide(); - this.updateActions(itemId); + updateActions(); lockLayer = new MenuLockLayer(); popupMenu = new PopupMenu(actions, @@ -190,7 +196,7 @@ private void show(final int left, final int top, final int width, @NotNull Strin lockLayer, this, keyBindingAgent, - itemId); + actionGroupId); popupMenu.addStyleName(resources.dropdownListCss().dropDownListMenu()); popupMenu.getElement().getStyle().setTop(top, PX); popupMenu.getElement().getStyle().setLeft(left, PX); @@ -200,15 +206,12 @@ private void show(final int left, final int top, final int width, @NotNull Strin } /** - * Updates the list of visible actions. - * - * @param listId - * identifier of action group which contains elements of list + * Refresh the list of visible actions. */ - private void updateActions(@NotNull String listId) { + private void updateActions() { actions.removeAll(); - ActionGroup mainActionGroup = (ActionGroup)actionManager.getAction(listId); + ActionGroup mainActionGroup = (ActionGroup)actionManager.getAction(actionGroupId); if (mainActionGroup == null) { return; } @@ -286,4 +289,5 @@ public interface Resources extends ClientBundle { @Source("expansionIcon.svg") SVGResource expansionImage(); } + } diff --git a/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/MachineManager.java b/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/MachineManager.java index 822db785fcf..9a6ca198b64 100644 --- a/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/MachineManager.java +++ b/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/MachineManager.java @@ -62,16 +62,6 @@ enum MachineOperationType { */ void startMachine(String recipeURL, String displayName); - /** - * Start new SSH machine in workspace. - * - * @param recipeURL - * special recipe url to get docker image. - * @param displayName - * display name for machine - */ - void startSSHMachine(String recipeURL, String displayName); - /** * Destroy machine. * diff --git a/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateEvent.java b/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateEvent.java index c881ba06696..dcbb1a54ed5 100755 --- a/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateEvent.java +++ b/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateEvent.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.che.api.machine.gwt.client.events; +import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.GwtEvent; import org.eclipse.che.api.machine.shared.dto.event.MachineStatusEvent; @@ -19,10 +20,28 @@ * * @author Roman Nikitenko */ -public class DevMachineStateEvent extends GwtEvent { +public class DevMachineStateEvent extends GwtEvent { + + public interface Handler extends EventHandler { + /** + * Called when dev machine has been started. + * + * @param event + * the fired {@link DevMachineStateEvent} + */ + void onDevMachineStarted(DevMachineStateEvent event); + + /** + * Called when dev machine has been destroyed. + * + * @param event + * the fired {@link DevMachineStateEvent} + */ + void onDevMachineDestroyed(DevMachineStateEvent event); + } /** Type class used to register this event. */ - public static Type TYPE = new Type<>(); + public static Type TYPE = new Type<>(); private final MachineStatusEvent.EventType status; private final String machineId; private final String workspaceId; @@ -44,7 +63,7 @@ public DevMachineStateEvent(MachineStatusEvent event) { } @Override - public Type getAssociatedType() { + public Type getAssociatedType() { return TYPE; } @@ -70,16 +89,15 @@ public String getError() { } @Override - protected void dispatch(DevMachineStateHandler handler) { + protected void dispatch(DevMachineStateEvent.Handler handler) { switch (status) { case RUNNING: - handler.onMachineStarted(this); + handler.onDevMachineStarted(this); break; case DESTROYED: - handler.onMachineDestroyed(this); - break; - default: + handler.onDevMachineDestroyed(this); break; } } + } diff --git a/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateHandler.java b/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateHandler.java deleted file mode 100755 index 9d80dc37647..00000000000 --- a/core/platform-api-client-gwt/che-core-client-gwt-machine/src/main/java/org/eclipse/che/api/machine/gwt/client/events/DevMachineStateHandler.java +++ /dev/null @@ -1,37 +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.api.machine.gwt.client.events; - -import com.google.gwt.event.shared.EventHandler; - -/** - * A handler for handling {@link DevMachineStateEvent}. - * - * @author Roman Nikitenko - */ -public interface DevMachineStateHandler extends EventHandler { - - /** - * Called when dev machine has been started. - * - * @param event - * the fired {@link DevMachineStateEvent} - */ - void onMachineStarted(DevMachineStateEvent event); - - /** - * Called when dev machine has been destroyed. - * - * @param event - * the fired {@link DevMachineStateEvent} - */ - void onMachineDestroyed(DevMachineStateEvent event); -} 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 index c72ffc1a746..d44803fdde3 100644 --- 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 @@ -80,7 +80,7 @@ public SelectDebugConfigurationComboBoxAction(DebuggerLocalizationConstant local this.actionManager = actionManager; this.debugConfigurationsManager = debugConfigurationsManager; - this.dropDownHeaderWidget = dropDownListFactory.createList(GROUP_DEBUG_CONFIGURATIONS); + this.dropDownHeaderWidget = dropDownListFactory.createDropDown(GROUP_DEBUG_CONFIGURATIONS); configurations = new LinkedList<>(); diff --git a/plugins/plugin-java/che-plugin-java-ext-maven/src/main/java/org/eclipse/che/ide/extension/maven/client/MavenExtension.java b/plugins/plugin-java/che-plugin-java-ext-maven/src/main/java/org/eclipse/che/ide/extension/maven/client/MavenExtension.java index 0f70b77a3d3..8db0d1dd2ac 100644 --- a/plugins/plugin-java/che-plugin-java-ext-maven/src/main/java/org/eclipse/che/ide/extension/maven/client/MavenExtension.java +++ b/plugins/plugin-java/che-plugin-java-ext-maven/src/main/java/org/eclipse/che/ide/extension/maven/client/MavenExtension.java @@ -30,8 +30,7 @@ import org.eclipse.che.ide.api.project.type.wizard.PreSelectedProjectTypeManager; import org.eclipse.che.ide.ext.java.client.dependenciesupdater.DependenciesUpdater; import org.eclipse.che.ide.ext.java.client.project.node.JavaNodeManager; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.extension.maven.client.actions.UpdateDependencyAction; import org.eclipse.che.ide.extension.maven.shared.MavenAttributes; import org.eclipse.che.ide.part.explorer.project.ProjectExplorerPresenter; @@ -97,7 +96,13 @@ public void onProjectReady(ProjectReadyEvent event) { } }); - eventBus.addHandler(MachineStateEvent.TYPE, new MachineStateHandler() { + eventBus.addHandler(MachineStateEvent.TYPE, new MachineStateEvent.Handler() { + + @Override + public void onMachineCreating(MachineStateEvent event) { + + } + @Override public void onMachineRunning(MachineStateEvent event) { if (project != null) { diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/MachineExtension.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/MachineExtension.java index cba79d5cb5d..293b3463f23 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/MachineExtension.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/MachineExtension.java @@ -38,7 +38,7 @@ import org.eclipse.che.ide.extension.machine.client.actions.ExecuteSelectedCommandAction; import org.eclipse.che.ide.extension.machine.client.actions.RestartMachineAction; import org.eclipse.che.ide.extension.machine.client.actions.RunCommandAction; -import org.eclipse.che.ide.extension.machine.client.actions.SelectCommandComboBoxReady; +import org.eclipse.che.ide.extension.machine.client.actions.SelectCommandComboBox; import org.eclipse.che.ide.extension.machine.client.actions.SwitchPerspectiveAction; import org.eclipse.che.ide.extension.machine.client.command.custom.CustomCommandType; import org.eclipse.che.ide.extension.machine.client.command.valueproviders.ServerPortProvider; @@ -112,7 +112,7 @@ private void prepareActions(MachineLocalizationConstant localizationConstant, ActionManager actionManager, KeyBindingAgent keyBinding, ExecuteSelectedCommandAction executeSelectedCommandAction, - SelectCommandComboBoxReady selectCommandAction, + SelectCommandComboBox selectCommandAction, EditCommandsAction editCommandsAction, CreateMachineAction createMachine, RestartMachineAction restartMachine, diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandAction.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandAction.java index 2e985a0572a..e9056c0026d 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandAction.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandAction.java @@ -33,13 +33,13 @@ @Singleton public class ExecuteSelectedCommandAction extends AbstractPerspectiveAction { - private final SelectCommandComboBoxReady selectCommandAction; + private final SelectCommandComboBox selectCommandAction; private final CommandManager commandManager; @Inject public ExecuteSelectedCommandAction(MachineLocalizationConstant localizationConstant, MachineResources resources, - SelectCommandComboBoxReady selectCommandAction, + SelectCommandComboBox selectCommandAction, CommandManager commandManager) { super(Collections.singletonList(PROJECT_PERSPECTIVE_ID), localizationConstant.executeSelectedCommandControlTitle(), @@ -60,10 +60,9 @@ public void actionPerformed(ActionEvent e) { final CommandConfiguration command = selectCommandAction.getSelectedCommand(); MachineDto machine = selectCommandAction.getSelectedMachine(); - if (command == null || machine == null) { - return; + if (command != null && machine != null) { + commandManager.execute(command, machine); } - - commandManager.execute(command, machine); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandAction.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandAction.java index 63f8064f893..2fa1dd174bc 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandAction.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandAction.java @@ -30,13 +30,13 @@ public class RunCommandAction extends Action { public static final String NAME_PARAM_ID = "name"; - private final SelectCommandComboBoxReady selectCommandAction; + private final SelectCommandComboBox selectCommandAction; private final CommandManager commandManager; private final MachineLocalizationConstant localizationConstant; @Inject - public RunCommandAction(SelectCommandComboBoxReady selectCommandAction, + public RunCommandAction(SelectCommandComboBox selectCommandAction, MachineLocalizationConstant localizationConstant, CommandManager commandManager) { this.selectCommandAction = selectCommandAction; @@ -62,4 +62,5 @@ public void actionPerformed(ActionEvent event) { commandManager.execute(command); } } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/SelectCommandComboBoxReady.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/SelectCommandComboBox.java similarity index 90% rename from plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/SelectCommandComboBoxReady.java rename to plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/SelectCommandComboBox.java index f7bb098054c..4949fc8088e 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/SelectCommandComboBoxReady.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/actions/SelectCommandComboBox.java @@ -41,8 +41,7 @@ import org.eclipse.che.ide.extension.machine.client.command.CommandType; import org.eclipse.che.ide.extension.machine.client.command.CommandTypeRegistry; import org.eclipse.che.ide.extension.machine.client.command.edit.EditCommandsPresenter; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.ui.dropdown.DropDownListFactory; import org.eclipse.che.ide.ui.dropdown.DropDownWidget; import org.eclipse.che.ide.util.loging.Log; @@ -68,10 +67,10 @@ * @author Oleksii Orel */ @Singleton -public class SelectCommandComboBoxReady extends AbstractPerspectiveAction implements CustomComponentAction, - EditCommandsPresenter.ConfigurationChangedListener, - WsAgentStateHandler, - MachineStateHandler { +public class SelectCommandComboBox extends AbstractPerspectiveAction implements CustomComponentAction, + EditCommandsPresenter.ConfigurationChangedListener, + WsAgentStateHandler, + MachineStateEvent.Handler { public static final String GROUP_COMMANDS = "CommandsGroup"; public static final String GROUP_MACHINES = "MachinesGroup"; @@ -91,16 +90,16 @@ public class SelectCommandComboBoxReady extends AbstractPerspectiveAction implem private final DefaultActionGroup machinesActions; @Inject - public SelectCommandComboBoxReady(MachineLocalizationConstant locale, - MachineResources resources, - ActionManager actionManager, - EventBus eventBus, - DropDownListFactory dropDownListFactory, - WorkspaceServiceClient workspaceServiceClient, - MachineServiceClient machineServiceClient, - CommandTypeRegistry commandTypeRegistry, - EditCommandsPresenter editCommandsPresenter, - AppContext appContext) { + public SelectCommandComboBox(MachineLocalizationConstant locale, + MachineResources resources, + ActionManager actionManager, + EventBus eventBus, + DropDownListFactory dropDownListFactory, + WorkspaceServiceClient workspaceServiceClient, + MachineServiceClient machineServiceClient, + CommandTypeRegistry commandTypeRegistry, + EditCommandsPresenter editCommandsPresenter, + AppContext appContext) { super(Collections.singletonList(PROJECT_PERSPECTIVE_ID), locale.selectCommandControlTitle(), locale.selectCommandControlDescription(), @@ -114,10 +113,10 @@ public SelectCommandComboBoxReady(MachineLocalizationConstant locale, this.workspaceId = appContext.getWorkspaceId(); this.registeredMachineMap = new HashMap<>(); - this.commands = new LinkedList<>(); + this.commands = new ArrayList<>(); - this.machinesListWidget = dropDownListFactory.createList(GROUP_MACHINES); - this.commandsListWidget = dropDownListFactory.createList(GROUP_COMMANDS); + this.machinesListWidget = dropDownListFactory.createDropDown(GROUP_MACHINES); + this.commandsListWidget = dropDownListFactory.createDropDown(GROUP_COMMANDS); editCommandsPresenter.addConfigurationsChangedListener(this); @@ -332,6 +331,10 @@ public void apply(List machines) throws OperationException { public void onWsAgentStopped(WsAgentStateEvent event) { } + @Override + public void onMachineCreating(MachineStateEvent event) { + } + @Override public void onMachineRunning(MachineStateEvent event) { MachineDto machine = event.getMachine(); @@ -343,47 +346,41 @@ public void onMachineRunning(MachineStateEvent event) { public void onMachineDestroyed(MachineStateEvent event) { MachineDto machine = event.getMachine(); - this.removeMachineAction(machine); + final String machineId = machine.getId(); + + if (registeredMachineMap.remove(machineId) == null) { + return; + } + + if (machine.getConfig().getName().equals(machinesListWidget.getSelectedName())) { + machinesListWidget.selectElement(null, null); + } + + updateMachineActions(); } private void addMachineActions(List machines) { for (MachineDto machine : machines) { registeredMachineMap.put(machine.getId(), machine); } - this.updateMachineActions(); + + updateMachineActions(); } private void addMachineAction(MachineDto machine) { registeredMachineMap.put(machine.getId(), machine); - this.updateMachineActions(); + updateMachineActions(); machinesListWidget.selectElement(machine.getId(), machine.getConfig().getName()); } - private boolean removeMachineAction(MachineDto machine) { - final String machineId = machine.getId(); - - MachineDto deletedAction = registeredMachineMap.get(machineId); - if (deletedAction == null) { - return false; - } - - registeredMachineMap.remove(machineId); - - if (machine.getConfig().getName().equals(machinesListWidget.getSelectedName())) { - machinesListWidget.selectElement(null, null); - } - this.updateMachineActions(); - - return true; - } - private void updateMachineActions() { machinesActions.removeAll(); final DefaultActionGroup actionList = (DefaultActionGroup)actionManager.getAction(GROUP_MACHINES_LIST); if (actionList != null) { machinesActions.addAll(actionList); } + if (registeredMachineMap.isEmpty()) { return; } @@ -417,7 +414,7 @@ private void updateMachineActions() { private String getMachineCategory(MachineConfigDto machineConfig) { if (machineConfig.isDev()) { - return this.locale.selectMachineDevCategory(); + return locale.selectMachineDevCategory(); } return machineConfig.getType(); } @@ -452,4 +449,5 @@ public int compare(Map.Entry o1, Map.Entry selectCommandActionProvider; + private final Provider selectCommandActionProvider; private final Set configurationChangedListeners; private final AppContext appContext; /** Set of the existing command names. */ @@ -90,7 +90,7 @@ protected EditCommandsPresenter(EditCommandsView view, DialogFactory dialogFactory, MachineLocalizationConstant machineLocale, CoreLocalizationConstant coreLocale, - Provider selectCommandActionProvider, + Provider selectCommandActionProvider, CommandManager commandManager, AppContext appContext, DtoFactory dtoFactory) { @@ -587,4 +587,5 @@ interface CommandProcessingCallback { /** Called when handling of command is completed successfully. */ void onCompleted(); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProvider.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProvider.java index cf48bdb71e8..76cab3377c9 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProvider.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProvider.java @@ -23,8 +23,7 @@ import org.eclipse.che.ide.api.event.project.CurrentProjectChangedHandler; import org.eclipse.che.ide.api.event.project.ProjectReadyEvent; import org.eclipse.che.ide.api.event.project.ProjectReadyHandler; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import javax.validation.constraints.NotNull; @@ -37,7 +36,7 @@ */ @Singleton public class CurrentProjectPathProvider implements CommandPropertyValueProvider, - MachineStateHandler, + MachineStateEvent.Handler, CloseCurrentProjectHandler, ProjectReadyHandler, CurrentProjectChangedHandler { @@ -71,6 +70,10 @@ public String getValue() { return value; } + @Override + public void onMachineCreating(MachineStateEvent event) { + } + @Override public void onMachineRunning(MachineStateEvent event) { CurrentProject currentProject = appContext.getCurrentProject(); @@ -114,4 +117,5 @@ private void updateValue() { public void onCurrentProjectChanged(CurrentProjectChangedEvent event) { updateValue(); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/DevMachineHostNameProvider.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/DevMachineHostNameProvider.java index 9a0710f6dfc..25bd372be0d 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/DevMachineHostNameProvider.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/DevMachineHostNameProvider.java @@ -20,8 +20,7 @@ import org.eclipse.che.api.promises.client.OperationException; import org.eclipse.che.api.promises.client.PromiseError; import org.eclipse.che.ide.api.app.AppContext; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import javax.validation.constraints.NotNull; @@ -31,7 +30,7 @@ * @author Artem Zatsarynnyi */ @Singleton -public class DevMachineHostNameProvider implements CommandPropertyValueProvider, MachineStateHandler { +public class DevMachineHostNameProvider implements CommandPropertyValueProvider, MachineStateEvent.Handler { private static final String KEY = "${machine.dev.hostname}"; @@ -62,6 +61,10 @@ public String getValue() { return value; } + @Override + public void onMachineCreating(MachineStateEvent event) { + } + @Override public void onMachineRunning(MachineStateEvent event) { final MachineDto machine = event.getMachine(); @@ -108,4 +111,5 @@ public void apply(PromiseError arg) throws OperationException { } }); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineManagerImpl.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineManagerImpl.java index 234c4842b0f..e9a029f9ba6 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineManagerImpl.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineManagerImpl.java @@ -38,8 +38,6 @@ import org.eclipse.che.ide.extension.machine.client.inject.factories.EntityFactory; import org.eclipse.che.ide.extension.machine.client.machine.MachineStatusNotifier.RunningListener; import org.eclipse.che.ide.extension.machine.client.machine.console.MachineConsolePresenter; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; import org.eclipse.che.ide.rest.DtoUnmarshallerFactory; import org.eclipse.che.ide.ui.loaders.initialization.InitialLoadingInfo; import org.eclipse.che.ide.util.loging.Log; @@ -188,7 +186,12 @@ public void onWorkspaceStopped(WorkspaceStoppedEvent event) { @Override public void restartMachine(final MachineDto machineState) { - eventBus.addHandler(MachineStateEvent.TYPE, new MachineStateHandler() { + eventBus.addHandler(MachineStateEvent.TYPE, new MachineStateEvent.Handler () { + + @Override + public void onMachineCreating(MachineStateEvent event) { + } + @Override public void onMachineRunning(MachineStateEvent event) { } @@ -221,12 +224,6 @@ public void startMachine(String recipeURL, String displayName) { startMachine(recipeURL, displayName, false, START, "dockerfile", "docker"); } - /** Start new SSH machine. */ - @Override - public void startSSHMachine(String recipeURL, String displayName) { - startMachine(recipeURL, displayName, false, START, "ssh-config", "ssh"); - } - /** Start new machine as dev-machine (bind workspace to running machine). */ @Override public void startDevMachine(String recipeURL, String displayName) { diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/events/MachineStateEvent.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStateEvent.java similarity index 54% rename from plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/events/MachineStateEvent.java rename to plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStateEvent.java index a6744028c8c..ba58f184dc0 100755 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/events/MachineStateEvent.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStateEvent.java @@ -8,8 +8,9 @@ * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ -package org.eclipse.che.ide.extension.machine.client.machine.events; +package org.eclipse.che.ide.extension.machine.client.machine; +import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.GwtEvent; import org.eclipse.che.api.machine.shared.dto.MachineDto; @@ -19,11 +20,43 @@ * * @author Artem Zatsarynnyi */ -public class MachineStateEvent extends GwtEvent { +public class MachineStateEvent extends GwtEvent { + + public interface Handler extends EventHandler { + + /** + * Is called when creating a machine. + * + * @param event + * state event + */ + void onMachineCreating(MachineStateEvent event); + + /** + * Called when machine has been run. + * + * @param event + * the fired {@link MachineStateEvent} + */ + void onMachineRunning(MachineStateEvent event); + + /** + * Called when machine has been destroyed. + * + * @param event + * the fired {@link MachineStateEvent} + */ + void onMachineDestroyed(MachineStateEvent event); + + } + + /** + * Type class used to register this event. + */ + public static Type TYPE = new Type<>(); - /** Type class used to register this event. */ - public static Type TYPE = new Type<>(); private final MachineDto machine; + private final MachineAction machineAction; /** @@ -34,33 +67,13 @@ public class MachineStateEvent extends GwtEvent { * @param machineAction * the type of action */ - protected MachineStateEvent(MachineDto machine, MachineAction machineAction) { + public MachineStateEvent(MachineDto machine, MachineAction machineAction) { this.machine = machine; this.machineAction = machineAction; } - /** - * Creates a Machine Running event. - * - * @param machine - * running machine - */ - public static MachineStateEvent createMachineRunningEvent(MachineDto machine) { - return new MachineStateEvent(machine, MachineAction.RUNNING); - } - - /** - * Creates a Machine Destroyed event. - * - * @param machine - * destroyed machine - */ - public static MachineStateEvent createMachineDestroyedEvent(MachineDto machine) { - return new MachineStateEvent(machine, MachineAction.DESTROYED); - } - @Override - public Type getAssociatedType() { + public Type getAssociatedType() { return TYPE; } @@ -73,21 +86,27 @@ public String getMachineId() { } @Override - protected void dispatch(MachineStateHandler handler) { + protected void dispatch(MachineStateEvent.Handler handler) { switch (machineAction) { + case CREATING: + handler.onMachineCreating(this); + break; case RUNNING: handler.onMachineRunning(this); break; case DESTROYED: handler.onMachineDestroyed(this); break; - default: - break; } } - /** Set of possible type of machine actions. */ + /** + * Set of possible type of machine actions. + */ public enum MachineAction { - RUNNING, DESTROYED + CREATING, + RUNNING, + DESTROYED } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStatusNotifier.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStatusNotifier.java index 65bf3b8e26e..6e132410396 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStatusNotifier.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/MachineStatusNotifier.java @@ -21,7 +21,6 @@ import org.eclipse.che.ide.api.notification.NotificationManager; import org.eclipse.che.ide.api.notification.StatusNotification; import org.eclipse.che.ide.extension.machine.client.MachineLocalizationConstant; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; import org.eclipse.che.ide.rest.DtoUnmarshallerFactory; import org.eclipse.che.ide.util.loging.Log; import org.eclipse.che.ide.websocket.MessageBus; @@ -124,13 +123,13 @@ protected void onMessageReceived(MachineStatusEvent result) { : locale.notificationMachineIsRunning(machineName); notification.setTitle(message); notification.setStatus(SUCCESS); - eventBus.fireEvent(MachineStateEvent.createMachineRunningEvent(machine)); + eventBus.fireEvent(new MachineStateEvent(machine, MachineStateEvent.MachineAction.RUNNING)); break; case DESTROYED: unsubscribe(wsChannel, this); notification.setStatus(SUCCESS); notification.setTitle(locale.notificationMachineDestroyed(machineName)); - eventBus.fireEvent(MachineStateEvent.createMachineDestroyedEvent(machine)); + eventBus.fireEvent(new MachineStateEvent(machine, MachineStateEvent.MachineAction.DESTROYED)); break; case ERROR: unsubscribe(wsChannel, this); @@ -184,4 +183,5 @@ private void unsubscribe(@NotNull String wsChannel, @NotNull MessageHandler hand interface RunningListener { void onRunning(); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/events/MachineStateHandler.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/events/MachineStateHandler.java deleted file mode 100755 index b5f1a5e1ea6..00000000000 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/machine/events/MachineStateHandler.java +++ /dev/null @@ -1,37 +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.extension.machine.client.machine.events; - -import com.google.gwt.event.shared.EventHandler; - -/** - * A handler for handling {@link MachineStateEvent}. - * - * @author Artem Zatsarynnyi - */ -public interface MachineStateHandler extends EventHandler { - - /** - * Called when machine has been run. - * - * @param event - * the fired {@link MachineStateEvent} - */ - void onMachineRunning(MachineStateEvent event); - - /** - * Called when machine has been destroyed. - * - * @param event - * the fired {@link MachineStateEvent} - */ - void onMachineDestroyed(MachineStateEvent event); -} diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainer.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainer.java index f3241228420..d70737d0dfc 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainer.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainer.java @@ -16,8 +16,7 @@ import org.eclipse.che.ide.extension.machine.client.inject.factories.TerminalFactory; import org.eclipse.che.ide.extension.machine.client.machine.Machine; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.extension.machine.client.perspective.terminal.TerminalPresenter; import org.eclipse.che.ide.extension.machine.client.perspective.widgets.tab.content.TabPresenter; @@ -29,7 +28,7 @@ * * @author Dmitry Shnurenko */ -public class TerminalContainer implements TabPresenter, MachineStateHandler { +public class TerminalContainer implements TabPresenter, MachineStateEvent.Handler { private final TerminalContainerView view; private final TerminalFactory terminalFactory; @@ -87,6 +86,10 @@ public void go(AcceptsOneWidget container) { container.setWidget(view); } + @Override + public void onMachineCreating(MachineStateEvent event) { + } + /** {@inheritDoc} */ @Override public void onMachineRunning(MachineStateEvent event) { @@ -100,4 +103,5 @@ public void onMachineDestroyed(MachineStateEvent event) { terminals.remove(destroyedMachineId); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenter.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenter.java index 318f3e238b9..cf39846e682 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenter.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenter.java @@ -38,8 +38,7 @@ import org.eclipse.che.ide.extension.machine.client.MachineResources; import org.eclipse.che.ide.extension.machine.client.inject.factories.EntityFactory; import org.eclipse.che.ide.extension.machine.client.machine.Machine; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.extension.machine.client.perspective.widgets.machine.appliance.MachineAppliancePresenter; import org.eclipse.che.api.workspace.gwt.client.event.WorkspaceStartedEvent; import org.eclipse.che.api.workspace.gwt.client.event.WorkspaceStartedHandler; @@ -59,7 +58,7 @@ */ @Singleton public class MachinePanelPresenter extends BasePresenter implements MachinePanelView.ActionDelegate, - MachineStateHandler, + MachineStateEvent.Handler, WorkspaceStartedHandler, WorkspaceStoppedHandler, MachineStartingHandler, @@ -271,6 +270,10 @@ public void onMachineStarting(final MachineStartingEvent event) { view.selectNode(existingMachineNodes.get(event.getMachine().getId())); } + @Override + public void onMachineCreating(MachineStateEvent event) { + } + /** {@inheritDoc} */ @Override public void onMachineRunning(final MachineStateEvent event) { diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java index 3bd4f706260..9137f23e1f2 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenter.java @@ -18,7 +18,6 @@ import org.eclipse.che.api.machine.gwt.client.MachineServiceClient; import org.eclipse.che.api.machine.gwt.client.events.DevMachineStateEvent; -import org.eclipse.che.api.machine.gwt.client.events.DevMachineStateHandler; import org.eclipse.che.api.machine.shared.dto.CommandDto; import org.eclipse.che.api.machine.shared.dto.MachineDto; import org.eclipse.che.api.machine.shared.dto.MachineProcessDto; @@ -47,8 +46,7 @@ import org.eclipse.che.ide.extension.machine.client.inject.factories.EntityFactory; import org.eclipse.che.ide.extension.machine.client.inject.factories.TerminalFactory; import org.eclipse.che.ide.extension.machine.client.machine.Machine; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateHandler; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.extension.machine.client.outputspanel.console.CommandConsoleFactory; import org.eclipse.che.ide.extension.machine.client.outputspanel.console.CommandOutputConsole; import org.eclipse.che.ide.extension.machine.client.outputspanel.console.DefaultOutputConsole; @@ -87,7 +85,7 @@ public class ConsolesPanelPresenter extends BasePresenter implements ConsolesPan OutputConsole.ConsoleOutputListener, WorkspaceStartedHandler, WorkspaceStoppedHandler, - MachineStateHandler { + MachineStateEvent.Handler { private static final String DEFAULT_TERMINAL_NAME = "Terminal"; @@ -156,14 +154,14 @@ public ConsolesPanelPresenter(ConsolesPanelView view, this.view.setDelegate(this); this.view.setTitle(localizationConstant.viewConsolesTitle()); - eventBus.addHandler(DevMachineStateEvent.TYPE, new DevMachineStateHandler() { + eventBus.addHandler(DevMachineStateEvent.TYPE, new DevMachineStateEvent.Handler() { @Override - public void onMachineStarted(DevMachineStateEvent event) { + public void onDevMachineStarted(DevMachineStateEvent event) { fetchMachines(); } @Override - public void onMachineDestroyed(DevMachineStateEvent event) { + public void onDevMachineDestroyed(DevMachineStateEvent event) { } }); @@ -214,6 +212,10 @@ public void go(AcceptsOneWidget container) { container.setWidget(view); } + @Override + public void onMachineCreating(MachineStateEvent event) { + } + @Override public void onMachineRunning(MachineStateEvent event) { machineService.getMachine(event.getMachineId()).then(new Operation() { diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsPresenter.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsPresenter.java index 73b6663be78..4c7c1db7cd9 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsPresenter.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsPresenter.java @@ -15,6 +15,7 @@ import com.google.gwt.json.client.JSONParser; import com.google.gwt.user.client.Timer; import com.google.inject.Inject; +import com.google.web.bindery.event.shared.EventBus; import org.eclipse.che.api.core.model.machine.MachineStatus; import org.eclipse.che.api.machine.gwt.client.MachineManager; import org.eclipse.che.api.machine.gwt.client.MachineServiceClient; @@ -36,6 +37,7 @@ import org.eclipse.che.ide.api.notification.StatusNotification; import org.eclipse.che.ide.dto.DtoFactory; import org.eclipse.che.ide.extension.machine.client.MachineLocalizationConstant; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.ui.dialogs.CancelCallback; import org.eclipse.che.ide.ui.dialogs.ConfirmCallback; import org.eclipse.che.ide.ui.dialogs.DialogFactory; @@ -62,11 +64,16 @@ public class TargetsPresenter implements TargetsView.ActionDelegate { private final AppContext appContext; private final MachineServiceClient machineService; private final WorkspaceServiceClient workspaceServiceClient; + private final EventBus eventBus; private final List targets = new ArrayList<>(); private Target selectedTarget; private final List machines = new ArrayList<>(); + private final List architectures = new ArrayList<>(); + + private StatusNotification connectNotification; + @Inject public TargetsPresenter(final TargetsView view, final RecipeServiceClient recipeServiceClient, @@ -77,7 +84,8 @@ public TargetsPresenter(final TargetsView view, final MachineLocalizationConstant machineLocale, final AppContext appContext, final MachineServiceClient machineService, - final WorkspaceServiceClient workspaceServiceClient) { + final WorkspaceServiceClient workspaceServiceClient, + final EventBus eventBus) { this.view = view; this.recipeServiceClient = recipeServiceClient; this.dtoFactory = dtoFactory; @@ -88,8 +96,12 @@ public TargetsPresenter(final TargetsView view, this.appContext = appContext; this.machineService = machineService; this.workspaceServiceClient = workspaceServiceClient; + this.eventBus = eventBus; view.setDelegate(this); + + architectures.add("linux_amd64"); + architectures.add("linux_arm7"); } /** @@ -124,9 +136,9 @@ public void apply(List list) throws OperationException { public void apply(List recipeList) throws OperationException { for (RecipeDescriptor recipe : recipeList) { // Display only "ssh" recipes - if (!"ssh".equalsIgnoreCase(recipe.getType())) { - continue; - } +// if (!"ssh".equalsIgnoreCase(recipe.getType())) { +// continue; +// } Target target = new Target(recipe.getName(), recipe.getType(), recipe); target.setRecipe(recipe); @@ -179,6 +191,10 @@ private boolean isMachineRunning(String machineName) { * target to rectore */ private void restoreTarget(Target target) { + if (target.getRecipe() == null || !target.getRecipe().getType().equalsIgnoreCase("ssh")) { + return; + } + try { JSONObject json = JSONParser.parseStrict(target.getRecipe().getScript()).isObject(); @@ -246,6 +262,8 @@ public void onTargetSelected(Target target) { } else if ("ssh".equalsIgnoreCase(target.getType())) { view.showPropertiesPanel(); view.setTargetName(target.getName()); + + view.setAvailableArchitectures(architectures); view.setArchitecture(target.getArchitecture()); view.setHost(target.getHost()); @@ -486,8 +504,6 @@ public void onConnectClicked() { } } - private StatusNotification connectNotification; - /** * Opens a connection to the selected target. * Starts a machine based on the selected recipe. @@ -515,6 +531,7 @@ private void connect() { machinePromise.then(new Operation() { @Override public void apply(final MachineDto machineDto) throws OperationException { + eventBus.fireEvent(new MachineStateEvent(machineDto, MachineStateEvent.MachineAction.CREATING)); ensureMachineIsStarted(machineDto.getId()); } }); @@ -535,6 +552,7 @@ private void ensureMachineIsStarted(final String machineId) { @Override public void apply(MachineDto machineDto) throws OperationException { if (machineDto.getStatus() == MachineStatus.RUNNING) { + eventBus.fireEvent(new MachineStateEvent(machineDto, MachineStateEvent.MachineAction.RUNNING)); onConnected(); } else { new Timer() { @@ -574,29 +592,31 @@ private void onConnectingFailed() { * Destroys a machine based on the selected recipe. */ private void disconnect() { - if (selectedTarget == null || !selectedTarget.isConnected()) { - return; - } - - String machineId = null; - for (MachineDto machine : machines) { - if (machine.getConfig().getName().equals(selectedTarget.getName()) && - "ssh".equals(machine.getConfig().getType()) && - machine.getStatus() == MachineStatus.RUNNING) { - machineId = machine.getId(); - break; + if (selectedTarget != null && selectedTarget.isConnected()) { + for (MachineDto machine : machines) { + if (machine.getConfig().getName().equals(selectedTarget.getName()) && + "ssh".equals(machine.getConfig().getType()) && + machine.getStatus() == MachineStatus.RUNNING) { + disconnect(machine); + return; + } } } + } - if (machineId == null) { - return; - } - + /** + * Destroys the machine. + * + * @param machine + * machine to destroy + */ + private void disconnect(final MachineDto machine) { view.setConnectButtonText(null); - machineService.destroyMachine(machineId).then(new Operation() { + machineService.destroyMachine(machine.getId()).then(new Operation() { @Override public void apply(Void arg) throws OperationException { + eventBus.fireEvent(new MachineStateEvent(machine, MachineStateEvent.MachineAction.DESTROYED)); notificationManager.notify(machineLocale.targetsViewDisconnectSuccess(selectedTarget.getName()), StatusNotification.Status.SUCCESS, true); updateTargets(selectedTarget.getName()); } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsView.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsView.java index 003d069a41b..eac3664169f 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsView.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsView.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.che.ide.extension.machine.client.targets; -import org.eclipse.che.api.machine.shared.dto.recipe.RecipeDescriptor; import org.eclipse.che.ide.api.mvp.View; import java.util.List; @@ -76,6 +75,14 @@ public interface TargetsView extends View { */ String getTargetName(); + /** + * Sets a list of available architectures. + * + * @param architectures + * list of available architectures + */ + void setAvailableArchitectures(List architectures); + /** * Sets target architecture. * @@ -200,6 +207,7 @@ interface ActionDelegate { // Perform actions when clicking Add target button void onAddTarget(String category); + // Is called when target is deleted void onDeleteTarget(Target target); // Perform actions when selecting a target diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsViewImpl.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsViewImpl.java index 87930824ea1..da252b3a96a 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsViewImpl.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/main/java/org/eclipse/che/ide/extension/machine/client/targets/TargetsViewImpl.java @@ -152,10 +152,6 @@ public void onKeyDown(KeyDownEvent event) { }, KeyDownEvent.getType()); targetsPanel.add(list); - architectureListBox.addItem("linux_amd64"); - architectureListBox.addItem("linux_arm7"); - architectureListBox.setSelectedIndex(0); - architectureListBox.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent changeEvent) { @@ -235,7 +231,6 @@ public void onKeyUp(KeyUpEvent keyUpEvent) { delegate.onPasswordChanged(password.getValue()); } }); - } @Override @@ -243,6 +238,14 @@ public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } + @Override + public void setAvailableArchitectures(List architectures) { + architectureListBox.clear(); + for (String architecture : architectures) { + architectureListBox.addItem(architecture); + } + } + @Override public void clear() { list.clear(); @@ -429,12 +432,7 @@ public String getTargetName() { @Override public void setArchitecture(String architecture) { - for (int i = 0; i < architectureListBox.getItemCount(); i++) { - if (architecture.equals(architectureListBox.getItemText(i))) { - architectureListBox.setSelectedIndex(i); - return; - } - } + architectureListBox.select(architecture); } @Override diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandActionTest.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandActionTest.java index 1f6feabc5d1..f2d02a7896f 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandActionTest.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/ExecuteSelectedCommandActionTest.java @@ -35,7 +35,7 @@ public class ExecuteSelectedCommandActionTest { @Mock private MachineResources resources; @Mock - private SelectCommandComboBoxReady selectCommandAction; + private SelectCommandComboBox selectCommandAction; @Mock private CommandManager commandManager; @Mock @@ -68,4 +68,5 @@ public void actionShouldBePerformed() throws Exception { verify(commandManager).execute(command, machine); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandActionTest.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandActionTest.java index 01700869985..7eee3b4865d 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandActionTest.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/actions/RunCommandActionTest.java @@ -39,7 +39,7 @@ public class RunCommandActionTest { //constructors mocks @Mock - SelectCommandComboBoxReady selectCommandAction; + SelectCommandComboBox selectCommandAction; @Mock private CommandManager commandManager; @Mock @@ -74,4 +74,5 @@ public void actionShouldBePerformed() { verify(commandManager).execute(eq(command)); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProviderTest.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProviderTest.java index 4ed63f51fc4..2f22cdab0a4 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProviderTest.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/command/valueproviders/CurrentProjectPathProviderTest.java @@ -22,7 +22,7 @@ import org.eclipse.che.ide.api.app.CurrentProject; import org.eclipse.che.ide.api.event.project.CloseCurrentProjectEvent; import org.eclipse.che.ide.api.event.project.ProjectReadyEvent; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -118,4 +118,5 @@ public void shouldReturnEmptyValueAfterDestroyingMachine() throws Exception { assertTrue(currentProjectPathProvider.getValue().isEmpty()); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainerTest.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainerTest.java index f555137ea63..11ea4e57f52 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainerTest.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/terminal/container/TerminalContainerTest.java @@ -14,7 +14,7 @@ import org.eclipse.che.ide.extension.machine.client.inject.factories.TerminalFactory; import org.eclipse.che.ide.extension.machine.client.machine.Machine; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.extension.machine.client.perspective.terminal.TerminalPresenter; import org.junit.Test; import org.junit.runner.RunWith; @@ -111,4 +111,5 @@ public void onMachineShouldBeDestroyed() { verify(terminalFactory).create(machineState); } -} \ No newline at end of file + +} diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenterTest.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenterTest.java index 2e3ed20f886..ba913336d57 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenterTest.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/perspective/widgets/machine/panel/MachinePanelPresenterTest.java @@ -34,7 +34,7 @@ import org.eclipse.che.ide.extension.machine.client.inject.factories.EntityFactory; import org.eclipse.che.ide.extension.machine.client.inject.factories.WidgetsFactory; import org.eclipse.che.ide.extension.machine.client.machine.Machine; -import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent; +import org.eclipse.che.ide.extension.machine.client.machine.MachineStateEvent; import org.eclipse.che.ide.extension.machine.client.perspective.widgets.machine.appliance.MachineAppliancePresenter; import org.eclipse.che.ide.ui.dialogs.InputCallback; import org.eclipse.che.api.workspace.gwt.client.event.WorkspaceStartedEvent; @@ -366,4 +366,5 @@ public void shouldShowMachinesWhenMachinesPartIsActive() throws Exception { verify(view).setData(Matchers.anyObject()); verify(view).selectNode(machineNode1); } + } diff --git a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java index 02bb4c06231..fe6e8030af6 100644 --- a/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java +++ b/plugins/plugin-machine/che-plugin-machine-ext-client/src/test/java/org/eclipse/che/ide/extension/machine/client/processes/ConsolesPanelPresenterTest.java @@ -18,7 +18,6 @@ import org.eclipse.che.api.core.model.machine.MachineStatus; import org.eclipse.che.api.machine.gwt.client.MachineServiceClient; import org.eclipse.che.api.machine.gwt.client.events.DevMachineStateEvent; -import org.eclipse.che.api.machine.gwt.client.events.DevMachineStateHandler; import org.eclipse.che.api.machine.shared.dto.CommandDto; import org.eclipse.che.api.machine.shared.dto.MachineConfigDto; import org.eclipse.che.api.machine.shared.dto.MachineDto; @@ -136,7 +135,7 @@ public class ConsolesPanelPresenterTest { @Captor private ArgumentCaptor> machineCaptor; @Captor - private ArgumentCaptor devMachineStateHandlerCaptor; + private ArgumentCaptor devMachineStateHandlerCaptor; @Captor private ArgumentCaptor> errorOperation; @@ -216,8 +215,8 @@ public void shouldFetchMachines() throws Exception { DevMachineStateEvent devMachineStateEvent = mock(DevMachineStateEvent.class); verify(eventBus, times(5)).addHandler(anyObject(), devMachineStateHandlerCaptor.capture()); - DevMachineStateHandler devMachineStateHandler = devMachineStateHandlerCaptor.getAllValues().get(0); - devMachineStateHandler.onMachineStarted(devMachineStateEvent); + DevMachineStateEvent.Handler devMachineStateHandler = devMachineStateHandlerCaptor.getAllValues().get(0); + devMachineStateHandler.onDevMachineStarted(devMachineStateEvent); verify(appContext, times(2)).getWorkspaceId(); verify(machineService, times(2)).getMachines(eq(WORKSPACE_ID));