Search in sources :

Example 46 with ServerException

use of org.eclipse.che.api.core.ServerException in project che by eclipse.

the class ProjectManager method createBatchProjects.

/**
     * Create batch of projects according to their configurations.
     * <p/>
     * Notes: - a project will be created by importing when project configuration contains {@link SourceStorage} object,
     * otherwise this one will be created corresponding its {@link NewProjectConfig}:
     * <li> - {@link NewProjectConfig} object contains only one mandatory {@link NewProjectConfig#setPath(String)} field.
     * In this case Project will be created as project of {@link BaseProjectType} type </li>
     * <li> - a project will be created as project of {@link BaseProjectType} type with {@link Problem#code} = 12
     * when declared primary project type is not registered, </li>
     * <li> - a project will be created with {@link Problem#code} = 12 and without mixin project type
     * when declared mixin project type is not registered</li>
     * <li> - for creating a project by generator {@link NewProjectConfig#getOptions()} should be specified.</li>
     *
     * @param projectConfigList
     *         the list of configurations to create projects
     * @param rewrite
     *         whether rewrite or not (throw exception otherwise) if such a project exists
     * @return the list of new projects
     * @throws BadRequestException
     *         when {@link NewProjectConfig} object not contains mandatory {@link NewProjectConfig#setPath(String)} field.
     * @throws ConflictException
     *         when the same path project exists and {@code rewrite} is {@code false}
     * @throws ForbiddenException
     *         when trying to overwrite the project and this one contains at least one locked file
     * @throws NotFoundException
     *         when parent folder does not exist
     * @throws UnauthorizedException
     *         if user isn't authorized to access to location at importing source code
     * @throws ServerException
     *         if other error occurs
     */
