You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-dev@portals.apache.org by Charles Severance <cs...@umich.edu> on 2007/03/15 03:10:04 UTC

Where do I find PortletDD outside of the doRender call?

I am in my portal and trying to decide whether or not to put out a  
Help icon and/or an Edit icon.

I would like to only do so if the Portlet supports the HELP or Edit  
modes.

I am in the render code about to call

          portletContainer.doRender(window, req, bufferedResponse);

and have access to all of the following structures:

PortletContainer portletContainer = getPortletContainer(context);
RequiredContainerServices rs =  
portletContainer.getRequiredContainerServices();
PortalCallbackService pcs = rs.getPortalCallbackService();
PortletURLProvider pup = pcs.getPortletURLProvider(request, window);
pup.setPortletMode(new PortletMode("edit"));
String editUrl = pup.toString();
pup = pcs.getPortletURLProvider(request, window);
pup.setPortletMode(new PortletMode("help"));
String helpUrl = pup.toString();

So I can derive what the right URLs are - but cannot figure out  
whether I should emit these URLs.

I could figure this out if I could get my hands in the  
InternalPortletWindow or the PortletDD.  But it seems that I cannot  
access these things until the Container has built the PortletRequest  
structures - at which point it is trivial because I can call  
isPortletModeAllowed() if I had those structures.

It would seem to me that I should be able to lookup a PortletDD  
somehow...

/Chuck

Re: Where do I find PortletDD outside of the doRender call?

Posted by "David H. DeWolf" <dd...@apache.org>.
The method I was referring to is actually:

container.getPortletApplicationDescriptor(applicationId);

My abbr. may have been confusing :)

David H. DeWolf wrote:
> 
> 
> Charles Severance wrote:
>> This was what it took:
>>
>>                 PortletDD pdd = 
>> PortletContextManager.getManager().getPortletDescriptor(appName, 
>> portletName);
> 
> I'm not sure that would be the "recommended" approach.  The PCM is 
> really an internal structure.  It definitely will work though.
> 
>>
>> I had to stash the appName and portletName in Sakai data structures so 
>> I could regurgitate them at the right time.
> 
> You mean after parsing through to OM?
> 
>>
>> It is too bad that I had to go to such effort - in a sense the 
>> doRender call does not need as much information:
>>
>>            portletContainer.doRender(window, req, bufferedResponse);
>>
>> doRender finds find all the necessary data about this Portlet- it 
>> would be nice someday to have the container to be able to hand me back 
>> a PortletDD with no more information than that which is present in the 
>> doRender.
> 
> Well, it does, just at a little lower level.
> 
> portletContainer.getPortletAppDD(applicationId);
> 
> Then, from the PortletAppDD you can get all of the PortletDDs.  This 
> would definitely be the recommended approach.
> 
>>
>> now perhaps I am complaining about what is *my* responsibility and 
>> what is the container's responsibility - but if the container has the 
>> right code to resolve form effectively the windowId - then I 
>> theoretically should be able to ask for PortletDD knowing just the 
>> window id and request(perhaps).
> 
> Basically all that's missing is the convenience method which iterates 
> through the PortletApp portlets and retrieves the correct one for you. 
> If that would be really helpful to other portals we could definately add 
> it, but my fear with adding convenience methods is that we could easily 
> explode the container api for no good reason.  In other words, portlet 
> is definitely as far as I would go.
> 
>>
>> Just thinking out loud.
> 
> Did you miss the container method? Or were you just looking for a way 
> not to have to iterate?
> 
> Thoughts?
> 
> D
>>
>> /Chuck
>>
>> On Mar 14, 2007, at 10:24 PM, David H. DeWolf wrote:
>>
>>> Try:  PortletContainer.getPortletAppDescriptor(applicationId)
>>>
>>>
>>>
>>> Charles Severance wrote:
>>>> I am in my portal and trying to decide whether or not to put out a 
>>>> Help icon and/or an Edit icon.
>>>> I would like to only do so if the Portlet supports the HELP or Edit 
>>>> modes.
>>>> I am in the render code about to call
>>>>          portletContainer.doRender(window, req, bufferedResponse);
>>>> and have access to all of the following structures:
>>>> PortletContainer portletContainer = getPortletContainer(context);
>>>> RequiredContainerServices rs = 
>>>> portletContainer.getRequiredContainerServices();
>>>> PortalCallbackService pcs = rs.getPortalCallbackService();
>>>> PortletURLProvider pup = pcs.getPortletURLProvider(request, window);
>>>> pup.setPortletMode(new PortletMode("edit"));
>>>> String editUrl = pup.toString();
>>>> pup = pcs.getPortletURLProvider(request, window);
>>>> pup.setPortletMode(new PortletMode("help"));
>>>> String helpUrl = pup.toString();
>>>> So I can derive what the right URLs are - but cannot figure out 
>>>> whether I should emit these URLs.
>>>> I could figure this out if I could get my hands in the 
>>>> InternalPortletWindow or the PortletDD.  But it seems that I cannot 
>>>> access these things until the Container has built the PortletRequest 
>>>> structures - at which point it is trivial because I can call 
>>>> isPortletModeAllowed() if I had those structures.
>>>> It would seem to me that I should be able to lookup a PortletDD 
>>>> somehow...
>>>> /Chuck
>>>
>>>
>>
>>
> 

