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 UploadFile implements ISmartWork {
 	public enum UploadState {
 		REQUEST_UPLOAD,
 		SEND_STREAM,
 		RECORD_OUTCOME,
 		FREE_LOCAL_CHANNEL,
 		UPLOAD_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 : {
 				this.requestUpload();
 				break;
 			}
 			case : {
 				this.sendStream();
 				break;
 			}
 			case : {
 				this.recordOutcome();
 				break;
 			}
 				break;
 			}
 			case : {
 				break;
 			}		
 		}
 	}
 	
 	protected void transition(UploadState next) {
 		this. = next;
 		
 		// shed the current stack and come back clean on this run
 	}
 	
 	
 	public void requestUpload() {
 		this...nextStep("Request Upload");
 		this...setProgressMessage("Sending start upload request");		
     	
 		RecordStruct rec = new RecordStruct();
 		
		try {
			rec.setField("FilePath"this..);
			rec.setField("Params"this..);
			rec.setField("ForceOverwrite"this..);
			rec.setField("FileSize", Files.size(this..));
		catch (IOException x) {
			this...error(1, "Start Upload error: " + x);
    		return;
		}
		Message msg = new Message(this.."FileStore""StartUpload"rec);
		this..establishDataStream("Uploading " + this...getFileName(), "Upload"msgnew WrappedFuncCallback<RecordStruct>(this..) {
			public void callback() {
				if (this..hasErrors()) { 
				}
				else {
				}
			}
		});
	}
	public void sendStream() {		
		final TaskRun xferrun =  this..;
		xferrun.nextStep("Upload File");
		xferrun.setProgressMessage("Uploading File");		
    	
		try {
			Path local = UploadFile.this..;
			this..sendStream(FileChannel.open(local), Files.size(local), this...getFieldAsInteger("Size", 0), this..new WrappedOperationCallback(xferrun) {						
				public void callback() {
					// no need to copy messages with a wrapped callback
			    	if (!xferrun.hasErrors()) 
			    		xferrun.setProgressMessage("File Upload Complete");		
			    	else
			    		xferrun.error("Send Stream Error: " + xferrun.getMessage());
			    	
				}
			});
		catch (Exception x) {
			xferrun.errorTr(454, x);
			xferrun.error(1, "Send Stream Error: " + xferrun.getMessage());
		}
    }
	public void recordOutcome() {
		this...nextStep("Record File Outcome");		
    	String status = "Failure";    	
		RecordStruct evidence = new RecordStruct();
		try {
			Path local = UploadFile.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...setProgressMessage("Upload failed");
		}
		else {
			this...setProgressMessage("Integrity good, approving!");
			status = "Success";
		}
		Message msg = new Message(this.."FileStore""FinishUpload"
						new FieldStruct("FilePath"this..),		
						new FieldStruct("Status"status),
						new FieldStruct("Evidence"evidence),
						new FieldStruct("Params"this..)
				));
			public void callback() {
			}
		});
	}
	public void freeLocalChannel() {
		this...nextStep("Cleanup");
		this...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