Search in sources :

Example 6 with SourceStorage

use of org.eclipse.che.api.core.model.project.SourceStorage in project che by eclipse.

the class ProjectManagerWriteTest method registerImporter.

private void registerImporter(String importType, InputStream zip) throws Exception {
    final ValueHolder<FolderEntry> folderHolder = new ValueHolder<>();
    importerRegistry.register(new ProjectImporter() {

        @Override
        public String getId() {
            return importType;
        }

        @Override
        public boolean isInternal() {
            return false;
        }

        @Override
        public String getDescription() {
            return "importer";
        }

        @Override
        public void importSources(FolderEntry baseFolder, SourceStorage storage) throws ConflictException, ServerException, ForbiddenException {
            importSources(baseFolder, storage, LineConsumerFactory.NULL);
        }

        @Override
        public void importSources(FolderEntry baseFolder, SourceStorage storage, LineConsumerFactory importOutputConsumerFactory) throws ConflictException, ServerException, ForbiddenException {
            // Don't really use location in this test.
            baseFolder.getVirtualFile().unzip(zip, true, 0);
            folderHolder.set(baseFolder);
        }

        @Override
        public ImporterCategory getCategory() {
            return ProjectImporter.ImporterCategory.ARCHIVE;
        }
    });
}
Also used : SourceStorage(org.eclipse.che.api.core.model.project.SourceStorage) ForbiddenException(org.eclipse.che.api.core.ForbiddenException) ServerException(org.eclipse.che.api.core.ServerException) ConflictException(org.eclipse.che.api.core.ConflictException) LineConsumerFactory(org.eclipse.che.api.core.util.LineConsumerFactory) ValueHolder(org.eclipse.che.api.core.util.ValueHolder) ProjectImporter(org.eclipse.che.api.project.server.importer.ProjectImporter)

Example 7 with SourceStorage

use of org.eclipse.che.api.core.model.project.SourceStorage in project che by eclipse.

the class ProjectManagerWriteTest method testImportProject.

@Test
public void testImportProject() throws Exception {
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    String fileContent = "to be or not to be";
    ZipOutputStream zipOut = new ZipOutputStream(bout);
    zipOut.putNextEntry(new ZipEntry("folder1/"));
    zipOut.putNextEntry(new ZipEntry("folder1/file1.txt"));
    zipOut.putNextEntry(new ZipEntry("file1"));
    zipOut.write(fileContent.getBytes());
    zipOut.close();
    final InputStream zip = new ByteArrayInputStream(bout.toByteArray());
    final String importType = "_123_";
    registerImporter(importType, zip);
    SourceStorage sourceConfig = DtoFactory.newDto(SourceStorageDto.class).withType(importType);
    pm.importProject("/testImportProject", sourceConfig, false, () -> new ProjectImportOutputWSLineConsumer("BATCH", "ws", 300));
    RegisteredProject project = projectRegistry.getProject("/testImportProject");
    assertNotNull(project);
    // BASE
    //System.out.println(">>> "+project.getProjectType());
    assertNotNull(project.getBaseFolder().getChild("file1"));
    assertEquals(fileContent, project.getBaseFolder().getChild("file1").getVirtualFile().getContentAsString());
}
Also used : SourceStorage(org.eclipse.che.api.core.model.project.SourceStorage) SourceStorageDto(org.eclipse.che.api.workspace.shared.dto.SourceStorageDto) ByteArrayInputStream(java.io.ByteArrayInputStream) ZipOutputStream(java.util.zip.ZipOutputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) InputStream(java.io.InputStream) ZipEntry(java.util.zip.ZipEntry) ByteArrayOutputStream(java.io.ByteArrayOutputStream) ProjectImportOutputWSLineConsumer(org.eclipse.che.api.project.server.importer.ProjectImportOutputWSLineConsumer) Test(org.junit.Test)

Example 8 with SourceStorage

use of org.eclipse.che.api.core.model.project.SourceStorage in project che by eclipse.

the class ProjectManagerWriteTest method testRemoveFolderForSourcesWhenImportingProjectIsFailed.

