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.interchange;
 
 public class ArchiveDriver {  //extends RecordStruct implements IFileStoreDriver {
 	/*
 	protected IFileStoreFile archive = null;
 	
 	@Override
 	public void setMimeProvider(IMimeProvider v) {
 		// TODO Auto-generated method stub
 		
 	}
 	
 	public ArchiveDriver() {
 		this.setField("Scanner", new ArchiveScanner(this));
 		this.setField("RootFolder", ".");
 	}
 	
     @Override
     protected void doCopy(Struct n) {
     	super.doCopy(n);
     	
     	//FileSystemDriver nn = (FileSystemDriver)n;
     	//nn.cwd = this.cwd;
     }
     
 	@Override
 	public Struct deepCopy() {
 		ArchiveDriver cp = new ArchiveDriver();
 		this.doCopy(cp);
 		return cp;
 	}
 	
 	@Override
 	public void dispose() {
 		// TODO support this!!!
 		super.dispose();
 	}
 
 	/*
 	@Override
 	public void toBuilder(ICompositeBuilder builder) throws BuilderStateException {
 		builder.startRecord();
 		
 		for (FieldStruct f : this.fields.values()) 
 			f.toBuilder(builder);
 		
 		// TODO add in FS specific fields
 		
 		builder.endRecord();
 	}
 	
 	@Override
 	public Struct select(PathPart... path) {
 		if (path.length > 0) {
 			PathPart part = path[0];
 			
 			if (part.isField()) {			
 				String fld = part.getField();
 				
 				if ("Scanner".equals(fld))
 					return this.search;
 			}			
 		}
 		
 		return super.select(path);
 	}
 	* /
 	
 	@Override
 	public void connect(RecordStruct params, OperationCallback callback) {
 		this.archive = (IFileStoreFile) params;
 		
 		System.out.println("cwd: " + this.getFieldAsString("RootFolder"));
 		
 		if (callback == null)
 			return;
 		
 		callback.completed();
 	}
 	
 	@Override
 	public void close(OperationCallback callback) {
 		// TODO reset scanner
		if (callback == null)
			return;
		callback.completed();
	}
	@Override
	public void operation(final StackEntry stack, final XElement codeEl) {
		if ("Connect".equals(codeEl.getName())) {
			RecordStruct file = (RecordStruct) stack.refFromElement(codeEl, "File");
			this.connect(file, new OperationCallback() {				
				@Override
				public void callback() {
					stack.resume();
				}
			});
			return;
		}
		if ("Close".equals(codeEl.getName())) {
			this.close(new OperationCallback() {				
				@Override
				public void callback() {
					stack.resume();
				}
			});
			return;
		}
		if ("GetInfo".equals(codeEl.getName())) {
			String path = stack.stringFromElement(codeEl, "Path");
			if (StringUtil.isEmpty(path)) {
				// TODO log missing
				stack.resume();
				return;
			}
	        String handle = stack.stringFromElement(codeEl, "Handle");
			if (handle != null) 
	            stack.addVariable(handle, new ArchiveFile(ArchiveDriver.this, new RecordStruct(new FieldStruct("Path", path))));
			stack.resume();
			return;
		}
		if ("Put".equals(codeEl.getName())) {
			/* TODO
			Struct src = stack.refFromElement(codeEl, "Source");
			if (src == null) {
				// TODO log missing
				stack.resume();
				return;
			}
			if (!(src instanceof IFileStoreFile) && ! (src instanceof RecordStruct)) {
				// TODO log wrong type
				stack.resume();
				return;
			}
			RecordStruct rsrc = (RecordStruct)src;
			final IFileStoreFile ssrc = (IFileStoreFile)src;
			boolean relative = stack.boolFromElement(codeEl, "Relative", true);
			String cwd = this.getFieldAsString("RootFolder");
			String dfilepath = cwd + "/" + (relative ? rsrc.getFieldAsString("Path") : rsrc.getFieldAsString("Name"));
			System.out.println("copied to: " + dfilepath);
			final File dest = new File(dfilepath);
			dest.getParentFile().mkdirs();
			try {
				final FileOutputStream out = new FileOutputStream(dest);
				ssrc.copyTo(out, new OperationCallback() {				
					@Override
					public void callback() {
						// TODO improve, check abort, etc
						try {
							out.close();
						catch (IOException x) {
						}
				        String handle = stack.stringFromElement(codeEl, "Handle");
						if (handle != null) 
				            stack.addVariable(handle, new ArchiveFile(ArchiveDriver.this, dest));
						stack.resume();
					}
				});
				return;
			}
			catch (Exception x) {
				// TODO
				//ssrc.abort();
			}			
			stack.resume();
			return;
			* /
		}
		super.operation(stack, codeEl);
	}
	@Override
	public IFileStoreFile getFile(RecordStruct file) {
		return new ArchiveFile(this, file);
	}
	public void getEntry(final String path, final FuncCallback<ArchiveEntry> callback) {
		this.archive.getInputStream(new FuncCallback<InputStream>() {			
			@Override
			public void callback() {
				InputStream in = this.getResult();
				ZipArchiveInputStream zin = new ZipArchiveInputStream(in);
				try {
					ArchiveEntry ze = zin.getNextEntry();
					while (ze != null) {						
						String name = ze.getName();
						if (name.equals(path)) {
							callback.setResult(ze);
							break;
						}
						ze = zin.getNextEntry();
					}
				catch (IOException x) {
					// TODO log
				}
				finally {
					try {
						zin.close();
					catch (IOException x) {
					}
				}
				callback.completed();
			}
		});
	}
	@Override
	public void getFileDetail(String path, FuncCallback<IFileStoreFile> callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void getRootFolder(FuncCallback<String> callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void setRootFolder(String path, OperationCallback callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void addFolder(String path, OperationCallback callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void removeFolder(String path, OperationCallback callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void queryFeatures(FuncCallback<RecordStruct> callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void customCommand(RecordStruct params,
			FuncCallback<RecordStruct> callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public IFileStoreScanner getScanner() {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public void getFolderListing(String path,
			FuncCallback<List<IFileStoreFile>> callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void getFolderListing2(String path, FuncCallback<ListStruct> callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void put(IFileStoreFile source, boolean relative, FuncCallback<IFileStoreFile> callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void putAll(IItemCollection files, boolean relative, OperationCallback callback) {
		// TODO Auto-generated method stub
	}
	@Override
	public void put(InputStream in, long size, IFileStoreFile dest, boolean relative,
			OperationCallback callback) {
		// TODO Auto-generated method stub
	}
	*/
New to GrepCode? Check out our FAQ X