Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ************************************************************************
  #
  #  DivConq
  #
  #  http://divconq.com/
  #
  #  Copyright:
  #    Copyright 2014 eTimeline, LLC. All rights reserved.
  #
 #  License:
 #    See the license.txt file in the project's top-level directory for details.
 #
 #  Authors:
 #    * Andy White
 #
 ************************************************************************ */
 package divconq.ctp.stream;
 
 
 
 
 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();
 	}
 	
 	public ReturnOption handle(FileDescriptor fileByteBuf data) {
 		if (file == .) {
 			OperationContext.get().getTaskRun().complete();
 			return .;
 		}
 		
 		if (this..isFolder())
 			return this.handleLocalFolder(filedata);
		return this.handleLocalFile(filedata);
	}
		if (file.isFolder()) {
			if (data != null)
				data.release();
			OperationContext.get().getTaskRun().kill("Folder cannot be stored into a file");
		}
		if (data != null) {
			if (this. == null) {
				try {
					Path dpath = this..localPath();
					this. = FileChannel.open(dpath
				catch (IOException x) {
					if (data != null)
						data.release();
					OperationContext.get().getTaskRun().kill("Problem opening destination file: " + x);
				}
			}
			for (ByteBuffer buff : data.nioBuffers()) {
				try {
					this..write(buff);
				catch (IOException x) {
					data.release();
					OperationContext.get().getTaskRun().kill("Problem writing destination file: " + x);
				}
			}
			data.release();
		}
		if (file.isEof()) {
			try {
				if (this. != null) {
					this..close();
					this. = null;
				}
			catch (IOException x) {
				OperationContext.get().getTaskRun().kill("Problem closing destination file: " + x);
			}
		}
	}
		Path folder = this..localPath();
		if (Files.notExists(folder))
			try {
				Files.createDirectories(folder); 
			catch (IOException x) {
				if (data != null)
					data.release();
				OperationContext.get().getTaskRun().kill("Problem making destination top folder: " + x);
			}
		String fpath = (this.) ? this. + file.getPath() : "/" + file.path().getFileName();
		if (file.isFolder()) {
			try {
				Files.createDirectories(folder.resolve(fpath.substring(1))); 
			catch (IOException x) {
				if (data != null)
					data.release();
				OperationContext.get().getTaskRun().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();
				OperationContext.get().getTaskRun().kill("Problem opening destination file: " + x);
			}
		if (data != null) {
			for (ByteBuffer buff : data.nioBuffers()) {
				try {
					this..write(buff);
				catch (IOException x) {
					data.release();
					OperationContext.get().getTaskRun().kill("Problem writing destination file: " + x);
				}
			}
			data.release();
		}
		if (file.isEof()) {
			try {
				this..close();
				this. = null;
			catch (IOException x) {
				OperationContext.get().getTaskRun().kill("Problem closing destination file: " + x);
			}
		}
	}
	public void read() {
		// we are terminal, no downstream should call us
		OperationContext.get().getTaskRun().kill("File destination cannot be a source");
	}
	public void execute() {
		// TODO optimize if upstream is local file also
		this..read();
	}
New to GrepCode? Check out our FAQ X