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;
 
 
 public class StackEntry {
 	protected StackEntry parent = null;
 	protected Activity activity = null;
 	protected Instruction inst = null;
 	protected RecordStruct inststore = new RecordStruct();
 	protected IInstructionCallback callback = null;
 	
 	public StackEntry(Activity actStackEntry parentInstruction inst) {
 		this. = act;
 		this. = parent;
 		this. = inst;
 	}
 	
     public StackEntry getParent() {
     	return this.;
     }
     
     public void setParent(StackEntry v) {
     	this. = v;	
     }
     
 	public RecordStruct getStore() {
 		return this.;
 	}
 	
 	public Instruction getInstruction() {
 		return this.;
 	}
 	
 	public void setInstruction(Instruction v) {
 		this. = v;
 	}
 	
     public ExecuteState getState() {
         return (this. != null) ? this. : .;
     }
     
     public void setState(ExecuteState v) {
     	this. = v;
     }
 
 	public void updateCallback(final IInstructionCallback cb) {
 		final IInstructionCallback old = this.;
 		
 		//System.out.println("Updating callback on " + this.inst.source.getName() + " - thread " + Thread.currentThread().getName());
 		
 		this. = new IInstructionCallback() {			
 			public void resume() {
 				cb.resume();
 				old.resume();
 			}
 		};
 	}	
     
     public void resume() {
     	if (this. != null) {
     		this..resume();
     		return;
     	}
     	
     	if (this. != null
     		this..resume();
     }
 
     public Struct queryVariable(String name) {
         return (this. != null) ? this..queryVariable(name) : null;
     }
 
     public Activity getActivity() {
         return this.;
    }
    public StackBlockEntry queryBlockStack() {
        if (this. == null)
            return null;
        return this..queryBlockStack();
    }
        if (this. == null)
            return null;
        return this..queryFunctionStack();
    }
    public OperationResult log() {
        return this..getLog();
    }
    
    public Struct resolveValue(String val) {
    	if (val == null)
    		return .;
    	
    	val = this.resolveValueToString(val);
    	
		// var flag - return the reference to the variable pointed to
    	if (val.startsWith("$")) 
    		return this.queryVariable(val.substring(1));
    	
		// literal flag - return the string as is
    	if (val.startsWith("`")) 
			return new StringStruct(val.substring(1));
    	
    	// otherwise just treat this as a string
		return new StringStruct(val);
    }
	public void operate(Struct targetXElement source) {
		this...operate(thistargetsource);
	}
    
    public Struct refFromSource(String attr) {
        return this.refFromElement(this..attr);
    }
    
    public Struct refFromElement(XElement elString attr) {
    	if ((el == null) || StringUtil.isEmpty(attr))
    		return .;
    	
        return this.resolveValue(el.getAttribute(attr));
    }
    
    public String stringFromSource(String attr) {
        return this.stringFromElement(this..attrnull);
    }
    
    public String stringFromSource(String attrString def) {
        return this.stringFromElement(this..attrdef);
    }
    
    public String stringFromElement(XElement elString attr) {
        return this.stringFromElement(elattrnull);
    }
    
    public String stringFromElement(XElement elString attrString def) {
    	if ((el == null) || StringUtil.isEmpty(attr))
    		return def;
    	
        Struct dt = this.refFromElement(elattr);
        
        if (dt == .)
        	return def;
        
    	String ret = Struct.objectToString(dt);
    	
    	if (StringUtil.isNotEmpty(ret))
    		return ret;
        
        return def;
    }
    
    public long intFromSource(String attr) {
        return this.intFromElement(this..attr, 0);
    }
    
    public long intFromSource(String attrint def) {
        return this.intFromElement(this..attrdef);
    }
    
    public long intFromElement(XElement elString attr) {
        return this.intFromElement(elattr, 0);
    }
    
    public long intFromElement(XElement elString attrint def) {
    	if ((el == null) || StringUtil.isEmpty(attr))
    		return def;
    	
        Struct dt = this.refFromElement(elattr);
        
    	Long ret = Struct.objectToInteger(dt);
    	
    	if (ret != null)
    		return ret;
        
        return def;
    }
    
    public boolean boolFromSource(String attr) {
        return this.boolFromElement(this..attrfalse);
    }
    
    public boolean boolFromSource(String attrboolean def) {
        return this.boolFromElement(this..attrdef);
    }
    
    public boolean boolFromElement(XElement elString attr) {
        return this.boolFromElement(elattrfalse);
    }
    
    public boolean boolFromElement(XElement elString attrboolean def) {
    	if ((el == null) || StringUtil.isEmpty(attr))
    		return def;
    	
        Struct dt = this.refFromElement(elattr);
        
    	Boolean ret = Struct.objectToBoolean(dt);
    	
    	if (ret != null)
    		return ret;
        
        return def;
    }
    public String resolveValueToString(String val) {
    	if (val == null)
    		return "";
    	
        // the expansion of variables is per Attribute Value Templates in XSLT
        // http://www.w3.org/TR/xslt#attribute-value-templates
        StringBuilder sb = new StringBuilder();
        int lpos = 0;
        int bpos = val.indexOf("{$");
        while (bpos != -1) {
            int epos = val.indexOf("}"bpos);
            if (epos == -1) 
            	break;
            sb.append(val.substring(lposbpos));
            lpos = epos + 1;
            String varname = val.substring(bpos + 2, epos).trim();
            String[] vparts = varname.split("\\.");
            varname = "";
            for (String vpart : vparts) {
                if (varname.length() == 0) {
                    varname = vpart;
                }
                else {
                    if (vpart.startsWith("$")) {
                        Struct qvar = this.queryVariable(vpart.substring(1));
                        if (qvar != null) {
                            varname += "." + qvar.toString();
                            continue;
                        }
                    }
                    varname += "." + vpart;
                }
            }
            Struct qvar2 = this.queryVariable(varname);
            if (qvar2 != null
                sb.append(qvar2.toString());
            else {
            	this.log().warnTr(500, varname);
                sb.append(val.substring(bposepos + 1));
            }
            bpos = val.indexOf("{$"epos);
        }
        sb.append(val.substring(lpos));
        return sb.toString();
    }
    public void addVariable(String typeString name) {
    	this.addVariable(namethis..createStruct(type));
    }
    public void addVariable(String nameStruct var) {
    	if (var == null) {
    		this.log().errorTr(512);
    		return;
    	}
    		
        StackBlockEntry b = this.queryBlockStack();
        
        if (b == null
        	this.log().errorTr(513, name);
        else
        	b.addVariable(namevar);
    }
    // Result Code and Value
    
    public void setLastCode(Long code) {
    	StackFunctionEntry func = this.queryFunctionStack();
    	
    	if (func != null
	        func.setLastCode(code);
    }
    
    public Long getLastCode() {
    	StackFunctionEntry func = this.queryFunctionStack();
    	
    	if (func != null
	        return func.getLastCode();
    	
    	return null;
    }
    public void setLastResult(Struct val) {
    	StackFunctionEntry func = this.queryFunctionStack();
    	
    	if (func != null
	        func.setLastResult(val);
    }
    public void setLastResult(long codeStruct val) {
    	StackFunctionEntry func = this.queryFunctionStack();
    	
    	if (func != null) {
	        func.setLastCode(code);
	        func.setLastResult(val);
    	}
    }
    
    public void setLastResult(OperationResult v) {
    	StackFunctionEntry func = this.queryFunctionStack();
    	
    	if (func != null) {
	        func.setLastCode(v.getCode());
	        func.setLastResult(v.toLogMessage());		// TODO really, a message?
    	}
    }
    
    public Struct getLastResult() {
    	StackFunctionEntry func = this.queryFunctionStack();
    	
    	if (func != null
	        return func.getLastResult();
    	
    	return null;
    }
    
    // Run
    
    public void run(IInstructionCallback cb) {
    	this. = cb;
    	this.run();
    }
    
    public void run() {
    	if (this. != null)
    		this..run(this);
    }
    
    public void cancel() {
    	if (this. != null)
    		this..cancel(this);
    }
    
    public void debugStack(ListStruct dumpList) {
    	RecordStruct dumpRec = new RecordStruct();
    	dumpList.addItem(dumpRec);
    	
    	this.collectDebugRecord(dumpRec);
    	RecordStruct subRec = this..collectDebugRecord(thisdumpRec);
    	if (subRec != null)
    		dumpList.addItem(subRec);
    }
    
    public void collectDebugRecord(RecordStruct rec) {
    }
	public boolean codeHasAttribute(String attr) {
    	if (this. != null)
    		return this...hasAttribute(attr);
    	
    	return false;
	}
		return this;
	}
New to GrepCode? Check out our FAQ X