public ObjectNode toJson(ObjectMapper OBJECT_MAPPER) { ObjectNode methodJson = OBJECT_MAPPER.createObjectNode(); methodJson.put("name", getName()); methodJson.put("doc", getDoc()); methodJson.put("returnDoc", getReturnDoc()); ArrayNode parametersJson = OBJECT_MAPPER.createArrayNode(); methodJson.set("parameters", parametersJson); for (SParameter parameter : parameters) { parametersJson.add(parameter.toJson(OBJECT_MAPPER)); } return methodJson; } }
public boolean isLast() { return sMethod.getParameter(sMethod.getParameters().size() - 1) == this; }
public String getPrintableName() { String r = getReturnType().getPrintableName(); if (getGenericReturnType() != null) { r += "<" + getGenericReturnType().getPrintableName() + ">"; } return r; }
throw new UserException("Method " + methodName + " not found on " + interfaceName); } else { throw new UserException("Method " + methodName + " not found on " + interfaceName + " (suggestion: " + alternative.getService().getSimpleName() + ")"); KeyValuePair[] parameters = new KeyValuePair[method.getParameters().size()]; if (request.has("parameters")) { ObjectNode parametersJson = (ObjectNode) request.get("parameters"); for (int i = 0; i < method.getParameters().size(); i++) { SParameter parameter = method.getParameter(i); if (parametersJson.has(parameter.getName())) { parameters[i] = new KeyValuePair(parameter.getName(), converter.fromJson(parameter.getType(), parameter.getGenericType(), parametersJson.get(parameter.getName()))); } else { LOGGER.error("Missing parameters: " + method.getName() + " -> " + parameter.getName()); method.invoke(sService.getInterfaceClass(), service, parameters); } catch (ServiceException e) { LOGGER.error("", e);
for (SMethod sMethod : sService.getMethods()) { String fullResultType = "void"; if (sMethod.returnsVoid()) { out.print("\tpublic void " + sMethod.getName() + "("); } else { fullResultType = sMethod.getReturnType().getName(); if (sMethod.isAggregateReturnType()) { fullResultType = sMethod.getReturnType().getName() + "<" + sMethod.getGenericReturnType().getName() + ">"; out.print("\tpublic " + fullResultType + " " + sMethod.getName() + "("); for (SParameter parameter : sMethod.getParameters()) { if (parameter.isAggregate()) { out.print(parameter.getType().getName() + "<" + parameter.getGenericType().getName() + "> " + parameter.getName() + (parameter.isLast() ? "" : ", ")); String requestClassName = StringUtils.firstUpperCase(sMethod.getName()) + "Request"; String responseClassName = StringUtils.firstUpperCase(sMethod.getName()) + "Response"; out.println("\t\t\t" + requestClassName + ".Builder requestBuilder = " + requestClassName + ".newBuilder();"); for (SParameter parameter : sMethod.getParameters()) { if (parameter.isAggregate()) { out.println("\t\t\tfor (" + parameter.getGenericType() + " val : " + parameter.getName() + ") {"); if (sMethod.returnsVoid()) { out.println("\t\t\tservice." + sMethod.getName() + "(rpcController, request);"); } else { out.println("\t\t\t" + responseClassName + " response = service." + sMethod.getName() + "(rpcController, request);"); if (sMethod.isListReturnType()) { out.println("\t\t\t" + fullResultType + " realResult = new ArrayList<" + sMethod.getGenericReturnType().getName() + ">();"); String fullTypeName = sMethod.getGenericReturnType().getName();
CtClass[] parameters = new CtClass[sMethod.getParameters().size()]; int i=0; for (org.bimserver.shared.meta.SParameter sParameter : sMethod.getParameters()) { parameters[i] = pool.get(sParameter.getType().toJavaCode()); i++; CtMethod method = new CtMethod(pool.get(sMethod.getReturnType().toJavaCode()), sMethod.getName(), parameters, reflectorImplClass); StringBuilder methodBuilder = new StringBuilder(); methodBuilder.append("{"); if (sMethod.getReturnType().isVoid()) { } else { methodBuilder.append("return (" + sMethod.getReturnType().toJavaCode() + ")"); methodBuilder.append("reflector.callMethod(\"" + interfaceClass.getSimpleName() + "\", \"" + sMethod.getName() + "\", " + sMethod.getReturnType().toJavaCode() + ".class"); if (sMethod.getParameters().isEmpty()) { methodBuilder.append(", new " + KeyValuePair.class.getName() + "[0]"); } else { methodBuilder.append(", new " + KeyValuePair.class.getName() + "[]{"); int x=1; for (SParameter sParameter : sMethod.getParameters()) { methodBuilder.append("new " + KeyValuePair.class.getName() + "(\"" + sParameter.getName() + "\", $" + x + ")"); if (sMethod.getParameter(sMethod.getParameters().size() - 1) != sParameter) { methodBuilder.append(", ");
stringBuffer.append(method.getGenericReturnType() != null ? (method.getReturnType().toJavaCode() + "<" + method.getGenericReturnType().toJavaCode() + ">") : method.getReturnType().toJavaCode()); stringBuffer.append(TEXT_8); stringBuffer.append(method.getName()); stringBuffer.append(TEXT_9); for (SParameter parameter : method.getParameters()) { if (!method.getReturnType().isVoid()) {
stringBuffer.append(StringUtils.firstUpperCase(method.getName())); stringBuffer.append(TEXT_11); stringBuffer.append(method.getReturnType().isVoid() ? "" : (method.returnTypeToJavaCode() + " result")); stringBuffer.append(TEXT_12); stringBuffer.append(method.getName()); stringBuffer.append(TEXT_8); for (SParameter parameter : method.getParameters()) { stringBuffer.append(StringUtils.firstUpperCase(method.getName())); stringBuffer.append(TEXT_18); if (method.getReturnType().isVoid()) { stringBuffer.append(TEXT_19); stringBuffer.append(method.getName()); stringBuffer.append(TEXT_8); for (SParameter sParameter : method.getParameters()) { stringBuffer.append(method.getName()); stringBuffer.append(TEXT_8); for (SParameter sParameter : method.getParameters()) {
methodBuilder.append("if (1==0) {} "); for (SMethod sMethod : sService.getMethods()) { methodBuilder.append(" else if ($2.equals(\"" + sMethod.getName() + "\")) {"); if (!sMethod.getReturnType().isVoid()) { methodBuilder.append("return "); methodBuilder.append("publicInterface." + sMethod.getName() + "("); int i=0; for (SParameter sParameter : sMethod.getParameters()) { methodBuilder.append("(" + sParameter.getType().toJavaCode() + ")$4[" + i + "].getValue()"); if (i < sMethod.getParameters().size() - 1) { methodBuilder.append(", ");
public <T extends PublicInterface, K extends PublicInterface> Object invoke(Class<K> clazz, T service, KeyValuePair[] keyValuePairs) throws ServiceException, ReflectorException { Reflector reflector = null; if (reflectorCache.containsKey(service)) { reflector = reflectorCache.get(service); } else { reflector = this.service.getServicesMap().getReflectorFactory().createReflector(clazz, service); reflectorCache.put(service, reflector); } return reflector.callMethod(clazz.getName(), getName(), getReturnType().getInstanceClass(), keyValuePairs); }
private void createResponseMessage(StringBuilder builder, SMethod method, String messageName) { if (generatedMessages.containsKey(messageName)) { return; } generatedMessages.put(messageName, messageName); StringBuilder messageBuilder = new StringBuilder(); messageBuilder.append("message " + messageName + " {\n"); messageBuilder.append("\toptional string errorMessage = 1;\n"); messageBuilder.append('\t'); if (method.isAggregateReturnType()) { messageBuilder.append("repeated "); } else { messageBuilder.append("optional "); } messageBuilder.append(createMessage(builder, method.isAggregateReturnType() ? method.getGenericReturnType() : method.getReturnType()) + " value = 2;\n"); messageBuilder.append("}\n\n"); builder.append(messageBuilder); }
int i = 0; for (FieldDescriptor fieldDescriptor : inputType.getFields()) { SParameter sParameter = sMethod.getParameter(i); Object value = request.getField(fieldDescriptor); if (value instanceof EnumValueDescriptor) { Object result = sMethod.invoke(publicInterface, service, arguments); Builder builder = response.newBuilderForType(); if (methodDescriptor.getOutputDescriptor().getName().equals("VoidResponse")) { List originalList = (List) result; for (Object object : originalList) { list.add(convertSObjectToProtocolBuffersObject((SBase) object, sMethod.getBestReturnType())); Set originalSet = (Set) result; for (Object object : originalSet) { list.add(convertSObjectToProtocolBuffersObject((SBase) object, sMethod.getBestReturnType())); builder.setField(valueField, convertSObjectToProtocolBuffersObject((SBase) result, sMethod.getBestReturnType()));
private void createRequestMessage(StringBuilder builder, SMethod method, String messageName) { if (generatedMessages.containsKey(messageName)) { return; } StringBuilder messageBuilder = new StringBuilder(); generatedMessages.put(messageName, messageName); messageBuilder.append("message " + messageName + " {\n"); int counter = 1; for (SParameter sParameter : method.getParameters()) { messageBuilder.append('\t'); if (sParameter.isAggregate()) { messageBuilder.append("repeated "); } else { messageBuilder.append("optional "); } messageBuilder.append(createMessage(builder, sParameter.getBestType()) + " " + sParameter.getName() + " = " + (counter++) + ";\n"); } messageBuilder.append("}\n\n"); builder.append(messageBuilder); } }
Object fragment = tagElement.fragments().get(i); if (i == 0 && fragment instanceof SimpleName) { parameter = method.getParameter(((SimpleName) fragment).getIdentifier()); } else if (i == 1 && parameter != null && fragment instanceof TextElement) { parameter.setDoc(((TextElement) fragment).getText()); method.setReturnDoc(extractFullText(tagElement)); } else if ("@throws".equals(tagName)) { } else { method.setDoc(extractFullText(tagElement));
String inputObjectName = StringUtils.firstUpperCase(method.getName()) + "Request"; String outputObjectName = StringUtils.firstUpperCase(method.getName()) + "Response"; createRequestMessage(messageBuilder, method, inputObjectName); if (method.returnsVoid()) { outputObjectName = "VoidResponse"; } else { createResponseMessage(messageBuilder, method, outputObjectName); serviceBuilder.append("\trpc " + method.getName() + " (" + inputObjectName + ") returns (" + outputObjectName + ");\n\n");
public SParameter(SMethod sMethod, SClass type, SClass genericType, String name) { this.sMethod = sMethod; if (type == null) { throw new RuntimeException("Type cannot be null " + sMethod.getName() + "." + name); } this.type = type; this.genericType = genericType; this.name = name; }
} else { if (arg instanceof SBase) { builder.setField(field, convertSObjectToProtocolBuffersObject((SBase) arg, sMethod.getParameter(i).getType())); } else if (arg instanceof DataHandler) { DataHandler dataHandler = (DataHandler) arg; x.add(convertProtocolBuffersMessageToSObject((DynamicMessage) v, null, sMethod.getBestReturnType())); } else { x.add(v); return enumType.findValueByName(value.toString()); } else if (value instanceof DynamicMessage) { return convertProtocolBuffersMessageToSObject((DynamicMessage) value, null, sMethod.getBestReturnType()); } else { if (definedReturnType == Date.class) {
for (Class<?> parameterType : method.getParameterTypes()) { String paramName = "arg" + parameterCounter; WebParam webParam = extractAnnotation(parameterCounter, WebParam.class); if (webParam != null) { paramName = webParam.name(); LOGGER.warn("Method " + method.getName() + " parameter " + parameterCounter + " has no @WebParam annotation"); Class<?> genericType = getGenericReturnType(parameterCounter); parameters.add(new SParameter(this, service.getServicesMap().getSType(parameterType.getName()), genericType == null ? null : service.getServicesMap().getSType(genericType.getName()), paramName)); parameterCounter++;
public synchronized MethodStats getMethodStats(SMethod sMethod) { Map<SMethod, MethodStats> map = this.methodStats.get(sMethod.getService()); if (map == null) { map = new HashMap<SMethod, MethodStats>(); this.methodStats.put(sMethod.getService(), map); } MethodStats methodStats = map.get(sMethod); if (methodStats == null) { methodStats = new MethodStats(sMethod.getService(), sMethod); map.put(sMethod, methodStats); } return methodStats; }
throw new UserException("Method " + methodName + " not found on " + interfaceName); } else { throw new UserException("Method " + methodName + " not found on " + interfaceName + " (suggestion: " + alternative.getService().getSimpleName() + ")"); KeyValuePair[] parameters = new KeyValuePair[method.getParameters().size()]; if (request.has("parameters")) { ObjectNode parametersJson = (ObjectNode) request.get("parameters"); for (int i = 0; i < method.getParameters().size(); i++) { SParameter parameter = method.getParameter(i); if (parametersJson.has(parameter.getName())) { parameters[i] = new KeyValuePair(parameter.getName(), converter.fromJson(parameter.getType(), parameter.getGenericType(), parametersJson.get(parameter.getName()))); } else { LOGGER.error("Missing parameter: " + method.getName() + " -> " + parameter.getName()); throw new UserException("Missing parameter: " + method.getName() + " -> " + parameter.getName()); Recording recording = bimServer.getMetricsRegistry().startRecording(sService, method); Object result = method.invoke(sService.getInterfaceClass(), service, parameters);