From fff70ed2410c2cadecb68392068622ebf1ca41aa Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Wed, 11 Jan 2017 10:03:43 +0800 Subject: [PATCH] --- src/org/redkale/boot/ApiDocs.java | 33 +++++++++++++---------- src/org/redkale/boot/apidoc-template.html | 10 +++++-- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/org/redkale/boot/ApiDocs.java b/src/org/redkale/boot/ApiDocs.java index 1ceeecb16..2f67f2040 100644 --- a/src/org/redkale/boot/ApiDocs.java +++ b/src/org/redkale/boot/ApiDocs.java @@ -8,9 +8,10 @@ package org.redkale.boot; import java.io.*; import java.lang.reflect.*; import java.util.*; -import javax.persistence.Column; +import javax.persistence.*; import org.redkale.convert.json.JsonConvert; import org.redkale.net.http.*; +import org.redkale.source.FilterBean; import org.redkale.util.*; /** @@ -31,7 +32,7 @@ public class ApiDocs extends HttpBaseServlet { public void run() throws Exception { List serverList = new ArrayList<>(); - Map>> typesmap = new LinkedHashMap<>(); + Map>> typesmap = new LinkedHashMap<>(); for (NodeServer node : app.servers) { if (!(node instanceof NodeHttpServer)) continue; final Map map = new LinkedHashMap<>(); @@ -85,8 +86,8 @@ public class ApiDocs extends HttpBaseServlet { for (final Class rtype : action.results()) { results.add(rtype.getName()); if (typesmap.containsKey(rtype.getName())) continue; - - final Map> typemap = new LinkedHashMap<>(); + final boolean filter = FilterBean.class.isAssignableFrom(rtype); + final Map> typemap = new LinkedHashMap<>(); Class loop = rtype; do { if (loop == null || loop.isInterface()) break; @@ -94,17 +95,18 @@ public class ApiDocs extends HttpBaseServlet { if (Modifier.isFinal(field.getModifiers())) continue; if (Modifier.isStatic(field.getModifiers())) continue; - Map fieldmap = new LinkedHashMap<>(); + Map fieldmap = new LinkedHashMap<>(); fieldmap.put("type", field.getType().isArray() ? (field.getType().getComponentType().getName() + "[]") : field.getGenericType().getTypeName()); Comment comment = field.getAnnotation(Comment.class); + Column col = field.getAnnotation(Column.class); if (comment != null) { fieldmap.put("comment", comment.value()); - } else { - Column col = field.getAnnotation(Column.class); - if (col != null) fieldmap.put("comment", col.comment()); + } else if (col != null) { + fieldmap.put("comment", col.comment()); } - + fieldmap.put("primary", !filter && (field.getAnnotation(Id.class) != null)); + fieldmap.put("updatable", (filter || col == null || col.updatable())); if (servlet.getClass().getAnnotation(Rest.RestDynamic.class) != null) { if (field.getAnnotation(RestAddress.class) != null) continue; } @@ -128,24 +130,27 @@ public class ApiDocs extends HttpBaseServlet { if (ptype.isPrimitive() || ptype == String.class) continue; if (typesmap.containsKey(ptype.getName())) continue; - final Map> typemap = new LinkedHashMap<>(); + final Map> typemap = new LinkedHashMap<>(); Class loop = ptype; + final boolean filter = FilterBean.class.isAssignableFrom(loop); do { if (loop == null || loop.isInterface()) break; for (Field field : loop.getDeclaredFields()) { if (Modifier.isFinal(field.getModifiers())) continue; if (Modifier.isStatic(field.getModifiers())) continue; - Map fieldmap = new LinkedHashMap<>(); + Map fieldmap = new LinkedHashMap<>(); fieldmap.put("type", field.getType().isArray() ? (field.getType().getComponentType().getName() + "[]") : field.getGenericType().getTypeName()); + Column col = field.getAnnotation(Column.class); Comment comment = field.getAnnotation(Comment.class); if (comment != null) { fieldmap.put("comment", comment.value()); - } else { - Column col = field.getAnnotation(Column.class); - if (col != null) fieldmap.put("comment", col.comment()); + } else if (col != null) { + fieldmap.put("comment", col.comment()); } + fieldmap.put("primary", !filter && (field.getAnnotation(Id.class) != null)); + fieldmap.put("updatable", (filter || col == null || col.updatable())); if (servlet.getClass().getAnnotation(Rest.RestDynamic.class) != null) { if (field.getAnnotation(RestAddress.class) != null) continue; diff --git a/src/org/redkale/boot/apidoc-template.html b/src/org/redkale/boot/apidoc-template.html index d072144b0..08dec1f55 100644 --- a/src/org/redkale/boot/apidoc-template.html +++ b/src/org/redkale/boot/apidoc-template.html @@ -57,7 +57,7 @@ html.push('' + paramshtml.join('') + ''); var rs = []; rs.push(action.result.replace(//g, ">").replace(/([a-zA-Z0-9_\$]+\.)+/g, "")); - var results = action.results || []; + var results = action.results || []; for (var r = 0; r < results.length; r++) { rs.push('' + results[r].replace(/([a-zA-Z0-9_\$]+\.)+/g, "") + ''); } @@ -73,7 +73,13 @@ for (var fieldname in classmap[type]) { var field = classmap[type][fieldname]; var t = field.type.replace(//g, ">").replace(/([a-zA-Z0-9_\$]+\.)+/g, ""); - html.push(' ' + fieldname + '' + t + '' + (field.comment || '') + ''); + var c = (field.comment || ''); + if (field.primary) { + c = '【主键】 ' + c; + } else if (!field.updatable) { + c = '【只读】 ' + c; + } + html.push(' ' + fieldname + '' + t + '' + c + ''); } html.push(' '); }