package com.alecgorge.minecraft.jsonapi.dynamic;
import java.util.ArrayList;
import org.json.simpleForBukkit.JSONArray;
import org.json.simpleForBukkit.JSONObject;
public class Method {
private String name = "Method name";
private String desc = "Method description";
private Class<?> returnValue = void.class;
private String returnDesc = "Method return desc";
private ArgumentList args = new ArgumentList();
private ArrayList<String> flags = new ArrayList<String>();
private boolean jsonapi4 = false;
public Call call;
public Method (JSONObject o, boolean jsonapi4) {
setName((String)o.get("name"));
setDesc((String)o.get("desc"));
this.jsonapi4 = jsonapi4;
if(o.get("returns") != null && o.get("returns") instanceof JSONArray) {
Class<?> c = Argument.getClassFromName((String)((JSONArray)o.get("returns")).get(0));
if(c != null) {
setReturnValue(c);
setReturnDesc((String)((JSONArray)o.get("returns")).get(1));
}
}
if(o.get("args") != null && o.get("args") instanceof JSONArray) {
JSONArray thisargs = (JSONArray)o.get("args");
for(Object obj : thisargs) {
if(obj instanceof JSONArray) {
args.add(new Argument((JSONArray) obj));
}
}
}
if(o.get("flags") != null && o.get("flags") instanceof JSONArray) {
JSONArray flags = (JSONArray)o.get("flags");
for(Object flag : flags) {
this.flags.add(flag.toString());
}
}
call = new Call(o.get("call").toString(), args, this.flags);
}
public Method (Object o, java.lang.reflect.Method m, API_Method a) {
if(a.name().isEmpty()) {
setName(m.getName());
}
else {
setName(a.name());
}
jsonapi4 = a.isProvidedByV2API();
setDesc(a.description());
setReturnValue(m.getReturnType());
setReturnDesc(a.returnDescription());
int i = 0;
for(Class<?> c : m.getParameterTypes()) {
args.add(new Argument(c, a.argumentDescriptions().length > i ? a.argumentDescriptions()[i] : ""));
i++;
}
call = new Call(o, m, args);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setReturnValue(Class<?> returnValue) {
this.returnValue = returnValue;
}
public Class<?> getReturnValue() {
return returnValue;
}
public void setReturnDesc(String returnDesc) {
this.returnDesc = returnDesc;
}
public String getReturnDesc() {
return returnDesc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
public void setCall(Call call) {
this.call = call;
}
public Call getCall() {
return call;
}
public ArgumentList getArgs() {
return args;
}
public boolean isProvidedByV2API() {
return jsonapi4;
}
}