On Fri, Nov 9, 2018 at 5:35 PM Marius Dumitru Florea
<[email protected]> wrote:
>
> On Fri, Nov 9, 2018 at 4:58 PM Adel Atallah <[email protected]> wrote:
>
> > On Fri, Nov 9, 2018 at 12:08 PM Marius Dumitru Florea
> > <[email protected]> wrote:
> > >
> > > Try to view the macro parameters listed as a boolean expression. For the
> > > include macro we would have:
> > >
> > > (page XOR (reference AND type) XOR document) OR section OR context
> >
> >
>
> > Wouldn't it be: (page XOR (reference AND type) XOR document) *AND*
> > section *AND* context ?
> >
>
> No. AND means (logically) both sides are required. You can specify the
> section parameter without specifying the context parameter. So it's
> definitely a *logical / boolean* OR between them.
>
> I put AND between reference and type just to show that there might be cases
> when two (or more) parameters must be specified together (i.e. either you
> specify both or you specify none of them). In our case the type parameter
> has a default value so you can specify only the reference. This means it's
> actually OR between reference and type in the case of the include macro.
>
>
> > I just feel like you can just have 2 types of "operators": one to
> > exclude (XOR) and the other to include (AND) parameters.
> >
>
> I still think there can be 3 operators (if we want to cover everything). As
> I said, you may want to express the fact that a parameter is mandatory only
> if some other parameter is specified. We can't express this ATM so I guess
> we can work only with XOR and OR.
>
>
> >
> > >
> > > * the parentheses define the parameter groups
> > > * the boolean operators specify the relation between the members of a
> > group
> > >
> > > We then need to express this using Java annotations. In any case, this
> > is a
> > > **tree** structure (not a flat structure).
> >
> > What you describe could probably be done with what we proposed but
> > maybe we can have something more explicit:
> >
> > public void setReference(String reference)
> >
> > @Depends("reference")
> > public void setType(EntityType type)
> >
> > @Conflict("reference")
> > public void setPage(String page)
> >
> > Could that work? We would need to write all the logic behind to build the
> > tree:
> > 1. All parameters are joined by an 'AND' by default => page AND
> > reference AND type
> > 2. Page and Reference are conflicting => (page XOR reference) AND type
> > 3. Type depends on Reference => (page XOR (reference AND type))
> >
> > WDYT?
> >
>
> I'm not sure how @Depends and @Conflict defines the tree structure in
> general. I was rather thinking of something like:
>
> @GroupPath("target[XOR]")
> page
>
> @GroupPath("target[XOR]/entityReference")
> reference
>
> @GroupPath("target[XOR]/entityReference")
> type
>
> @GroupPath("target[XOR]")
> document
>
> If we want subgroups then we need to specify a path. The complex part is to
> specify the "operator" that should be used within a subgroup.
>

What we could do is use repeating annotations[1]:

@GroupPath(xor = "group1")
page

@GroupPath(xor = "group1")
@GroupPath(or = "group2", priority = 1)
reference

@GroupPath(xor = "group1")
@GroupPath(or = "group2", priority = 1)
type

@GroupPath(xor = "group1")
document

@GroupPath(and = "group3")
section

@GroupPath(and = "group3")
context

Everything in the "xor group" will be joined with a XOR. Fields will
be joined with an OR by default. The priority, which is by default 0,
defines the order of the "operations" (parenthesis). The previous
example would produce:
(page XOR (reference OR document) XOR document) OR (section AND context)

Maybe it's too complicated to use, WDYT?
Actually we could think of many cases where this would fail like:
@GroupPath(xor = "group")
field1

@GroupPath(and = "group")
field2

[1]: https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html

