@Override public void applyLifecycle(Object o) throws LifecycleException { if (o instanceof SpringRegistry) { ((SpringRegistry) o).doDispose(); } else if (o instanceof Transformer) { String name = ((Transformer) o).getName(); if (isNamedBean(name)) { super.applyLifecycle(o); } } else { super.applyLifecycle(o); } }
@Override public void applyLifecycle(Object o) throws LifecycleException { try { o = muleContext.getInjector().inject(o); } catch (MuleException e) { throw new LifecycleException(e, o); } if (o instanceof Transformer) { String name = ((Transformer) o).getName(); if (isNamedBean(name)) { super.applyLifecycle(o); } } else { super.applyLifecycle(o); } }
public Transformer build() { Transformer transformer; if (name == null || name.isEmpty()) { transformer = mock(getClassToMock()); } else { transformer = mock(getClassToMock(), name); doReturn(name).when(transformer).getName(); } if (resultDataType != null) { doReturn(resultDataType).when(transformer).getReturnDataType(); } if (sourceDataTypes != null) { doReturn(Arrays.asList(sourceDataTypes)).when(transformer).getSourceDataTypes(); when(transformer.isSourceDataTypeSupported(argThat(new SupportsSourceDataType()))).thenReturn(true); } try { doReturn(value).when(transformer).transform(Mockito.any(Object.class)); } catch (TransformerException e) { // Not going to happen during mock setup } return transformer; }
@Override public String getName() { return transformer.getName(); }
@Test public void findsCompositeTransformerEvenIfDirectNotFound() throws Exception { Transformer fruitToSeed = new MockConverterBuilder().named("fruitToSeed").from(FRUIT_DATA_TYPE).to(SEED_DATA_TYPE).build(); Transformer seedToApple = new MockConverterBuilder().named("seedToApple").from(SEED_DATA_TYPE).to(APPLE_DATA_TYPE).build(); Transformer appleToBanana = new MockConverterBuilder().named("appleToBanana").from(APPLE_DATA_TYPE).to(BANANA_DATA_TYPE).build(); Transformer bananaToBloodOrange = new MockConverterBuilder().named("bananaToBloodOrange").from(BANANA_DATA_TYPE).to(BLOOD_ORANGE_DATA_TYPE).build(); ((MuleContextWithRegistry) muleContext).getRegistry().registerTransformer(fruitToSeed); ((MuleContextWithRegistry) muleContext).getRegistry().registerTransformer(seedToApple); ((MuleContextWithRegistry) muleContext).getRegistry().registerTransformer(appleToBanana); ((MuleContextWithRegistry) muleContext).getRegistry().registerTransformer(bananaToBloodOrange); Transformer trans = ((MuleContextWithRegistry) muleContext).getRegistry().lookupTransformer(FRUIT_DATA_TYPE, BLOOD_ORANGE_DATA_TYPE); assertThat(trans, is(notNullValue())); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); //The same should be returned if we ask for it with compatible data types trans = ((MuleContextWithRegistry) muleContext).getRegistry().lookupTransformer(FRUIT_DATA_TYPE, ORANGE_DATA_TYPE); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); trans = ((MuleContextWithRegistry) muleContext).getRegistry().lookupTransformer(PEACH_DATA_TYPE, BLOOD_ORANGE_DATA_TYPE); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); trans = ((MuleContextWithRegistry) muleContext).getRegistry().lookupTransformer(PEACH_DATA_TYPE, ORANGE_DATA_TYPE); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); }
@Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append("TransformerWeighting"); sb.append("{inputClass=").append(inputClass); sb.append(", inputWeighting=").append(inputWeighting); sb.append(", outputClass=").append(outputClass); sb.append(", outputWeighting=").append(outputWeighting); sb.append(", transformer=").append(transformer.getName()); sb.append('}'); return sb.toString(); } }
@Test public void closestToTypesTransformerIsFoundEvenIfWeightIsLess() throws Exception { Transformer bananaToBloodOrange = new MockConverterBuilder().named("bananaToBloodOrange").from(BANANA_DATA_TYPE) .to(BLOOD_ORANGE_DATA_TYPE).weighting(10).build(); Transformer bananaToOrange = new MockConverterBuilder().named("bananaToOrange").from(BANANA_DATA_TYPE).to(ORANGE_DATA_TYPE).weighting(1).build(); ((MuleContextWithRegistry) muleContext).getRegistry().registerTransformer(bananaToBloodOrange); ((MuleContextWithRegistry) muleContext).getRegistry().registerTransformer(bananaToOrange); Transformer trans = ((MuleContextWithRegistry) muleContext).getRegistry().lookupTransformer(BANANA_DATA_TYPE, ORANGE_DATA_TYPE); assertThat(trans, is(notNullValue())); assertThat(trans.getName(), is("bananaToOrange")); }
@Override public void applyLifecycle(Object o) throws LifecycleException { if (o instanceof Transformer) { String name = ((Transformer) o).getName(); if (isNamedBean(name)) { super.applyLifecycle(o); } } else { super.applyLifecycle(o); } } }
private static <S, R> R attemptTransformation(DataType sourceDataType, S source, DataType resultDataType, MuleContext muleContext) { Transformer transformer; try { transformer = ((MuleContextWithRegistries) muleContext).getRegistry().lookupTransformer(sourceDataType, resultDataType); } catch (TransformerException e) { LOGGER.debug("Could not find a transformer from type {} to {}", sourceDataType.getType().getName(), resultDataType.getType().getName()); return null; } LOGGER.debug("Located transformer {} from type {} to type {}. Attempting transformation...", transformer.getName(), sourceDataType.getType().getName(), resultDataType.getType().getName()); try { return (R) transformer.transform(source); } catch (TransformerException e) { if (LOGGER.isDebugEnabled()) { LOGGER.debug( format("Transformer %s threw exception while trying to transform an object of type %s into a %s", transformer.getName(), sourceDataType.getType().getName(), resultDataType.getType().getName()), e); } return null; } }
@Override public void applyLifecycle(Object o) throws LifecycleException { if (o instanceof SpringRegistry) { ((SpringRegistry) o).doDispose(); } else if (o instanceof Transformer) { String name = ((Transformer) o).getName(); if (isNamedBean(name)) { super.applyLifecycle(o); } } else { super.applyLifecycle(o); } } }
@Test public void testCacheUpdate() throws Exception { DataType sourceType = DataType.fromType(FilterInputStream.class); MuleRegistry registry = ((MuleContextWithRegistry) muleContext).getRegistry(); Transformer trans = registry.lookupTransformer(sourceType, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof InputStreamToByteArray); Transformer trans2 = new FilterInputStreamToByteArray(); registry.registerTransformer(trans2); trans = registry.lookupTransformer(sourceType, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof FilterInputStreamToByteArray); trans = registry.lookupTransformer(INPUT_STREAM, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof InputStreamToByteArray); registry.unregisterTransformer(trans2.getName()); trans = registry.lookupTransformer(sourceType, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof InputStreamToByteArray); }
public Transformer build() { Transformer transformer; if (name == null || name.isEmpty()) { transformer = mock(getClassToMock()); } else { transformer = mock(getClassToMock(), name); doReturn(name).when(transformer).getName(); } if (resultDataType != null) { doReturn(resultDataType).when(transformer).getReturnDataType(); } if (sourceDataTypes != null) { doReturn(Arrays.asList(sourceDataTypes)).when(transformer).getSourceDataTypes(); when(transformer.isSourceDataTypeSupported((DataType) argThat(new SupportsSourceDataType()))).thenReturn(true); } try { doReturn(value).when(transformer).transform(Mockito.any(Object.class)); } catch (TransformerException e) { // Not going to happen during mock setup } return transformer; }
@Override protected void doRegisterTransformer(TransformerBootstrapProperty bootstrapProperty, Class<?> returnClass, Class<? extends Transformer> transformerClass) throws Exception { Transformer trans = ClassUtils.instantiateClass(transformerClass); if (!(trans instanceof DiscoverableTransformer)) { throw new RegistrationException(CoreMessages.transformerNotImplementDiscoverable(trans)); } if (returnClass != null) { DataTypeParamsBuilder builder = DataType.builder().type(returnClass); if (isNotEmpty(bootstrapProperty.getMimeType())) { builder = builder.mediaType(bootstrapProperty.getMimeType()); } trans.setReturnDataType(builder.build()); } if (bootstrapProperty.getName() != null) { trans.setName(bootstrapProperty.getName()); } else { // Prefixes the generated default name to ensure there is less chance of conflict if the user registers // the transformer with the same name trans.setName("_" + trans.getName()); } ((MuleContextWithRegistries) muleContext).getRegistry().registerTransformer(trans); }
@Test public void findsCompositeTransformerEvenIfDirectNotFound() throws Exception { Transformer fruitToSeed = new MockConverterBuilder().named("fruitToSeed").from(FRUIT_DATA_TYPE).to(SEED_DATA_TYPE).build(); Transformer seedToApple = new MockConverterBuilder().named("seedToApple").from(SEED_DATA_TYPE).to(APPLE_DATA_TYPE).build(); Transformer appleToBanana = new MockConverterBuilder().named("appleToBanana").from(APPLE_DATA_TYPE).to(BANANA_DATA_TYPE).build(); Transformer bananaToBloodOrange = new MockConverterBuilder().named("bananaToBloodOrange").from(BANANA_DATA_TYPE).to(BLOOD_ORANGE_DATA_TYPE).build(); ((MuleContextWithRegistries) muleContext).getRegistry().registerTransformer(fruitToSeed); ((MuleContextWithRegistries) muleContext).getRegistry().registerTransformer(seedToApple); ((MuleContextWithRegistries) muleContext).getRegistry().registerTransformer(appleToBanana); ((MuleContextWithRegistries) muleContext).getRegistry().registerTransformer(bananaToBloodOrange); Transformer trans = ((MuleContextWithRegistries) muleContext).getRegistry().lookupTransformer(FRUIT_DATA_TYPE, BLOOD_ORANGE_DATA_TYPE); assertThat(trans, is(notNullValue())); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); //The same should be returned if we ask for it with compatible data types trans = ((MuleContextWithRegistries) muleContext).getRegistry().lookupTransformer(FRUIT_DATA_TYPE, ORANGE_DATA_TYPE); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); trans = ((MuleContextWithRegistries) muleContext).getRegistry().lookupTransformer(PEACH_DATA_TYPE, BLOOD_ORANGE_DATA_TYPE); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); trans = ((MuleContextWithRegistries) muleContext).getRegistry().lookupTransformer(PEACH_DATA_TYPE, ORANGE_DATA_TYPE); assertThat(trans, instanceOf(CompositeConverter.class)); assertThat(trans.getName(), is("fruitToSeedseedToAppleappleToBananabananaToBloodOrange")); }
@Test public void closestToTypesTransformerIsFoundEvenIfWeightIsLess() throws Exception { Transformer bananaToBloodOrange = new MockConverterBuilder().named("bananaToBloodOrange").from(BANANA_DATA_TYPE) .to(BLOOD_ORANGE_DATA_TYPE).weighting(10).build(); Transformer bananaToOrange = new MockConverterBuilder().named("bananaToOrange").from(BANANA_DATA_TYPE).to(ORANGE_DATA_TYPE).weighting(1).build(); ((MuleContextWithRegistries) muleContext).getRegistry().registerTransformer(bananaToBloodOrange); ((MuleContextWithRegistries) muleContext).getRegistry().registerTransformer(bananaToOrange); Transformer trans = ((MuleContextWithRegistries) muleContext).getRegistry().lookupTransformer(BANANA_DATA_TYPE, ORANGE_DATA_TYPE); assertThat(trans, is(notNullValue())); assertThat(trans.getName(), is("bananaToOrange")); }
@Test public void testCacheUpdate() throws Exception { DataType sourceType = DataType.fromType(FilterInputStream.class); MuleRegistry registry = ((MuleContextWithRegistries) muleContext).getRegistry(); Transformer trans = registry.lookupTransformer(sourceType, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof InputStreamToByteArray); Transformer trans2 = new FilterInputStreamToByteArray(); registry.registerTransformer(trans2); trans = registry.lookupTransformer(sourceType, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof FilterInputStreamToByteArray); trans = registry.lookupTransformer(INPUT_STREAM, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof InputStreamToByteArray); registry.unregisterTransformer(trans2.getName()); trans = registry.lookupTransformer(sourceType, BYTE_ARRAY); assertNotNull(trans); assertTrue(trans instanceof InputStreamToByteArray); }