I like the idea of introducing an "objectCreationPolicy" parameter.
This way, we can introduce any new strategy (like the nice one proposed
by Sergiu for example) for update/create objects with a new keyword
('oldcore' [default strategy if 'objectCreationPolicy' is not given],
'updateOrCreate' or 'SergiuStrategy' ;-) ).

Yesterday, I began to write unit tests for what already exists (what
would be the default 'oldcore' strategy).  Today, I will try to produce
the small inputs I was proposing mixed with what Fabio proposed.  Fabio
and I need this functionality on our projects anyway.

Thanks,
--
Jean


On ven., 2014-04-11 at 08:39 +0200, Fabio Mancinelli wrote:
> Hi,
> 
> I was thinking that instead of introducing a new notation, we might
> add a parameter like "objectCreationPolicy=update|updateOrCreate|...".
> 
> If this parameter is not present everything works as today.
> If this parameter is present we might choose what to do.
> 
> So it's up to the user to decide what to put there.
> 
> The object editor, for example, would put
> objectCreationPolicy=updateOrCreate and use the standard notation to
> send POST data.
> 
> Objects will be updated or created according to the fact that they
> already exists or not.
> 
> The only problem I foresee are race conditions between create/update
> behaviour depending on multiple users editing the same page...
> Today we have locks that should prevent this. In the future I don't
> know - but I guess even the current behaviour is problematic from this
> point of view.
> 
> Thanks,
> Fabio
> 
> On Thu, Apr 10, 2014 at 12:00 PM, Jean SIMARD <[email protected]> wrote:
> > Yes, I won't know if it's updated or created.
> >
> > Now, using 'XWiki.XWikiRights_users = XWiki.Me' would not be sufficient
> > for the use case; what happens if you want to create 2 objects
> > 'XWiki.XWikiRights'?
> >
> > Can we imagine to introduce a new notation to explicitly mean that you
> > want to create a new object, like 'new_XWiki.XWikiRights_0_users' or
> > 'XWiki.XWikiRights_new_0_users' or 'XWiki.XWikiRights_n0_users'?
> >
> > This way, we can filter as following:
> > * If you try to update an object with 'XWiki.XWikiRights_0_users' and
> > the object #0 exists, the property is updated (use case already
> > existing)
> > * If you try to update an object with 'XWiki.XWikiRights_0_users' and
> > the object #0 doesn't exist, the parameter has no effect (use case
> > already existing)
> > * If you try to create an object with 'new_XWiki.XWikiRights_0_users'
> > and the object #0 exists, the parameter has no effect
> > * If you try to create an object with 'new_XWiki.XWikiRights_0_users'
> > and the object #0 doesn't exist, the object is created and the property
> > initialized
> >
> > Thanks
> > --
> > Jean
> >
> > On jeu., 2014-04-10 at 11:59 +0300, Marius Dumitru Florea wrote:
> >> So if I put XWiki.XWikiRights_56_users on the request and there's no
> >> rights object what do you do? Create an object with number 0? Create
> >> an object with number 56? And if you want to add a new object how
> >> would you know the object number to put on the request so that you
> >> don't update existing objects instead?
> >>
> >> The current behaviour is this:
> >>
> >> 1) You ask the system to add a new object (i.e. allocate an object
> >> number) using the object add action, possibly passing property values
> >> like this
> >>
> >> XWiki.XWikiRights_users = XWiki.Me
> >>
> >> 2) You use the allocated number to update the object, passing property
> >> values like this
> >>
> >> XWiki.XWikiRights_N_users = XWiki.Me
> >>
> >> where N is the allocated object number.
> >>
> >> What you want is to do this in a single step, but you won't
> >> know/control if the object is added or updated.
> >>
> >> Thanks,
> >> Marius
> >>
> >> On Thu, Apr 10, 2014 at 11:36 AM, Jean SIMARD <[email protected]> 
> >> wrote:
> >> > Hi devs,
> >> >
> >> > In XWiki, if you send a POST request at the following URL
> >> > ('MySpace.MyPage' is a document that doesn't exist at the moment)
> >> >
> >> > /bin/save/MySpace/MyPage
> >> >
> >> > with the following HTTP parameters:
> >> >
> >> > * template=MySpace.MyTemplate
> >> > * XWiki.XWikiRights_0_users=XWiki.Me
> >> > * <others parameters>
> >> >
> >> > with 'MySpace.MyTemplate' a template document and 'XWiki.Me' a user of
> >> > the wiki.
> >> >
> >> > 2 cases:
> >> >
> >> > 1. If 'MySpace.MyTemplate' contains a 'XWiki.XWikiRights' object, then
> >> > the resulting document 'MySpace.MyPage' will have this object with its
> >> > property 'users' initialize with the value 'XWiki.Me' (see HTTP
> >> > parameters)
> >> > 2. If 'MySpace.MyTemplate' does not contain a 'XWiki.XWikiRights'
> >> > object, the resulting document 'MySpace.MyPage' will not contain it
> >> > either
> >> >
> >> > ### PROPOSAL
> >> > Create automatically the objects if they don't exist in the template
> >> > document.
> >> > ###
> >> >
> >> > To make it possible, it seems that we would need to refactor the method
> >> > 'readObjectsFromForm(EditForm, XWikiContext)' in the
> >> > 'com.xpn.xwiki.doc.XWikiDocument' class.  And probably modify also the
> >> > 'getObject(String)' from 'com.xpn.xwiki.web.EditForm' class.
> >> >
> >> > 2 things to take care:
> >> > * It seems there is no unit test for these methods.
> >> > * May this proposal be a security problem?
> >> >
> >> > WDYT?
> >> > --
> >> > Jean
> >> >
> >> > _______________________________________________
> >> > devs mailing list
> >> > [email protected]
> >> > http://lists.xwiki.org/mailman/listinfo/devs
> >> _______________________________________________
> >> devs mailing list
> >> [email protected]
> >> http://lists.xwiki.org/mailman/listinfo/devs
> >
> > _______________________________________________
> > devs mailing list
> > [email protected]
> > http://lists.xwiki.org/mailman/listinfo/devs
> _______________________________________________
> devs mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/devs

_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to