// Path: Web/src/main/java/org/emerjoin/hi/web/frontier/model/FrontierClass.java
// public class FrontierClass {
// 
//     private HashMap<String,FrontierMethod> methodsMap = new HashMap();
//     private HashMap<String,FrontierMethod> hashedMethodsMap = new HashMap();
// 
//     private String className;
//     private String simpleName;
//     private Object object;
// 
//     public FrontierClass(String clazz,String simpleName){
// 
//         this.className = clazz;
//         this.simpleName = simpleName;
//         //this.object = object;
// 
//     }
// 
//     public String getSimpleName(){
// 
//         return simpleName;
// 
//     }
// 
//     public String getClassName() {
//         return className;
//     }
// 
//     public void addMethod(FrontierMethod method){
// 
//         this.methodsMap.put(method.getName(),method);
// 
//     }
// 
//     public boolean hasMethod(String name){
// 
//         return methodsMap.containsKey(name);
// 
// 
//     }
// 
//     public FrontierMethod getMethod(String name){
// 
//             return methodsMap.get(name);
// 
//     }
// 
// 
//     public Object getObject() {
// 
//         try {
// 
//             return CDI.current().select(Class.forName(className)).get();
// 
// 
//         }catch (Exception ex){
// 
//             return null;
// 
//         }
//     }
// 
//     public Class getFrontierClazz(){
// 
//         try {
// 
//             return Class.forName(className);
// 
//         } catch (ClassNotFoundException e) {
// 
//             return null;
// 
//         }
// 
//     }
// 
// 
// 
// 
//     public FrontierMethod[] getMethods(){
// 
//         FrontierMethod methods[] = new FrontierMethod[methodsMap.size()];
//         methodsMap.values().toArray(methods);
//         return methods;
// 
// 
//     }
// }
// 
// Path: Web/src/main/java/org/emerjoin/hi/web/frontier/model/FrontierMethod.java
// public class FrontierMethod {
// 
//     private String name;
//     private HashMap<String,MethodParam> paramsMap = new HashMap();
//     private List<MethodParam> paramList = new ArrayList<MethodParam>();
//     private Method method;
// 
//     public FrontierMethod(String name, Method method){
//         this.name = name;
//         this.method = method;
// 
//     }
// 
// 
//     public MethodParam[] getParams(){
// 
//         MethodParam methodParam[] = new MethodParam[paramsMap.size()];
//         paramList.toArray(methodParam);
//         return methodParam;
// 
//     }
// 
//     public void addParam(MethodParam param){
// 
//         paramsMap.put(param.getName(),param);
//         paramList.add(param);
// 
//     }
// 
//     public boolean hasParam(String name){
// 
//         return paramsMap.containsKey(name);
// 
//     }
// 
//     public MethodParam getParam(String name){
// 
// 
//         return paramsMap.get(name);
// 
//     }
// 
//     public String getName() {
// 
//         return name;
// 
//     }
// 
//     public Method getMethod() {
//         return method;
//     }
// }
// 
// Path: Web/src/main/java/org/emerjoin/hi/web/frontier/model/MethodParam.java
// public class MethodParam {
// 
//     private String name;
//     private Class type;
//     private boolean nullable;
// 
//     public MethodParam(String name, Class type, boolean nullable){
//         this.name = name;
//         this.type = type;
//         this.nullable = nullable;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public Class getType() {
//         return type;
//     }
// 
//     public void setType(Class type) {
//         this.type = type;
//     }
// 
//     public boolean isNullable() {
//         return nullable;
//     }
// 
//     public void setNullable(boolean nullable) {
//         this.nullable = nullable;
//     }
// }


import org.emerjoin.hi.web.frontier.model.FrontierClass;
import org.emerjoin.hi.web.frontier.model.FrontierMethod;
import org.emerjoin.hi.web.frontier.model.MethodParam;
import javax.validation.ConstraintViolationException;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
package org.emerjoin.hi.web.frontier;



/**
 * Created by Mario Junior.
 */
public class FrontierInvoker {

    private FrontierClass frontier;
    private FrontierMethod method;
    private Map params;
    private Object returnedObject = new HashMap<>();


    public FrontierInvoker(FrontierClass frontierClass, FrontierMethod method, Map params){

        this.frontier = frontierClass;
        this.method = method;
        this.params = params;

    }

