AstInterfaceGenerator.java

package eu.javaexperience.rpc.codegen;

import java.util.Collection;
import java.util.Map;

import eu.javaexperience.datareprez.DataArray;
import eu.javaexperience.datareprez.DataCommon;
import eu.javaexperience.datareprez.DataObject;
import eu.javaexperience.datareprez.jsonImpl.DataObjectJsonImpl;
import eu.javaexperience.datareprez.xmlImpl.DataObjectXmlImpl;
import eu.javaexperience.rpc.RpcFunction;
import eu.javaexperience.rpc.RpcRequest;
import eu.javaexperience.rpc.function.RpcFunctionParameter;

public class AstInterfaceGenerator
{
	protected static DataObject renderParameter(DataCommon proto, RpcFunctionParameter param)
	{
		DataObject ret = proto.newObjectInstance();
		ret.putString("type", param.getTypeFullQualifiedName());
		return ret;
	}
	
	public static RpcSourceBuilder<RpcFunctionParameter, RpcFunction<RpcRequest, RpcFunctionParameter>> BASIC_AST_SOURCE_BUILDER = new RpcSourceBuilder<RpcFunctionParameter, RpcFunction<RpcRequest, RpcFunctionParameter>>()
	{
		@Override
		public String buildRpcClientSource(String compilationUnitName, Collection<RpcFunction<RpcRequest, RpcFunctionParameter>> functions, Map<String, Object> options)
		{
			DataObject ret = null;
			
			Object _dr = options.get("dr");
			String dr =  null;
			if(null == _dr)
			{
				dr = "json";
			}
			else
			{
				dr = _dr.toString();
			}
			
			switch(dr)
			{
				case "xml":
					ret = new DataObjectXmlImpl();
					break;
				
				case "json":
				default:
					ret = new DataObjectJsonImpl();
			}
			
			ret.putString("unit", compilationUnitName);
			
			
			DataArray methods = ret.newArrayInstance();
			
			//metódusok
			for(RpcFunction<RpcRequest, RpcFunctionParameter> f:functions)
			{
				DataObject m = ret.newObjectInstance();
				
				String comment = JavaRpcExportTools.renderFunctionComment(f);
				if(null != comment)
				{
					m.putString("comment", comment);
				}
				
				m.putString("methodName", f.getMethodName());
				m.putObject("returns", renderParameter(ret, f.getReturningClass()));
				
				DataArray params = ret.newArrayInstance();
				for(RpcFunctionParameter p:f.getParameterClasses())
				{
					params.putObject(renderParameter(ret, p));
				}
				
				m.putArray("parameters", params);
				
				methods.putObject(m);
			}
				
			ret.putArray("methods", methods);
			
			return new String(ret.toBlob());
		}
	};
}