use of org.eclipse.che.api.core.NotFoundException in project che by eclipse.
the class ProjectManager method moveTo.
/**
* Moves item to the new path
*
* @param itemPath path to the item
* @param newParentPath path of new parent
* @param newName new item's name
* @param overwrite whether existed (if any) item should be overwritten
*
* @return new item
* @throws ServerException
* @throws NotFoundException
* @throws ConflictException
* @throws ForbiddenException
*/
public VirtualFileEntry moveTo(String itemPath, String newParentPath, String newName, boolean overwrite) throws ServerException, NotFoundException, ConflictException, ForbiddenException {
final VirtualFile oldItem = vfs.getRoot().getChild(Path.of(itemPath));
if (oldItem == null) {
throw new NotFoundException("Item not found " + itemPath);
}
final VirtualFile newParent;
if (newParentPath == null) {
// rename only
newParent = oldItem.getParent();
} else {
newParent = vfs.getRoot().getChild(Path.of(newParentPath));
}
if (newParent == null) {
throw new NotFoundException("New parent not found " + newParentPath);
}
// TODO lock token ?
final VirtualFile newItem = oldItem.moveTo(newParent, newName, overwrite, null);
final RegisteredProject owner = projectRegistry.getParentProject(newItem.getPath().toString());
if (owner == null) {
throw new NotFoundException("Parent project not found " + newItem.getPath().toString());
}
final VirtualFileEntry move;
if (newItem.isFile()) {
move = new FileEntry(newItem, projectRegistry);
} else {
move = new FolderEntry(newItem, projectRegistry);
}
if (move.isProject()) {
final RegisteredProject project = projectRegistry.getProject(itemPath);
NewProjectConfig projectConfig = new NewProjectConfigImpl(newItem.getPath().toString(), project.getType(), project.getMixins(), newName, project.getDescription(), project.getAttributes(), null, project.getSource());
if (move instanceof FolderEntry) {
projectRegistry.removeProjects(project.getPath());
updateProject(projectConfig);
}
}
return move;
}
use of org.eclipse.che.api.core.NotFoundException in project che by eclipse.
the class ProjectManager method doImportProject.
/** Note: Use {@link FileWatcherManager#suspend()} and {@link FileWatcherManager#resume()} while importing source code */
private RegisteredProject doImportProject(String path, SourceStorage sourceStorage, boolean rewrite, LineConsumerFactory lineConsumerFactory) throws ServerException, IOException, ForbiddenException, UnauthorizedException, ConflictException, NotFoundException {
final ProjectImporter importer = importers.getImporter(sourceStorage.getType());
if (importer == null) {
throw new NotFoundException(format("Unable import sources project from '%s'. Sources type '%s' is not supported.", sourceStorage.getLocation(), sourceStorage.getType()));
}
String normalizePath = (path.startsWith("/")) ? path : "/".concat(path);
FolderEntry folder = asFolder(normalizePath);
if (folder != null && !rewrite) {
throw new ConflictException(format("Project %s already exists ", path));
}
if (folder == null) {
folder = getProjectsRoot().createFolder(normalizePath);
}
try {
importer.importSources(folder, sourceStorage, lineConsumerFactory);
} catch (final Exception e) {
folder.remove();
throw e;
}
final String name = folder.getPath().getName();
for (ProjectConfig project : workspaceProjectsHolder.getProjects()) {
if (normalizePath.equals(project.getPath())) {
// TODO Needed for factory project importing with keepDir. It needs to find more appropriate solution
List<String> innerProjects = projectRegistry.getProjects(normalizePath);
for (String innerProject : innerProjects) {
RegisteredProject registeredProject = projectRegistry.getProject(innerProject);
projectRegistry.putProject(registeredProject, asFolder(registeredProject.getPath()), true, false);
}
RegisteredProject rp = projectRegistry.putProject(project, folder, true, false);
workspaceProjectsHolder.sync(projectRegistry);
return rp;
}
}
RegisteredProject rp = projectRegistry.putProject(new NewProjectConfigImpl(normalizePath, name, BaseProjectType.ID, sourceStorage), folder, true, false);
workspaceProjectsHolder.sync(projectRegistry);
return rp;
}
use of org.eclipse.che.api.core.NotFoundException in project che by eclipse.
the class ProjectManager method copyTo.
/**
* Copies item to new path with
*
* @param itemPath path to item to copy
* @param newParentPath path where the item should be copied to
* @param newName new item name
* @param overwrite whether existed (if any) item should be overwritten
*
* @return new item
* @throws ServerException
* @throws NotFoundException
* @throws ConflictException
* @throws ForbiddenException
*/
public VirtualFileEntry copyTo(String itemPath, String newParentPath, String newName, boolean overwrite) throws ServerException, NotFoundException, ConflictException, ForbiddenException {
VirtualFile oldItem = vfs.getRoot().getChild(Path.of(itemPath));
if (oldItem == null) {
throw new NotFoundException("Item not found " + itemPath);
}
VirtualFile newParent = vfs.getRoot().getChild(Path.of(newParentPath));
if (newParent == null) {
throw new NotFoundException("New parent not found " + newParentPath);
}
final VirtualFile newItem = oldItem.copyTo(newParent, newName, overwrite);
final RegisteredProject owner = projectRegistry.getParentProject(newItem.getPath().toString());
if (owner == null) {
throw new NotFoundException("Parent project not found " + newItem.getPath().toString());
}
final VirtualFileEntry copy;
if (newItem.isFile()) {
copy = new FileEntry(newItem, projectRegistry);
} else {
copy = new FolderEntry(newItem, projectRegistry);
}
if (copy.isProject()) {
projectRegistry.getProject(copy.getProject()).getTypes();
// fire event
}
return copy;
}
use of org.eclipse.che.api.core.NotFoundException in project che by eclipse.
the class MachineProviderImpl method startService.
@Override
public Instance startService(String namespace, String workspaceId, String envName, String machineName, boolean isDev, String networkName, CheServiceImpl service, LineConsumer machineLogger) throws ServerException {
// copy to not affect/be affected by changes in origin
service = new CheServiceImpl(service);
ProgressLineFormatterImpl progressLineFormatter = new ProgressLineFormatterImpl();
ProgressMonitor progressMonitor = currentProgressStatus -> {
try {
machineLogger.writeLine(progressLineFormatter.format(currentProgressStatus));
} catch (IOException e) {
LOG.error(e.getLocalizedMessage(), e);
}
};
String container = null;
try {
String image = prepareImage(machineName, service, progressMonitor);
container = createContainer(workspaceId, machineName, isDev, image, networkName, service);
connectContainerToAdditionalNetworks(container, service);
docker.startContainer(StartContainerParams.create(container));
readContainerLogsInSeparateThread(container, workspaceId, service.getId(), machineLogger);
DockerNode node = dockerMachineFactory.createNode(workspaceId, container);
dockerInstanceStopDetector.startDetection(container, service.getId(), workspaceId);
final String userId = EnvironmentContext.getCurrent().getSubject().getUserId();
MachineImpl machine = new MachineImpl(MachineConfigImpl.builder().setDev(isDev).setName(machineName).setType("docker").setLimits(new MachineLimitsImpl((int) Size.parseSizeToMegabytes(service.getMemLimit() + "b"))).setSource(new MachineSourceImpl(service.getBuild() != null ? "context" : "image").setLocation(service.getBuild() != null ? service.getBuild().getContext() : service.getImage())).build(), service.getId(), workspaceId, envName, userId, MachineStatus.RUNNING, null);
return dockerMachineFactory.createInstance(machine, container, image, node, machineLogger);
} catch (SourceNotFoundException e) {
throw e;
} catch (RuntimeException | ServerException | NotFoundException | IOException e) {
cleanUpContainer(container);
throw new ServerException(e.getLocalizedMessage(), e);
}
}
use of org.eclipse.che.api.core.NotFoundException in project che by eclipse.
the class DockerAbandonedResourcesCleaner method cleanContainers.
/**
* Cleans up CHE docker containers which don't tracked by API any more.
*/
@VisibleForTesting
void cleanContainers() {
List<String> activeContainers = new ArrayList<>();
try {
for (ContainerListEntry container : dockerConnector.listContainers()) {
String containerName = container.getNames()[0];
Optional<ContainerNameInfo> optional = nameGenerator.parse(containerName);
if (optional.isPresent()) {
try {
// container is orphaned if not found exception is thrown
environmentEngine.getMachine(optional.get().getWorkspaceId(), optional.get().getMachineId());
activeContainers.add(containerName);
} catch (NotFoundException e) {
cleanUpContainer(container);
} catch (Exception e) {
LOG.error(format("Failed to check activity for container with name '%s'. Cause: %s", containerName, e.getLocalizedMessage()), e);
}
}
}
} catch (IOException e) {
LOG.error("Failed to get list docker containers", e);
} catch (Exception e) {
LOG.error("Failed to clean up inactive containers", e);
}
LOG.info("List containers registered in the api: " + activeContainers);
}
Aggregations