/******************************************************************************* * 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.resources; import com.google.common.annotations.Beta; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.ide.resource.Path; /** * Represents a file on the client side. * Note, that virtual file instances are created by request, so in this case there can be several instances of virtual file that * corresponds to the same file. * * Virtual file may has link to related {@code ProjectConfig}. * * @author Evgen Vidolob * @author Vlad Zhukovskyi */ public interface VirtualFile { /** * Returns path for the virtual file. Path may in various representation based on implementation. * Usually it something like physical file or folder path, e.g. `/path/to/som/file`. * Path should always be non-null or non-empty. * * @return non-null unique path. * @since 4.4.0 */ Path getLocation(); /** * Returns name for the virtual file. * Name should always be non-null but it may be empty. * * @return non-null name. */ String getName(); /** * Returns display name for the virtual file. * Display name usually uses to display file name in editor tab or other places. * Value should not be a {@code null}. * * @return non-null display name. */ String getDisplayName(); /** * Returns {@code true} in case if virtual file doesn't have ability to be updated. * * @return {@code true} if file is read only, otherwise false. */ boolean isReadOnly(); /** * Returns url string where file content may be fetched. Some file type can't represent their content as string. * So virtual file provide url where it content. For example if this virtual file represent image, * image viewer may use this URL as src for {@link com.google.gwt.user.client.ui.Image}. * * @return url or null if content url doesn't exists. */ String getContentUrl(); /** * Get content of the file. Promise object should not be a null value. * If implementation doesn't have ability to load string content of the current file, * then preferable to throw {@code UnsupportedOperationException} in promise. * * @return {@code Promise} with string representation of file content. */ Promise<String> getContent(); /** * Update content of the file. Some implementations may not support updating their content, * so in this case preferable to throw {@code UnsupportedOperationException} in promise. * * @param content * new content of the file * @return {@code Promise} with success operation if content has been updated. */ Promise<Void> updateContent(String content); }