/******************************************************************************* * Copyright (c) 2012-2017 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.command.manager; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.api.machine.shared.dto.CommandDto; import org.eclipse.che.api.promises.client.Function; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.workspace.shared.dto.WorkspaceDto; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.api.command.CommandImpl; import org.eclipse.che.ide.api.command.CommandManager; import org.eclipse.che.ide.api.command.CommandType; import org.eclipse.che.ide.api.workspace.WorkspaceServiceClient; import org.eclipse.che.ide.dto.DtoFactory; import java.util.List; import static java.util.stream.Collectors.toList; /** Responsible for managing the commands which are stored with workspace. */ @Singleton class WorkspaceCommandManagerDelegate { private final DtoFactory dtoFactory; private final WorkspaceServiceClient workspaceServiceClient; private final AppContext appContext; @Inject WorkspaceCommandManagerDelegate(DtoFactory dtoFactory, WorkspaceServiceClient workspaceServiceClient, AppContext appContext) { this.dtoFactory = dtoFactory; this.workspaceServiceClient = workspaceServiceClient; this.appContext = appContext; } /** Returns commands which are stored in the workspace with the specified {@code workspaceId}. */ Promise<List<CommandImpl>> getCommands(String workspaceId) { return workspaceServiceClient.getCommands(workspaceId) .then((Function<List<CommandDto>, List<CommandImpl>>)commands -> commands.stream() .map(CommandImpl::new) .collect(toList())); } /** * Creates new command of the specified type. * <p><b>Note</b> that command's name will be generated by {@link CommandManager} * and command line will be provided by an appropriate {@link CommandType}. */ Promise<CommandImpl> createCommand(final CommandImpl command) { final CommandDto commandDto = dtoFactory.createDto(CommandDto.class) .withName(command.getName()) .withCommandLine(command.getCommandLine()) .withType(command.getType()) .withAttributes(command.getAttributes()); return workspaceServiceClient.addCommand(appContext.getWorkspaceId(), commandDto) .then((Function<WorkspaceDto, CommandImpl>)arg -> command); } /** * Updates the command with the specified {@code name} by replacing it with the given {@code command}. * <p><b>Note</b> that name of the updated command may differ from the name provided by the given {@code command} * in order to prevent name duplication. */ Promise<CommandImpl> updateCommand(final CommandImpl command) { final CommandDto commandDto = dtoFactory.createDto(CommandDto.class) .withName(command.getName()) .withCommandLine(command.getCommandLine()) .withType(command.getType()) .withAttributes(command.getAttributes()); return workspaceServiceClient.updateCommand(appContext.getWorkspaceId(), command.getName(), commandDto) .then((Function<WorkspaceDto, CommandImpl>)arg -> command); } /** Removes the command with the specified {@code commandName}. */ Promise<Void> removeCommand(String commandName) { return workspaceServiceClient.deleteCommand(appContext.getWorkspaceId(), commandName) .then((Function<WorkspaceDto, Void>)arg -> null); } }