Sounds good to me.

Thanks
-Vincent

> On 16 Nov 2018, at 10:41, Adel Atallah <[email protected]> wrote:
> 
> So do we agree on trying the solution given by Thomas? i.e. creating
> two annotations:
> 1. PropertyGroup to specify a hierarchy of groups to a parameter
> 2. PropertyFeature to indicate that some parameters/groups represents the
> same feature (which can lead to conflicts).
> 
> Here was the given example:
> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
> 
> @PropertyGroup("target")
> @PropertyFeature("reference")
> page
> 
> @PropertyGroup({"target", "entityReference"})
> @PropertyFeature("reference")
> reference
> 
> @PropertyGroup({"target", "entityReference"})
> type
> 
> @PropertyGroup("target")
> @PropertyFeature("reference")
> document
> 
> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> 
> I've already started implementing the PropertyGroup annotation.
> 
> On Thu, Nov 15, 2018 at 3:13 PM Thomas Mortagne
> <[email protected]> wrote:
>> 
>> On Thu, Nov 15, 2018 at 2:06 PM Adel Atallah <[email protected]> wrote:
>>> 
>>> On Thu, Nov 15, 2018 at 1:56 PM Thomas Mortagne
>>> <[email protected]> wrote:
>>>> 
>>>> On Thu, Nov 15, 2018 at 1:24 PM Adel Atallah <[email protected]> 
>>>> wrote:
>>>>> 
>>>>> On Thu, Nov 15, 2018 at 11:13 AM Thomas Mortagne
>>>>> <[email protected]> wrote:
>>>>>> 
>>>>>> On Thu, Nov 15, 2018 at 11:06 AM Adel Atallah <[email protected]> 
>>>>>> wrote:
>>>>>>> 
>>>>>>> Ok so it seems like we are getting back to the proposition we made with 
>>>>>>> Vincent.
>>>>>>> We need one annotation to enforce the dependence between parameters
>>>>>>> (reference and type in our example) and another one that can be used
>>>>>>> to *deduce* conflicting parameters.
>>>>>> 
>>>>>>> I don't understand how a hierarchy of groups can help us specify a
>>>>>>> dependence between parameters.
>>>>>> 
>>>>>> I don't think it does, it's just that since we are defining groups
>>>>>> having subgroups would be useful visually.
>>>>>> 
>>>>>>> A parameter is either in the same group
>>>>>>> as another one or it is not. The hierarchy seems to focus on problems
>>>>>>> that we are not trying to solve here.
>>>>>>> The original proposal was similar to what Thomas proposed, but without
>>>>>>> hierarchy:
>>>>>>> 
>>>>>>> @Alternative("reference")
>>>>>>> @Group("entityReference")
>>>>>>> reference
>>>>>>> 
>>>>>>> @Alternative("reference")
>>>>>>> @Group("entityReference")
>>>>>>> type
>>>>>>> 
>>>>>>> @Alternative("reference")
>>>>>>> page
>>>>>>> 
>>>>>>> @Alternative("reference")
>>>>>>> document
>>>>>>> 
>>>>>>> where "Alternative" is the same as "Feature". Now Marius didn't agree
>>>>>>> with that because the "Alternative" annotation should not be bind to
>>>>>>> "reference" and "type" parameters but to the group "entityReference"
>>>>>> 
>>>>>> And as I said in my proposal the features are associated to the group,
>>>>>> not the properties. I agree that associating it to the property (and
>>>>>> ending up with half of a group conflicting with half of another) does
>>>>>> really make sense.
>>>>>> 
>>>>> 
>>>>> This is not enforced by the code.
>>>> 
>>>> I don't understand what you mean, there is no code yet.
>>> 
>>> By code I meant the annotations in the code.
>> 
>> Yes but hard to do much better I think without breaking anything now
>> that we have two parameters for a single information, we need to
>> maintain them.
>> 
>>> 
>>>> For me the
>>>> code which is going to parse this Java bean will of course make sure
>>>> the features are associated to the group of the property.
>>> 
>>> I agree with that.
>>> 
>>>> 
>>>>> You know that features are
>>>>> associated to groups *because* they are bound to the same property.
>>>>> Anyway I'm +1 to do it this way.
>>>>> 
>>>>>>> ,
>>>>>>> which is not possible to do without creating other classes. I don't
>>>>>>> think this is an issue to put the "Alternative" annotation on
>>>>>>> "reference" and "type" because we should have all the necessary
>>>>>>> information to *deduce* the conflicting parameters. It's true that
>>>>>>> removing the "Alternative" annotation of one of "reference" or "type"
>>>>>>> should produce the same result though, which could be confusing.
>>>>>>> On Thu, Nov 15, 2018 at 10:23 AM Marius Dumitru Florea
>>>>>>> <[email protected]> wrote:
>>>>>>>> 
>>>>>>>> On Thu, Nov 15, 2018 at 10:51 AM Thomas Mortagne 
>>>>>>>> <[email protected]>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> I'm also really not a fan of having to implement a component just to
>>>>>>>>> indicate that two groups of properties are conflicting.
>>>>>>>>> 
>>>>>>>>> +1 for making @Group support a hierarchy, that's indeed nice.
>>>>>>>>> 
>>>>>>>>> For for conflicting we need a dedicated annotation IMO.
>>>>>>>>> 
>>>>>>>>> So starting from your previous example I would expect something like:
>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> @PropertyGroup("target")
>>>>>>>>> @PropertyFeature("reference")
>>>>>>>>> page
>>>>>>>>> 
>>>>>>>>> @PropertyGroup({"target", "entityReference"})
>>>>>>>>> @PropertyFeature("reference")
>>>>>>>>> reference
>>>>>>>>> 
>>>>>>>>> @PropertyGroup({"target", "entityReference"})
>>>>>>>>> type
>>>>>>>>> 
>>>>>>>>> @PropertyGroup("target")
>>>>>>>>> @PropertyFeature("reference")
>>>>>>>>> document
>>>>>>>>> 
>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> I don't think this is complete. The following doesn't make sense:
>>>>>>>> 
>>>>>>>> {{include page="..." type="..."/}}
>>>>>>>> 
>>>>>>>> and neither this:
>>>>>>>> 
>>>>>>>> {{include document="..." type="..." /}}
>>>>>>>> 
>>>>>>>> So it's not the reference parameter alone that provides the "reference"
>>>>>>>> feature. The pair / group of parameters (reference and type) are 
>>>>>>>> providing
>>>>>>>> the "reference" feature. This is why I think there is the need to 
>>>>>>>> specify
>>>>>>>> the "feature" on the sub group "entityReference" not on the parameter. 
>>>>>>>> And
>>>>>>>> to do this we need another class..
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> or
>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> @PropertyGroup("target", features = "reference")
>>>>>>>>> page
>>>>>>>>> 
>>>>>>>>> @PropertyGroup({"target", "entityReference"}, features = "reference")
>>>>>>>>> reference
>>>>>>>>> 
>>>>>>>>> @PropertyGroup({"target", "entityReference"})
>>>>>>>>> type
>>>>>>>>> 
>>>>>>>>> @PropertyGroup("target", features = "reference")
>>>>>>>>> document
>>>>>>>>> 
>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>>>> * PropertyGroup define the hierarchy (also proposed a String[] instead
>>>>>>>>> of String based value to show all possible ways to pass the hierarchy
>>>>>>>>> value)
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> +1 for this
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> * PropertyFeature (name is negotiable :)) or PropertyGroup "features"
>>>>>>>>> field associate the group with a set of unique "features". This is the
>>>>>>>>> same logic than for extensions where several groups with with a shared
>>>>>>>>> feature are in conflict
>>>>>>>>> 
>>>>>>>> 
>>>>>>>> You're not associating the feature to the group. That is the problem 
>>>>>>>> IMO.
>>>>>>>> You are associating the feature to the parameter.  For instance:
>>>>>>>> 
>>>>>>>> @PropertyGroup("foo", features = "input")
>>>>>>>> one
>>>>>>>> 
>>>>>>>> @PropertyGroup("foo", features = "output")
>>>>>>>> two
>>>>>>>> 
>>>>>>>> Is the "input" and "output" feature associate to the "foo" group or to 
>>>>>>>> the
>>>>>>>> parameters one and two respectively?
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Marius
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> We could also decide to support only one feature per group right now
>>>>>>>>> since we don't yet have the need for several but it felt more natural
>>>>>>>>> like this.
>>>>>>>>> 
>>>>>>>>> On Thu, Nov 15, 2018 at 8:04 AM Vincent Massol <[email protected]> 
>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>>> On 15 Nov 2018, at 08:02, Vincent Massol <[email protected]> wrote:
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>>> On 15 Nov 2018, at 06:29, Marius Dumitru Florea <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> On Wed, Nov 14, 2018 at 5:12 PM Vincent Massol <[email protected]>
>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> I thought about something like this but I discarded it as I find 
>>>>>>>>>>>>> this
>>>>>>>>>>>>> complicated for something that should be relatively simple.
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> I don't think it's that complicated because:
>>>>>>>>>>>> 
>>>>>>>>>>>> * Conflicting parameters should be an exception, not the rule. What
>>>>>>>>> other
>>>>>>>>>>>> macros, besides include / display, need this?
>>>>>>>>>>>> * If you just want to group macro parameters for display then you
>>>>>>>>> only need
>>>>>>>>>>>> to use the @Group annotation. You don't need to implement a
>>>>>>>>> ParameterGroup.
>>>>>>>>>>>> The ParameterGroup is needed only for conflicting parameters (ATM).
>>>>>>>>>>> 
>>>>>>>>>>> Sure but it’s still 10x more complicated than just having everything
>>>>>>>>> in one place in the parameters class with annotations as was suggested
>>>>>>>>> initially.
>>>>>>>>>> 
>>>>>>>>>> And requires unnecessary component instances that will stay in the EM
>>>>>>>>> for no need. The way to describe the descriptor is transient and only
>>>>>>>>> serves to generate the macro descriptors. In the end what’s important 
>>>>>>>>> is
>>>>>>>>> the descriptor format.
>>>>>>>>>> 
>>>>>>>>>> Thanks
>>>>>>>>>> -Vincent
>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> Thanks
>>>>>>>>>>> -Vincent
>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Marius
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> 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
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Thomas Mortagne
>>>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> Thomas Mortagne
>>>> 
>>>> 
>>>> 
>>>> --
>>>> Thomas Mortagne
>> 
>> 
>> 
>> --
>> Thomas Mortagne

Reply via email to