I thought about something like this but I discarded it as I find this 
complicated for something that should be relatively simple. I’d prefer to have 
some simple annotations if possible. In other words, if feels a bit of 
over-engineering for the need. Now I have to admit that I stopped following 
this thread after the original proposal so maybe I’m just completely off :)

Thanks
-Vincent

> On 14 Nov 2018, at 15:51, Marius Dumitru Florea 
> <[email protected]> wrote:
> 
> 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 <[email protected]>
> 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
>> 

Reply via email to