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.api.tasks;
 
 
 
 public class DownloadFile implements ISmartWork {
 	public enum DownloadState {
 		REQUEST_DOWNLOAD,
 		RECEIVE_STREAM,
 		RECORD_OUTCOME,
 		FREE_LOCAL_CHANNEL,
 		DOWNLOAD_DONE;
 	}
 	
 	protected ApiSession session = null;
 	protected TransferContext xferctx = null;
 
 	public void setSession(ApiSession v) {
 		this. = v;
 	}
 	
 	public void run(TaskRun run) {
 		if (this. == null) {
 			this. = new TransferContext();
 			this..load(run);
 		}
 		
 		switch (this.) {
 			case : {
 				break;
 			}
 			case : {
 				this.sendStream();
 				break;
 			}
 			case : {
 				this.recordOutcome();
 				break;
 			}
 				break;
 			}
 			case : {
 				break;
 			}		
 		}
 	}
 	
 	protected void transition(DownloadState next) {
 		this. = next;
 		
 		// shed the current stack and come back clean on this run
 	}
 	
 	
 	public void requestDownload() {
 		this...getContext().nextStep("Request Download");
 		this...getContext().setProgressMessage("Sending start download request");		
     	
 		RecordStruct rec = new RecordStruct();
 		
		rec.setField("FilePath"this..);		
		rec.setField("Params"this..);
		rec.setField("Offset"this..);
		Message msg = new Message(this.."FileStore""StartDownload"rec);
		this..establishDataStream("Downloading " + this...getFileName(), "Download"msgnew FuncCallback<RecordStruct>() {
			public void callback() {
				}
				else {
				}
			}
		});
	}
	public void sendStream() {		
		final TaskRun xferrun =  this..;
		xferrun.getContext().nextStep("Download File");
		xferrun.getContext().setProgressMessage("Downloading File");		
    	
		try {
			Path local = this..;
			FileChannel chn = (this.. > 0) 
				public void callback() {
			    	if (!xferrun.hasErrors()) 
			    		xferrun.getContext().setProgressMessage("File Download Complete");		
			    	else
			    		xferrun.error("Receive Stream Error: " + xferrun.getMessage());
			    	
				}
			});
		catch (Exception x) {
			xferrun.errorTr(454, x);
			xferrun.error(1, "Send Stream Error: " + xferrun.getMessage());
		}
    }
	public void recordOutcome() {
		this...getContext().nextStep("Record File Outcome");		
    	String status = "Failure";    	
		RecordStruct evidence = new RecordStruct();
		try {
			Path local = DownloadFile.this..;
			evidence.setField("Size", Files.size(local));
			// collect evidence
			String hashMethod = this...getFieldAsString("BestEvidence");
			// if looking for more evidence than Size, calc the hash
			if (!"Size".equals(hashMethod)) {
				try {
					FuncResult<Stringres = HashUtil.hash(hashMethod, Files.newInputStream(local));
					if (!res.hasErrors())
						evidence.setField(hashMethodres.getResult());
				}
				catch (Exception x) {
					this...error(1, "Unable to read file for hash: " + x);
				}
			}
		}
		catch (Exception x) {
			this...error("Error collecting evidence: " + x);
		}
		if (this...hasErrors()) {
			this...getContext().setProgressMessage("Download failed");
		}
		else {
			this...getContext().setProgressMessage("Integrity good, approving!");
			status = "Success";
		}
		Message msg = new Message(this.."FileStore""FinishDownload"
						new FieldStruct("FilePath"this..),		
						new FieldStruct("Status"status),
						new FieldStruct("Evidence"evidence),
						new FieldStruct("Params"this..)
				));
			public void callback() {
			}
		});
	}
	public void freeLocalChannel() {
		this...getContext().nextStep("Cleanup");
		this...getContext().setProgressMessage("Freeing channel");		
			public void callback() {
			}
		});		
	}
	public void cancel(TaskRun run) {
		if (StringUtil.isNotEmpty(this..))
	}
	public void completed(TaskRun run) {
	}
New to GrepCode? Check out our FAQ X