/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.das2.util.filesystem;

import java.io.IOException;
import java.io.OutputStream;

/**
 * The FileObject can be written.
 * @author jbf
 */
public interface WriteCapability {
    
    /**
     * Get the output stream.  The client who has requested the stream must close the stream.
     * @return
     * @throws IOException
     */
    public OutputStream getOutputStream( ) throws IOException;

    /**
     * Test to see if we can write to this file.  This should not
     * create a file, only getOutputStream should do this.  
     * TODO: someday we'll want a locking mechanism.
     * @return true if the file can be created.
     */
    public boolean canWrite();

    /**
     * delete the file
     * @return true if the file was deleted.
     * @throws IOException
     */
    public boolean delete() throws IOException;
    
    /**
     * push the changes to the remote server.  For local files,
     * this does nothing, unless it is a local git repository.
     * @param message message to document the commit.
     * @return true if the commit was successful, false if not.
     * @throws IOException 
     */
    public boolean commit(String message) throws IOException;
}