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