>
> > >
> > > On Fri, Nov 9, 2018 at 12:30 PM Adel Atallah <[email protected]>
> > wrote:
> > >
> > > > On Fri, Nov 9, 2018 at 11:20 AM Marius Dumitru Florea
> > > > <[email protected]> wrote:
> > > > >
> > > > > On Wed, Nov 7, 2018 at 5:34 PM Adel Atallah <[email protected]>
> > > > wrote:
> > > > >
> > > > > > Hello everyone,
> > > > > >
> > > > > > So what we thought about with Vincent for implementing the
> > "concept of
> > > > > > aliases or groups" would be to actually have two new annotations
> > that
> > > > > > we would use on macro properties.
> > > > > > The first one is a "Group" annotation which is meant to indicate
> > that
> > > > > > some properties are part of the same group, obviously.
> > > > > > The second is an "Alternative" annotation which is meant to
> > indicate
> > > > > > that only one property / group of properties can be used (among the
> > > > > > ones that are part of the alternative).
> > > > > > Here is an example:
> > > > > > We want for the Include macro to be able to specify either:
> > > > > > the "reference" and "type" parameters
> > > > > > or
> > > > > > the "page" parameter
> > > > > > For that, we will change the IncludeMacroParameters java class like
> > > > this:
> > > > > >
> > > > > > @Alternative("reference")
> > > > > > @Group("entityReference")
> > > > > > public void setReference(String reference)
> > > > > >
> > > > > > @Alternative("reference")
> > > > > > @Group("entityReference")
> > > > > > public void setType(EntityType type)
> > > > > >
> > > > > > @Alternative("reference")
> > > > > > public void setPage(String page)
> > > > > >
> > > > > > In the WYSIWYG side, we will only be able to specify either the
> > > > > > "reference" and the "type" or the "page" parameter.
> > > > > >
> > > > >
> > > > > I think it would make more sense, at least in this case, to have the
> > > > > alternative as an attribute of the group, because semantically the
> > > > > "entityReference" group is an alternative to the page parameter. You
> > > > can't
> > > > > say that the type parameter alone is an alternative to the page
> > > > parameter.
> > > > >
> > > > > The @Group annotation is clear. No doubt about it. I'm not sure about
> > > > > the @Alternative annotation. I'm thinking that the "alternative" is
> > also
> > > > a
> > > > > group, where only one item from the group can be used, which could be
> > > > > expressed with an attribute of the @Group annotation.
> > > >
> > > > Thanks for the suggestion, but how can it be used? If I retake my
> > previous
> > > > example, will it be:
> > > >
> > > > @Group(name = "entityReference", alternative = "reference")
> > > > public void setReference(String reference)
> > > >
> > > > @Group(name = "entityReference", alternative = "reference")
> > > > public void setType(EntityType type)
> > > >
> > > > @Group(name = "page", alternative = "reference")
> > > > public void setPage(String page)
> > > >
> > > > ?
> > > > >
> > > > >
> > > > > >
> > > > > > WDYT?
> > > > > >
> > > > > > Thanks,
> > > > > > Adel
> > > > > >
> > > > > > On Tue, Sep 25, 2018 at 11:51 AM Marius Dumitru Florea
> > > > > > <[email protected]> wrote:
> > > > > > >
> > > > > > > On Wed, Sep 19, 2018 at 4:31 PM Vincent Massol <
> > [email protected]>
> > > > > > wrote:
> > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > > On 19 Sep 2018, at 14:47, Adel Atallah <
> > [email protected]>
> > > > > > wrote:
> > > > > > > > >
> > > > > > > > > On Wed, Jul 18, 2018 at 5:00 PM Vincent Massol <
> > > > [email protected]>
> > > > > > > > wrote:
> > > > > > > > >>
> > > > > > > > >>
> > > > > > > > >>
> > > > > > > > >>> On 5 Jul 2018, at 12:06, Vincent Massol <
> > [email protected]>
> > > > > > wrote:
> > > > > > > > >>>
> > > > > > > > >>>
> > > > > > > > >>>
> > > > > > > > >>>> On 4 Jul 2018, at 12:07, Thomas Mortagne <
> > > > > > [email protected]>
> > > > > > > > wrote:
> > > > > > > > >>>>
> > > > > > > > >>>> Here are more details on the actual use case we need to
> > > > support:
> > > > > > > > >>>>
> > > > > > > > >>>> In include/Display macro either you set:
> > > > > > > > >>>>
> > > > > > > > >>>> * "reference" and "type" (which default to DOCUMENT)
> > > > > > > > >>>> * or you set “page"
> > > > > > > > >>>
> > > > > > > > >>> Globally I think we need to add 3 concepts to macro
> > parameter
> > > > > > > > descriptor:
> > > > > > > > >>>
> > > > > > > > >>> 1) The concept of “deprecated” parameter. For example for
> > > > > > “document”
> > > > > > > > in the include macro.
> > > > > > > > >>> 2) The concept of aliases or groups, i.e the ability to
> > list
> > > > > > > > parameters that are mutually exclusive. Example: reference +
> > type
> > > > vs
> > > > > > page
> > > > > > > > for display/include macros. This would mean that in the Macro
> > > > Dialog
> > > > > > UI if
> > > > > > > > you select one of those the other gets unselected/cleared out
> > (you
> > > > > > cannot
> > > > > > > > have mutually exclusive params have values).
> > > > > > > > >>> 3) The concept of Advanced parameters. For example, we
> > should
> > > > put
> > > > > > > > reference + type as advanced parameters so that they are not
> > shown
> > > > to
> > > > > > the
> > > > > > > > user by default (and so that the page parameter is more
> > > > highlighted).
> > > > > > Users
> > > > > > > > would need to click on Advanced to see advanced parameters. I
> > think
> > > > > > we’re
> > > > > > > > doing something automatic today (I don’t remember the details)
> > to
> > > > try
> > > > > > to
> > > > > > > > hide some parameters but we should probably review this.
> > > > > > > > >>>
> > > > > > > > >>> WDYT?
> > > > > > > > >>
> > > > > > > > >> Ping!
> > > > > > > > >>
> > > > > > > > >> Do we agree about this? If we do we can then create jira
> > issue
> > > > > > about it
> > > > > > > > and take it for implementation.
> > > > > > > > >
> > > > > > > > > +1, I can create the jira issue if it's ok.
> > > > > > > >
> > > > > > > > Please do :)
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > > > @Marius: Ok for you?
> > > > > > > >
> > > > > > >
> > > > > > > Yes.
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > thanks
> > > > > > > > -Vincent
> > > > > > > >
> > > > > > > > [snip]
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > >
> > > >
> >

Reply via email to