Re: Where do I find PortletDD outside of the doRender call?

Posted by "David H. DeWolf" <dd...@apache.org>.

Charles Severance wrote:
> This was what it took:
> 
>                 PortletDD pdd = 
> PortletContextManager.getManager().getPortletDescriptor(appName, 
> portletName);

I'm not sure that would be the "recommended" approach.  The PCM is 
really an internal structure.  It definitely will work though.

> 
> I had to stash the appName and portletName in Sakai data structures so I 
> could regurgitate them at the right time.

You mean after parsing through to OM?

> 
> It is too bad that I had to go to such effort - in a sense the doRender 
> call does not need as much information:
> 
>            portletContainer.doRender(window, req, bufferedResponse);
> 
> doRender finds find all the necessary data about this Portlet- it would 
> be nice someday to have the container to be able to hand me back a 
> PortletDD with no more information than that which is present in the 
> doRender.

Well, it does, just at a little lower level.

portletContainer.getPortletAppDD(applicationId);

Then, from the PortletAppDD you can get all of the PortletDDs.  This 
would definitely be the recommended approach.

> 
> now perhaps I am complaining about what is *my* responsibility and what 
> is the container's responsibility - but if the container has the right 
> code to resolve form effectively the windowId - then I theoretically 
> should be able to ask for PortletDD knowing just the window id and 
> request(perhaps).

Basically all that's missing is the convenience method which iterates 
through the PortletApp portlets and retrieves the correct one for you. 
If that would be really helpful to other portals we could definately add 
it, but my fear with adding convenience methods is that we could easily 
explode the container api for no good reason.  In other words, portlet 
is definitely as far as I would go.

> 
> Just thinking out loud.

Did you miss the container method? Or were you just looking for a way 
not to have to iterate?

Thoughts?

D
> 
> /Chuck
> 
> On Mar 14, 2007, at 10:24 PM, David H. DeWolf wrote:
> 
>> Try:  PortletContainer.getPortletAppDescriptor(applicationId)
>>
>>
>>
>> Charles Severance wrote:
>>> I am in my portal and trying to decide whether or not to put out a 
>>> Help icon and/or an Edit icon.
>>> I would like to only do so if the Portlet supports the HELP or Edit 
>>> modes.
>>> I am in the render code about to call
>>>          portletContainer.doRender(window, req, bufferedResponse);
>>> and have access to all of the following structures:
>>> PortletContainer portletContainer = getPortletContainer(context);
>>> RequiredContainerServices rs = 
>>> portletContainer.getRequiredContainerServices();
>>> PortalCallbackService pcs = rs.getPortalCallbackService();
>>> PortletURLProvider pup = pcs.getPortletURLProvider(request, window);
>>> pup.setPortletMode(new PortletMode("edit"));
>>> String editUrl = pup.toString();
>>> pup = pcs.getPortletURLProvider(request, window);
>>> pup.setPortletMode(new PortletMode("help"));
>>> String helpUrl = pup.toString();
>>> So I can derive what the right URLs are - but cannot figure out 
>>> whether I should emit these URLs.
>>> I could figure this out if I could get my hands in the 
>>> InternalPortletWindow or the PortletDD.  But it seems that I cannot 
>>> access these things until the Container has built the PortletRequest 
>>> structures - at which point it is trivial because I can call 
>>> isPortletModeAllowed() if I had those structures.
>>> It would seem to me that I should be able to lookup a PortletDD 
>>> somehow...
>>> /Chuck
>>
>>
> 
> 