public List<RegisteredProject> createBatchProjects(List<? extends NewProjectConfig> projectConfigList, boolean rewrite, ProjectOutputLineConsumerFactory lineConsumerFactory) throws BadRequestException, ConflictException, ForbiddenException, NotFoundException, ServerException, UnauthorizedException, IOException {
    fileWatcherManager.suspend();
    try {
        final List<RegisteredProject> projects = new ArrayList<>(projectConfigList.size());
        validateProjectConfigurations(projectConfigList, rewrite);
        final List<NewProjectConfig> sortedConfigList = projectConfigList.stream().sorted((config1, config2) -> config1.getPath().compareTo(config2.getPath())).collect(Collectors.toList());
        for (NewProjectConfig projectConfig : sortedConfigList) {
            RegisteredProject registeredProject;
            final String pathToProject = projectConfig.getPath();
            //creating project(by config or by importing source code)
            try {
                final SourceStorage sourceStorage = projectConfig.getSource();
                if (sourceStorage != null && !isNullOrEmpty(sourceStorage.getLocation())) {
                    doImportProject(pathToProject, sourceStorage, rewrite, lineConsumerFactory.setProjectName(projectConfig.getPath()));
                } else if (!isVirtualFileExist(pathToProject)) {
                    registeredProject = doCreateProject(projectConfig, projectConfig.getOptions());
                    projects.add(registeredProject);
                    continue;
                }
            } catch (Exception e) {
                if (!isVirtualFileExist(pathToProject)) {
                    //project folder is absent
                    rollbackCreatingBatchProjects(projects);
                    throw e;
                }
            }
            //update project
            if (isVirtualFileExist(pathToProject)) {
                try {
                    registeredProject = updateProject(projectConfig);
                } catch (Exception e) {
                    registeredProject = projectRegistry.putProject(projectConfig, asFolder(pathToProject), true, false);
                    final Problem problem = new Problem(NOT_UPDATED_PROJECT, "The project is not updated, caused by " + e.getLocalizedMessage());
                    registeredProject.getProblems().add(problem);
                }
            } else {
                registeredProject = projectRegistry.putProject(projectConfig, null, true, false);
            }
            projects.add(registeredProject);
        }
        return projects;
    } finally {
        fileWatcherManager.resume();
    }
}
Also used : LineConsumerFactory(org.eclipse.che.api.core.util.LineConsumerFactory) VirtualFileSystemProvider(org.eclipse.che.api.vfs.VirtualFileSystemProvider) Path(org.eclipse.che.api.vfs.Path) LoggerFactory(org.slf4j.LoggerFactory) ProjectTypeRegistry(org.eclipse.che.api.project.server.type.ProjectTypeRegistry) FileWatcherNotificationHandler(org.eclipse.che.api.vfs.impl.file.FileWatcherNotificationHandler) ProjectHandlerRegistry(org.eclipse.che.api.project.server.handlers.ProjectHandlerRegistry) PreDestroy(javax.annotation.PreDestroy) FileWatcherManager(org.eclipse.che.api.vfs.watcher.FileWatcherManager) CreateProjectHandler(org.eclipse.che.api.project.server.handlers.CreateProjectHandler) Map(java.util.Map) PathMatcher(java.nio.file.PathMatcher) LoggingUncaughtExceptionHandler(org.eclipse.che.commons.lang.concurrent.LoggingUncaughtExceptionHandler) UnauthorizedException(org.eclipse.che.api.core.UnauthorizedException) NOT_UPDATED_PROJECT(org.eclipse.che.api.core.ErrorCodes.NOT_UPDATED_PROJECT) SourceStorage(org.eclipse.che.api.core.model.project.SourceStorage) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) String.format(java.lang.String.format) List(java.util.List) BadRequestException(org.eclipse.che.api.core.BadRequestException) ProjectConfig(org.eclipse.che.api.core.model.project.ProjectConfig) ThreadFactoryBuilder(com.google.common.util.concurrent.ThreadFactoryBuilder) ProjectTypeResolution(org.eclipse.che.api.project.server.type.ProjectTypeResolution) BaseProjectType(org.eclipse.che.api.project.server.type.BaseProjectType) Strings.isNullOrEmpty(com.google.common.base.Strings.isNullOrEmpty) ProjectImporterRegistry(org.eclipse.che.api.project.server.importer.ProjectImporterRegistry) HashMap(java.util.HashMap) Singleton(javax.inject.Singleton) ArrayList(java.util.ArrayList) FileTreeWatcher(org.eclipse.che.api.vfs.impl.file.FileTreeWatcher) Inject(javax.inject.Inject) AttributeValue(org.eclipse.che.api.project.server.type.AttributeValue) VirtualFile(org.eclipse.che.api.vfs.VirtualFile) Searcher(org.eclipse.che.api.vfs.search.Searcher) FileWatcherEventType(org.eclipse.che.api.project.shared.dto.event.FileWatcherEventType) ConflictException(org.eclipse.che.api.core.ConflictException) SearcherProvider(org.eclipse.che.api.vfs.search.SearcherProvider) ProjectTypeDef(org.eclipse.che.api.project.server.type.ProjectTypeDef) VirtualFileSystem(org.eclipse.che.api.vfs.VirtualFileSystem) ExecutorService(java.util.concurrent.ExecutorService) Logger(org.slf4j.Logger) ProjectImporter(org.eclipse.che.api.project.server.importer.ProjectImporter) IOException(java.io.IOException) NotFoundException(org.eclipse.che.api.core.NotFoundException) ProjectType(org.eclipse.che.api.core.model.project.type.ProjectType) ServerException(org.eclipse.che.api.core.ServerException) Problem(org.eclipse.che.api.project.server.RegisteredProject.Problem) ForbiddenException(org.eclipse.che.api.core.ForbiddenException) NewProjectConfig(org.eclipse.che.api.core.model.project.NewProjectConfig) FileWatcherNotificationListener(org.eclipse.che.api.vfs.impl.file.FileWatcherNotificationListener) SourceStorage(org.eclipse.che.api.core.model.project.SourceStorage) ArrayList(java.util.ArrayList) Problem(org.eclipse.che.api.project.server.RegisteredProject.Problem) NewProjectConfig(org.eclipse.che.api.core.model.project.NewProjectConfig) UnauthorizedException(org.eclipse.che.api.core.UnauthorizedException) BadRequestException(org.eclipse.che.api.core.BadRequestException) ConflictException(org.eclipse.che.api.core.ConflictException) IOException(java.io.IOException) NotFoundException(org.eclipse.che.api.core.NotFoundException) ServerException(org.eclipse.che.api.core.ServerException) ForbiddenException(org.eclipse.che.api.core.ForbiddenException)

Example 47 with ServerException

use of org.eclipse.che.api.core.ServerException in project che by eclipse.

the class ProjectService method uploadFile.

/* --------------------------------------------------------------------------- */
/* TODO check "upload" methods below, they were copied from old VFS as is      */
/* --------------------------------------------------------------------------- */
private static Response uploadFile(VirtualFile parent, Iterator<FileItem> formData) throws ForbiddenException, ConflictException, ServerException {
    try {
        FileItem contentItem = null;
        String name = null;
        boolean overwrite = false;
        while (formData.hasNext()) {
            FileItem item = formData.next();
            if (!item.isFormField()) {
                if (contentItem == null) {
                    contentItem = item;
                } else {
                    throw new ServerException("More then one upload file is found but only one should be. ");
                }
            } else if ("name".equals(item.getFieldName())) {
                name = item.getString().trim();
            } else if ("overwrite".equals(item.getFieldName())) {
                overwrite = Boolean.parseBoolean(item.getString().trim());
            }
        }
        if (contentItem == null) {
            throw new ServerException("Cannot find file for upload. ");
        }
        if (name == null || name.isEmpty()) {
            name = contentItem.getName();
        }
        try {
            try {
                parent.createFile(name, contentItem.getInputStream());
            } catch (ConflictException e) {
                if (!overwrite) {
                    throw new ConflictException("Unable upload file. Item with the same name exists. ");
                }
                parent.getChild(org.eclipse.che.api.vfs.Path.of(name)).updateContent(contentItem.getInputStream(), null);
            }
        } catch (IOException ioe) {
            throw new ServerException(ioe.getMessage(), ioe);
        }
        return Response.ok("", MediaType.TEXT_HTML).build();
    } catch (ForbiddenException | ConflictException | ServerException e) {
        HtmlErrorFormatter.sendErrorAsHTML(e);
        // never thrown
        throw e;
    }
}
Also used : FileItem(org.apache.commons.fileupload.FileItem) ForbiddenException(org.eclipse.che.api.core.ForbiddenException) ServerException(org.eclipse.che.api.core.ServerException) ConflictException(org.eclipse.che.api.core.ConflictException) IOException(java.io.IOException)

