diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/Tag.java b/gs-reactor/src/main/java/org/genericsystem/reactor/Tag.java index 61fd7f80a..772d34e90 100644 --- a/gs-reactor/src/main/java/org/genericsystem/reactor/Tag.java +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/Tag.java @@ -17,6 +17,7 @@ import org.genericsystem.common.Generic; import org.genericsystem.defaults.tools.BindingsTools; import org.genericsystem.reactor.HtmlDomNode.RootHtmlDomNode; +import org.genericsystem.reactor.annotations.BindSelection; import org.genericsystem.reactor.annotations.DirectSelect; import org.genericsystem.reactor.annotations.ForEach; import org.genericsystem.reactor.annotations.ReactorDependencies; @@ -47,6 +48,7 @@ import org.genericsystem.reactor.modelproperties.AttributesDefaults; import org.genericsystem.reactor.modelproperties.DisplayDefaults; import org.genericsystem.reactor.modelproperties.GenericStringDefaults; +import org.genericsystem.reactor.modelproperties.SelectionDefaults; import org.genericsystem.reactor.modelproperties.StyleClassesDefaults; import org.genericsystem.reactor.modelproperties.StylesDefaults; import org.genericsystem.reactor.modelproperties.TextPropertyDefaults; @@ -458,6 +460,13 @@ default void processAnnotations(Tag result) { } }); + processAnnotation(BindSelection.class, result, annotation -> { + if (SelectionDefaults.class.isAssignableFrom(result.getClass())) + ((SelectionDefaults) result).bindSelection(result.find(((BindSelection) annotation).value())); + else + log.warn("BindSelection is applicable only to a class implementing SelectionDefaults."); + }); + processAnnotation(SetStringExtractor.class, result, annotation -> { try { result.setStringExtractor(((SetStringExtractor) annotation).value().newInstance().get()); diff --git a/gs-reactor/src/main/java/org/genericsystem/reactor/annotations/BindSelection.java b/gs-reactor/src/main/java/org/genericsystem/reactor/annotations/BindSelection.java new file mode 100644 index 000000000..1abe32a2d --- /dev/null +++ b/gs-reactor/src/main/java/org/genericsystem/reactor/annotations/BindSelection.java @@ -0,0 +1,16 @@ +package org.genericsystem.reactor.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.genericsystem.reactor.az.GSTagImpl; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE }) +public @interface BindSelection { + Class[] path() default {}; + + Class value(); +}