@Override public TypeHandler pickTypeWriter(RamlResourceMethod method, RamlMediaType producedMediaType) throws IOException { return pickTypeHandler(method.getProducedType().get().getType()); } };
public static RamlType getRamlType(TypeRegistry typeRegistry, TypeScanner scanner, String simpleName, RamlEntity genericType) { RamlType fieldRamlType; if (ScalarType.fromType(genericType.getType()).isPresent()) { // scalars return new RamlType(genericType); } if (genericType.getType() instanceof ParameterizedType) { ParameterizedType ptype = (ParameterizedType) genericType.getType(); if (Collection.class.isAssignableFrom((Class<?>) ptype.getRawType())) { RamlEntity collectionEntityType = genericType.createDependent(ptype.getActualTypeArguments()[0]); RamlType collectionType = getRamlType(typeRegistry, scanner, ((Class) ptype.getActualTypeArguments()[0]).getSimpleName(), collectionEntityType ); return RamlType.collectionOf(collectionType); } } fieldRamlType = typeRegistry.registerType(simpleName, genericType, scanner); return fieldRamlType; } }
@Override public Optional<String> describe() { return type.getDescription(); } });
private void forFields(TypeRegistry typeRegistry, RamlEntity type, RamlType ramlType, Class c) { for (Field field : c.getDeclaredFields()) { Type genericType = field.getGenericType(); RamlType fieldRamlType; fieldRamlType = PluginUtilities .getRamlType(typeRegistry, this, field.getType().getSimpleName(), type.createDependent(genericType)); JsonProperty elem = field.getAnnotation(JsonProperty.class); if (elem != null) { String name = elem.value().equals("") ? field.getName() : elem.value(); ramlType.addProperty(RamlProperty.createProperty(new FieldAnnotable(field), name, fieldRamlType)); } } }
private void forProperties(TypeRegistry typeRegistry, RamlEntity type, RamlType ramlType, Class c) { for (Method method : c.getDeclaredMethods()) { if (!(method.getName().startsWith("get") || method.getName().startsWith("is"))) { continue; } if (Modifier.isStatic(method.getModifiers())) { continue; } Type genericType = method.getGenericReturnType(); RamlType fieldRamlType; fieldRamlType = PluginUtilities .getRamlType(typeRegistry, this, method.getReturnType().getSimpleName(), type.createDependent(genericType)); JsonProperty elem = method.getAnnotation(JsonProperty.class); if (elem != null) { String name = elem.value().equals("") ? buildName(method) : elem.value(); ramlType.addProperty(RamlProperty.createProperty(new MethodAnnotable(method), name, fieldRamlType)); } } }
public RamlType registerType(final String name, final RamlEntity type) { if (types.containsKey(name)) { return types.get(name); } else { final RamlType ramlType = new RamlType(type.getType(), new Descriptor() { @Override public Optional<String> describe() { return type.getDescription(); } }); if (ramlType.isRamlScalarType()) { return ramlType; } types.put(name, ramlType); return ramlType; } }
private RamlType rebuildType(TypeRegistry registry, RamlEntity entity, TypeScanner typeScanner) { Class currentInterface = (Class) entity.getType(); Class[] interfaces = currentInterface.getInterfaces(); List<RamlType> superTypes = new ArrayList<>(); for (Class interf : interfaces) { superTypes.add(rebuildType(registry, entity.createDependent(interf), typeScanner)); } Method[] methods = currentInterface.getDeclaredMethods(); RamlType rt = registry.registerType(currentInterface.getSimpleName(), entity, typeScanner); rt.setSuperTypes(superTypes); for (Method method : methods) { if (method.getName().startsWith("get")) { String badlyCasedfieldName = method.getName().substring(3); String fieldName = Character.toLowerCase(badlyCasedfieldName.charAt(0)) + badlyCasedfieldName.substring(1); rt.addProperty(RamlProperty.createProperty( new MethodAnnotable(method), fieldName, PluginUtilities.getRamlType(registry, typeScanner, method.getReturnType() .getSimpleName(), entity.createDependent(method .getGenericReturnType()) ))); } } return rt; }
private void forFields(TypeRegistry typeRegistry, RamlEntity type, RamlType ramlType, Class c, boolean explicitOnly) { for (Field field : c.getDeclaredFields()) { if (field.isAnnotationPresent(XmlTransient.class) || Modifier.isTransient(field.getModifiers())) { continue; } if (explicitOnly && (!field.isAnnotationPresent(XmlAttribute.class) && (!field.isAnnotationPresent(XmlElement.class)))) { continue; } Type genericType = field.getGenericType(); RamlType fieldRamlType; fieldRamlType = PluginUtilities .getRamlType(typeRegistry, this, field.getType().getSimpleName(), type.createDependent(genericType)); XmlElement elem = field.getAnnotation(XmlElement.class); if (elem != null) { String name = elem.name().equals("##default") ? field.getName() : elem.name(); ramlType.addProperty(RamlProperty.createProperty(new FieldAnnotable(field), name, fieldRamlType)); } else { XmlAttribute attribute = field.getAnnotation(XmlAttribute.class); if (attribute != null) { String name = elem.name().equals("##default") ? field.getName() : elem.name(); ramlType.addProperty(RamlProperty.createProperty(new FieldAnnotable(field), name, fieldRamlType)); } else { ramlType .addProperty(RamlProperty.createProperty(new FieldAnnotable(field), field.getName(), fieldRamlType)); } } } }
@Override public Optional<String> describe() { return type.getDescription(); } });
public RamlType registerType(final String name, final RamlEntity type) { if (types.containsKey(name)) { return types.get(name); } else { final RamlType ramlType = new RamlType(type.getType(), new Descriptor() { @Override public Optional<String> describe() { return type.getDescription(); } }); if (ramlType.isRamlScalarType()) { return ramlType; } types.put(name, ramlType); return ramlType; } }
RamlType fieldRamlType; fieldRamlType = PluginUtilities .getRamlType(typeRegistry, this, method.getReturnType().getSimpleName(), type.createDependent(genericType));
private void writeBody(final TypeRegistry registry, IndentedAppendable writer, RamlMediaType mediaType, final RamlEntity bodyType) throws IOException { // find top interface. final Class topInterface = (Class) bodyType.getType(); // find fields writer.appendLine("type", topInterface.getSimpleName()); TypeScanner scanner = new TypeScanner() { @Override public void scanType(TypeRegistry typeRegistry, RamlEntity typeClass, RamlType ramlType) { // rebuild types rebuildType(typeRegistry, typeClass, this); } }; scanner.scanType(registry, bodyType, null); }
private void writeBody(TypeRegistry registry, IndentedAppendable writer, RamlMediaType mediaTypes, RamlEntity bodyType) throws IOException { Class type = (Class) bodyType.getType(); writer.appendLine("type", type.getSimpleName()); registry.registerType(type.getSimpleName(), bodyType, new SimpleJaxbTypeScanner()); }
@Override public void scanType(TypeRegistry typeRegistry, RamlEntity type, RamlType ramlType) { Class c = (Class) type.getType(); forFields(typeRegistry, type, ramlType, c); forProperties(typeRegistry, type, ramlType, c); }
private void writeBody(TypeRegistry registry, IndentedAppendable writer, RamlMediaType mediaTypes, RamlEntity bodyType) throws IOException { Class type = (Class) bodyType.getType(); writer.appendLine("type", type.getSimpleName()); registry.registerType(type.getSimpleName(), bodyType, new SimpleJaxbTypeScanner()); }
private void writeQueryParameters(Iterable<RamlQueryParameter> queryParameters, MethodBuilder builder) throws IOException { for (RamlQueryParameter parameter : queryParameters) { TypeHandler typeHandler = pickTypeHandler(parameter.getEntity().getType()); ParameterEmitter parameterEmitter = new ParameterEmitter(typeRegistry, typeHandler); ParameterBuilder parameterBuilder = parameterEmitter.emit(parameter); builder.withQueryParameter(parameterBuilder); } }
private void writeHeaderParameters(Iterable<RamlHeaderParameter> headerParameters, MethodBuilder builder) throws IOException { for (RamlHeaderParameter parameter : headerParameters) { TypeHandler typeHandler = pickTypeHandler(parameter.getEntity().getType()); ParameterEmitter parameterEmitter = new ParameterEmitter(typeRegistry, typeHandler); ParameterBuilder parameterBuilder = parameterEmitter.emit(parameter); builder.withHeaderParameters(parameterBuilder); } }
@Override public TypeBuilder writeType(final TypeRegistry registry, RamlEntity type) { AdjusterFactory factory = new AdjusterFactory() { @Override public RamlAdjuster createAdjuster(Class<?> clazz) { return new PojoToRamlExtensionFactory(topPackage).createAdjusters(clazz); } }; final PojoToRaml pojoToRaml = PojoToRamlBuilder.create(new PojoToRamlClassParserFactory(topPackage), factory); TypeBuilder name = pojoToRaml.name(type.getType()); registry.registerType(name.id(), type); return name; }
@Override public void scanType(TypeRegistry typeRegistry, RamlEntity type, RamlType ramlType) { Class c = (Class) type.getType(); XmlAccessorType accessorType = (XmlAccessorType) c.getAnnotation(XmlAccessorType.class); XmlAccessType accessType = XmlAccessType.PUBLIC_MEMBER; if (accessorType != null) { accessType = accessorType.value(); } switch (accessType) { case NONE: // only annotated break; case FIELD: // only non transient fields forFields(typeRegistry, type, ramlType, c, false); forProperties(typeRegistry, type, ramlType, c, true, false); break; case PROPERTY: // Only properties forProperties(typeRegistry, type, ramlType, c, false, false); forFields(typeRegistry, type, ramlType, c, true); break; case PUBLIC_MEMBER: forProperties(typeRegistry, type, ramlType, c, false, true); forFields(typeRegistry, type, ramlType, c, true); break; } }
Type type = method.getConsumedType().get().getType();