package jeql.man;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import jeql.api.annotation.Metadata;
import jeql.util.ClassUtil;
import jeql.util.StringUtil;
public class ManUtil {
public static String description(Class<?> clz) {
Metadata doc = clz.getAnnotation(Metadata.class);
if (doc != null)
return doc.description();
return "";
}
public static String name(Annotation[] anno) {
for (int i = 0; i < anno.length; i++) {
if (anno[i] instanceof Metadata) {
Metadata doc = (Metadata) anno[i];
if (doc != null)
return doc.name();
}
}
return "";
}
public static String name(Method m) {
Metadata doc = m.getAnnotation(Metadata.class);
return (doc == null) ? "" : doc.name();
}
public static String description(Annotation[] anno) {
for (int i = 0; i < anno.length; i++) {
if (anno[i] instanceof Metadata) {
Metadata doc = (Metadata) anno[i];
if (doc != null)
return doc.description();
}
}
return "";
}
public static String description(Method m) {
Metadata doc = m.getAnnotation(Metadata.class);
String desc = (doc == null) ? "" : doc.description();
return desc;
}
public static String values(Method m) {
Metadata doc = m.getAnnotation(Metadata.class);
String values = "";
if (doc != null) {
String[] vals = doc.values();
if (vals.length > 0) {
values = "[ Values: " + StringUtil.join(", ", vals) + " ]";
}
}
return values;
}
public static boolean isMultiple(Method m) {
Metadata doc = m.getAnnotation(Metadata.class);
return (doc == null) ? false : doc.isMultiple();
}
public static boolean isRequired(Method m) {
Metadata doc = m.getAnnotation(Metadata.class);
return (doc == null) ? false : doc.isRequired();
}
public static String multiplicityCode(Method method) {
String code = " ";
if (isRequired(method)) {
code = isMultiple(method) ? "+" : "!";
} else {
code = isMultiple(method) ? "*" : " ";
}
return code;
}
public static String multiplicitySpec(Method method) {
String code = (isRequired(method) ? "Required" : "Optional")
+ (isMultiple(method) ? "; Multipe" : "");
return code;
}
public static String resultType(Method meth) {
return ClassUtil.classname(meth.getReturnType().getName());
}
public static String paramTypeList(Method meth) {
StringBuffer pd = new StringBuffer();
Class[] param = meth.getParameterTypes();
for (int i = 0; i < param.length; i++) {
if (i > 0)
pd.append(", ");
pd.append(ClassUtil.classname(param[i]));
}
return pd.toString();
}
public static String functionParamDoc(Method meth) {
StringBuffer pd = new StringBuffer();
Class[] param = meth.getParameterTypes();
Annotation[][] anno = meth.getParameterAnnotations();
for (int i = 0; i < param.length; i++) {
if (i > 0)
pd.append("\n");
String annoName = name(anno[i]);
String name = annoName.length() == 0 ? ("arg" + i) : annoName;
pd.append(name + ": ");
pd.append(ClassUtil.classname(param[i]));
pd.append(" ");
pd.append(description(anno[i]));
}
return pd.toString();
}
public static String functionDoc(Method m) {
return description(m) + "\n\n" + functionParamDoc(m);
}
}