@Override public void visitBinaryType(BinaryType binaryType) { if (property == null) { return; } if (!property.isStrict()) { ParameterGroupDeclaration group = declaration.getParameterGroup(DEFAULT_GROUP_NAME); declareOutputMimeTypeParameter(group); declareOutputEncodingParameter(group); } replaceOutputType(declaration, property, format -> { BinaryTypeBuilder builder = BaseTypeBuilder.create(format).binaryType(); enrichWithAnnotations(builder, declaration.getOutput().getType().getAnnotations()); return builder.build(); }); }
public BinaryTypeBuilder binaryType() { final BinaryTypeBuilder metadataBuilder = new BinaryTypeBuilder(format); builder = Optional.of(metadataBuilder); return metadataBuilder; }
public BinaryTypeBuilder with(TypeAnnotation extension) { this.addExtension(extension); return this; }
public BinaryTypeBuilder id(String typeIdentifier) { return with(new TypeIdAnnotation(typeIdentifier)); }
@Override public TypeBuilder<?> handleClass(Class<?> clazz, List<Type> genericTypes, TypeHandlerManager typeHandlerManager, ParsingContext context, BaseTypeBuilder<?> typeBuilder) { final BinaryTypeBuilder<?> binaryType = typeBuilder.binaryType(); final String canonicalName = clazz.getCanonicalName(); if (canonicalName != null) { binaryType.id(canonicalName); } return binaryType; } }
@Override public TypeBuilder<?> handleClass(Class<?> clazz, List<Type> genericTypes, TypeHandlerManager typeHandlerManager, ParsingContext context, BaseTypeBuilder typeBuilder) { return typeBuilder.binaryType().with(new ClassInformationAnnotation(clazz)); } }
@Test public void binaryTypeOperation() { mockOutput(operation, builder.binaryType().build()); enricher.enrich(extensionLoadingContext); assertMimeTypeParams(operation); }
@Test public void inputStreamTypeSource() { mockOutput(source, builder.binaryType().build()); enricher.enrich(extensionLoadingContext); assertMimeTypeParams(source); }
@Test public void inputStreamTypeSourceWithStrictMimeType() { mockOutput(source, builder.binaryType().build()); mockMediaType(source, true); enricher.enrich(extensionLoadingContext); assertNoMimeTypeParams(source); }
@Test public void binaryTypeOperationWithStrictMimeType() { mockOutput(operation, builder.binaryType().build()); mockMediaType(operation, true); enricher.enrich(extensionLoadingContext); assertNoMimeTypeParams(operation); }
@Test public void testModuleSingleOperationRemapping_expectsOneRemappedOperation() { final DeclarationOperation declaresOutput = new DeclarationOperation(BaseTypeBuilder.create(MetadataFormat.JSON).binaryType().build(), BaseTypeBuilder.create(MetadataFormat.XML).numberType().build()); final DeclarationOperation declaresAttributes = new DeclarationOperation(VOID_TYPE, NUMBER_TYPE); final DeclarationOperation declaresOutputAndAttributes = new DeclarationOperation(ANY_TYPE, BOOLEAN_TYPE); final DeclarationOperation declaresNothing = new DeclarationOperation(VOID_TYPE, VOID_TYPE); assertModule(of("modules/declaration/declaration-one-operation.json"), declaresOutput, declaresAttributes, declaresOutputAndAttributes, declaresNothing); }
@Test public void testModuleDoubleOperationRemapping_expectsTwoRemappedOperation() { final DeclarationOperation declaresOutput = new DeclarationOperation(BaseTypeBuilder.create(MetadataFormat.JSON).binaryType().build(), BaseTypeBuilder.create(MetadataFormat.XML).numberType().build()); final DeclarationOperation declaresAttributes = new DeclarationOperation(VOID_TYPE, NUMBER_TYPE); final DeclarationOperation declaresOutputAndAttributes = new DeclarationOperation(BaseTypeBuilder.create(MetadataFormat.XML).numberType().build(), VOID_TYPE); final DeclarationOperation declaresNothing = new DeclarationOperation(VOID_TYPE, VOID_TYPE); assertModule(of("modules/declaration/declaration-two-operations.json"), declaresOutput, declaresAttributes, declaresOutputAndAttributes, declaresNothing); }
@Test public void testModuleAllOperationRemapping_expectsAllRemappedOperation() { final DeclarationOperation declaresOutput = new DeclarationOperation(BaseTypeBuilder.create(MetadataFormat.JSON).binaryType().build(), BaseTypeBuilder.create(MetadataFormat.XML).numberType().build()); final DeclarationOperation declaresAttributes = new DeclarationOperation(BaseTypeBuilder.create(MetadataFormat.XML).dateType().build(), BaseTypeBuilder.create(MetadataFormat.CSV).numberType().build()); final DeclarationOperation declaresOutputAndAttributes = new DeclarationOperation(BaseTypeBuilder.create(MetadataFormat.XML).numberType().build(), VOID_TYPE); final DeclarationOperation declaresNothing = new DeclarationOperation(BaseTypeBuilder.create(MetadataFormat.JSON).stringType().build(), BaseTypeBuilder.create(MetadataFormat.CSV).stringType().build()); assertModule(of("modules/declaration/declaration-all-operations.json"), declaresOutput, declaresAttributes, declaresOutputAndAttributes, declaresNothing); }
@Override public void visitBinaryType(BinaryType binaryType) { if (property == null) { String componentType = NameUtils.getDeclarationTypeName(declaration); throw new IllegalModelDefinitionException(String.format( "%s '%s' has a binary output but doesn't specify a default mime type. Please annotate it with @%s", componentType, declaration.getName(), org.mule.runtime.extension.api.annotation.param.MediaType.class .getSimpleName())); } if (!property.isStrict()) { ParameterGroupDeclaration group = declaration.getParameterGroup(DEFAULT_GROUP_NAME); declareOutputMimeTypeParameter(group); declareOutputEncodingParameter(group); } replaceOutputType(declaration, property, format -> { BinaryTypeBuilder builder = BaseTypeBuilder.create(format).binaryType(); declaration.getOutput().getType().getAnnotation(ClassInformationAnnotation.class).ifPresent(builder::with); return builder.build(); }); } });
@Test public void selectAll() throws Exception { ObjectType record = getSelectOutputMetadata("select * from PLANET"); assertThat(record.getFields().size(), equalTo(5)); assertFieldOfType(record, "ID", testDatabase.getIdFieldMetaDataType()); assertFieldOfType(record, "POSITION", testDatabase.getPositionFieldMetaDataType()); assertFieldOfType(record, "NAME", typeBuilder.stringType().build()); if (testDatabase.getDbType().equals(MYSQL)) { assertFieldOfType(record, "PICTURE", typeBuilder.binaryType().build()); assertFieldOfType(record, "DESCRIPTION", typeBuilder.anyType().build()); } else { assertFieldOfType(record, "PICTURE", typeLoader.load(Blob.class)); assertFieldOfType(record, "DESCRIPTION", typeLoader.load(Clob.class)); } }