@Test public void getReturnDataType() { doReturn(DataType.STRING).when(mockConverterB).getReturnDataType(); CompositeConverter compositeConverter = new CompositeConverter(mockConverterA, mockConverterB); assertEquals(DataType.STRING, compositeConverter.getReturnDataType()); }
@Test public void transform() throws Exception { doReturn("MyOutput1").when(mockConverterA).transform(any()); doReturn(DataType.builder().charset(UTF_8).build()).when(mockConverterA).getReturnDataType(); doReturn("MyOutput2").when(mockConverterB).transform(eq("MyOutput1"), eq(UTF_8)); doReturn(DataType.builder().charset(UTF_8).build()).when(mockConverterB).getReturnDataType(); CompositeConverter compositeConverter = new CompositeConverter(mockConverterA, mockConverterB); Object output = compositeConverter.transform("MyInput"); verify(mockConverterA, times(1)).transform("MyInput"); verify(mockConverterB, times(1)).transform("MyOutput1", UTF_8); assertEquals("MyOutput2", output); }
@Override public DataType getReturnDataType() { return chain.peekLast().getReturnDataType(); }
@Override default ProcessingType getProcessingType() { if (getReturnDataType().isStreamType() || getSourceDataTypes().stream().anyMatch(dataType -> dataType.isStreamType())) { return IO_RW; } else { return CPU_LITE; } }
private List<Converter> filterByResultType(List<Converter> converters, DataType result) { return filterByResult(converters, converter -> converter.getReturnDataType().getType().equals(result.getType())); }
@Override public Object transform(Object src, Charset encoding) throws TransformerException { Object current = src; Charset currentEncoding = encoding; for (Converter converter : chain) { if (currentEncoding != null) { current = converter.transform(current, currentEncoding); } else { current = converter.transform(current); } currentEncoding = converter.getReturnDataType().getMediaType().getCharset().orElse(encoding); } return current; }
public void addConverter(Converter converter) { if (registeredConverters.contains(converter)) { if (logger.isDebugEnabled()) { logger.debug("Attempting to register an already registered converter: " + converter); } return; } DataType returnDataType = converter.getReturnDataType(); if (!containsVertex(returnDataType)) { addVertex(returnDataType); } for (DataType sourceDataType : converter.getSourceDataTypes()) { if (!containsVertex(sourceDataType)) { addVertex(sourceDataType); } addEdge(sourceDataType, returnDataType, new TransformationEdge(converter)); } registeredConverters.add(converter); }
private List<Converter> filterByResultMimeType(List<Converter> converters, DataType result) { return filterByResult(converters, converter -> converter.getReturnDataType().getMediaType().matches(result.getMediaType())); }
@Test public void getReturnDataType() { doReturn(DataType.STRING).when(mockConverterB).getReturnDataType(); CompositeConverter compositeConverter = new CompositeConverter(mockConverterA, mockConverterB); assertEquals(DataType.STRING, compositeConverter.getReturnDataType()); }
@Test public void transform() throws Exception { doReturn("MyOutput1").when(mockConverterA).transform(any()); doReturn(DataType.builder().charset(UTF_8).build()).when(mockConverterA).getReturnDataType(); doReturn("MyOutput2").when(mockConverterB).transform(eq("MyOutput1"), eq(UTF_8)); doReturn(DataType.builder().charset(UTF_8).build()).when(mockConverterB).getReturnDataType(); CompositeConverter compositeConverter = new CompositeConverter(mockConverterA, mockConverterB); Object output = compositeConverter.transform("MyInput"); verify(mockConverterA, times(1)).transform("MyInput"); verify(mockConverterB, times(1)).transform("MyOutput1", UTF_8); assertEquals("MyOutput2", output); }
public void removeConverter(Converter converter) { if (!registeredConverters.contains(converter)) { if (logger.isDebugEnabled()) { logger.debug("Attempt to remove an unregistered converter: " + converter); } return; } DataType returnDataType = converter.getReturnDataType(); for (DataType sourceDataType : converter.getSourceDataTypes()) { Set<TransformationEdge> allEdges = getAllEdges(sourceDataType, returnDataType); for (TransformationEdge edge : allEdges) { if (edge.getConverter() == converter) { DataType source = getEdgeSource(edge); DataType target = getEdgeTarget(edge); removeEdge(edge); if (inDegreeOf(source) == 0 && outDegreeOf(source) == 0) { removeVertex(source); } if (inDegreeOf(target) == 0 && outDegreeOf(target) == 0) { removeVertex(target); } } } } registeredConverters.remove(converter); }