Example 48 with ServerException

use of org.eclipse.che.api.core.ServerException in project che by eclipse.

the class ComposerProjectGenerator method onCreateProject.

@Override
public void onCreateProject(Path projectPath, Map<String, AttributeValue> attributes, Map<String, String> options) throws ForbiddenException, ConflictException, ServerException {
    AttributeValue packageName = attributes.get(Constants.PACKAGE);
    if (packageName == null) {
        throw new ServerException("Missed some required options (package)");
    }
    VirtualFileSystem vfs = virtualFileSystemProvider.getVirtualFileSystem();
    String projectAbsolutePath = new File(vfs.getRoot().toIoFile(), projectPath.toString()).toString();
    String[] commandLine = { "composer", "create-project", packageName.getString(), projectAbsolutePath, "--no-install" };
    try {
        ComposerCommandExecutor.execute(commandLine, null);
    } catch (TimeoutException | IOException | InterruptedException e) {
        throw new ServerException(e);
    }
}
Also used : AttributeValue(org.eclipse.che.api.project.server.type.AttributeValue) ServerException(org.eclipse.che.api.core.ServerException) VirtualFileSystem(org.eclipse.che.api.vfs.VirtualFileSystem) IOException(java.io.IOException) File(java.io.File) TimeoutException(java.util.concurrent.TimeoutException)

Example 49 with ServerException

use of org.eclipse.che.api.core.ServerException in project che by eclipse.

the class LocalVirtualFileTest method getFileTreeAsList.

private List<VirtualFile> getFileTreeAsList(VirtualFile rootOfTree) throws Exception {
    List<VirtualFile> list = newArrayList();
    rootOfTree.accept(new VirtualFileVisitor() {

        @Override
        public void visit(VirtualFile virtualFile) throws ServerException {
            list.add(virtualFile);
            if (virtualFile.isFolder()) {
                for (VirtualFile child : virtualFile.getChildren()) {
                    child.accept(this);
                }
            }
        }
    });
    return list;
}
Also used : VirtualFile(org.eclipse.che.api.vfs.VirtualFile) ServerException(org.eclipse.che.api.core.ServerException) VirtualFileVisitor(org.eclipse.che.api.vfs.VirtualFileVisitor)

Example 50 with ServerException

use of org.eclipse.che.api.core.ServerException in project che by eclipse.

the class MemoryVirtualFileTest method getFileTreeAsList.

private List<VirtualFile> getFileTreeAsList(VirtualFile rootOfTree) throws Exception {
    List<VirtualFile> list = newArrayList();
    rootOfTree.accept(new VirtualFileVisitor() {

        @Override
        public void visit(VirtualFile virtualFile) throws ServerException {
            list.add(virtualFile);
            if (virtualFile.isFolder()) {
                for (VirtualFile child : virtualFile.getChildren()) {
                    child.accept(this);
                }
            }
        }
    });
    return list;
}
Also used : VirtualFile(org.eclipse.che.api.vfs.VirtualFile) ServerException(org.eclipse.che.api.core.ServerException) VirtualFileVisitor(org.eclipse.che.api.vfs.VirtualFileVisitor)

Aggregations

ServerException (org.eclipse.che.api.core.ServerException)143 IOException (java.io.IOException)51 ForbiddenException (org.eclipse.che.api.core.ForbiddenException)37 NotFoundException (org.eclipse.che.api.core.NotFoundException)37 ConflictException (org.eclipse.che.api.core.ConflictException)32 File (java.io.File)22 Test (org.testng.annotations.Test)20 ArrayList (java.util.ArrayList)19 VirtualFile (org.eclipse.che.api.vfs.VirtualFile)19 List (java.util.List)15 WorkspaceImpl (org.eclipse.che.api.workspace.server.model.impl.WorkspaceImpl)15 Map (java.util.Map)13 Transactional (com.google.inject.persist.Transactional)12 BadRequestException (org.eclipse.che.api.core.BadRequestException)12 InputStream (java.io.InputStream)11 Unlocker (org.eclipse.che.commons.lang.concurrent.Unlocker)10 String.format (java.lang.String.format)9 Path (javax.ws.rs.Path)9 Produces (javax.ws.rs.Produces)9 HashMap (java.util.HashMap)8