/** * Render this property as given <code>renderType</code> if a suitable {@link PropertyRenderer} for given rendering * type is available from the {@link PropertyRendererRegistry} obtained from current {@link Context} or from the * default one for current ClassLoader. * @param <R> Rendered object type * @param renderType Render type * @return Rendered property as given render type, or an empty Optional if a suitable PropertyRenderer is not * available */ default <R> Optional<R> renderIfAvailable(Class<R> renderType) { return PropertyRendererRegistry.get().getRenderer(renderType, this).map(r -> r.render(this)); }
@SuppressWarnings("unchecked") public void renderers2() { // tag::renderers2[] final PathProperty<String> TEXT = PathProperty.create("text", String.class); InputPropertyRenderer<String> textAreaInputRenderer = p -> Components.input.string(true).build(); // <1> PropertyRendererRegistry.get().register(p -> p == TEXT, textAreaInputRenderer); // <2> Input<String> input = TEXT.render(Input.class); // <3> // end::renderers2[] }
@Override public Input render(Property<? extends T> property) { ObjectUtils.argumentNotNull(property, "Property must be not null"); @SuppressWarnings("unchecked") final Property<T> p = (Property<T>) property; // try to render as Field and convert to Input return PropertyRendererRegistry.get().getRenderer(Field.class, p).map(r -> r.render(p)) .map(field -> asInput(field)).orElse(null); }
public void render() { PropertyRenderer<MyRenderingType, Object> myRenderer = PropertyRenderer.create(MyRenderingType.class, p -> new MyRenderingType(p.getType())); // <2> PropertyRendererRegistry.get().register(p -> true, myRenderer); // <3> final PathProperty<Long> ID = PathProperty.create("id", Long.class); MyRenderingType rendered = ID.render(MyRenderingType.class); // <4> } // end::renderer[]
@Override public Input render(Property<? extends T> property) { ObjectUtils.argumentNotNull(property, "Property must be not null"); @SuppressWarnings("unchecked") final Property<T> p = (Property<T>) property; // try to render as Field and convert to Input return PropertyRendererRegistry.get().getRenderer(Field.class, p).map(r -> r.render(p)) .map(field -> asInput(field)).orElse(null); }
@SuppressWarnings("unchecked") public void renderers2() { // tag::renderers2[] final PathProperty<String> TEXT = PathProperty.create("text", String.class); InputPropertyRenderer<String> textAreaInputRenderer = p -> Components.input.string(true).build(); // <1> PropertyRendererRegistry.get().register(p -> p == TEXT, textAreaInputRenderer); // <2> Input<String> input = TEXT.render(Input.class); // <3> InputFieldPropertyRenderer<String> fieldRenderer = p -> new TextArea(); // <4> // end::renderers2[] }