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.struct.serial;
 
 
 
Load a Json like structure from buffer. Excepts data to be available one buffer at a time. Buffers can probably be very small, at least 64 bytes if not less.

Author(s):
Andy
 
 public class BufferToCompositeParser {
 	protected ICompositeBuilder builder = null;
 	protected Utf8Decoder decoder = new Utf8Decoder();
 	protected boolean done = false;
 	
 		return ;
 	}
 	
 	public boolean isDone() {
 		return this.;
 	}
 	
 		this. = builder;
 	}
 	
 	/*
 	 * @param input buffer to read and parse
 	 */
 	
 	public void parseStruct(ByteBuf inputthrows Exception {
 		while (true) {
 		
 			if (str == null)
 				break;		// we need more buffer
 			
 			if (str.length() > 0) {
 				if (this..needFieldName())
 					this..value(str.toString());
 				else
 					this.toScalar(this.str);
 			}
 			
 			int special = this..getLastSpecialCharacter();
 			
 			// at the end (there should be no outstanding text
 			if (special == ..getCode()) {
 				this. = true;
 				break;
 			}
 			
 			if (special == ..getCode()) 
 			else if (special == ..getCode()) 
 				this..endRecord();
 			else if (special == ..getCode()) 
 				this..startList();
 			else if (special == ..getCode()) 
 				this..endList();
 			// is for delineation only does not do anything
 			//else if (special == Special.Scalar.getCode()) 
 			//	this.builder.scalar();
 			else if (special == ..getCode())
 				this..field();
 		}
 	}
	protected void toScalar(ICompositeBuilder rbCharSequence valthrows BuilderStateException {
		if (StringUtil.isEmpty(val)) {
			rb.value(null);
			return;
		}
		if ((val.charAt(0) == '`') || (val.charAt(0) == '*')) {
			// unescape the string
			boolean escape = false;
			for (int i = 1; i < val.length(); i++) {
				char v = val.charAt(i);
				if (v == '\\') {
					if (escape) {
						sb.append('\\');
						escape = false;
					}
					else {
						escape = true;
					}
				}
				else if (v == 'n') {
					if (escape) {
						sb.append('\n');
						escape = false;
					}
					else {
						sb.append('n');
					}
				}
				else if (v == 't') {
					if (escape) {
						sb.append('\t');
						escape = false;
					}
					else {
						sb.append('t');
					}
				}
				//else if (escape && ((v == 'b') || (v == 'r') || (v == 'f') || (v == 'u') || Character.isDigit(v))) {
				else if (escape) {  // only t and n allowed
					throw new BuilderStateException("Invalid escape character: " + v);
				else {
					sb.append(v);
					escape = false;
				}
			}			
			if (val.charAt(0) == '*'
				rb.rawJson(sb);
			else
				rb.value(sb);
			return;
		}
			/*
		if (val.charAt(0) == '*') {
			rb.rawJson(val.subSequence(1, val.length()));
			return;
		}
		*/
		if (val.charAt(0) == '(') {
			rb.value(new BigDecimal(val.subSequence(1, val.length()).toString()));
			return;
		}
		if (val.charAt(0) == ')') {
			try {
				rb.value(new Long(val.subSequence(1, val.length()).toString()));
				return;
			}
			catch (Exception x) {				
			}
			try {
				rb.value(new BigInteger(val.subSequence(1, val.length()).toString()));
			}
			catch (Exception x) {				
			}
			return;
		}
		if (val.charAt(0) == '@') {
			if (val.length() == 1)
				rb.value(null);
			else
			return;
		}
		if (val.charAt(0) == '&') {
			if (val.length() == 1)
				rb.value(null);
			else
				rb.value(val.subSequence(1, val.length()));
			return;
		}
		// TODO is it just 1?
		if (val.charAt(0) == '!') {
			if (val.length() == 1)
				rb.value(null);
			else
				rb.value("1".equals(val.subSequence(1, val.length())) ? . : .);
			return;
		}
		if (val.charAt(0) == '%') {
			if (val.length() == 1)
				rb.value(null);
			else
				rb.value(new Memory(HexUtil.decodeHex(val.subSequence(1, val.length()))));
			return;
		}
		//if (val.charAt(0) == '@') {
		//	rb.value(TimeUtil.stampFmt.parseDateTime(val.subSequence(1, val.length()).toString()));
		//	return;
		//}
		if (val.charAt(0) == '$') {
			if (val.length() == 1)
				rb.value(null);
			else
				rb.value(TimeUtil.parseBigDateTime(val.subSequence(1, val.length()).toString()));
			return;
		}
		String val2 = val.toString().toLowerCase();
		if (val2.equals("null")) {
			rb.value(null);
			return;
		}
		if (val2.equals("true")) {
			return;
		}
		if (val2.equals("false")) {
			return;
		}
		try {
			rb.value(val2);
		}
		catch (Exception x) {				
		}
		return;
	}
New to GrepCode? Check out our FAQ X