Search in sources :

Example 1 with RenderableAsBlock

use of org.apache.tapestry5.internal.util.RenderableAsBlock in project tapestry-5 by apache.

the class TapestryModule method contributeTypeCoercer.

/**
 * Adds coercions:
 * <ul>
 * <li>String to {@link SelectModel}
 * <li>Map to {@link SelectModel}
 * <li>Collection to {@link GridDataSource}
 * <li>null to {@link GridDataSource}
 * <li>List to {@link SelectModel}
 * <li>{@link ComponentResourcesAware} (typically, a component) to {@link ComponentResources}
 * <li>{@link ComponentResources} to {@link PropertyOverrides}
 * <li>String to {@link Renderable}
 * <li>{@link Renderable} to {@link Block}
 * <li>String to {@link DateFormat}
 * <li>String to {@link Resource} (via {@link AssetSource#resourceForPath(String)})
 * <li>{@link Renderable} to {@link RenderCommand}</li>
 * <li>String to {@link Pattern}</li>
 * <li>String to {@link DateFormat}</li>
 * <li>{@link Resource} to {@link DynamicTemplate}</li>
 * <li>{@link Asset} to {@link Resource}</li>
 * <li>{@link ValueEncoder} to {@link ValueEncoderFactory}</li>
 * </ul>
 */
