@Override public ObjectType build() { final ArrayList<ObjectFieldType> fields = new ArrayList<>(); // This is to avoid stack overflow we create the object with no fields boolean needsInit = !result.isDefined(); final ObjectType objectType = result.get(() -> { MetadataType restrictionType = openRestriction.map(TypeBuilder::build).orElse(null); restrictionType = restrictionType == null ? openRestrictionType.orElse(null) : restrictionType; return new DefaultObjectType(fields, ordered, restrictionType, format, annotations); }); if (needsInit) { final List<ObjectFieldType> collect = fieldsBuilder.stream() .map((fieldBuilder) -> fieldBuilder.build()) .collect(toList()); fields.addAll(collect); } return objectType; }
DefaultMessageMetadataType(Optional<MetadataType> payloadMetadataType, Consumer<ObjectFieldTypeBuilder> payloadObjectFieldTypeBuilderConsumer, Optional<MetadataType> attributes, Consumer<ObjectFieldTypeBuilder> attributesObjectFieldTypeBuilderConsumer, Map<Class<? extends TypeAnnotation>, TypeAnnotation> annotations) { super(MetadataFormat.JAVA, annotations); this.payloadMetadataType = payloadMetadataType.map((type) -> { final ObjectFieldTypeBuilder objectFieldTypeBuilder = new ObjectFieldTypeBuilder(MetadataFormat.JAVA); objectFieldTypeBuilder.key(PAYLOAD_FIELD_NAME).required(true).value(type); Optional.ofNullable(payloadObjectFieldTypeBuilderConsumer) .ifPresent(objectFieldTypeBuilderConsumer -> payloadObjectFieldTypeBuilderConsumer.accept(objectFieldTypeBuilder)); return objectFieldTypeBuilder.build(); }); this.attributes = attributes.map((type) -> { final ObjectFieldTypeBuilder objectFieldTypeBuilder = new ObjectFieldTypeBuilder(MetadataFormat.JAVA); objectFieldTypeBuilder.key(ATTRIBUTES_FIELD_NAME).required(true).value(type); Optional.ofNullable(payloadObjectFieldTypeBuilderConsumer) .ifPresent(objectFieldTypeBuilderConsumer -> attributesObjectFieldTypeBuilderConsumer.accept(objectFieldTypeBuilder)); return objectFieldTypeBuilder.build(); }); }
DefaultMuleEventMetadataType(MessageMetadataType messageMetadataType, MetadataType errorType, ObjectType variables, Map<Class<? extends TypeAnnotation>, TypeAnnotation> annotations) { super(MetadataFormat.JAVA, annotations); final ObjectFieldTypeBuilder messageTypeBuilder = new ObjectFieldTypeBuilder(MetadataFormat.JAVA); messageTypeBuilder.key(MESSAGE_FIELD_NAME).value(messageMetadataType); messageTypeBuilder.required(true); this.messageMetadataType = messageTypeBuilder.build(); if (errorType != null) { final ObjectFieldTypeBuilder errorTypeBuilder = new ObjectFieldTypeBuilder(MetadataFormat.JAVA); errorTypeBuilder.key(ERROR_FIELD_NAME).value(errorType); errorTypeBuilder.required(true); errorFieldType = errorTypeBuilder.build(); } else { errorFieldType = null; } final ObjectFieldTypeBuilder variablesTypeBuilder = new ObjectFieldTypeBuilder(MetadataFormat.JAVA); variablesTypeBuilder.required(true); variablesTypeBuilder.key(VARIABLES_FIELD_NAME).value(variables); this.variables = variablesTypeBuilder.build(); }