package com.rectang.xsm.io; import java.io.*; import com.rectang.xsm.site.Site; public abstract class PublishedFile { protected String file; private Site site; public PublishedFile( Site site, String fileName ) { this.site = site; setFile( fileName ); } protected void setFile( String fileName ) { if ( fileName.charAt( 0 ) != File.separatorChar ) { fileName = File.separatorChar + fileName; } file = site.getRootDir() + fileName; } /** * This is the only reference to the underlying file, as there is no use in getting it's path etc, as * it may be remote to us. * @return The underlying files name */ public String getFileName() { return (new File( file )).getName(); } public Site getSite() { return site; } public abstract OutputStream getOutputStream() throws IOException; public abstract String toString(); public abstract boolean exists(); public abstract boolean isDirectory(); public abstract long length(); // FIXME do we ever need to recurively make dirs - surely we only ever need 1? public abstract boolean mkparentdirs(); public abstract boolean mkdir(); // public abstract File[] listFiles(); public abstract boolean delete(); public abstract boolean rename( String newName ); // public abstract long getModifiedTime(); /** as uploadFile(f, true); */ public abstract void uploadFile( File f ); public abstract void uploadFile( File f, boolean delete ); public void moveFile( File file ) { file.renameTo( new File( this.file ) ); } }