    public void setReturnedObject(Object value){

        if(value==null)
            throw new IllegalArgumentException("Returned value must not be null");
        this.returnedObject = value;

    }

// Path: Web/src/main/java/org/emerjoin/hi/web/frontier/model/FrontierClass.java
// public class FrontierClass {
// 
//     private HashMap<String,FrontierMethod> methodsMap = new HashMap();
//     private HashMap<String,FrontierMethod> hashedMethodsMap = new HashMap();
// 
//     private String className;
//     private String simpleName;
//     private Object object;
// 
//     public FrontierClass(String clazz,String simpleName){
// 
//         this.className = clazz;
//         this.simpleName = simpleName;
//         //this.object = object;
// 
//     }
// 
//     public String getSimpleName(){
// 
//         return simpleName;
// 
//     }
// 
//     public String getClassName() {
//         return className;
//     }
// 
//     public void addMethod(FrontierMethod method){
// 
//         this.methodsMap.put(method.getName(),method);
// 
//     }
// 
//     public boolean hasMethod(String name){
// 
//         return methodsMap.containsKey(name);
// 
// 
//     }
// 
//     public FrontierMethod getMethod(String name){
// 
//             return methodsMap.get(name);
// 
//     }
// 
// 
//     public Object getObject() {
// 
//         try {
// 
//             return CDI.current().select(Class.forName(className)).get();
// 
// 
//         }catch (Exception ex){
// 
//             return null;
// 
//         }
//     }
// 
//     public Class getFrontierClazz(){
// 
//         try {
// 
//             return Class.forName(className);
// 
//         } catch (ClassNotFoundException e) {
// 
//             return null;
// 
//         }
// 
//     }
// 
// 
// 
// 
//     public FrontierMethod[] getMethods(){
// 
//         FrontierMethod methods[] = new FrontierMethod[methodsMap.size()];
//         methodsMap.values().toArray(methods);
//         return methods;
// 
// 
//     }
// }
// 
// Path: Web/src/main/java/org/emerjoin/hi/web/frontier/model/FrontierMethod.java
// public class FrontierMethod {
// 
//     private String name;
//     private HashMap<String,MethodParam> paramsMap = new HashMap();
//     private List<MethodParam> paramList = new ArrayList<MethodParam>();
//     private Method method;
// 
//     public FrontierMethod(String name, Method method){
//         this.name = name;
//         this.method = method;
// 
//     }
// 
// 
//     public MethodParam[] getParams(){
// 
//         MethodParam methodParam[] = new MethodParam[paramsMap.size()];
//         paramList.toArray(methodParam);
//         return methodParam;
// 
//     }
// 
//     public void addParam(MethodParam param){
// 
//         paramsMap.put(param.getName(),param);
//         paramList.add(param);
// 
//     }
// 
//     public boolean hasParam(String name){
// 
//         return paramsMap.containsKey(name);
// 
//     }
// 
//     public MethodParam getParam(String name){
// 
// 
//         return paramsMap.get(name);
// 
//     }
// 
//     public String getName() {
// 
//         return name;
// 
//     }
// 
//     public Method getMethod() {
//         return method;
//     }
// }
// 
// Path: Web/src/main/java/org/emerjoin/hi/web/frontier/model/MethodParam.java
// public class MethodParam {
// 
//     private String name;
//     private Class type;
//     private boolean nullable;
// 
//     public MethodParam(String name, Class type, boolean nullable){
//         this.name = name;
//         this.type = type;
//         this.nullable = nullable;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     public Class getType() {
//         return type;
//     }
// 
//     public void setType(Class type) {
//         this.type = type;
//     }
// 
//     public boolean isNullable() {
//         return nullable;
//     }
// 
//     public void setNullable(boolean nullable) {
//         this.nullable = nullable;
//     }
// }


// Path: Web/src/main/java/org/emerjoin/hi/web/frontier/FrontierInvoker.java
import org.emerjoin.hi.web.frontier.model.FrontierClass;
import org.emerjoin.hi.web.frontier.model.FrontierMethod;
import org.emerjoin.hi.web.frontier.model.MethodParam;
import javax.validation.ConstraintViolationException;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

package org.emerjoin.hi.web.frontier;



/**
 * Created by Mario Junior.
 */
public class FrontierInvoker {

    private FrontierClass frontier;
    private FrontierMethod method;
    private Map params;
    private Object returnedObject = new HashMap<>();


    public FrontierInvoker(FrontierClass frontierClass, FrontierMethod method, Map params){

        this.frontier = frontierClass;
        this.method = method;
        this.params = params;

    }

    public void setReturnedObject(Object value){

        if(value==null)
            throw new IllegalArgumentException("Returned value must not be null");
        this.returnedObject = value;

    }

    public Object[] getCallArguments(){