content: package alien4cloud.component.repository;
  
  import java.io.InputStream;
  import java.nio.file.Path;
  
  /**
   * A contract for an internal file system. It enables store file and retrieve file.
   * 
   * @author mkv
   * 
   */
  public interface IFileRepository {
  
      /**
       * Store a file in an arbitrary file system and get the UID of the saved file. After the data stream has been consumed, the stream will not be closed, it's
       * the caller responsibility to do it.
       * 
       * @param data the data to save
       * @return the UID of the saved file
       */
      String storeFile(InputStream data);
  
      /**
       * Check if a file exists for the given UID.
       * 
       * @param id UID of the file to check
       * @return true if file exist, false otherwise
       */
      boolean isFileExist(String id);
  
      /**
       * Delete a file with given UID
       * 
       * @param id the UID of the file to delete
       */
      boolean deleteFile(String id);
  
      /**
       * Store/update a file in an arbitrary file system with the given UID. After the data stream has been consumed, the stream will not be
       * closed, it's the caller responsibility to do it.
       * 
       * @param data the data to save
       * @return the UID of the saved file
       */
      void storeFile(String id, InputStream data);
  
      /**
       * Retrieve the content of the file with given id from the file repository. It's the caller's responsibility to close the stream.
       * 
       * @param id the UID of the file to retrieve
       * @return an {@link InputStream} which contain the file data
       */
      InputStream getFile(String id);
  
      /**
       * Retrieve the path to access a given file based on it's id.
       * 
       * @param id The id of the file to retrieve.
       * @return a path to the file.
       */
      Path resolveFile(String id);
  
      /**
       * Retrieve the lenght of the content of the file with given id from the file repository.
       *
       * @param id the UID of the file for which to get length
       * @return the length of the file.
       */
      long getFileLength(String id);
  }
  