/** * Create a new {@link PathProperty} with given <code>name</code> and <code>type</code>, setting this * {@link DataTarget} as property parent path. * @param <P> Property type * @param name Property name (not null) * @param type Property value type (not null) * @return Property builder */ default <P> PathPropertyBuilder<P> property(String name, Class<? extends P> type) { return PathProperty.<P>create(name, type).parent(this); }
@SuppressWarnings("unchecked") public void renderers1() { // tag::renderers1[] final PathProperty<String> TEXT = PathProperty.create("text", String.class); final PathProperty<Long> LONG = PathProperty.create("long", Long.class); Input<String> input = TEXT.render(Input.class); // <1> Field<Long> field = LONG.render(Field.class); // <2> ViewComponent<String> view = TEXT.render(ViewComponent.class); // <3> // end::renderers1[] }
public void pscontext() { // tag::pscontext[] final PathProperty<Long> KEY = create("key", long.class); final PathProperty<String> NAME = create("name", String.class); final PropertySet<?> PROPERTIES = PropertySet.of(KEY, NAME); PropertyBox box = PROPERTIES.execute(() -> deserializePropertyBox()); // <1> // end::pscontext[] }
@SuppressWarnings("unchecked") public void renderers1() { // tag::renderers1[] final PathProperty<String> TEXT = PathProperty.create("text", String.class); final PathProperty<Long> LONG = PathProperty.create("long", Long.class); Input<String> input = TEXT.render(Input.class); // <1> Field<Long> field = LONG.render(Field.class); // <2> ViewComponent<String> view = TEXT.render(ViewComponent.class); // <3> // end::renderers1[] }
public void propertySet2() { // tag::propertyset2[] final PathProperty<String> NAME = PathProperty.create("name", String.class); final PathProperty<String> SURNAME = PathProperty.create("surname", String.class); final PropertySet<Property<?>> SET = PropertySet.of(NAME, SURNAME); // <1> boolean contains = SET.contains(NAME); // <2> SET.forEach(p -> p.toString()); // <3> String captions = SET.stream().map(p -> p.getMessage()).collect(Collectors.joining()); // <4> List<Property<?>> list = SET.asList(); // <5> // end::propertyset2[] }
public void group2() { // tag::group2[] final PathProperty<Long> ID = PathProperty.create("id", Long.class); final PathProperty<String> DESCRIPTION = PathProperty.create("description", String.class); final PropertySet<?> PROPERTIES = PropertySet.of(ID, DESCRIPTION); PropertyInputGroup group = Components.input.propertyGroup().properties(PROPERTIES).build(); // <1> // end::group2[] }
public void dataMappable1() { // tag::datamappable1[] PathProperty<Integer> property = PathProperty.create("name", Integer.class) // .dataPath("mapping-name"); // <1> Optional<String> mapping = property.getDataPath(); // <2> // end::datamappable1[] }
public void presenter() { // tag::presenter[] final PathProperty<Long> ID = PathProperty.create("id", Long.class); String stringValue = ID.present(1L); // <1> stringValue = PropertyValuePresenterRegistry.get().getPresenter(ID) .orElseThrow(() -> new IllegalStateException("No presenter available for given property")) .present(ID, 1L); // <2> // end::presenter[] }
public void propertyListing() { // tag::propertyListing[] final PathProperty<Long> ID = PathProperty.create("id", Long.class); final PathProperty<String> DESCRIPTION = PathProperty.create("description", String.class); final PropertySet<?> PROPERTIES = PropertySet.of(ID, DESCRIPTION); PropertyListing listing = Components.listing.properties(PROPERTIES).build(); // <1> listing = Components.listing.propertiesUsingTable(PROPERTIES).build(); // <2> // end::propertyListing[] }
public void group3() { // tag::group3[] final PathProperty<Long> ID = PathProperty.create("id", Long.class); final PathProperty<String> DESCRIPTION = PathProperty.create("description", String.class); final PropertySet<?> PROPERTIES = PropertySet.of(ID, DESCRIPTION); PropertyInputGroup group = Components.input.propertyGroup().properties(PROPERTIES) // .readOnly(ID) // <1> .build(); // end::group3[] }
public void sort2() { // tag::sort2[] final PathProperty<String> PROPERTY = PathProperty.create("test", String.class); final PathProperty<String> ANOTHER_PROPERTY = PathProperty.create("another", String.class); // <1> QuerySort sortAsc = PROPERTY.asc(); // sort ASCENDING on given property QuerySort sortDesc = PROPERTY.desc(); // sort DESCENDING on given property // <2> PROPERTY.asc().and(ANOTHER_PROPERTY.desc()); // sort ASCENDING on PROPERTY, than sort DESCENDING on // ANOTHER_PROPERTY // end::sort2[] }
public void aggregation() { // tag::aggregation[] final PathProperty<Integer> PROPERTY = PathProperty.create("test", Integer.class); final PathProperty<String> ANOTHER_PROPERTY = PathProperty.create("another", String.class); QueryAggregation aggregation = QueryAggregation.builder() // <1> .path(PROPERTY) // <2> .path(ANOTHER_PROPERTY) // <3> .filter(PROPERTY.isNotNull()) // <4> .build(); // end::aggregation[] }
public void ids2() { // tag::ids2[] final PathProperty<Long> KEY = PathProperty.create("key", Long.class); // <1> final PathProperty<String> TEXT = PathProperty.create("text", String.class); Datastore datastore = getDatastore(); // build or obtain a JDBC Datastore PropertyBox value = PropertyBox.builder(KEY, TEXT).set(TEXT, "test").build(); // <2> datastore.insert(DataTarget.named("tableName"), value, DefaultWriteOption.BRING_BACK_GENERATED_IDS); // <3> Long keyValue = value.getValue(KEY); // <4> // end::ids2[] }
public void input8() { // tag::input8[] Input<Integer> integerInput = Components.input.number(Integer.class).build(); final Property<Boolean> BOOL_PROPERTY = PathProperty.create("bool", Boolean.class); // <1> Input<Boolean> booleanInput = Input.from(integerInput, BOOL_PROPERTY, PropertyValueConverter.numericBoolean(Integer.class)); // <2> // end::input8[] }
public void deserializepb() { // tag::deserializepb[] Json json = Json.require(); // <1> final PathProperty<Long> KEY = create("key", long.class); final PathProperty<String> NAME = create("name", String.class); final PropertySet<?> PROPERTIES = PropertySet.of(KEY, NAME); PropertyBox result = json.fromJson(JsonReader.from("[JSON string]"), PROPERTIES); // <2> result = json.fromJson("[JSON string]", PROPERTIES); // <3> result = json.fromJson(JsonReader.from("[JSON string]"), KEY, NAME); // <4> List<PropertyBox> results = json.fromJsonArray("[JSON string]", PROPERTIES); // <5> // end::deserializepb[] }
public void selectable10() { // tag::selectable10[] Datastore datastore = obtainDatastore(); final PathProperty<Long> ID = PathProperty.create("id", Long.class); final PathProperty<String> DESCRIPTION = PathProperty.create("description", String.class); SingleSelect<Long> singleSelect = Components.input.singleSelect(ID) .dataSource(datastore, DataTarget.named("testData"), PropertySet.of(ID, DESCRIPTION), // Datastore () -> ID.gt(0L)) // <1> .itemCaptionGenerator(propertyBox -> propertyBox.getValue(DESCRIPTION)).build(); // end::selectable10[] }
@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[]
public void transactional2() throws IOException { // tag::transactional2[] final PathProperty<String> A_PROPERTY = PathProperty.create("propertyPath", String.class); final DataTarget<String> TARGET = DataTarget.named("test"); final Datastore datastore = getDatastore(); // build or obtain a concrete Datastore implementation datastore.requireTransactional() // <1> .withTransaction(tx -> { // <2> datastore.insert(TARGET, PropertyBox.builder(A_PROPERTY).set(A_PROPERTY, "test").build()); // <3> tx.commit(); // <4> }); // end::transactional2[] }
public void propertyBox2() { // tag::propertybox2[] final PathProperty<Long> ID = PathProperty.create("id", Long.class).withValidator(Validator.notNull()); // <1> final StringProperty NAME = StringProperty.create("name").withValidator(Validator.notBlank()); // <2> final PropertySet<?> PROPERTIES = PropertySet.of(ID, NAME); PropertyBox propertyBox = PropertyBox.create(PROPERTIES); propertyBox.setValue(ID, null); // <3> propertyBox = PropertyBox.builder(PROPERTIES).invalidAllowed(true).build(); // <4> propertyBox.validate(); // <5> // end::propertybox2[] }