First of all, you should probably come up with some plausible use cases for extending this API and then build it with them in mind. Maybe I`ve missed some discussions, but right now I just don`t see it.
On Mon, Oct 7, 2013 at 7:44 PM, Guillaume "Louis-Marie" Delhumeau < [email protected]> wrote: > I can add the possibility to have custom data stored in a map. But how > should we store it in the wiki? > > > 2013/10/7 Thomas Mortagne <[email protected]> > > > On Mon, Oct 7, 2013 at 5:38 PM, Guillaume "Louis-Marie" Delhumeau > > <[email protected]> wrote: > > > What I propose for the extensibility: > > > > > > - anyone can extends the Wiki class. > > > - each module will have its own XWikiServerClassDocumentInitializer, > that > > > add custom fields into the XWikiServerClass document. > > > - the minimal XWikiServerClassDocumentInitializer will only contain a > few > > > fields. > > > > That's not extension. I was expecting a generic way to access and > > modify descriptor properties. The "extensions" you are talking about > > are going to be completely independents modules that directly > > manipulate xobjects and they will have to provide their own complete > > API, do there own caching of descriptors etc, extending Wiki class is > > pretty useless for them. > > > > > > > > > > > 2013/10/7 Thomas Mortagne <[email protected]> > > > > > >> Before writing extensions the API need to be extensible and we don't > > >> see it in your current API ;) This needs to be there before validating > > >> this API. > > >> > > >> On Mon, Oct 7, 2013 at 5:17 PM, Guillaume "Louis-Marie" Delhumeau > > >> <[email protected]> wrote: > > >> > Thanks to your advices (Eddy and Thomas), I propose you a clean > > version: > > >> > > > >> > > > https://github.com/gdelhumeau/xwiki-platform/tree/new-wiki-api/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-api/src/main/java/org/xwiki/wiki > > >> > > > >> > I have only changed the API, not the implementation. > > >> > > > >> > I think it starts to be clean. > > >> > > > >> > > > >> > 2013/10/7 Guillaume "Louis-Marie" Delhumeau <[email protected]> > > >> > > > >> >> Hi Eddy. > > >> >> > > >> >> First, thanks for your answer. > > >> >> > > >> >> 2013/10/7 Eduard Moraru <[email protected]> > > >> >> > > >> >>> Hi Guilllaume, > > >> >>> > > >> >>> 1) What is the point of the WikiDescriptorAlias class if it just > > holds > > >> and > > >> >>> returns a string? > > >> >>> > > >> >> > > >> >>> Also, the only method in the WikiDescriptorManager that works with > > >> aliases > > >> >>> accepts a String instead of the WikiDescriptorAlias class, so this > > >> means > > >> >>> that the class is useless: > > >> >>> > > >> >>> WikiDescriptor getByWikiAlias(String wikiAlias) throws > > >> >>> WikiManagerException; > > >> >>> > > >> >> > > >> >> I did not really think about it, I just take the work done by > > Vincent on > > >> >> wiki descriptors. > > >> >> > > >> >> > > >> >>> 2) WikiManager: > > >> >>> > > >> >>> The methods wikiIdExists and and isWikiIdAvailable do the same > > thing, > > >> they > > >> >>> just call it differently. Use only one, like wikiExists(). > > >> >>> > > >> >> > > >> >> I should have added the javadoc about that. This is what I have in > > mind > > >> : > > >> >> - wikiExists(String wikiOd) as you said > > >> >> - wikiAvailable(String wikiId) that checks if the wiki id is valid > > and > > >> >> free (that means that there is no existing database with that name > -- > > >> not > > >> >> necessary related to XWiki). > > >> >> > > >> >> It is not implemented yet. > > >> >> > > >> >> > > >> >>> > > >> >>> Also, since it's a WikiManager, so the "wiki" part is in the name > of > > >> the > > >> >>> class, we get it that it deals with wikis. You could remove the > > "wiki" > > >> >>> part > > >> >>> from method names, like: > > >> >>> - create instead of createWiki > > >> >>> - delete instead of deleteWiki > > >> >>> - exists instead of existsWiki > > >> >>> - so on... > > >> >>> > > >> >> > > >> >> I agree. I'll change it ;) > > >> >> > > >> >> > > >> >>> > > >> >>> Note on the naming of methods: > > >> >>> I`ve noticed a rather annoying thing in the way the methods are > > named. > > >> So > > >> >>> you have a class that is say... WikiDescriptor. > > >> >>> > > >> >> > > >> >> Indeed, but a Wiki class would not contain something else than a > > >> >> descriptor. I don't know what to do. Renaming WikiDescriptor to > Wiki? > > >> >> > > >> >> > > >> >>> > > >> >>> 3) WikiManager: > > >> >>> > > >> >>> What is the point of these 2 methods? > > >> >>> > > >> >>> void setDescriptor(WikiDescriptor descriptor); > > >> >>> > > >> >>> void removeDescriptor(WikiDescriptor descriptor); > > >> >>> > > >> >>> Looking at the implementation, I see that you`re handling > > descriptors > > >> >>> (setting/deleting) whithout corelating it to the wikis. I mean, if > > you > > >> >>> remove a descriptor, then you must remove the wiki too, and that > is > > the > > >> >>> task of the WikiManager.delete() method. > > >> >>> > > >> >> > > >> >> I have keeped them because it is used in the descriptors > > implementation > > >> of > > >> >> Vincent. But I agree that it is weird to have it in the API. > > >> >> > > >> >> > > >> >>> > > >> >>> 4) Don`t use implementation details. Improve the interface (API) > if > > >> there > > >> >>> is information you`re missing: > > >> >>> > > >> >>> > > >> > > > https://github.com/gdelhumeau/xwiki-platform/blob/new-wiki-api/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-default/src/main/java/org/xwiki/wiki/descriptor/internal/DefaultWikiManager.java#L209 > > >> >>> > > >> >> > > >> >> I disagree. > > >> >> In this code, I need to have the document related to the > descriptor. > > It > > >> >> depends on the current implementation, because we can imagine an > > >> >> implementation where the descriptors are not stored in the wiki. > So I > > >> won't > > >> >> add a getDocument() in the API, but I need it in my implementation. > > >> >> > > >> >> > > >> >>> > > >> >>> 5) DefaultWikiManager.createDescritptor > > >> >>> Since you have a WikiDescriptorBuilder class, maybe that is where > > the > > >> >>> logic > > >> >>> of creating/building the descriptor's details (objects, document) > > and > > >> >>> where > > >> >>> the logic of extracting the document name from wiki name and > > viceversa > > >> >>> should be located. > > >> >>> > > >> >>> > > >> > > > https://github.com/gdelhumeau/xwiki-platform/blob/new-wiki-api/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-default/src/main/java/org/xwiki/wiki/descriptor/internal/DefaultWikiManager.java#L126 > > >> >>> > > >> >> > > >> >> I agree, I will move that code into WikiDescriptorBuilder. > > >> >> > > >> >> > > >> >>> > > >> >>> 6) DefaultWikiManager.getByWikiId > > >> >>> Again seeing the logic of wikiID-to-document. It should be located > > in a > > >> >>> single place and not spread in multiple places. Use a method of > the > > >> >>> WikiManager class or of the DescriptorBuilder class. > > >> >>> > > >> >> > > >> >> OK. > > >> >> > > >> >> > > >> >>> > > >> >>> 7) WikiManagerScriptService: > > >> >>> - deleteWiki: Why do you need Admin right to delete a wiki when > you > > did > > >> >>> not > > >> >>> need it in order to create it? That`s bad. We should probably > have a > > >> >>> deleteWiki right as well. > > >> >> > > >> >> > > >> >> It is a temporary solution in my implementation. > > >> >> The problem is: who has the right to remove a wiki ? > > >> >> - his owner? But we don't have the notion of owner in this API. It > > >> belongs > > >> >> to the wiki-users module to handle this concept. > > >> >> - someone who has the CREATE_WIKI right? That means every person > who > > has > > >> >> the CREATE_WIKI right can also delete any existing wiki? > > >> >> - someone who as the DELETE_WIKI right? Why not, but we need to > make > > a > > >> >> vote for adding this new right. > > >> >> > > >> >> So, in my first implementation, I have used the admin right. > > >> >> > > >> >> > > >> >>> Also, consider the workspaces use case when user > > >> >>> create and delete wikis/workspaces when they want to and when they > > are > > >> >>> done > > >> >>> with them. > > >> >>> > > >> >> > > >> >> To me, it belongs to the future wiki-user module. > > >> >> > > >> >> > > >> >>> - context key for exceptions "lastexception2" is not the best of > > >> choices. > > >> >>> Try something like "wikiException" instead, or even just > > >> "lastexception" > > >> >>> like it was before (if we consider this as a best practice). > What's > > the > > >> >>> reason for "lastexception2"? > > >> >>> > > >> >>> > > >> >> It's a bad commit. I have setted this name for debugging reason. > > >> >> > > >> >> > > >> >>> > > >> >>> As a general note, I fail to see the added value of this module at > > this > > >> >>> point. I mean, the whole point was to have both the functionality > of > > >> >>> WikiManager and Workspaces. I get it that it's a work in progress > > and > > >> that > > >> >>> it's at the first stages, but you need to touch those points > before > > it > > >> >>> becomes relevant. Not that it's bad, just that it's not much there > > to > > >> see > > >> >>> at this point. > > >> >>> > > >> >> > > >> >> The idea is to split in different simple modules, that enable us to > > >> easily > > >> >> add a new feature or to depends on a module without depending on > the > > >> whole > > >> >> core. I try to reduce the dependencies while I design the modules. > > >> >> > > >> >> > > >> >>> > > >> >>> Hope this helps, > > >> >>> Eduard > > >> >>> > > >> >>> > > >> >> Thanks Eduard! > > >> >> > > >> >> Louis-Marie > > >> >> > > >> >> > > >> >>> > > >> >>> On Mon, Oct 7, 2013 at 11:49 AM, Guillaume "Louis-Marie" > Delhumeau < > > >> >>> [email protected]> wrote: > > >> >>> > > >> >>> > Hi. > > >> >>> > > > >> >>> > In this thread, I want to propose you the tiniest API that we > > need to > > >> >>> > handle multiwiki. All other features (users, templates, > > >> workspaces...) > > >> >>> will > > >> >>> > be on other modules, because I think it is better for the > > >> extensibility. > > >> >>> > > > >> >>> > The new module will be based on the > > >> xwiki-platform-wiki-descriptor-api > > >> >>> > module, that I will rename to xwiki-platform-wiki-api. The > > >> >>> > WikiDescriptorManager becomes WikiManager and handle both > > descriptors > > >> >>> and > > >> >>> > databases. > > >> >>> > > > >> >>> > This API will permit: > > >> >>> > * to create a wiki > > >> >>> > * to remove a wiki > > >> >>> > * to list all wikis (returning a list of descriptors) > > >> >>> > * ... > > >> >>> > > > >> >>> > You can see the code of that proposal there: > > >> >>> > > > >> >>> > > > >> >>> > > >> > > > https://github.com/gdelhumeau/xwiki-platform/tree/new-wiki-api/xwiki-platform-core/xwiki-platform-wiki > > >> >>> > > > >> >>> > The most important is to decide what the API must look like. The > > >> >>> > implementation can still be modified afterwards. > > >> >>> > > > >> >>> > I hope you like it, > > >> >>> > > > >> >>> > Louis-Marie > > >> >>> > _______________________________________________ > > >> >>> > 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 > > >> > > >> > > >> > > >> -- > > >> Thomas Mortagne > > >> _______________________________________________ > > >> devs mailing list > > >> [email protected] > > >> http://lists.xwiki.org/mailman/listinfo/devs > > >> > > > _______________________________________________ > > > devs mailing list > > > [email protected] > > > http://lists.xwiki.org/mailman/listinfo/devs > > > > > > > > -- > > Thomas Mortagne > > _______________________________________________ > > 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

