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

