@Override public void visitArrayType(ArrayType arrayType) { Optional<Class<Object>> optionalItemClass = getType(arrayType.getType()); if (optionalItemClass.isPresent()) { Class<Object> itemClass = optionalItemClass.get(); if (Collection.class.isAssignableFrom(type)) { dataType.set(DataType.builder() .collectionType((Class<? extends Collection>) type) .itemType(itemClass) .build()); } else if (Iterator.class.isAssignableFrom(type)) { dataType.set(DataType.builder() .streamType((Class<? extends Iterator>) type) .itemType(itemClass) .build()); } else { defaultVisit(arrayType); } } else { defaultVisit(arrayType); } }
@Test public void createsDataTypeForNonCollection() { final DataType dataType = DataType.builder().collectionType(List.class).itemType(type).itemMediaType(mimeType).build(); assertThat(dataType.getType(), equalTo(List.class)); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); final DataType itemDataType = ((DefaultCollectionDataType) dataType).getItemDataType(); assertThat(itemDataType.getType(), equalTo(type)); assertThat(itemDataType.getMediaType().getPrimaryType(), is(mimeType.split("/")[0])); assertThat(itemDataType.getMediaType().getSubType(), is(mimeType.split("/")[1])); } }
@Test public void buildTypedCollectionFromImplementationClass() { final DataType dataType = DataType.builder().collectionType(SpecificCollection.class).build(); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); assertThat(dataType.getType(), is(equalTo(SpecificCollection.class))); assertThat(((DefaultCollectionDataType) dataType).getItemDataType(), is(STRING)); }
@Test public void buildTypedCollection() { final DataType dataType = DataType.builder() .collectionType(List.class) .itemType(String.class) .itemMediaType(APPLICATION_JSON) .build(); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); assertThat(dataType.getType(), is(equalTo(List.class))); DataType itemDataType = ((DefaultCollectionDataType) dataType).getItemDataType(); assertThat(itemDataType.getType(), equalTo(String.class)); assertThat(itemDataType.getMediaType(), is(APPLICATION_JSON)); }
@Test @Description("Test that repeatable iterator in typed value is consumed into a list while maintaining the collection data type") public void consumeTypedRepeatableIteratorTypedValue() throws Exception { CursorIteratorProvider payload = asCursorProvider(TEST_LIST); TypedValue original = new TypedValue(payload, DataType.builder() .collectionType(ArrayList.class) .itemType(String.class) .build()); TypedValue consumed = consumeRepeatableValue(original); assertConsumedObjectStream(payload, consumed); DataType dataType = consumed.getDataType(); assertThat(dataType, is(instanceOf(CollectionDataType.class))); assertThat(((CollectionDataType) dataType).getItemDataType(), equalTo(STRING)); }
@Test public void templateTypedCollection() { final DataType template = DataType.builder() .collectionType(List.class) .itemType(String.class) .itemMediaType("application/json;charset=UTF-8") .mediaType("text/plain;charset=ASCII") .build(); final DataType dataType = DataType.builder(template).build(); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); assertThat(dataType.getType(), is(equalTo(List.class))); assertThat(((DefaultCollectionDataType) dataType).getItemDataType(), is(assignableTo(STRING))); assertThat(((DefaultCollectionDataType) dataType).getItemDataType().getMediaType().getPrimaryType(), is("application")); assertThat(((DefaultCollectionDataType) dataType).getItemDataType().getMediaType().getSubType(), is("json")); assertThat(((DefaultCollectionDataType) dataType).getItemDataType().getMediaType().getCharset().get(), is(UTF_8)); assertThat(dataType.getMediaType().getPrimaryType(), is("text")); assertThat(dataType.getMediaType().getSubType(), is("plain")); assertThat(dataType.getMediaType().getCharset().get(), is(US_ASCII)); }
@Test @Description("Test that repeatable iterator is consumed into a list while maintaining the collection data type") public void consumeTypedRepeatableIteratorPayload() throws Exception { CursorIteratorProvider payload = asCursorProvider(TEST_LIST); DataType dataType = DataType.builder().collectionType(ArrayList.class).itemType(String.class).build(); CoreEvent event = consumeRepeatablePayload(getEventBuilder().message(Message.builder() .payload(new TypedValue<>(payload, dataType)) .build()) .build()); assertConsumedObjectStream(payload, event); dataType = event.getMessage().getPayload().getDataType(); assertThat(dataType, is(instanceOf(CollectionDataType.class))); assertThat(((CollectionDataType) dataType).getItemDataType(), equalTo(STRING)); }
assertThat(fooVar2.getDataType(), equalTo(DataType.builder().collectionType(List.class).itemType(String.class).build())); assertThat(((List<String>) fooVar2.getValue()), hasItems(fooVar2Value1, fooVar2Value2)); assertThat(fooVar3.getDataType(), equalTo(DataType.builder().collectionType(List.class).itemType(Object.class).build())); assertThat(((List<Object>) fooVar3.getValue()), hasItems(fooVar3Value1, fooVar3Value2));
@Override public InternalMessage.CollectionBuilder collectionValue(Collection payload, Class<?> clazz) { requireNonNull(payload); this.payload = new TypedValue<>(payload, builder().collectionType(payload.getClass()).itemType(clazz).build()); return this; }
List newList = new ArrayList(); newList.add(routeVars.get(key).getValue()); routeVars.put(key, new TypedValue(newList, DataType.builder().collectionType(List.class) .itemType(routeVars.get(key).getDataType().getType()).build())); } else { routeVars.put(key, new TypedValue(valueList, DataType.builder().collectionType(List.class).build()));
@Override public void visitArrayType(ArrayType arrayType) { Class itemClass = getType(arrayType.getType()).get(); if (Collection.class.isAssignableFrom(type)) { dataType.set(DataType.builder() .collectionType((Class<? extends Collection>) type) .itemType(itemClass) .build()); } else if (Iterator.class.isAssignableFrom(type)) { dataType.set(DataType.builder() .streamType((Class<? extends Iterator>) type) .itemType(itemClass) .build()); } else { defaultVisit(arrayType); } }
@Test public void createsDataTypeForNonCollection() { final DataType dataType = DataType.builder().collectionType(List.class).itemType(type).itemMediaType(mimeType).build(); assertThat(dataType.getType(), equalTo(List.class)); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); final DataType itemDataType = ((DefaultCollectionDataType) dataType).getItemDataType(); assertThat(itemDataType.getType(), equalTo(type)); assertThat(itemDataType.getMediaType().getPrimaryType(), is(mimeType.split("/")[0])); assertThat(itemDataType.getMediaType().getSubType(), is(mimeType.split("/")[1])); } }
@Test public void buildTypedCollectionFromImplementationClass() { final DataType dataType = DataType.builder().collectionType(SpecificCollection.class).build(); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); assertThat(dataType.getType(), is(equalTo(SpecificCollection.class))); assertThat(((DefaultCollectionDataType) dataType).getItemDataType(), is(STRING)); }
@Test public void buildTypedCollection() { final DataType dataType = DataType.builder() .collectionType(List.class) .itemType(String.class) .itemMediaType(APPLICATION_JSON) .build(); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); assertThat(dataType.getType(), is(equalTo(List.class))); DataType itemDataType = ((DefaultCollectionDataType) dataType).getItemDataType(); assertThat(itemDataType.getType(), equalTo(String.class)); assertThat(itemDataType.getMediaType(), is(APPLICATION_JSON)); }
@Test public void templateTypedCollection() { final DataType template = DataType.builder() .collectionType(List.class) .itemType(String.class) .itemMediaType("application/json;charset=UTF-8") .mediaType("text/plain;charset=ASCII") .build(); final DataType dataType = DataType.builder(template).build(); assertThat(dataType, instanceOf(DefaultCollectionDataType.class)); assertThat(dataType.getType(), is(equalTo(List.class))); assertThat(((DefaultCollectionDataType) dataType).getItemDataType(), is(assignableTo(STRING))); assertThat(((DefaultCollectionDataType) dataType).getItemDataType().getMediaType().getPrimaryType(), is("application")); assertThat(((DefaultCollectionDataType) dataType).getItemDataType().getMediaType().getSubType(), is("json")); assertThat(((DefaultCollectionDataType) dataType).getItemDataType().getMediaType().getCharset().get(), is(UTF_8)); assertThat(dataType.getMediaType().getPrimaryType(), is("text")); assertThat(dataType.getMediaType().getSubType(), is("plain")); assertThat(dataType.getMediaType().getCharset().get(), is(US_ASCII)); }
if (originalDataType instanceof CollectionDataType) { final CollectionDataType collectionDataType = (CollectionDataType) originalDataType; newDataType = DataType.builder(originalDataType).collectionType(consumed.getClass()) .itemType(collectionDataType.getItemDataType().getType()) .itemMediaType(collectionDataType.getItemDataType().getMediaType())
@Test @Description("Test that repeatable iterator is consumed into a list while maintaining the collection data type") public void consumeTypedRepeatableIteratorPayload() throws Exception { CursorIteratorProvider payload = asCursorProvider(TEST_LIST); DataType dataType = DataType.builder().collectionType(ArrayList.class).itemType(String.class).build(); CoreEvent event = consumeRepeatablePayload(getEventBuilder().message(Message.builder() .payload(new TypedValue<>(payload, dataType)) .build()) .build()); assertConsumedObjectStream(payload, event); dataType = event.getMessage().getPayload().getDataType(); assertThat(dataType, is(instanceOf(CollectionDataType.class))); assertThat(((CollectionDataType) dataType).getItemDataType(), equalTo(STRING)); }
assertThat(fooVar2.getDataType(), equalTo(DataType.builder().collectionType(List.class).itemType(String.class).build())); assertThat(((List<String>) fooVar2.getValue()), hasItems(fooVar2Value1, fooVar2Value2)); assertThat(fooVar3.getDataType(), equalTo(DataType.builder().collectionType(List.class).itemType(Object.class).build())); assertThat(((List<Object>) fooVar3.getValue()), hasItems(fooVar3Value1, fooVar3Value2));