/******************************************************************************* * 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.api.workspace.server; import org.eclipse.che.api.core.model.machine.Command; import org.eclipse.che.api.core.model.machine.Snapshot; import org.eclipse.che.api.core.model.project.ProjectConfig; import org.eclipse.che.api.core.model.project.SourceStorage; import org.eclipse.che.api.core.model.workspace.Environment; import org.eclipse.che.api.core.model.workspace.ExtendedMachine; import org.eclipse.che.api.core.model.workspace.ServerConf2; import org.eclipse.che.api.core.model.workspace.Workspace; import org.eclipse.che.api.core.model.workspace.WorkspaceConfig; import org.eclipse.che.api.core.model.workspace.WorkspaceRuntime; import org.eclipse.che.api.machine.shared.dto.CommandDto; import org.eclipse.che.api.machine.shared.dto.SnapshotDto; import org.eclipse.che.api.workspace.server.model.impl.stack.StackImpl; import org.eclipse.che.api.workspace.shared.dto.EnvironmentDto; import org.eclipse.che.api.workspace.shared.dto.EnvironmentRecipeDto; import org.eclipse.che.api.workspace.shared.dto.ExtendedMachineDto; import org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto; import org.eclipse.che.api.workspace.shared.dto.ServerConf2Dto; import org.eclipse.che.api.workspace.shared.dto.SourceStorageDto; import org.eclipse.che.api.workspace.shared.dto.WorkspaceConfigDto; import org.eclipse.che.api.workspace.shared.dto.WorkspaceDto; import org.eclipse.che.api.workspace.shared.dto.WorkspaceRuntimeDto; import org.eclipse.che.api.workspace.shared.dto.stack.StackComponentDto; import org.eclipse.che.api.workspace.shared.dto.stack.StackDto; import org.eclipse.che.api.workspace.shared.dto.stack.StackSourceDto; import org.eclipse.che.api.workspace.shared.stack.Stack; import org.eclipse.che.api.workspace.shared.stack.StackSource; import java.util.List; import java.util.Map; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toMap; import static org.eclipse.che.dto.server.DtoFactory.newDto; /** * Helps to convert to/from DTOs related to workspace. * * @author Yevhenii Voevodin */ public final class DtoConverter { /** Converts {@link Workspace} to {@link WorkspaceDto}. */ public static WorkspaceDto asDto(Workspace workspace) { return newDto(WorkspaceDto.class).withId(workspace.getId()) .withStatus(workspace.getStatus()) .withNamespace(workspace.getNamespace()) .withTemporary(workspace.isTemporary()) .withAttributes(workspace.getAttributes()) .withConfig(asDto(workspace.getConfig())) .withRuntime(asDto(workspace.getRuntime())); } /** Converts {@link WorkspaceConfig} to {@link WorkspaceConfigDto}. */ public static WorkspaceConfigDto asDto(WorkspaceConfig workspace) { List<CommandDto> commands = workspace.getCommands() .stream() .map(DtoConverter::asDto) .collect(toList()); List<ProjectConfigDto> projects = workspace.getProjects() .stream() .map(DtoConverter::asDto) .collect(toList()); Map<String, EnvironmentDto> environments = workspace.getEnvironments() .entrySet() .stream() .collect(toMap(Map.Entry::getKey, entry -> asDto(entry.getValue()))); return newDto(WorkspaceConfigDto.class).withName(workspace.getName()) .withDefaultEnv(workspace.getDefaultEnv()) .withCommands(commands) .withProjects(projects) .withEnvironments(environments) .withDescription(workspace.getDescription()); } /** Converts {@link Command} to {@link CommandDto}. */ public static CommandDto asDto(Command command) { return newDto(CommandDto.class).withName(command.getName()) .withCommandLine(command.getCommandLine()) .withType(command.getType()) .withAttributes(command.getAttributes()); } /** Convert {@link StackImpl} to {@link StackDto}. */ public static StackDto asDto(Stack stack) { WorkspaceConfigDto workspaceConfigDto = null; if (stack.getWorkspaceConfig() != null) { workspaceConfigDto = asDto(stack.getWorkspaceConfig()); } StackSourceDto stackSourceDto = null; StackSource source = stack.getSource(); if (source != null) { stackSourceDto = newDto(StackSourceDto.class).withType(source.getType()).withOrigin(source.getOrigin()); } List<StackComponentDto> componentsDto = null; if (stack.getComponents() != null) { componentsDto = stack.getComponents() .stream() .map(component -> newDto(StackComponentDto.class).withName(component.getName()) .withVersion(component.getVersion())) .collect(toList()); } return newDto(StackDto.class).withId(stack.getId()) .withName(stack.getName()) .withDescription(stack.getDescription()) .withCreator(stack.getCreator()) .withScope(stack.getScope()) .withTags(stack.getTags()) .withComponents(componentsDto) .withWorkspaceConfig(workspaceConfigDto) .withSource(stackSourceDto); } /** Converts {@link ProjectConfig} to {@link ProjectConfigDto}. */ public static ProjectConfigDto asDto(ProjectConfig projectCfg) { final ProjectConfigDto projectConfigDto = newDto(ProjectConfigDto.class).withName(projectCfg.getName()) .withDescription(projectCfg.getDescription()) .withPath(projectCfg.getPath()) .withType(projectCfg.getType()) .withAttributes(projectCfg.getAttributes()) .withMixins(projectCfg.getMixins()); final SourceStorage source = projectCfg.getSource(); if (source != null) { projectConfigDto.withSource(newDto(SourceStorageDto.class).withLocation(source.getLocation()) .withType(source.getType()) .withParameters(source.getParameters())); } return projectConfigDto; } /** Converts {@link Environment} to {@link EnvironmentDto}. */ public static EnvironmentDto asDto(Environment env) { final EnvironmentDto envDto = newDto(EnvironmentDto.class); if (env.getMachines() != null) { envDto.withMachines(env.getMachines() .entrySet() .stream() .collect(toMap(Map.Entry::getKey, entry -> asDto(entry.getValue())))); } if (env.getRecipe() != null) { envDto.withRecipe(newDto(EnvironmentRecipeDto.class).withType(env.getRecipe().getType()) .withContentType(env.getRecipe().getContentType()) .withLocation(env.getRecipe().getLocation()) .withContent(env.getRecipe().getContent())); } return envDto; } /** Converts {@link ExtendedMachine} to {@link ExtendedMachineDto}. */ public static ExtendedMachineDto asDto(ExtendedMachine machine) { ExtendedMachineDto machineDto = newDto(ExtendedMachineDto.class).withAgents(machine.getAgents()); if (machine.getServers() != null) { machineDto.setServers(machine.getServers() .entrySet() .stream() .collect(toMap(Map.Entry::getKey, entry -> asDto(entry.getValue())))); } if (machine.getAttributes() != null) { machineDto.setAttributes(machine.getAttributes()); } return machineDto; } /** Converts {@link ServerConf2} to {@link ServerConf2Dto}. */ public static ServerConf2Dto asDto(ServerConf2 serverConf) { return newDto(ServerConf2Dto.class).withPort(serverConf.getPort()) .withProtocol(serverConf.getProtocol()) .withProperties(serverConf.getProperties()); } /** Converts {@link WorkspaceRuntime} to {@link WorkspaceRuntimeDto}. */ public static WorkspaceRuntimeDto asDto(WorkspaceRuntime runtime) { if (runtime == null) { return null; } final WorkspaceRuntimeDto runtimeDto = newDto(WorkspaceRuntimeDto.class).withActiveEnv(runtime.getActiveEnv()) .withRootFolder(runtime.getRootFolder()); runtimeDto.withMachines(runtime.getMachines() .stream() .map(org.eclipse.che.api.machine.server.DtoConverter::asDto) .collect(toList())); if (runtime.getDevMachine() != null) { runtimeDto.withDevMachine(org.eclipse.che.api.machine.server.DtoConverter.asDto(runtime.getDevMachine())); } return runtimeDto; } /** Converts {@link Snapshot} to {@link SnapshotDto}. */ public static SnapshotDto asDto(Snapshot snapshot) { return newDto(SnapshotDto.class).withId(snapshot.getId()) .withCreationDate(snapshot.getCreationDate()) .withDescription(snapshot.getDescription()) .withDev(snapshot.isDev()) .withType(snapshot.getType()) .withWorkspaceId(snapshot.getWorkspaceId()) .withEnvName(snapshot.getEnvName()) .withMachineName(snapshot.getMachineName()); } private DtoConverter() {} }