/******************************************************************************* * Copyright (c) 2012-2017 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.api.project; import org.eclipse.che.api.project.shared.dto.ItemReference; import org.eclipse.che.api.project.shared.dto.SourceEstimation; import org.eclipse.che.api.project.shared.dto.TreeElement; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.workspace.shared.dto.NewProjectConfigDto; import org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto; import org.eclipse.che.api.workspace.shared.dto.SourceStorageDto; import org.eclipse.che.ide.resource.Path; import java.util.List; import java.util.Map; /** * Serves the connections with the server side project service. * <p/> * By design this service is laid on the lowest business level which is operating only with data transfer objects (DTO). * This interface is not intended to implementing by the third party components or using it directly. * * @author Vitaly Parfonov * @author Artem Zatsarynnyi * @author Vlad Zhukovskyi */ public interface ProjectServiceClient { /** * Returns the projects list. If there is no projects were found on server, empty list is returned. * * @return {@link Promise} with list of project configuration * @see ProjectConfigDto * @since 4.4.0 */ Promise<List<ProjectConfigDto>> getProjects(); /** * Returns the specific project by given {@code path}. Path to project should be an absolute. * * @param path * path to project * @return {@link Promise} with project configuration * @see ProjectConfigDto * @see Path * @since 4.4.0 */ Promise<ProjectConfigDto> getProject(Path path); /** * Creates the file by given {@code path} with given {@code content}. Content may be an empty. * * @param path * path to the future file * @param content * the file content * @return {@link Promise} with the {@link ItemReference} * @see ItemReference * @see Path * @since 4.4.0 */ Promise<ItemReference> createFile(Path path, String content); /** * Creates the folder by given {@code path}. * * @param path * path to the future folder * @return {@link Promise} with the {@link ItemReference} * @see ItemReference * @see Path * @since 4.4.0 */ Promise<ItemReference> createFolder(Path path); /** * Creates the project with given {@code configuration}. * * @param configuration * the project configuration * @param options * additional parameters that need for project generation * @return {@link Promise} with the {@link ProjectConfigDto} * @see ProjectConfigDto * @since 4.4.0 */ Promise<ProjectConfigDto> createProject(ProjectConfigDto configuration, Map<String, String> options); /** * Create batch of projects according to their configurations. * <p/> * Notes: a project will be created by importing when project configuration contains {@link SourceStorageDto} * object, otherwise this one will be created corresponding its {@link NewProjectConfigDto}: * <li> - {@link NewProjectConfigDto} object contains only one mandatory {@link NewProjectConfigDto#setPath(String)} field. * In this case Project will be created as project of "blank" type </li> * <li> - a project will be created as project of "blank" type when declared primary project type is not registered, </li> * <li> - a project will be created without mixin project type when declared mixin project type is not registered</li> * <li> - for creating a project by generator {@link NewProjectConfigDto#getOptions()} should be specified.</li> * * @param configurations * the list of configurations to creating projects * @return {@link Promise} with the list of {@link ProjectConfigDto} * @see ProjectConfigDto */ Promise<List<ProjectConfigDto>> createBatchProjects(List<NewProjectConfigDto> configurations); /** * Returns the item description by given {@code path}. * * @param path * path to the item * @return {@link Promise} with the {@link ItemReference} * @see Path * @see ItemReference * @since 4.4.0 */ Promise<ItemReference> getItem(Path path); /** * Estimates the given {@code path} to be applied to specified {@code pType} (project type). * * @param path * path to the folder * @param pType * project type to estimate * @return {@link Promise} with the {@link SourceEstimation} * @see Path * @see SourceEstimation * @since 4.4.0 */ Promise<SourceEstimation> estimate(Path path, String pType); /** * Updates the project with the new {@code configuration} or creates the new one from existed folder on server side. * * @param configuration * configuration which which be applied to the existed project * @return {@link Promise} with the applied {@link ProjectConfigDto} * @see ProjectConfigDto * @since 4.4.0 */ Promise<ProjectConfigDto> updateProject(ProjectConfigDto configuration); /** * Reads the file content by given {@code path}. * * @param path * path to the file * @return {@link Promise} with file content * @see Path * @since 4.4.0 */ Promise<String> getFileContent(Path path); /** * Writes the file {@code content} by given {@code path}. * * @param path * path to the file * @param content * the file content * @return {@link Promise} with empty response * @see Path * @since 4.4.0 */ Promise<Void> setFileContent(Path path, String content); /** * Removes the item by given {@code path} from the server. * * @param path * path to the item * @return {@link Promise} with empty response * @see Path * @since 4.4.0 */ Promise<Void> deleteItem(Path path); /** * Copies the {@code source} item to given {@code target} with {@code newName}. * * @param source * the source path to be copied * @param target * the target path, should be a container (project or folder) * @param newName * the new name of the copied item * @param overwrite * overwrite target is such has already exists * @return {@link Promise} with empty response * @see Path * @since 4.4.0 */ Promise<Void> copy(Path source, Path target, String newName, boolean overwrite); /** * Moves the {@code source} item to given {@code target} with {@code newName}. * * @param source * the source path to be moved * @param target * the target path, should be a container (project or folder) * @param newName * the new name of the moved item * @param overwrite * overwrite target is such has already exists * @return {@link Promise} with empty response * @see Path * @since 4.4.0 */ Promise<Void> move(Path source, Path target, String newName, boolean overwrite); /** * Imports the new project by given {@code source} configuration. * * @param path * path to the future project * @param source * source configuration * @return a promise that will resolve when the project has been imported, or rejects with an error * @see Path * @see SourceStorageDto * @since 4.4.0 */ Promise<Void> importProject(Path path, SourceStorageDto source); /** * Reads the project tree starting from {@code path} with given {@code depth}. * * @param path * the start point path where read should start * @param depth * the depth to read, e.g. -1, 0 or less than {@link Integer#MAX_VALUE} * @param includeFiles * include files into response * @return {@link Promise} with tree response * @see Path * @see TreeElement * @since 4.4.0 */ Promise<TreeElement> getTree(Path path, int depth, boolean includeFiles); /** * Searches an item(s) with the specified criteria given by {@code expression}. * * @param expression * search query expression * @return {@link Promise} with the list of found items * @see QueryExpression * @see ItemReference * @since 4.4.0 */ Promise<List<ItemReference>> search(QueryExpression expression); /** * Gets list of {@link SourceEstimation} for all supposed project types. * * @param path * path of the project to resolve * @return {@link Promise} with the list of resolved estimations * @see Path * @see SourceEstimation * @since 4.4.0 */ Promise<List<SourceEstimation>> resolveSources(Path path); }