/** * Bind a {@link PropertyRenderer} to the given property. The renderer will be provided when the property to render * is the same as the given property. * @param <R> Rendering type * @param <T> Property base type * @param property The property to render (not null) * @param renderer The PropertyRenderer to register (not null) */ default <R, T> void forProperty(Property<? extends T> property, PropertyRenderer<R, T> renderer) { ObjectUtils.argumentNotNull(property, "Property must be not null"); register(p -> property.equals(p), renderer); }
/** * Bind a {@link PropertyRenderer} to the given property configuration value. The renderer will be provided when the * property has the given <code>configurationProperty</code> and its value equals to given <code>value</code>. * @param <R> Rendering type * @param <T> Property base type * @param <C> Configuration property type * @param configurationProperty The configuration property to check (not null) * @param value The configuration property value to check (may be null) * @param renderer The PropertyRenderer to register (not null) */ default <R, T, C> void forPropertyConfiguration(ConfigProperty<C> configurationProperty, C value, PropertyRenderer<R, T> renderer) { ObjectUtils.argumentNotNull(configurationProperty, "Configuration property must be not null"); register(p -> p.getConfiguration().getParameter(configurationProperty).map(v -> Objects.equals(v, value)) .orElse(Boolean.FALSE), renderer); }
@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[] }
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[]
@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[] }