WDYT about: -----8<----- IncludeMacroParameters ---------- @Group("target") page
@Group("target/entityReference") reference @Group("target/entityReference") type @Group("target") document section context ----->8--------------- That is: specify *only* the group hierarchy in the macro parameter descriptor. This would produce the following hierarchy: * <target> ** page ** <entityReference> *** reference *** type ** document * section * context Next, for the cases where we want to customize the behavior of a group, we introduce a component role ParameterGroup. For instance, for the "target" parameter group of the Include Macro we would create @Named("include/target") public class TargetParameterGroup implements ParameterGroup {} To specify that the members of a parameter group are exclusive we can either use a method in the ParameterGroup interface (e.g. isExclusive()) or use an annotation on the implementation TargetParameterGroup. Thanks, Marius On Tue, Nov 13, 2018 at 12:03 PM Adel Atallah <adel.atal...@xwiki.com> wrote: > Hello, > > I'd like to briefly summarize the situation so that we can make some > progress. > > What we have: > * We define "parameters" in a macro by creating a Java Bean, which > provides all the getters and setters of the parameters we want. > * We can use annotations on these getters/setters to define some > behavior or metadata for these parameters (description, mandatory, > deprecated...) > > What we want: > * Being able to handle conflicting parameters. For instance when we > deprecate a parameter and add a new one to replace it, we should be > able to either use the deprecated parameter or the new one but not > both. > * We also want to group parameters that are related to each other. > > What we proposed: > * Use annotations on the parameters to express the conflict. > * Marius proposed to see the problem as a boolean expression such as: > (page XOR (reference AND type) XOR document) OR section OR context. > This would translate as: the user can use the 'section' and/or > 'context' parameters (if they want), can use only one of these > parameters: 'page', ('reference' and 'type') or 'document', where > 'reference' and 'type' depend on each other and you can't use one > without the other. > * You can see on previous e-mails the kind of annotations we proposed > to solve the issue. > > Thanks, > Adel >