protected MApiOperationBuilder toApiOperation(MetaApi mapi, MetaOperation mop) { MApiOperationBuilder op = new MApiOperationBuilder(); MetaUtils.copyNamed(mop, op); op.trySetSummary(op.getTitle()); op.setName(mop.getName()); op.setMethod(mop.getMethod()); op.setAllowAnonymous(mop.isAnonymous()); op.setDeprecated(mop.isDeprecated()); if(null != mop.getConsumes()) { mop.getConsumes().forEach(op::addConsume); } if(null != mop.getProduces()) { mop.getProduces().forEach(op::addProduce); } mop.getParameters().forEach(mp -> { op.addParameter(toApiParameter(mapi, op.getMethod(), mp)); }); mop.getResponses().forEach(mr -> { op.addResponse(toApiResponse(mr)); }); toApiSecurity(mapi, mop, op); if(null != mop.getTags()) { mop.getTags().forEach(op::addTag); } if(op.getTags().isEmpty()) { op.addTag("Default"); } return op; }
protected void processOperation(ApiMetadataContext context, Map<Class<?>, ClassDoc> docs, MApiOperationBuilder o) { ReflectMethod method = o.getRoute().getAction().getMethod(); //operation if(null != method) { ClassDoc cdoc = resolveClassDoc(docs, method.getDeclaringClass(), false); MethodDoc mdoc = cdoc.methods.get(method.getName()); if(null != mdoc) { if(!Strings.isEmpty(mdoc.description)) { o.setDescription(mdoc.description); } if(!Strings.isEmpty(mdoc.response)) { for(MApiResponseBuilder resp : o.getResponses()) { if(resp.getStatus() >= 200 && resp.getStatus() < 300) { resp.setDescription(mdoc.response); break; } } } //parameters o.getParameters().forEach((param) -> processParameter(context, docs, mdoc, param, method)); } } }
protected void preProcessPath(ApiMetadataContext context, ApiMetadataBuilder m, MApiPathBuilder p) { p.getOperations().forEach(op -> { //operation tag createOperationTags(context, m, op.getRoute(), p, op); //operation id if(Strings.isEmpty(op.getId())) { strategy.tryCreateOperationId(context.getConfig(), m, p, op); } }); }
@Override public MApiOperationBuilder createOperation(ApiMetadataContext context, ApiMetadataBuilder m, Route route) { MApiOperationBuilder op = route.getAction().getExtension(MApiOperationBuilder.class); if(null != op){ op.setRoute(route); return op; } op = new MApiOperationBuilder(route); op.setName(route.getAction().getName()); op.setCorsEnabled(route.isCorsEnabled()); //Set http method setApiMethod(context, m, route, op); log.debug(" {}", op.getMethod()); //Create security createApiSecurity(context, m, route, op); //Create parameters. createApiParameters(context, m, route, op); //Create responses. createApiResponses(context, m, route, op); return op; }
mo = new MApiOperationBuilder(); mo.setName(op.getName()); mo.setMethod(HTTP.Method.valueOf(verb)); }else if(null != mo.getMethod()) { verb = mo.getMethod().name(); if(!fi.getName().startsWith("_")) { action.setName(fi.getName()); mo.setName(fi.getName()); if(mo.getParameter(name) != null) { continue; p.setType(MSimpleTypes.STRING); p.setRequired(true); mo.addParameter(p); if(mo.getResponses().isEmpty()) { MApiResponseBuilder r = new MApiResponseBuilder(); r.setStatus(200); r.setDescription("OK"); mo.addResponse(r); hasReturnType = false; }else{ MApiResponseBuilder r = mo.getResponses().get(0); if(null == r.getType()) { hasReturnType = false;
protected MApiOperationBuilder readOperation(ApiMetadataBuilder m, MApiPathBuilder p, String method, Map<String,Object> map) { MApiOperationBuilder mo = new MApiOperationBuilder(); mo.setMethod(HTTP.Method.valueOf(method.toUpperCase())); mo.setCorsEnabled(o.get(X_CORS, Boolean.class)); mo.setSummary(o.getString(SUMMARY)); mo.setDescription(o.getString(DESCRIPTION)); mo.setDeprecated(o.get(DEPRECATED, Boolean.class, false)); MApiSecurityReq sec = new MApiSecurityReq(entry.getKey()); sec.addScopes(Collections2.toStringArray((Collection<String>)entry.getValue())); mo.getSecurity().put(sec.getName(),sec); break; mo.setAllowAnonymous(true); mo.setId(id); mo.setName(id); }else { mo.setName(mo.getMethod().name().toLowerCase());
@Override public boolean tryCreateOperationId(ApiConfig c, ApiMetadataBuilder m, MApiPathBuilder p, MApiOperationBuilder op) { if(!c.isUniqueOperationId()) { op.setId(op.getName()); return true; String name = op.getName(); String method = op.getMethod().name().toLowerCase(); for(String tag : op.getTags()) { if(!name.toLowerCase().contains(tag.toLowerCase())) {
protected void processOperation(ApiMetadataContext context, MApiOperationBuilder o) { ReflectMethod method = o.getRoute().getAction().getMethod(); //operation if(null != method) { Doc doc = method.getAnnotation(Doc.class); if(null == doc) { doc = searchUp(method); } if(null != doc) { resolveDoc(context, o, doc); } } //parameters o.getParameters().forEach((param) -> processParameter(context, param, method)); }
protected void addUpdateResponse(RestdContext ctx, SqlCommand sc, FuncActionBuilder action, MApiOperationBuilder mo) { //todo : MApiResponseBuilder r = new MApiResponseBuilder(); r.setStatus(200); r.setType(MSimpleTypes.INTEGER); r.setDescription("Success"); mo.addResponse(r); }
protected MApiParameterBuilder createApiParameter(ApiMetadataContext context, ApiMetadataBuilder m, Route route, MApiOperationBuilder op, Argument a) { MApiParameterBuilder p = new MApiParameterBuilder(); p.setName(a.getName()); p.setArgument(a); log.trace("{}", a.getName(), p.getLocation()); if(isParameterFileType(a.getType())) { p.setType(MSimpleTypes.BINARY); p.setFile(true); op.addConsume(MimeTypes.MULTIPART_FORM_DATA); }else{ p.setType(createMType(context, m, route.getAction().getControllerClass(), a.getType(), a.getGenericType())); } p.setLocation(getParameterLocation(context, route.getAction(), a, op, p)); if (null != a.getRequired()) { p.setRequired(a.getRequired()); } else if (p.getLocation() == MApiParameter.Location.PATH) { p.setRequired(true); } if(a.getType().isEnum()){ p.setEnumValues(Enums.getValues(a.getType())); } op.addParameter(p); return p; }
public MApiOperationBuilder getOperation(String method) { for(MApiOperationBuilder op : operations) { if(op.getMethod().name().equalsIgnoreCase(method)) { return op; } } return null; }
@Override public void postProcess(ApiMetadataContext context, ApiMetadataBuilder m) { m.getPaths().values().forEach(p -> { for(MApiOperationBuilder op : p.getOperations()) { Route route = op.getRoute(); if(null != route) { MetaEntity entity = route.getExtension(MetaEntity.class); MApiExtension extension = route.getExtension(MApiExtension.class); if(null != entity && null != extension) { String crud = (String)extension.getAttribute("crud"); if(!Strings.isEmpty(crud)) { doc(route, op, entity, crud); } } } } }); }
if(null != tags) { for(MApiTag tag : tags) { op.addTag(tag.getName()); if(m.getTags().get(tag.getName()) == null) { m.addTag(tag); MApiModelBuilder model = m.tryGetModel(resourceType); if(null != model) { op.addTag(model.getName()); op.addTag(resourceType.getSimpleName()); MApiTag tag = m.getTags().get(resourceType.getSimpleName()); if(null == tag) {
protected void createApiParameters(ApiMetadataContext context, ApiMetadataBuilder m, Route route, MApiOperationBuilder op) { Action action = route.getAction(); log.trace(" Parameters({})", action.getArguments().length); for(Argument a : action.getArguments()) { MApiParameterBuilder p = a.getExtension(MApiParameterBuilder.class); if(null != p) { op.addParameter(p); continue; } if(a.isWrapper()) { createApiWrapperParameter(context, m, route, op, a); if(!a.isRequestBody()) { continue; } } if(!a.isContextual()) { createApiParameter(context, m, route, op, a); } } }
mo = new MApiOperationBuilder(); mo.setName(op.getName()); mo.setMethod(HTTP.Method.valueOf(verb)); }else if(null != mo.getMethod()) { verb = mo.getMethod().name(); if(mo.getParameter(param.getName()) != null) { continue; mo.addParameter(p); if(mo.getResponses().isEmpty()) { if (sm.isSelect()) { addQueryResponse(ctx, sc, action, mo); final MType returnType = mo.getResponses().get(0).getType(); action.setFunction(new SqlFunction(od.getScriptPath(), op.key, dao, sc, returnType));
protected void addQueryResponse(RestdContext ctx, SqlCommand sc, FuncActionBuilder action, MApiOperationBuilder mo) { //todo: MApiResponseBuilder r = new MApiResponseBuilder(); r.setStatus(200); r.setType(new MCollectionType(MDictionaryType.INSTANCE)); r.setDescription("Success"); /* MApiHeaderBuilder header = new MApiHeaderBuilder(); header.setName("X-Total-Count"); header.setType(MSimpleTypes.BIGINT); header.setDescription("The total count of query records."); r.addHeader(header); */ mo.addResponse(r); }
if(null != resps && resps.length > 0) { for(MApiResponseBuilder resp : resps) { op.addResponse(resp); op.addResponse(resp); }else{ op.addResponse(MApiResponseBuilder.success(status));