private SetKey findSetKey(ElementDescriptor parent, TypeDescriptor elementType) { SetKey setKey = null; if (parent != null) { setKey = parent.getAnnotation(SetKey.class); } if (setKey == null) { setKey = elementType.getAnnotation(SetKey.class); } return setKey; }
@Override public ValueType describe(PropertyPath path, TypeDescriptor type, DescribeContext context) { Versionable versionable = type.getAnnotation(Versionable.class); return ReferenceTypeMapping.describeReference(type, getTargetPath(versionable, type), context); }
@Nullable @Override public Result<String> alias(TypeDescriptor type) { Versionable versionable = type.getAnnotation(Versionable.class); if (versionable != null && !isNullOrEmpty(versionable.alias())) { return Result.of(versionable.alias()); } return Result.notFound(); }
@Override public boolean applies(PropertyPath path, TypeContext typeContext) { TypeDescriptor type = typeContext.type; Versionable versionable = type.getAnnotation(Versionable.class); return versionable != null && !isNullOrEmpty(versionable.targetPath()) && (path == null || isReferencePath(getTargetPath(versionable, type), path)); }
@Nonnull @Override public Result<String> alias(TypeDescriptor type) { JsonTypeName typeName = type.getAnnotation(JsonTypeName.class); if (typeName != null && !isNullOrEmpty(typeName.value())) { return Result.of(typeName.value()); } return Result.notFound(); }
@Nonnull @Override public Result<Map<TypeDescriptor, String>> subclasses(TypeDescriptor type) { JsonSubTypes jsonSubType = type.getAnnotation(JsonSubTypes.class); if (jsonSubType != null && jsonSubType.value().length > 0) { TypeDescriptors typeDescriptors = type.getTypeDescriptors(); Map<TypeDescriptor, String> aliasesByTypes = asList(jsonSubType.value()).stream() .collect(toMap(subType -> typeDescriptors.get(subType.value()), Type::name)); return Result.of(aliasesByTypes); } return Result.notFound(); }
@Nullable @Override public Result<Map<TypeDescriptor, String>> subclasses(TypeDescriptor type) { Versionable versionable = type.getAnnotation(Versionable.class); if (versionable != null && versionable.subclasses().length > 0) { TypeDescriptors typeDescriptors = type.getTypeDescriptors(); Map<TypeDescriptor, String> aliasesByTypes = asList(versionable.subclasses()).stream() .collect(toMap(subclass -> typeDescriptors.get(subclass.value()), Subclass::alias)); return Result.of(aliasesByTypes); } return Result.notFound(); }