/*******************************************************************************
* 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;
/**
* Files are leaf resources which contain data. The contents of a file resource is stored as a file in the local file system.
* <p/>
* File extends also {@link VirtualFile}, so this resource can be easily opened in editor.
* <p/>
* File instance can be obtained by calling {@link Container#getFile(Path)} or by {@link Container#getChildren(boolean)}.
* <p/>
* Note. This interface is not intended to be implemented by clients.
*
* @author Vlad Zhukovskyi
* @see VirtualFile
* @see Container#getFile(Path)
* @since 4.4.0
*/
@Beta
public interface File extends Resource, VirtualFile, ModificationTracker {
/** @see VirtualFile#getDisplayName() */
@Override
String getDisplayName();
/** @see VirtualFile#isReadOnly() */
@Override
boolean isReadOnly();
/** @see VirtualFile#getContentUrl() */
@Override
String getContentUrl();
/** @see VirtualFile#getContent() */
@Override
Promise<String> getContent();
/** @see VirtualFile#updateContent(String) */
@Override
Promise<Void> updateContent(String content);
/**
* Returns the file extension portion of this resource's name or {@code null} if it does not have one.
*
* @return a string file extension or {@code null}
* @see #getName()
* @since 4.4.0
*/
String getExtension();
/**
* Returns the name without the extension. If file name contains '.' the substring till the last '.' is
* returned. Otherwise the same value as {@link #getName()} method returns is returned.
*
* @return the name without extension
* @see #getExtension()
* @see #getName()
* @since 4.4.0
*/
String getNameWithoutExtension();
}