Asiri Rathnayake wrote:
> ---------- Forwarded message ----------
> From: Asiri Rathnayake <[EMAIL PROTECTED]>
> Date: Thu, Oct 9, 2008 at 2:09 PM
> Subject: Re: [xwiki-notifications] r13428 - in sandbox/xwiki-webdav/src:
> main/java/com/xpn/xwiki/plugin/webdav/resources/views
> main/java/com/xpn/xwiki/plugin/webdav/resources/views/pages
> test/java/com/xpn/xwiki/plugin/webdav/tests
> To: XWiki Notifications <[EMAIL PROTECTED]>
> 
> 
> Hi Vincent, Sergiu and all,
> 
> I will try to explain the need to componetize xwiki-webdav. May be we
> shouldn't componetize xwiki-webdav after all ;)
> 
> Following is the way we lookup for a base-view (a particular view of an
> xwiki-repository). Basically, when a request comes for a particular url, we
> take the corresponding segment of the url (nextToken here), append
> "-baseview" and lookup for a component with that ROLE_HINT. If found, we'll
> handover the job to that component.
> 
> 
>> +            XWikiDavResource resource = null;
>> +            try {
>> +                resource =
>> +                    (XWikiDavResource) getComponentManager()
>> +                        .lookup(ROLE, nextToken + "-baseview");
>> +                resource.init(this, nextToken, "/" + nextToken);
>> +                stack.push(resource);
>> +                resource.decode(stack, tokens, next + 1);
>> +            } catch (ComponentLookupException e) {
>> +                throw new
>> DavException(DavServletResponse.SC_INTERNAL_SERVER_ERROR, e);
>>
> 
> 
> Bellow is where we list the set of possible views. for this i need to filter
> out only those views which has the "-baseview" id appended to their role
> hint. This is why i added the getRoleHint() method into the component
> interface.
> 
> The use of this approach is, if someone need to add a new view, he simply
> have to extend the XWikiDavResource interface and have the ROLE_HINT ending
> like "-baseview", nothing else.
> 
> The other approach is to manually load each base view using lookup("role",
> "role-hint") but in this case, the developer of the new view will have to
> change the RootView's code to load his view along with the rest of base
> views.
> 
> 
>> +            List<XWikiDavResource> viewsList =
>> getComponentManager().lookupList(ROLE);
>> +            for (XWikiDavResource view : viewsList) {
>> +                String componentHint = view.getRoleHint();
>> +                int dash = componentHint.lastIndexOf('-');
>> +                if (componentHint.endsWith("-baseview")) {
>> +                    String name = componentHint.substring(0, dash);
>> +                    view.init(this, name, "/" + name);
>> +                    children.add(view);
>> +                }
>> +            }
>> +        } catch (ComponentLookupException e) {
>> +            LOG.error("Unexpected Error : ", e);
>>
> 
> 
> May be this is a wrong approach. And yes, XWikiDavResource is not a business
> interface. But I think this increases the extensibility / flexibility of
> xwiki-webdav. To add a new view, (as i said before) extend XWikiDavResourve
> and end your ROLE_HINT with "-baseview". To remove an existing view, simply
> remove the "-baseview" part from your components.xml configuration file,
> that's it.
> 
> I would like to know your thoughts. And i can revert these changes if
> necessary.
> 

I don't understand why is the -baseview needed. What does it do? How are
implementations with baseview different than the others? What other
types of views are there?

You could do something different: add a new component type that extends
the XWikiDavResource component, let's say XWikiDavBaseview, and declare
your baseviews to implement this component. Is this OK for you?

-- 
Sergiu Dumitriu
http://purl.org/net/sergiu/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to