@Override public <R, T> void register(Predicate<Property<? extends T>> condition, PropertyRenderer<R, T> renderer) { ObjectUtils.argumentNotNull(condition, "Condition must be not null"); ObjectUtils.argumentNotNull(renderer, "PropertyRenderer must be not null"); ObjectUtils.argumentNotNull(renderer.getRenderType(), "PropertyRenderer rendering type must be not null"); renderers.putIfAbsent(renderer.getRenderType(), new HashMap<>(4)); renderers.get(renderer.getRenderType()).put(condition, renderer); LOGGER.debug(() -> "DefaultPropertyRendererRegistry: registered renderer [" + renderer + "] bound to condition [" + condition + "]"); }
/** * Render given property as a {@link Input}. * @param <T> Property type * @param property Property to render * @return Rendered input */ @SuppressWarnings("unchecked") protected <T> Optional<Input<T>> render(Property<T> property) { // check custom renderer final PropertyConfiguration<T> cfg = getPropertyConfiguration(property); if (cfg.getRenderer().isPresent()) { final PropertyRenderer<Input<T>, T> r = cfg.getRenderer().get(); // check render type if (!Input.class.isAssignableFrom(r.getRenderType())) { throw new IllegalStateException( "Renderer for property [" + property + "] is not of Input type: [" + r.getRenderType() + "]"); } return Optional.ofNullable(r.render(property)); } // use registry return property.renderIfAvailable(Input.class).map(i -> i); }
/** * Render given property as a {@link Input}. * @param <T> Property type * @param property Property to render * @return Rendered input */ @SuppressWarnings("unchecked") protected <T> Optional<Input<T>> render(Property<T> property) { // check custom renderer final PropertyConfiguration<T> cfg = getPropertyConfiguration(property); if (cfg.getRenderer().isPresent()) { final PropertyRenderer<Input<T>, T> r = cfg.getRenderer().get(); // check render type if (!Input.class.isAssignableFrom(r.getRenderType())) { throw new IllegalStateException( "Renderer for property [" + property + "] is not of Input type: [" + r.getRenderType() + "]"); } return Optional.ofNullable(r.render(property)); } // use registry return property.renderIfAvailable(Input.class).map(i -> i); }