Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package divconq.io.stream;
  
  
  import java.nio.file.Path;
 
 
 public class FileDestStream extends BaseStream implements IStreamDest {
 	protected FileSystemFile file = null;
 	protected FileChannel out = null;
 	protected boolean userelpath = false;
 	protected String relpath = "";
 
 	public FileDestStream(FileSystemFile file) {
 		this. = file;
 	}
 
 	public FileDestStream withRelative(boolean v) {
 		this. = v;
 		return this;
 	}
 	
 	// for use with dcScript
 	public void init(StackEntry stackXElement elboolean autorelative) {
 		if (autorelative || stack.boolFromElement(el"Relative"false) || el.getName().startsWith("X")) {
         	this. = true;
         }
 
         Struct src = stack.refFromElement(el"RelativeTo");
         
         if ((src != null) && !(src instanceof NullStruct)) {
             if (src instanceof IFileStoreDriver
             	this. = "";
             else if (src instanceof IFileStoreFile)
             	this. = ((IFileStoreFile)src).getPath();
             else 
             	this. = src.toString();
             
         	this. = true;
         }
 	}
 	
 	public void close() {
 		//System.out.println("File DEST killed");	// TODO
 		
 		if (this. != null)
 			try {
 				this..close();
 			} 
 			catch (IOException x) {
 			}
 		
 		this. = null;
 		this. = null;
 		
 		super.close();
 	}
 	
 	// make sure we don't return without first releasing the file reference content
 	public HandleReturn handle(TaskRun cbStreamMessage msg) {
 		if (msg == .) {
 			cb.complete();
 			return .;
 		}
 		
 		if (this..isFolder())
 			return this.handleLocalFolder(cbmsg);
 		
 		return this.handleLocalFile(cbmsg);
 	}
 	
 		ByteBuf data = msg.getPayload();
 		
 		if (msg.isFolder()) {
 			if (data != null)
 				data.release();
 			
 			cb.kill("Folder cannot be stored into a file");
 			return .;
 		}
 		
 		if (this. == null)
			try {
				Path dpath = this..localPath();
				this. = FileChannel.open(dpath
			catch (IOException x) {
				if (data != null)
					data.release();
				cb.kill("Problem opening destination file: " + x);
			}
		if (data != null) {
			for (ByteBuffer buff : data.nioBuffers()) {
				try {
					this..write(buff);
				catch (IOException x) {
					data.release();
					cb.kill("Problem writing destination file: " + x);
				}
			}
			data.release();
		}
		if (msg.isEof()) {
			try {
				this..close();
				this. = null;
			catch (IOException x) {
				cb.kill("Problem closing destination file: " + x);
			}
		}
	}
		ByteBuf data = msg.getPayload();
		Path folder = this..localPath();
		if (Files.notExists(folder))
			try {
				Files.createDirectories(folder); 
			catch (IOException x) {
				if (data != null)
					data.release();
				cb.kill("Problem making destination top folder: " + x);
			}
		String fpath = (this.) ? this. + msg.getPath() : "/" + msg.getPath().getFileName();
		if (msg.isFolder()) {
			try {
				Files.createDirectories(folder.resolve(fpath.substring(1))); 
			catch (IOException x) {
				if (data != null)
					data.release();
				cb.kill("Problem making destination folder: " + x);
			}
		}
		if (this. == null)
			try {
				Path dpath = folder.resolve(fpath.substring(1));
				this. = FileChannel.open(dpath
			catch (IOException x) {
				if (data != null)
					data.release();
				cb.kill("Problem opening destination file: " + x);
			}
		if (data != null) {
			for (ByteBuffer buff : data.nioBuffers()) {
				try {
					this..write(buff);
				catch (IOException x) {
					data.release();
					cb.kill("Problem writing destination file: " + x);
				}
			}
			data.release();
		}
		if (msg.isEof()) {
			try {
				this..close();
				this. = null;
			catch (IOException x) {
				cb.kill("Problem closing destination file: " + x);
			}
		}
	}
	public void request(TaskRun cb) {
		// we are terminal, no downstream should call us
		cb.kill("File destination cannot be a source");
	}
	public void execute(TaskRun cb) {
		// TODO optimize if upstream is local file also
		this..request(cb);
	}
New to GrepCode? Check out our FAQ X