Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2013-2014 by Cisco Systems, Inc. All rights reserved.
  
  package com.cisco.oss.foundation.directory.query;
  
  import java.util.List;
  
It is a serializer tool to serialze/deserialize QueryCriterion.

Author(s):
zuxiang
 
 public class QueryCriterionSerializer {

serialize the QueryCriterion to a String expression. This String expression can be deserialized by the deserialze method back.

Parameters:
queryCriterion the QueryCriterion.
Returns:
the String expression.
 
 	public static String serialize(QueryCriterion queryCriterion){
 		if(queryCriterion instanceof EqualQueryCriterion){
 			EqualQueryCriterion criterion = (EqualQueryCriterionqueryCriterion;
 			return criterion.getMetadataKey() + " equals " + escapeString(criterion.getCriterion());
 		} else if(queryCriterion instanceof NotEqualQueryCriterion){
 			NotEqualQueryCriterion criterion = (NotEqualQueryCriterionqueryCriterion;
 			return criterion.getMetadataKey() + " not equals " + escapeString(criterion.getCriterion());
 		} else if(queryCriterion instanceof ContainQueryCriterion){
 			ContainQueryCriterion criterion = (ContainQueryCriterionqueryCriterion;
 			return criterion.getMetadataKey();
 		} else if(queryCriterion instanceof NotContainQueryCriterion){
 			NotContainQueryCriterion criterion = (NotContainQueryCriterionqueryCriterion;
 			return "not " + criterion.getMetadataKey();
 		} else if(queryCriterion instanceof InQueryCriterion){
 			InQueryCriterion criterion = (InQueryCriterionqueryCriterion;
 			StringBuilder sb = new StringBuilder(criterion.getMetadataKey());
 			sb.append(" in [ ");
 			for(String s : criterion.getCriterion()){
 				sb.append(escapeString(s)).append(", ");
 			}
 			sb.append("]");
 			return sb.toString();
 		} else if(queryCriterion instanceof NotInQueryCriterion){
 			NotInQueryCriterion criterion = (NotInQueryCriterionqueryCriterion;
 			StringBuilder sb = new StringBuilder(criterion.getMetadataKey());
 			sb.append(" not in [ ");
 			for(String s : criterion.getCriterion()){
 				sb.append(escapeString(s)).append(", ");
 			}
 			sb.append("]");
 			return sb.toString();
 		} else if(queryCriterion instanceof PatternQueryCriterion){
 			PatternQueryCriterion criterion = (PatternQueryCriterionqueryCriterion;
 			return criterion.getMetadataKey() + " matches " + escapeString(criterion.getCriterion());
 		}
 		return "";
 	}

Deserialize a QueryCriterion statement String expression to QueryCriterion.

Parameters:
statement the statement String expression.
Returns:
the QueryCriterion.
 
 	public static QueryCriterion deserialize(String statement){
 		char [] delimeter = {' ''\t'',''['']'}; 
 		List<StringcmdList = splitStringByDelimeters(statementdelimetertrue);
 		List<StringtokenList = filterDelimeterElement(cmdListdelimeter);
 		if(tokenList.size() == 1){
 			String key = cmdList.get(0);
 			if(! key.isEmpty()){
 				return new ContainQueryCriterion(key);
 			}
 		} else if(tokenList.size() == 2){
 			String cmd = cmdList.get(0);
 			String key = cmdList.get(1);
 			if(! key.isEmpty() && cmd.equals("not")){
 				return new NotContainQueryCriterion(key);
 			}
 		} else {
 			String key = tokenList.get(0);
 			String op = tokenList.get(1);
			if(op.equals("not")){
				op = op + " " + tokenList.get(2);
			}
			if(op.equals("equals")){
				String value = unescapeString(tokenList.get(2));
				if(value != null){
					return new EqualQueryCriterion(keyvalue);	
				}
else if(op.equals("not equals")){
				String value = unescapeString(tokenList.get(3));
				if(value != null){
					return new NotEqualQueryCriterion(keyvalue);
				}
else if(op.equals("matches")){
				String value = unescapeString(tokenList.get(2));
				if(value != null){
					return new PatternQueryCriterion(keyvalue);
				}
else if(op.equals("in")){
				List<Stringvalues = new ArrayList<String>();
				boolean start = false;
				for(String s : cmdList){
					if(s.isEmpty() || s.equals(",")){
						continue;
else if(s.equals("[")){
						start = true;
						continue;
else if(s.equals("]")){
						start = false;
						break;
else if(start){
						if(v != null){
							values.add(v);
						}
					}
				}
				return new InQueryCriterion(keyvalues);
else if(op.equals("not in")){
				List<Stringvalues = new ArrayList<String>();
				boolean start = false;
				for(String s : cmdList){
					if(s.isEmpty() || s.equals(',')){
						break;
else if(s.equals('[')){
						start = true;
						continue;
else if(s.equals(']')){
						start = false;
						break;
else if(start){
						if(v != null){
							values.add(v);
						}
					}
				}
				return new NotInQueryCriterion(keyvalues);
			}
		}
		return null;
	}

Deserialize the ServiceInstanceQuery command line String expression. Deserialize the ServiceInstanceQuery command line to the ServiceInstanceQuery.

Parameters:
cli the ServiceInstanceQuery command line String expression.
Returns:
the QueryCriterion statement String list.
		char [] delimeter = {';'}; 
		for(String statement : splitStringByDelimeters(clidelimeterfalse)){
			QueryCriterion criterion = deserialize(statement);
			if(criterion != null){
				query.addQueryCriterion(criterion);
			}
		};
		return query;
	}

Serialze the ServiceInstanceQuery to the command line string expression.

Parameters:
query the ServiceInstanceQuery.
Returns:
the string expression.
		List<QueryCriterioncriteria = query.getCriteria();
		for(QueryCriterion criterion : criteria){
			String statement = serialize(criterion);
			if(statement != null && ! statement.isEmpty()){
				sb.append(statement).append(";");
			}
		}
		return sb.toString();
	}

Escape the String for the QueryCriterion String. Add " to the head and tail, switch " to \".

Parameters:
str the origin String.
Returns:
the escaped String
	private static String escapeString(String str){
		return "\"" +  str.replaceAll("\"""\\\\\"") + "\"";
	}

Unescape the QueryCriterion String. remove the head and tail ", switch \" to ".

Parameters:
str the escaped String.
Returns:
the origin String.
	private static String unescapeString(String str){
		if(str.startsWith("\"") && str.endsWith("\"")){
			String s = str.replaceAll("\\\\\"""\"");
			return s.substring(1, s.length() -1);
		}
		return null;
	}

Filter the delimeter from the String array. remove the String element in the delimeter.

Parameters:
arr the target array.
delimeter the delimeter array need to remove.
Returns:
the array List.
	private static List<StringfilterDelimeterElement(List<Stringarrchar[] delimeter){
		List<Stringlist = new ArrayList<String>();
		for(String s : arr){
			if(s == null || s.isEmpty()){
				continue;
			}
			if(s.length() > 1){
				list.add(s);
				continue;
			}
			char strChar = s.charAt(0);
			boolean find = false;
			for(char c : delimeter){
				if(c == strChar){
					find = true;
					break;
				}
			}
			if(find == false){
				list.add(s);
			}
		}
		return list;
	}

Split a complete String to String array by the delimeter array. This method used to split a command or a statement to sub elements. It will trim the sub elements too.

Parameters:
str the complete string.
delimeter the delimeter array.
includeDeli if true, include the delimeter in the return array.
Returns:
the splited String array.
	private static List<StringsplitStringByDelimeters(String strchar[] delimeterboolean includeDeli){
		List<Stringarr = new ArrayList<String>();
		int i = 0, start = 0, quota = 0;
		char pre = 0;
		for(char c : str.toCharArray()){
			if(c == '"' && pre != '\\'){
				quota ++;
			}
			if(quota % 2 == 0){
				for(char deli : delimeter){
					ifc == deli){
						if(includeDeli){
							arr.add(str.substring(starti).trim());
							start = i;
						}else if(i > start ){
							arr.add(str.substring(starti).trim());
							start = i + 1;
						}
					}
				}
			i ++;
			pre = c;
		}
		if(includeDeli){
			arr.add(str.substring(starti).trim());
			start = i;
		}else if(i > start ){
			arr.add(str.substring(starti).trim());
		}
		return arr;
	}
//	public static void main(String[] args){
//	String a = "a equals \"c\\\",[] c\"; solution in [ \"s\\\"1\", \"s2\"]; datacenter; not local;";
//	System.out.println(escapeString("ddad\"dd"));
//	String s = "\"ddad\\\"dd\"";
//	System.out.println("---->" + s);
//	System.out.println(unescapeString(s));
//	
//	List<String> stats = deserializeCommandLine(a);
//	for(String stat : stats){
//		QueryCriterion c = deserialize(stat);
//		System.out.println("--------------------");
//		System.out.println(c.toString());
//		System.out.println(serialize(c));
//	}
//}
New to GrepCode? Check out our FAQ X