@Test
public void testRemoveFolderForSourcesWhenImportingProjectIsFailed() throws Exception {
    final String projectPath = "/testImportProject";
    final String importType = "_123_";
    registerImporter(importType, null);
    SourceStorage sourceConfig = DtoFactory.newDto(SourceStorageDto.class).withType(importType);
    try {
        pm.importProject(projectPath, sourceConfig, false, () -> new ProjectImportOutputWSLineConsumer("testImportProject", "ws", 300));
    } catch (Exception e) {
    }
    boolean projectFolderExist = vfsProvider.getVirtualFileSystem().getRoot().hasChild(Path.of(projectPath));
    assertFalse(projectFolderExist);
}
Also used : SourceStorage(org.eclipse.che.api.core.model.project.SourceStorage) SourceStorageDto(org.eclipse.che.api.workspace.shared.dto.SourceStorageDto) ProjectImportOutputWSLineConsumer(org.eclipse.che.api.project.server.importer.ProjectImportOutputWSLineConsumer) ConflictException(org.eclipse.che.api.core.ConflictException) IOException(java.io.IOException) NotFoundException(org.eclipse.che.api.core.NotFoundException) BadRequestException(org.eclipse.che.api.core.BadRequestException) ServerException(org.eclipse.che.api.core.ServerException) ForbiddenException(org.eclipse.che.api.core.ForbiddenException) Test(org.junit.Test)

Example 9 with SourceStorage

use of org.eclipse.che.api.core.model.project.SourceStorage in project che by eclipse.

the class ProjectManagerWriteTest method testImportProjectWithoutImporterFailed.

@Test
public void testImportProjectWithoutImporterFailed() throws Exception {
    SourceStorage sourceConfig = DtoFactory.newDto(SourceStorageDto.class).withType("nothing");
    try {
        pm.importProject("/testImportProject", sourceConfig, false, () -> new ProjectImportOutputWSLineConsumer("testImportProject", "ws", 300));
        fail("NotFoundException: Unable import sources project from 'null'. Sources type 'nothing' is not supported.");
    } catch (NotFoundException e) {
    }
}
Also used : SourceStorage(org.eclipse.che.api.core.model.project.SourceStorage) SourceStorageDto(org.eclipse.che.api.workspace.shared.dto.SourceStorageDto) NotFoundException(org.eclipse.che.api.core.NotFoundException) ProjectImportOutputWSLineConsumer(org.eclipse.che.api.project.server.importer.ProjectImportOutputWSLineConsumer) Test(org.junit.Test)

Example 10 with SourceStorage

use of org.eclipse.che.api.core.model.project.SourceStorage 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)

Aggregations

SourceStorage (org.eclipse.che.api.core.model.project.SourceStorage)12 SourceStorageDto (org.eclipse.che.api.workspace.shared.dto.SourceStorageDto)7 ConflictException (org.eclipse.che.api.core.ConflictException)4 ForbiddenException (org.eclipse.che.api.core.ForbiddenException)4 ServerException (org.eclipse.che.api.core.ServerException)4 NotFoundException (org.eclipse.che.api.core.NotFoundException)3 NewProjectConfig (org.eclipse.che.api.core.model.project.NewProjectConfig)3 LineConsumerFactory (org.eclipse.che.api.core.util.LineConsumerFactory)3 ProjectImportOutputWSLineConsumer (org.eclipse.che.api.project.server.importer.ProjectImportOutputWSLineConsumer)3 ProjectImporter (org.eclipse.che.api.project.server.importer.ProjectImporter)3 Function (org.eclipse.che.api.promises.client.Function)3 FunctionException (org.eclipse.che.api.promises.client.FunctionException)3 Promise (org.eclipse.che.api.promises.client.Promise)3 NewProjectConfigDto (org.eclipse.che.api.workspace.shared.dto.NewProjectConfigDto)3 ProjectConfigDto (org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto)3 Project (org.eclipse.che.ide.api.resources.Project)3 Test (org.junit.Test)3 Optional (com.google.common.base.Optional)2 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2