public static void contributeTypeCoercer(MappedConfiguration<CoercionTuple.Key, CoercionTuple> configuration, final ObjectLocator objectLocator, @Builtin final ThreadLocale threadLocale, @Core final AssetSource assetSource, @Core final DynamicTemplateParser dynamicTemplateParser) {
    CoercionTuple<ComponentResources, PropertyOverrides> componentResourcesToPropertyOverrides = CoercionTuple.create(ComponentResources.class, PropertyOverrides.class, new Coercion<ComponentResources, PropertyOverrides>() {

        public PropertyOverrides coerce(ComponentResources input) {
            return new PropertyOverridesImpl(input);
        }
    });
    configuration.add(componentResourcesToPropertyOverrides.getKey(), componentResourcesToPropertyOverrides);
    // See TAP5-2184 for why this causes some trouble!
    CoercionTuple<String, SelectModel> stringToSelectModel = CoercionTuple.create(String.class, SelectModel.class, new Coercion<String, SelectModel>() {

        public SelectModel coerce(String input) {
            return TapestryInternalUtils.toSelectModel(input);
        }
    });
    configuration.add(stringToSelectModel.getKey(), stringToSelectModel);
    CoercionTuple<Map, SelectModel> mapToSelectModel = CoercionTuple.create(Map.class, SelectModel.class, new Coercion<Map, SelectModel>() {

        @SuppressWarnings("unchecked")
        public SelectModel coerce(Map input) {
            return TapestryInternalUtils.toSelectModel(input);
        }
    });
    configuration.add(mapToSelectModel.getKey(), mapToSelectModel);
    CoercionTuple<Collection, GridDataSource> collectionToGridDataSource = CoercionTuple.create(Collection.class, GridDataSource.class, new Coercion<Collection, GridDataSource>() {

        public GridDataSource coerce(Collection input) {
            return new CollectionGridDataSource(input);
        }
    });
    configuration.add(collectionToGridDataSource.getKey(), collectionToGridDataSource);
    CoercionTuple<Void, GridDataSource> voidToGridDataSource = CoercionTuple.create(void.class, GridDataSource.class, new Coercion<Void, GridDataSource>() {

        private final GridDataSource source = new NullDataSource();

        public GridDataSource coerce(Void input) {
            return source;
        }
    });
    configuration.add(voidToGridDataSource.getKey(), voidToGridDataSource);
    CoercionTuple<List, SelectModel> listToSelectModel = CoercionTuple.create(List.class, SelectModel.class, new Coercion<List, SelectModel>() {

        private SelectModelFactory selectModelFactory;

        @SuppressWarnings("unchecked")
        public SelectModel coerce(List input) {
            // to another value, and a race condition is harmless.
            if (selectModelFactory == null) {
                selectModelFactory = objectLocator.getService(SelectModelFactory.class);
            }
            return selectModelFactory.create(input);
        }
    });
    configuration.add(listToSelectModel.getKey(), listToSelectModel);
    CoercionTuple<String, Pattern> stringToPattern = CoercionTuple.create(String.class, Pattern.class, new Coercion<String, Pattern>() {

        public Pattern coerce(String input) {
            return Pattern.compile(input);
        }
    });
    configuration.add(stringToPattern.getKey(), stringToPattern);
    CoercionTuple<ComponentResourcesAware, ComponentResources> componentResourcesAwareToComponentResources = CoercionTuple.create(ComponentResourcesAware.class, ComponentResources.class, new Coercion<ComponentResourcesAware, ComponentResources>() {

        public ComponentResources coerce(ComponentResourcesAware input) {
            return input.getComponentResources();
        }
    });
    configuration.add(componentResourcesAwareToComponentResources.getKey(), componentResourcesAwareToComponentResources);
    CoercionTuple<String, Renderable> stringToRenderable = CoercionTuple.create(String.class, Renderable.class, new Coercion<String, Renderable>() {

        public Renderable coerce(String input) {
            return new StringRenderable(input);
        }
    });
    configuration.add(stringToRenderable.getKey(), stringToRenderable);
    CoercionTuple<Renderable, Block> renderableToBlock = CoercionTuple.create(Renderable.class, Block.class, new Coercion<Renderable, Block>() {

        public Block coerce(Renderable input) {
            return new RenderableAsBlock(input);
        }
    });
    configuration.add(renderableToBlock.getKey(), renderableToBlock);
    CoercionTuple<String, DateFormat> stringToDateFormat = CoercionTuple.create(String.class, DateFormat.class, new Coercion<String, DateFormat>() {

        public DateFormat coerce(String input) {
            final SimpleDateFormat dateFormat = new SimpleDateFormat(input, threadLocale.getLocale());
            final String lenient = objectLocator.getService(SymbolSource.class).valueForSymbol(SymbolConstants.LENIENT_DATE_FORMAT);
            dateFormat.setLenient(Boolean.parseBoolean(lenient));
            return dateFormat;
        }
    });
    configuration.add(stringToDateFormat.getKey(), stringToDateFormat);
    CoercionTuple<String, Resource> stringToResource = CoercionTuple.create(String.class, Resource.class, new Coercion<String, Resource>() {

        public Resource coerce(String input) {
            return assetSource.resourceForPath(input);
        }
    });
    configuration.add(stringToResource.getKey(), stringToResource);
    CoercionTuple<Renderable, RenderCommand> renderableToRenderCommand = CoercionTuple.create(Renderable.class, RenderCommand.class, new Coercion<Renderable, RenderCommand>() {

        public RenderCommand coerce(final Renderable input) {
            return new RenderCommand() {

                public void render(MarkupWriter writer, RenderQueue queue) {
                    input.render(writer);
                }
            };
        }
    });
    configuration.add(renderableToRenderCommand.getKey(), renderableToRenderCommand);
    CoercionTuple<Date, Calendar> dateToCalendar = CoercionTuple.create(Date.class, Calendar.class, new Coercion<Date, Calendar>() {

        public Calendar coerce(Date input) {
            Calendar calendar = Calendar.getInstance(threadLocale.getLocale());
            calendar.setTime(input);
            return calendar;
        }
    });
    configuration.add(dateToCalendar.getKey(), dateToCalendar);
    CoercionTuple<Resource, DynamicTemplate> resourceToDynamicTemplate = CoercionTuple.create(Resource.class, DynamicTemplate.class, new Coercion<Resource, DynamicTemplate>() {

        public DynamicTemplate coerce(Resource input) {
            return dynamicTemplateParser.parseTemplate(input);
        }
    });
    configuration.add(resourceToDynamicTemplate.getKey(), resourceToDynamicTemplate);
    CoercionTuple<Asset, Resource> assetToResource = CoercionTuple.create(Asset.class, Resource.class, new Coercion<Asset, Resource>() {

        public Resource coerce(Asset input) {
            return input.getResource();
        }
    });
    configuration.add(assetToResource.getKey(), assetToResource);
    CoercionTuple<ValueEncoder, ValueEncoderFactory> valueEncoderToValueEncoderFactory = CoercionTuple.create(ValueEncoder.class, ValueEncoderFactory.class, new Coercion<ValueEncoder, ValueEncoderFactory>() {

        public ValueEncoderFactory coerce(ValueEncoder input) {
            return new GenericValueEncoderFactory(input);
        }
    });
    configuration.add(valueEncoderToValueEncoderFactory.getKey(), valueEncoderToValueEncoderFactory);
}
Also used : ValueEncoderFactory(org.apache.tapestry5.services.ValueEncoderFactory) ComponentResources(org.apache.tapestry5.ComponentResources) RenderCommand(org.apache.tapestry5.runtime.RenderCommand) Renderable(org.apache.tapestry5.Renderable) StringRenderable(org.apache.tapestry5.internal.util.StringRenderable) StringRenderable(org.apache.tapestry5.internal.util.StringRenderable) Asset(org.apache.tapestry5.Asset) List(java.util.List) SelectModelFactory(org.apache.tapestry5.services.SelectModelFactory) Resource(org.apache.tapestry5.commons.Resource) PropertyOverrides(org.apache.tapestry5.PropertyOverrides) SelectModel(org.apache.tapestry5.SelectModel) MarkupWriter(org.apache.tapestry5.MarkupWriter) ComponentResourcesAware(org.apache.tapestry5.runtime.ComponentResourcesAware) CollectionGridDataSource(org.apache.tapestry5.internal.grid.CollectionGridDataSource) Collection(java.util.Collection) RenderableAsBlock(org.apache.tapestry5.internal.util.RenderableAsBlock) Block(org.apache.tapestry5.Block) Map(java.util.Map) PropertyOverridesImpl(org.apache.tapestry5.internal.PropertyOverridesImpl) CollectionGridDataSource(org.apache.tapestry5.internal.grid.CollectionGridDataSource) GridDataSource(org.apache.tapestry5.grid.GridDataSource) ValueEncoder(org.apache.tapestry5.ValueEncoder) ContextValueEncoder(org.apache.tapestry5.services.ContextValueEncoder) RenderQueue(org.apache.tapestry5.runtime.RenderQueue) NullDataSource(org.apache.tapestry5.internal.grid.NullDataSource) Pattern(java.util.regex.Pattern) RenderableAsBlock(org.apache.tapestry5.internal.util.RenderableAsBlock) Calendar(java.util.Calendar) Date(java.util.Date) SimpleDateFormat(java.text.SimpleDateFormat) DateFormat(java.text.DateFormat) SimpleDateFormat(java.text.SimpleDateFormat) DynamicTemplate(org.apache.tapestry5.services.dynamic.DynamicTemplate)

Aggregations

DateFormat (java.text.DateFormat)1 SimpleDateFormat (java.text.SimpleDateFormat)1 Calendar (java.util.Calendar)1 Collection (java.util.Collection)1 Date (java.util.Date)1 List (java.util.List)1 Map (java.util.Map)1 Pattern (java.util.regex.Pattern)1 Asset (org.apache.tapestry5.Asset)1 Block (org.apache.tapestry5.Block)1 ComponentResources (org.apache.tapestry5.ComponentResources)1 MarkupWriter (org.apache.tapestry5.MarkupWriter)1 PropertyOverrides (org.apache.tapestry5.PropertyOverrides)1 Renderable (org.apache.tapestry5.Renderable)1 SelectModel (org.apache.tapestry5.SelectModel)1 ValueEncoder (org.apache.tapestry5.ValueEncoder)1 Resource (org.apache.tapestry5.commons.Resource)1 GridDataSource (org.apache.tapestry5.grid.GridDataSource)1 PropertyOverridesImpl (org.apache.tapestry5.internal.PropertyOverridesImpl)1 CollectionGridDataSource (org.apache.tapestry5.internal.grid.CollectionGridDataSource)1