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.script.inst;
 
 
 public class ForEach extends BlockInstruction {
     @Override
     public void alignInstruction(final StackEntry stackfinal OperationCallback callback) {
     	final StackBlockEntry bstack = (StackBlockEntry)stack;
     	
     	// signal end if conditional logic fails after loop
     	if (bstack.getPosition() >= this..size()) { 
     		RecordStruct store = stack.getStore();
     	    
     		AnyStruct collection = (AnyStructstore.getField("Collection");
     	    final String name = store.getFieldAsString("Name");
         	
         	@SuppressWarnings("unchecked")
 			final IAsyncIterator<Structit = (IAsyncIterator<Struct>) collection.getValue();
         	
         	if (it != null) {
         		it.hasNext(new FuncCallback<Boolean>() {					
 					public void callback() {
 						if (this.getResult()) {
 							it.next(new FuncCallback<Struct>() {								
 								public void callback() {									
 					        		bstack.addVariable(namethis.getResult());
 					        		bstack.setPosition(0);
 					        		
 						        	ForEach.super.alignInstruction(stackcallback);
 								}
 							});
 						}
 						else {
 				        	stack.setState(.);
 				    	
 				        	ForEach.super.alignInstruction(stackcallback);
 						}
 					}
 				}); 
 
         		return;
         	}
         	else 
 	        	stack.setState(.);
     	}
     	
        	super.alignInstruction(stackcallback);
     }
     
     @Override
     public void run(final StackEntry stack) {
 		if (stack.getState() == .) {
 			String name = stack.stringFromSource("Name");  
 			Struct source = stack.refFromSource("In");
 
 			AnyStruct collection = new AnyStruct();
 			collection.setType(..getSchema().getType("Any"));		// TODO shouldn't need this
 			
 			if (source instanceof IItemCollection)
 				collection.setValue(((IItemCollection)source).getItemsAsync().iterator());
 			
     		RecordStruct store = stack.getStore();
     	    
     		store.setField("Collection"collection);
     	    store.setField("Name"name);
     	    
     	    // tell alignment to do first iteration by passing position beyond end
         	StackBlockEntry bstack = (StackBlockEntry)stack;
         	bstack.setPosition(this..size());
 		}
		super.run(stack);
	}
New to GrepCode? Check out our FAQ X