use of org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl in project che by eclipse.
the class WorkspaceManager method startWorkspace.
/**
* Asynchronously starts certain workspace with specified environment and account.
*
* @param workspaceId
* identifier of workspace which should be started
* @param envName
* name of environment or null, when default environment should be used
* @param restore
* if <code>true</code> workspace will be restored from snapshot if snapshot exists,
* otherwise (if snapshot does not exist) workspace will be started from default source.
* If <code>false</code> workspace will be started from default source,
* even if auto-restore is enabled and snapshot exists.
* If <code>null</code> workspace will be restored from snapshot
* only if workspace has `auto-restore` attribute set to <code>true</code>,
* or system wide parameter `auto-restore` is enabled and snapshot exists.
* <p>
* This parameter has the highest priority to define if it is needed to restore from snapshot or not.
* If it is not defined workspace `auto-restore` attribute will be checked, then if last is not defined
* system wide `auto-restore` parameter will be checked.
* @return starting workspace
* @throws NullPointerException
* when {@code workspaceId} is null
* @throws NotFoundException
* when workspace with given {@code workspaceId} doesn't exist
* @throws ServerException
* when any other error occurs during workspace start
*/
public WorkspaceImpl startWorkspace(String workspaceId, @Nullable String envName, @Nullable Boolean restore) throws NotFoundException, ServerException, ConflictException {
requireNonNull(workspaceId, "Required non-null workspace id");
final WorkspaceImpl workspace = workspaceDao.get(workspaceId);
final String restoreAttr = workspace.getAttributes().get(AUTO_RESTORE_FROM_SNAPSHOT);
final boolean autoRestore = restoreAttr == null ? defaultAutoRestore : parseBoolean(restoreAttr);
startAsync(workspace, envName, firstNonNull(restore, autoRestore) && !getSnapshot(workspaceId).isEmpty());
runtimes.injectRuntime(workspace);
addExtraAttributes(workspace);
return workspace;
}
use of org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl in project che by eclipse.
the class WorkspaceManager method updateWorkspace.
/**
* Updates an existing workspace with a new configuration.
*
* <p>Replace strategy is used for workspace update, it means
* that existing workspace data will be replaced with given {@code update}.
*
* @param update
* workspace update
* @return updated instance of the workspace
* @throws NullPointerException
* when either {@code workspaceId} or {@code update} is null
* @throws NotFoundException
* when workspace with given id doesn't exist
* @throws ConflictException
* when any conflict occurs (e.g Workspace with such name already exists in {@code namespace})
* @throws ServerException
* when any other error occurs
*/
public WorkspaceImpl updateWorkspace(String id, Workspace update) throws ConflictException, ServerException, NotFoundException {
requireNonNull(id, "Required non-null workspace id");
requireNonNull(update, "Required non-null workspace update");
WorkspaceImpl workspace = workspaceDao.get(id);
workspace.setConfig(new WorkspaceConfigImpl(update.getConfig()));
update.getAttributes().put(UPDATED_ATTRIBUTE_NAME, Long.toString(currentTimeMillis()));
workspace.setAttributes(update.getAttributes());
workspace.setTemporary(update.isTemporary());
WorkspaceImpl updated = workspaceDao.update(workspace);
runtimes.injectRuntime(updated);
return updated;
}
use of org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl in project che by eclipse.
the class WorkspaceManager method createWorkspace.
/**
* Creates a new {@link Workspace} instance based on
* the given configuration and the instance attributes.
*
* @param config
* the workspace config to create the new workspace instance
* @param namespace
* workspace name is unique in this namespace
* @param attributes
* workspace instance attributes
* @return new workspace instance
* @throws NullPointerException
* when either {@code config} or {@code owner} is null
* @throws NotFoundException
* when account with given id was not found
* @throws ConflictException
* when any conflict occurs (e.g Workspace with such name already exists for {@code owner})
* @throws ServerException
* when any other error occurs
*/
public WorkspaceImpl createWorkspace(WorkspaceConfig config, String namespace, Map<String, String> attributes) throws ServerException, NotFoundException, ConflictException {
requireNonNull(config, "Required non-null config");
requireNonNull(namespace, "Required non-null namespace");
requireNonNull(attributes, "Required non-null attributes");
WorkspaceImpl workspace = doCreateWorkspace(config, accountManager.getByName(namespace), attributes, false);
workspace.setStatus(WorkspaceStatus.STOPPED);
return workspace;
}
use of org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl in project che by eclipse.
the class WorkspaceService method updateCommand.
@PUT
@Path("/{id}/command/{name}")
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@ApiOperation(value = "Update the workspace command by replacing the command with a new one", notes = "This operation can be performed only by the workspace owner")
@ApiResponses({ @ApiResponse(code = 200, message = "The command successfully updated"), @ApiResponse(code = 400, message = "Missed required parameters, parameters are not valid"), @ApiResponse(code = 403, message = "The user does not have access to update the workspace"), @ApiResponse(code = 404, message = "The workspace or the command not found"), @ApiResponse(code = 409, message = "The Command with such name already exists"), @ApiResponse(code = 500, message = "Internal server error occurred") })
public WorkspaceDto updateCommand(@ApiParam("The workspace id") @PathParam("id") String id, @ApiParam("The name of the command") @PathParam("name") String cmdName, @ApiParam(value = "The command update", required = true) CommandDto update) throws ServerException, BadRequestException, NotFoundException, ConflictException, ForbiddenException {
requiredNotNull(update, "Command update");
final WorkspaceImpl workspace = workspaceManager.getWorkspace(id);
final List<CommandImpl> commands = workspace.getConfig().getCommands();
if (!commands.removeIf(cmd -> cmd.getName().equals(cmdName))) {
throw new NotFoundException(format("Workspace '%s' doesn't contain command '%s'", id, cmdName));
}
commands.add(new CommandImpl(update));
validator.validateConfig(workspace.getConfig());
return linksInjector.injectLinks(asDto(workspaceManager.updateWorkspace(workspace.getId(), workspace)), getServiceContext());
}
use of org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl in project che by eclipse.
the class WorkspaceService method addProject.
@POST
@Path("/{id}/project")
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@ApiOperation(value = "Adds a new project to the workspace", notes = "This operation can be performed only by the workspace owner")
@ApiResponses({ @ApiResponse(code = 200, message = "The project successfully added to the workspace"), @ApiResponse(code = 400, message = "Missed required parameters, parameters are not valid"), @ApiResponse(code = 403, message = "The user does not have access to add the project"), @ApiResponse(code = 404, message = "The workspace not found"), @ApiResponse(code = 409, message = "Any conflict error occurs"), @ApiResponse(code = 500, message = "Internal server error occurred") })
public WorkspaceDto addProject(@ApiParam("The workspace id") @PathParam("id") String id, @ApiParam(value = "The new project", required = true) ProjectConfigDto newProject) throws ServerException, BadRequestException, NotFoundException, ConflictException, ForbiddenException {
requiredNotNull(newProject, "New project config");
final WorkspaceImpl workspace = workspaceManager.getWorkspace(id);
workspace.getConfig().getProjects().add(new ProjectConfigImpl(newProject));
validator.validateConfig(workspace.getConfig());
return linksInjector.injectLinks(asDto(workspaceManager.updateWorkspace(id, workspace)), getServiceContext());
}
Aggregations