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.schema;
 
 
 
 public class ServiceSchema {
 	protected SchemaManager man = null;
 	protected HashMap<StringServiceservices = new HashMap<StringService>();
 	
 	public ServiceSchema(SchemaManager man) {
 		this. = man;
 	}	
 	
 	public void load(OperationResult orSchema schemaXElement db) {
 		for (XElement serel : db.selectAll("Service")) {
 			String sname = serel.getAttribute("Name");
 			//String sclass = serel.getAttribute("Class");
 			
 			if (StringUtil.isEmpty(sname))
 				continue;
 			
 			Service ser = this..get(sname);
 			
 			if (ser == null) {
 				ser = new Service();
 				ser.name = sname;
 				this..put(snameser);
 			}
 			
 			for (XElement secel : serel.selectAll("Secure")) {
 				String[] tags = secel.hasAttribute("Tags"
 					? secel.getAttribute("Tags").split(",")
 					: new String[] { "Guest""User" };
 				
 				for (XElement ftel : secel.selectAll("Feature")) {
 					String fname = ftel.getAttribute("Name");
 					
 					if (StringUtil.isEmpty(fname))
 						continue;
 					
 					Feature fet = ser.features.get(fname); 
 					
 					if (fet == null) {
 						fet = new Feature();
 						fet.name = fname;
 						ser.features.put(fnamefet);
 					}
 					
 					for (XElement opel : ftel.selectAll("Op")) {
 						String oname = opel.getAttribute("Name");
 						
 						if (StringUtil.isEmpty(oname))
 							continue;
 						
 						Op opt = new Op();
 						opt.name = oname;
 						opt.securityTags = tags;
 						
 						fet.ops.put(onameopt);
 						
 						XElement req = opel.find("Request""RecRequest");
 						
 						if (req != null)
 							opt.request = this..loadDataType(orschemareq);
 						
 						XElement resp = opel.find("Response""RecResponse");
 						
 						if (resp != null)
 							opt.response = this..loadDataType(orschemaresp);
 					}			
 				}			
 			}			
 		}			
 		
 		// TODO we need to have additional table info stored locally - but at moment at least we can validate against Services
 		
 	}
 
 	public DataType getRequestType(Message msg) {
		Op opt = this.getOp(msg.getFieldAsString("Service"), msg.getFieldAsString("Feature"), msg.getFieldAsString("Op"));
		if (opt != null)
			return opt.request;
		return null;
	}
	public DataType getResponseType(String serviceString featureString op) {
		Op opt = this.getOp(servicefeatureop);
		if (opt != null)
			return opt.response;
		return null;
	}
	public Op getOp(Message msg) {
		return this.getOp(msg.getFieldAsString("Service"), msg.getFieldAsString("Feature"), msg.getFieldAsString("Op"));
	}
	public Op getOp(String serviceString featureString op) {
		if (StringUtil.isEmpty(service))
			return null;
		Service s = this..get(service);
		if (s == null)
			return null;
		if (StringUtil.isEmpty(feature))
			feature  = "default";
		Feature f = s.features.get(feature);
		if (f == null)
			return null;
		if (StringUtil.isEmpty(op))
			op = "default";
		return f.ops.get(op);
	}
	public class Service {
		protected String name = null;
		protected HashMap<StringFeaturefeatures = new HashMap<StringFeature>();
	}
	public class Feature {
		protected String name = null;
		protected HashMap<StringOpops = new HashMap<StringOp>();
	}
	public class Op {
		protected String name = null;
		protected String[] securityTags = null;
		protected DataType request = null;
		protected DataType response = null;
		public boolean isTagged(String... tags) {
			if (this. == null
				return false;
			for (int i = 0; i < this..lengthi++) {
				String has = this.[i];
				for (String wants : tags) {
					if (has.equals(wants))
						return true;
				}
			}
			return false;
		}
	}
	public void compile(OperationResult mr) {
		for (Service s : this..values()) {
			for (Feature f : s.features.values()) {
				for (Op o : f.ops.values()) {
					if (o.request != null)
						o.request.compile(mr);
					if (o.response != null)
						o.response.compile(mr);
				}
			}
		}
	}
	public void remove(String name) {
		this..remove(name);
	}
New to GrepCode? Check out our FAQ X