Glenn Golden wrote:

> David (and company) -
> 
> Just got back to this part of the project!  Thanks to you and Paul and the
> others for all the work on the peid stuff!
> 
> I'm having some troubles...
> 
> This email is long, but look close, and you may find useful stuff within (as
> well as my plea for help!)
> 
> * * *
> 
> The iframe (in which I want the just-the-portlet-no-control) src= has a url:
> /jetspeed/portal?action=Content&js_peid=29
> 
> My Content action sets the rundata's js_peid, and selects the "Content"
> screen/layout.
> 
> The Content screen .vm has:
> 
> $jetspeed.getPortalElement($data.Js_peid)
> 
> My psml has an entry like this to place my iframe control:
> 
>         <entry id="29" parent="chef.chat">
>              <control name="iFramePortletControl" />
>         </entry>
> 
> If I *do not* add an "id=" to my psml <entry> for this portlet, it gets the
> automatic id of "29".  If I look at the url for the maximize button (et al),
> they all have "js_peid=29" for this portlet.  In the VelocityPortletControl
> extension class I wrote for the iframe portlet control, the
> getPortlet().getID() gives me "29" (which is how it gets into the iframe's
> src=).  All sound good?
> 
> Well, it doesn't work!  The getPortalElement() call ends up returning the
> string: "not implemented - PortletElement"
> 
> THEN... If I add to my psml file <entry id="987" ...> for the entry that has
> my iframe control, the above all is the same, substitute a "987" for "29"...
> and it DOES work! The getPortalElement() returns the
> just-the-portlet-content-no-control, as expected.
> 
> The only difference is that I did the numbering (and used a different number
> ???)  Does this make any sense to you?
> 
> Note: intead of me using "987" I used "29", and it still worked, so it's not
> the number I choose, but that I set the number).
> 


For now, do NOT rely on auto-numbering.  Make sure EVERY <portlet> and 
<entry> in the PSML has an id attribute

> * * *
> 
> I tried one other thing.  I had originally extended JetspeedTool with
> getPortletContent(), based on getPortlet(), but where getPortlet() finds a
> control-and-portlet and renders the control, getPortletContent() found the
> control-and-portlet and renders the portlet.  So, I re-extended the new
> JetspeedTool, adding getPortletContentById() in the same way, i.e. from
> getPortletById(), but using the portlet not the control.  The changed part
> of the function looks like this:
> 
>                     // unstack the controls to find the real PortletSets
>                     Portlet real = p;
>                     while (real instanceof PortletControl)
>                     {
>                         real = ((PortletControl)p).getPortlet();
>                     }
>                     if (real instanceof PortletSet)
>                     {
>                         // we'll explore this set afterwards
>                         sets.push(real);
>                     }
>                     else
>                     {
>                         if (p.getID().equals(peid))
>                         {                        
>                             found = real;     // CHANGED FROM found = p;
>                         }
>                     }
> 
> 
> When I use this JetspeedTool, and I don't number the psml file entry (I let
> it auto number and get "29" again for this portlet), and use the following
> in the Content screen .vm:
> 
> $jetspeed.getPortletContentById($data.Js_peid)
> 
> It works!  The getPortalElement() is different from getPortletById() and my
> getPortletContentById().  Can you see what's keeping getPortalElement() from
> finding the auto-numbered portlet?
> 


See above

> * * *
> 
> Is it correct that a VelocityPortletControl's getPortlet().getID() gives the
> portlet-itself rather than the portlet's control's id?  Maybe I have the
> wrong ID?  If so, what's the correct way from that point (where the iframe's
> src= url is generated and placed into the context) to get the right ID, i.e.
> that for the portlet, not the control?  I checked the getPortlet() object in
> there, and it's NOT an instanceof PortletControl, so I think I've got this
> right, but just want to check! 
> 


Yes, controls have not ID.  Use the id from the <entry>

> * * *
> 
> One minor point - I noticed that these routines in the JetspeedTool have
> this code:
> 
>                    Portlet real = p;
>                     while (real instanceof PortletControl)
>                     {
>                         real = ((PortletControl)p).getPortlet();
>                     }
> 
> The "while" bothered me... If we need a while, that implies that we might
> have a nest more than a single level deep and we are hunting down down down
> until we find a non-control portlet... If that's ever the case, this code
> will HANG, as the test (real) never changes... Since p never changes!
> 
> It probably should read:
> 
>                    Portlet real = p;
>                     while (real instanceof PortletControl)
>                     {
>                         real = ((PortletControl) /**/ real
> /**/).getPortlet();
>                     }
> 
> Or, if we don't expect a nesting, a simple "if", not a "while", would be
> enough, and safe.
> 


If a portlet does NOT have a control, then the control is inherited from 
it's parent portlet.  Their MUST be a control set for the root portlet. 
  This is done by the customizer.


> * * *
> 
> One other problem I noticed.  When we maximize now, Maximize action sets
> "js_peid" into the user's setTemp().  I think this gets added to all
> incoming requests in the session, even if not on the URL, right?
> 

> The new templates (like Maximize.vm) use $data.Js_peid.  The Maximize action
> sets the rundata's setJs_peid() also, making it available to the template as
> $data.Js_peid.
> 
> Unless you come back to the screen with a "/jetspeed/portal" sort of URL,
> without the action encoded.  Now, if I understand the user setTemp() right,
> the request parameter will include the "js_peid" as stashed away by the
> Maximize action that got us maximized, BUT there's no action to set the
> rundata's setJs_peid(), and the templates don't see the peid and complain
> so.  Do you see this problem?
> 


Turbine calls setJs_peid when it see js_peid on the url


> Either we need something that sets the rundata's special access functions
> (like setJs_peid()) for all incoming requests (based on the URL and
> setTemp() stuff), or the template needs to use something like:
> 
> $data.getParameters().getString("js_peid")
> 
> Instead of
> 
> $data.Js_peid
> 
> Does this make sense?
> 


I am not sure what the problem is? Set the id attribute as described above and retest


> * * *
> 
> Thanks for your help.
> 
> - Glenn
>  
> --------------------------------------------
> Glenn R. Golden, Systems Research Programmer
> University of Michigan School of Information
> [EMAIL PROTECTED]               734-615-1419
> http://www-personal.si.umich.edu/~ggolden/
> --------------------------------------------
> 
> 
> 
>>-----Original Message-----
>>From: David Sean Taylor [mailto:[EMAIL PROTECTED]]
>>Sent: Thursday, March 07, 2002 8:29 PM
>>To: 'Jetspeed Developers List'
>>Subject: RE: Jetspeed Proposal: iframe portlet control
>>
>>
>>Glenn,
>>
>>I checked in a new tool :
>>
>>jetspeed.getPortalElement(id)
>>
>>Give it a try in your Iframe.
>>It will not work for PortletSets right now. Only portlets (without the
>>control). You will also need to write your own screen and layout. In 
>>the screen do this:
>>
>>$jetspeed.getPortalElement("5")
>>
>>Where 5 is the number of a portlet. You will need to number your
>>portlets in your psml file.
>>
> 
> ... snip ...
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
> 
> 



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to