Re: Where do I find PortletDD outside of the doRender call?

Posted by Charles Severance <cs...@umich.edu>.
This was what it took:

                 PortletDD pdd = PortletContextManager.getManager 
().getPortletDescriptor(appName, portletName);

I had to stash the appName and portletName in Sakai data structures  
so I could regurgitate them at the right time.

It is too bad that I had to go to such effort - in a sense the  
doRender call does not need as much information:

	       portletContainer.doRender(window, req, bufferedResponse);

doRender finds find all the necessary data about this Portlet- it  
would be nice someday to have the container to be able to hand me  
back a PortletDD with no more information than that which is present  
in the doRender.

now perhaps I am complaining about what is *my* responsibility and  
what is the container's responsibility - but if the container has the  
right code to resolve form effectively the windowId - then I  
theoretically should be able to ask for PortletDD knowing just the  
window id and request(perhaps).

Just thinking out loud.

/Chuck

On Mar 14, 2007, at 10:24 PM, David H. DeWolf wrote:

> Try:  PortletContainer.getPortletAppDescriptor(applicationId)
>
>
>
> Charles Severance wrote:
>> I am in my portal and trying to decide whether or not to put out a  
>> Help icon and/or an Edit icon.
>> I would like to only do so if the Portlet supports the HELP or  
>> Edit modes.
>> I am in the render code about to call
>>          portletContainer.doRender(window, req, bufferedResponse);
>> and have access to all of the following structures:
>> PortletContainer portletContainer = getPortletContainer(context);
>> RequiredContainerServices rs =  
>> portletContainer.getRequiredContainerServices();
>> PortalCallbackService pcs = rs.getPortalCallbackService();
>> PortletURLProvider pup = pcs.getPortletURLProvider(request, window);
>> pup.setPortletMode(new PortletMode("edit"));
>> String editUrl = pup.toString();
>> pup = pcs.getPortletURLProvider(request, window);
>> pup.setPortletMode(new PortletMode("help"));
>> String helpUrl = pup.toString();
>> So I can derive what the right URLs are - but cannot figure out  
>> whether I should emit these URLs.
>> I could figure this out if I could get my hands in the  
>> InternalPortletWindow or the PortletDD.  But it seems that I  
>> cannot access these things until the Container has built the  
>> PortletRequest structures - at which point it is trivial because I  
>> can call isPortletModeAllowed() if I had those structures.
>> It would seem to me that I should be able to lookup a PortletDD  
>> somehow...
>> /Chuck
>
>


Re: Where do I find PortletDD outside of the doRender call?

Posted by "David H. DeWolf" <dd...@apache.org>.
Try:  PortletContainer.getPortletAppDescriptor(applicationId)



Charles Severance wrote:
> I am in my portal and trying to decide whether or not to put out a Help 
> icon and/or an Edit icon.
> 
> I would like to only do so if the Portlet supports the HELP or Edit modes.
> 
> I am in the render code about to call
> 
>          portletContainer.doRender(window, req, bufferedResponse);
> 
> and have access to all of the following structures:
> 
> PortletContainer portletContainer = getPortletContainer(context);
> RequiredContainerServices rs = 
> portletContainer.getRequiredContainerServices();
> PortalCallbackService pcs = rs.getPortalCallbackService();
> PortletURLProvider pup = pcs.getPortletURLProvider(request, window);
> pup.setPortletMode(new PortletMode("edit"));
> String editUrl = pup.toString();
> pup = pcs.getPortletURLProvider(request, window);
> pup.setPortletMode(new PortletMode("help"));
> String helpUrl = pup.toString();
> 
> So I can derive what the right URLs are - but cannot figure out whether 
> I should emit these URLs.
> 
> I could figure this out if I could get my hands in the 
> InternalPortletWindow or the PortletDD.  But it seems that I cannot 
> access these things until the Container has built the PortletRequest 
> structures - at which point it is trivial because I can call 
> isPortletModeAllowed() if I had those structures.
> 
> It would seem to me that I should be able to lookup a PortletDD somehow...
> 
> /Chuck
>