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;
 
 
 // this is not tested much
 public class CtpStreamDest extends BaseStream implements IStreamDestChannelFutureListener {
 	protected CtpAdapter adapter = null;
 	protected boolean userelpath = false;
 	protected boolean finalFlag = false;
 	protected String relpath = null;
 	protected OperationContext ctx = null;
 	
 	public CtpStreamDest(CtpAdapter adapterOperationContext ctx) {
 		this. = adapter;
 		this. = ctx;
 	}
 
 	public void init(StackEntry stackXElement elboolean autorelative) {
 		if (autorelative || stack.boolFromElement(el"Relative"false) || el.getName().startsWith("X")) {
         	this. = "";
         	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() {
 		// TODO return the channel to it's manager, if not already - if we didn't get a FINAL below then 
 		// tell manager it is bad - close channel, read/write state unknown
 		
 		this. = null;
 		
 		super.close();
 	}
 
 	public void operationComplete(ChannelFuture futurethrows Exception {
 		OperationContext.set(this.);
 		
 		TaskRun trun = this..getTaskRun();
 		
 		if (trun == null) {
 			..println("Error - stream task missing RUN");
 		}
 		else if (future.isSuccess()) {
 			if (this.)
 				trun.complete();
 			else
 				trun.resume();
 		}
 		else {
 			trun.kill("ERROR sending - DONE sending!  " + future.cause());
 		}	
 	}
 	
	public ReturnOption handle(FileDescriptor fileByteBuf data) {
    	this. = (file == .);
    	
		// TODO build up a buffer of at least N size before flush...FINAL always flushes
		if (!this.) {
			cmd = new BlockCommand();
			((BlockCommand)cmd).setData(data);
		}
		 
		..println("Sending FINAL: " + this.);
		try {
			this..sendCommandNotify(cmdthis);
		catch (Exception x) {
			..println("Ctp-F Client stream error: " + x);
		}
		/*
		try {
			// TODO if errors...ABORT
			if (this.isEmptyResult()) {
				this.adapter.sendCommand(new FinalCommand());
				OperationContext.get().getTaskRun().complete();
				return;
			}
			IFileStoreFile file = this.getResult();
			BlockCommand cmd = new BlockCommand();
			FileSelection selection = this.selector.selection();
			// TODO if CTP_F_ATTR_PREFERED then use session settings - from adapter?
			if (selection.hasAttr(CtpConstants.CTP_F_ATTR_PATH) || selection.hasAttr(CtpConstants.CTP_F_ATTR_PREFERED))
				cmd.setPath(file.path().subpath(this.relativeTo).toString());
			if (selection.hasAttr(CtpConstants.CTP_F_ATTR_IS_FOLDER) || selection.hasAttr(CtpConstants.CTP_F_ATTR_PREFERED))
				cmd.setIsFolder(file.isFolder());
			if (selection.hasAttr(CtpConstants.CTP_F_ATTR_SIZE) || selection.hasAttr(CtpConstants.CTP_F_ATTR_PREFERED))
				cmd.setSize(file.getSize());
			if (selection.hasAttr(CtpConstants.CTP_F_ATTR_MODTIME) || selection.hasAttr(CtpConstants.CTP_F_ATTR_PREFERED))
				cmd.setModTime(file.getModificationTime().getMillis());
			if (selection.hasAttr(CtpConstants.CTP_F_ATTR_PERMISSIONS) || selection.hasAttr(CtpConstants.CTP_F_ATTR_PREFERED))
				cmd.setPermissions(CtpConstants.CTP_F_PERMISSIONS_READ & CtpConstants.CTP_F_PERMISSIONS_WRITE);   // TODO file.getPermissions());
			if (selection.hasAttr(CtpConstants.CTP_F_ATTR_DATA)) {
				// send headers
				this.adapter.sendCommand(cmd);
				// send block 1
				cmd = new BlockCommand();
				ByteBuf d = Hub.instance.getBufferAllocator().buffer(24);
				d.writeLong(1);
				d.writeLong(2);
				d.writeLong(3);
				cmd.setData(d);
				this.adapter.sendCommand(cmd);
				// progress 1
				this.adapter.sendCommand(new ProgressCommand(33));
				// send block 2
				cmd = new BlockCommand();
				d = Hub.instance.getBufferAllocator().buffer(24);
				d.writeLong(1);
				d.writeLong(2);
				d.writeLong(3);
				cmd.setData(d);
				this.adapter.sendCommand(cmd);
				// progress 2
				this.adapter.sendCommand(new ProgressCommand(66));
				// send block 3
				cmd = new BlockCommand();
				d = Hub.instance.getBufferAllocator().buffer(24);
				d.writeLong(1);
				d.writeLong(2);
				d.writeLong(3);
				cmd.setData(d);
				this.adapter.sendCommand(cmd);
				// progress 3
				this.adapter.sendCommand(new ProgressCommand(99));
				// send end
				cmd = new BlockCommand();
				cmd.setEof(true);
				this.adapter.sendCommandNotify(cmd, this.future);
			}
			else {
				cmd.setEof(true);
				this.adapter.sendCommandNotify(cmd, this.future);
			}
		}
		catch (Exception x) {
			System.out.println("Ctp-F Server error: " + 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 
		this..read();
	}
New to GrepCode? Check out our FAQ X