/******************************************************************************* * Copyright (c) 2012-2016 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.ide.ext.java; import org.eclipse.che.api.core.ConflictException; import org.eclipse.che.api.core.ForbiddenException; import org.eclipse.che.api.core.NotFoundException; import org.eclipse.che.api.core.ServerException; import org.eclipse.che.api.core.model.workspace.ProjectConfig; import org.eclipse.che.api.core.notification.EventService; import org.eclipse.che.api.project.server.FolderEntry; import org.eclipse.che.api.project.server.InvalidValueException; import org.eclipse.che.api.project.server.Project; import org.eclipse.che.api.project.server.ProjectManager; import org.eclipse.che.api.project.server.ProjectMisc; import org.eclipse.che.api.project.server.ProjectTypeConstraintException; import org.eclipse.che.api.project.server.ValueStorageException; import org.eclipse.che.api.project.server.VirtualFileEntry; import org.eclipse.che.api.project.server.handlers.ProjectHandlerRegistry; import org.eclipse.che.api.project.server.type.AttributeValue; import org.eclipse.che.api.project.server.type.ProjectTypeRegistry; import org.eclipse.che.api.project.shared.dto.SourceEstimation; import org.eclipse.che.api.vfs.server.SystemPathsFilter; import org.eclipse.che.api.vfs.server.VirtualFileSystemRegistry; import org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto; import org.eclipse.che.commons.env.EnvironmentContext; import org.eclipse.che.commons.user.UserImpl; import org.eclipse.che.vfs.impl.fs.LocalFSMountStrategy; import org.eclipse.che.vfs.impl.fs.LocalFileSystemProvider; import org.eclipse.core.runtime.Path; import javax.validation.constraints.NotNull; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; /** * Dummy implementation of ProjectManager used for tests * * @author Evgen Vidolob * @author Dmitry Shnurenko */ public class DummyProjectManager implements ProjectManager { final String vfsUser = "dev"; final Set<String> vfsUserGroups = new LinkedHashSet<>(Arrays.asList("workspace/developer")); private final LocalFileSystemProvider localFileSystemProvider; public DummyProjectManager(String workspacePath, EventService eventService) { EnvironmentContext context = new EnvironmentContext(); context.setUser(new UserImpl(vfsUser, "", "", vfsUserGroups, false)); EnvironmentContext.setCurrent(context); localFileSystemProvider = new LocalFileSystemProvider("", new LocalFSMountStrategy() { @Override public File getMountPath(String workspaceId) throws ServerException { return new File(workspacePath); } @Override public File getMountPath() throws ServerException { return new File(workspacePath); } }, eventService, null, SystemPathsFilter.ANY, null); } @Override public List<Project> getProjects(String workspace) throws ServerException, NotFoundException, ForbiddenException { final FolderEntry myRoot = getProjectsRoot(workspace); final List<Project> projects = new ArrayList<>(); for (FolderEntry folder : myRoot.getChildFolders()) { final Project project = getProject(workspace, folder.getPath()); if (project != null) { projects.add(project); } } return projects; } @Override public Project getProject(String workspace, String projectPath) throws ForbiddenException, ServerException, NotFoundException { final FolderEntry myRoot = getProjectsRoot(workspace); final VirtualFileEntry child = myRoot.getChild(projectPath.startsWith("/") ? projectPath.substring(1) : projectPath); if (child != null && child.isFolder() && isProjectFolder((FolderEntry)child)) { return new Project((FolderEntry)child, this); } return null; } @Override public ProjectConfigDto getProjectFromWorkspace(@NotNull String wsId, @NotNull String projectPath) throws ServerException { throw new UnsupportedOperationException("The method unsupported in this mode."); } @Override public List<ProjectConfigDto> getAllProjectsFromWorkspace(@NotNull String workspaceId) throws ServerException { throw new UnsupportedOperationException("The method unsupported in this mode."); } @Override public Project createProject(String workspace, String name, ProjectConfig projectConfig, Map<String, String> options) throws ConflictException, ForbiddenException, ServerException, ProjectTypeConstraintException, NotFoundException { final FolderEntry myRoot = getProjectsRoot(workspace); final FolderEntry projectFolder = myRoot.createFolder(name); final Project project = new Project(projectFolder, this); return project; } @Override public Project updateProject(String workspace, String path, ProjectConfig newConfig) throws ForbiddenException, ServerException, NotFoundException, ConflictException, IOException { throw new UnsupportedOperationException(); } @Override public FolderEntry getProjectsRoot(String workspace) throws ServerException, NotFoundException { return new FolderEntry(workspace, localFileSystemProvider.getMountPoint(true).getRoot()); } @Override public ProjectConfig getProjectConfig(Project project) throws ServerException, ProjectTypeConstraintException, ValueStorageException { throw new UnsupportedOperationException(); } @Override public void updateProjectConfig(Project project, ProjectConfig config) throws ServerException, ValueStorageException, ProjectTypeConstraintException, InvalidValueException { throw new UnsupportedOperationException(); } @Override public ProjectMisc getProjectMisc(Project project) throws ServerException { throw new UnsupportedOperationException(); } @Override public void saveProjectMisc(Project project, ProjectMisc misc) throws ServerException { throw new UnsupportedOperationException(); } @Override public List<ProjectConfig> getProjectModules(Project project) throws ServerException, ForbiddenException, ConflictException, IOException, NotFoundException { return Collections.emptyList(); } @Override public VirtualFileSystemRegistry getVirtualFileSystemRegistry() { throw new UnsupportedOperationException(); } @Override public ProjectTypeRegistry getProjectTypeRegistry() { throw new UnsupportedOperationException(); } @Override public ProjectHandlerRegistry getHandlers() { throw new UnsupportedOperationException(); } @Override public Map<String, AttributeValue> estimateProject(String workspace, String path, String projectTypeId) throws ValueStorageException, ServerException, ForbiddenException, NotFoundException, ProjectTypeConstraintException { throw new UnsupportedOperationException(); } @Override public ProjectConfigDto addModule(String workspace, String modulePath, ProjectConfigDto moduleConfig, Map<String, String> options) throws ConflictException, ForbiddenException, ServerException, NotFoundException { throw new UnsupportedOperationException(); } @Override public List<SourceEstimation> resolveSources(String workspace, String path, boolean transientOnly) throws ServerException, ForbiddenException, NotFoundException, ValueStorageException, ProjectTypeConstraintException { throw new UnsupportedOperationException(); } @Override public Project convertFolderToProject(String workspace, String path, ProjectConfig projectConfig) throws ConflictException, ForbiddenException, ServerException, NotFoundException { throw new UnsupportedOperationException(); } @Override public VirtualFileEntry rename(String workspace, String path, String newName, String newMediaType) throws ForbiddenException, ServerException, ConflictException, NotFoundException { throw new UnsupportedOperationException(); } @Override public void delete(String workspace, String path) throws ServerException, ForbiddenException, NotFoundException, ConflictException { deleteEntry(workspace, path); } private void deleteEntry(String workspace, String deleteEntryPath) throws ServerException, NotFoundException, ForbiddenException { final FolderEntry root = getProjectsRoot(workspace); final VirtualFileEntry entry = root.getChild(deleteEntryPath); entry.remove(); } @Override public void deleteModule(String workspaceId, String pathToParent, String pathToModule) throws ServerException, NotFoundException, ForbiddenException, ConflictException { deleteEntry(workspaceId, pathToModule); } @Override public boolean isProjectFolder(FolderEntry folder) throws ServerException { return new Path(folder.getPath()).segmentCount() == 1; } @Override public boolean isModuleFolder(FolderEntry folder) throws ServerException { return false; } }