uPortal IRC Logs-2008-02-27

[06:30:25 EST(-0500)] * jayshao (n=jayshao@66.94.87.210) has joined ##uportal
[08:38:08 EST(-0500)] * jayshao (n=jayshao@66.94.87.210) has joined ##uportal
[09:35:43 EST(-0500)] * jayshao (n=jayshao@campuseai.expedient.com) has joined ##uportal
[09:36:34 EST(-0500)] * jayshao (n=jayshao@campuseai.expedient.com) has joined ##uportal
[09:54:14 EST(-0500)] * anastasiac (n=anastasi@142.150.154.149) has joined ##uportal
[09:56:19 EST(-0500)] * theclown_ (n=clown@142.150.154.101) has joined ##uportal
[10:01:18 EST(-0500)] * EricDalquist (n=dalquist@bohemia.doit.wisc.edu) has joined ##uportal
[10:54:30 EST(-0500)] * athena7 (n=athena7@lumina.its.yale.edu) has joined ##uportal
[11:03:31 EST(-0500)] <lescour> athena, you here?
[11:16:04 EST(-0500)] <athena7> yes
[11:16:06 EST(-0500)] <athena7> hello!
[11:18:10 EST(-0500)] <lescour> hiya
[11:18:16 EST(-0500)] <athena7> good morning
[11:18:39 EST(-0500)] <lescour> i was wondering if you had any success with the up3 cas proxy portlet work
[11:18:51 EST(-0500)] <athena7> yes!
[11:18:57 EST(-0500)] <lescour> i have to make a decision very soon about which version to go to
[11:18:58 EST(-0500)] <athena7> i got it working yesterday
[11:19:12 EST(-0500)] <lescour> that's sweet
[11:19:14 EST(-0500)] <athena7> cleaning up and submitting the code is on my short term to-do list
[11:19:23 EST(-0500)] <lescour> ok, i'll keep an eye on the svn
[11:19:27 EST(-0500)] <athena7> when i get it submitted, would you be in a position to help test it?
[11:19:27 EST(-0500)] <EricDalquist> I actually have a related question for athena7, I'm talking with ScottB about using CAS as the default AuthN mechanism for uP3
[11:19:37 EST(-0500)] <athena7> i just saw your email eric
[11:19:39 EST(-0500)] <athena7> that sounds cool to me
[11:19:45 EST(-0500)] <lescour> yes. i have a cas test environment
[11:20:11 EST(-0500)] <EricDalquist> Scott mentioned CAS has a quickstart-link WAR
[11:20:22 EST(-0500)] <athena7> we'd still need to get the cas login/logout url into the theme
[11:20:26 EST(-0500)] <EricDalquist> yup
[11:20:27 EST(-0500)] <athena7> but that shouldn't be impossible
[11:20:43 EST(-0500)] <EricDalquist> I'm wondering if the CAS config work you've done would translate to using that WAR?
[11:20:52 EST(-0500)] <EricDalquist> (I know very very little about actually using CAS)
[11:21:26 EST(-0500)] <lescour> and the cas tickets are now configured at the uportal level, and not at the portlet level, right?
[11:21:54 EST(-0500)] <athena7> so lescour the way it works is that the portlet gets a proxy ticket from the portal
[11:22:04 EST(-0500)] <athena7> i'm not sure eric - probably?
[11:22:35 EST(-0500)] <EricDalquist> ok ... I'm going to see if I can get scott in here to help with this
[11:22:37 EST(-0500)] <athena7> the steps i had to follow were edit security.properties, edit web.xml, and then add the userinfoservice in the portlet context file
[11:22:47 EST(-0500)] <EricDalquist> ok
[11:22:48 EST(-0500)] <athena7> only the first two are required to get uPortal CASified
[11:22:54 EST(-0500)] <EricDalquist> yup
[11:22:59 EST(-0500)] <athena7> something to make that easier/more automagic would probably help
[11:23:07 EST(-0500)] <lescour> the last is to pass it into the portlet, right?
[11:23:25 EST(-0500)] <athena7> yes, that's correct
[11:23:33 EST(-0500)] <athena7> and then the portlet needs to validate the ticket itself
[11:24:13 EST(-0500)] <lescour> yea, i understand how to do that via cod
[11:24:15 EST(-0500)] <lescour> code
[11:25:06 EST(-0500)] <athena7> so you should just be able to get the ticket out of the UserInfo map
[11:26:16 EST(-0500)] <lescour> i'm going to try and install the email preview portlet into up3
[11:26:26 EST(-0500)] <lescour> and make sure it goes in without issue
[11:26:29 EST(-0500)] <athena7> which one is that?
[11:26:46 EST(-0500)] <lescour> http://code.google.com/p/email-preview-portlet/
[11:27:04 EST(-0500)] <athena7> oh cool
[11:27:12 EST(-0500)] <lescour> not part of toro, stand alone
[11:27:16 EST(-0500)] <athena7> are there screenshots of it up somewhere?
[11:27:37 EST(-0500)] <athena7> i think we may try using the duke mail portlet
[11:28:15 EST(-0500)] <lescour> http://email-preview-portlet.googlecode.com/svn/trunk/docs/email_preview_portlet.png
[11:28:47 EST(-0500)] <lescour> our goal is to have a cas'ified mail preview, and a casified briefcase
[11:28:47 EST(-0500)] <athena7> oh ok
[11:28:48 EST(-0500)] <athena7> nice
[11:28:49 EST(-0500)] <athena7> (smile)
[11:29:42 EST(-0500)] <lescour> perhaps a new portlet subclass that already has the validation smarts is in order
[11:29:54 EST(-0500)] <lescour> after some proofs of concept
[11:30:37 EST(-0500)] <athena7> what kind of validation smarts do you mean?
[11:31:59 EST(-0500)] <lescour> one that handles the proxy validation
[11:32:24 EST(-0500)] <athena7> ah, yes
[11:33:07 EST(-0500)] <athena7> i guess i'd need to think about that
[11:43:10 EST(-0500)] * awills (n=awills@uni1.unicon.net) has joined ##uportal
[11:43:18 EST(-0500)] <awills> morning all
[11:43:27 EST(-0500)] <EricDalquist> morning
[11:43:29 EST(-0500)] <athena7> good morning
[11:43:37 EST(-0500)] <EricDalquist> so I'm hacking on the portlet entity prefs support in up3
[11:43:45 EST(-0500)] <EricDalquist> and have some more cernunnos related questions
[11:43:54 EST(-0500)] <awills> fire away
[11:44:02 EST(-0500)] <EricDalquist> my approach is to create a PortletEntityPreferenceHandler class
[11:44:10 EST(-0500)] <EricDalquist> that has setEntityPreference(String fName, String channelSubscribeId, int userId, LinkedHashMap<String, List<String>> preferencesMap)
[11:44:21 EST(-0500)] <EricDalquist> and will have a similar getEntityPreferences method
[11:44:55 EST(-0500)] <EricDalquist> so first is ... what would be the best way to collate the <entry> notes in the <preferences> node?
[11:45:16 EST(-0500)] <EricDalquist> I could do it one preference at a time
[11:45:27 EST(-0500)] <awills> you mean to loop them?
[11:45:28 EST(-0500)] <EricDalquist> but that breaks transaction support
[11:45:44 EST(-0500)] <awills> ah, you mean to build them into a list
[11:45:54 EST(-0500)] <awills> one sec, i'll do example on pastebin
[11:46:14 EST(-0500)] <EricDalquist> yeah .. so something like Map<fname, Map<prefName, List<prefvalues>>>
[11:46:18 EST(-0500)] <EricDalquist> in the crn script
[11:46:34 EST(-0500)] <EricDalquist> which can then be passed to the helper object for the actual work of updating the IPortletEntity
[11:49:08 EST(-0500)] <awills> need to take a minute to create a .preferences file here...
[11:49:20 EST(-0500)] <EricDalquist> ok (smile)
[12:01:35 EST(-0500)] <EricDalquist> brb, short (10 minute) meeting
[12:01:59 EST(-0500)] <awills> here's the approach that first comes to mind: http://pastebin.com/m6e5cdde5
[12:06:08 EST(-0500)] <EricDalquist> even shorter than expected!
[12:06:12 EST(-0500)] <EricDalquist> ok lets take a look
[12:07:54 EST(-0500)] <EricDalquist> looks good, that is what I was thinking but I wanted to run it by you
[12:07:59 EST(-0500)] <EricDalquist> here is the helper class so far: http://pastebin.com/m67560ee0
[12:08:52 EST(-0500)] <EricDalquist> I figure keeping that stuff out of the crn script would be useful as it makes the script less dependent on a wide variety of APIs since the crn script may not get caught if something changes with an API
[12:09:35 EST(-0500)] <EricDalquist> do you happen to have an example preferences block I could test this with?
[12:09:51 EST(-0500)] <EricDalquist> since the export doesn't work either I can't generate one and I'm not sure of the exact format of it
[12:11:04 EST(-0500)] <EricDalquist> through I suppose working on the export first would make more sense (smile)
[12:12:11 EST(-0500)] <awills> heh. that makes sense
[12:15:00 EST(-0500)] <awills> i think you make a good point about the helper class: it offers you compile-time binding to the prefs API. So if the API changes you'll get compile-time notice of incompatibility
[12:15:15 EST(-0500)] <EricDalquist> yup
[12:15:24 EST(-0500)] <EricDalquist> and a simpler API to present to the cernunnos script
[12:15:29 EST(-0500)] <awills> sure
[12:15:31 EST(-0500)] <EricDalquist> which has much less of a chance of changin
[12:15:40 EST(-0500)] <awills> i think so
[12:15:47 EST(-0500)] <EricDalquist> or
[12:16:04 EST(-0500)] <EricDalquist> probably more accuratly, would only be changing due to changes in the script
[12:19:13 EST(-0500)] <lescour> so in up3 we no longer need the portlet definition id to publish?
[12:19:38 EST(-0500)] <awills> it's split into 2 (different) publishing parameters
[12:19:44 EST(-0500)] <EricDalquist> you still do
[12:20:15 EST(-0500)] <EricDalquist> eventually (post 3.0) there is a goal to re-write the Channel Manager UI to provide you a drop down of available portlet deployments
[12:20:23 EST(-0500)] <EricDalquist> since that information is available now to the portal
[12:20:32 EST(-0500)] <EricDalquist> it just doesn't incorperate it into the UI yet
[12:20:50 EST(-0500)] <lescour> name and webpath?
[12:20:52 EST(-0500)] <EricDalquist> so what you use now (as awills said) is the same data but split into two parts
[12:21:03 EST(-0500)] <EricDalquist> the first part is the webapp name
[12:21:11 EST(-0500)] <EricDalquist> the second in the name of the portlet from portlet.xml
[12:21:52 EST(-0500)] <EricDalquist> which resolves the long standing bug of not being able to use a . in the webapp name
[12:22:06 EST(-0500)] <EricDalquist> and hopefully makes more sense for users
[12:25:04 EST(-0500)] <awills> Eric here's a layout w/ preferences from 2.6: http://pastebin.com/m521fdfdd
[12:25:10 EST(-0500)] <awills> now i got to run
[12:25:13 EST(-0500)] <awills> cya in a bit
[12:25:21 EST(-0500)] <EricDalquist> thanks, this should keep me busy for a while
[12:26:00 EST(-0500)] * Topic is 'http://uportal.pastebin.com/' set by EricDalquist on 2008-02-27 12:26:00 EST(-0500)
[12:26:22 EST(-0500)] * ChanServ sets mode +o EricDalquist
[12:26:24 EST(-0500)] <lescour> i'll update the up3 manual in the wiki
[12:26:29 EST(-0500)] <EricDalquist> thanks!
[12:26:56 EST(-0500)] <EricDalquist> the manual exists but very little has been updated for 3.0 yet ... one of my tasks once RC2 is out ... so help is ALWAYS appreciated!
[12:27:16 EST(-0500)] * lescour nods
[12:27:36 EST(-0500)] * EricDalquist sets mode +s
[12:28:01 EST(-0500)] * EricDalquist sets mode -s
[12:30:32 EST(-0500)] * EricDalquist sets mode +t
[12:32:13 EST(-0500)] * Topic is 'http://uportal.pastebin.com/ - http://www.ja-sig.org/wiki/display/UPC/uportal+IRC+Logs' set by EricDalquist on 2008-02-27 12:32:13 EST(-0500)
[12:33:54 EST(-0500)] <lescour> quick question...how does deployPortletApp determine the webpath?
[12:34:12 EST(-0500)] <EricDalquist> the webpath?
[12:34:16 EST(-0500)] <EricDalquist> like where tomcat/webapps is?
[12:34:24 EST(-0500)] <lescour> no, the name of weapp
[12:34:25 EST(-0500)] <lescour> webapp
[12:34:28 EST(-0500)] <EricDalquist> ah
[12:34:37 EST(-0500)] <EricDalquist> WebAppName.war becomes WebAppName
[12:34:49 EST(-0500)] <lescour> ahh..so it isn't configured anywhere
[12:34:52 EST(-0500)] <EricDalquist> nope
[12:34:57 EST(-0500)] <lescour> thank
[12:34:59 EST(-0500)] <lescour> thanks
[12:35:04 EST(-0500)] <EricDalquist> if you want to change it you have to rename the .war file
[12:37:57 EST(-0500)] * ChanServ (ChanServ@services.) has joined ##uportal
[12:39:06 EST(-0500)] * EricDalquist sets mode -t
[12:39:11 EST(-0500)] * EricDalquist sets mode -o EricDalquist
[12:39:29 EST(-0500)] <EricDalquist> ok ... lets see if having ChanServ idle in here keeps the topic set long-term
[12:48:27 EST(-0500)] <lescour> no problems installing the unicon email preview
[12:48:29 EST(-0500)] <lescour> into up3
[12:55:26 EST(-0500)] <EricDalquist> awesome
[13:52:12 EST(-0500)] * dstn (n=dstn@unaffiliated/dstn) has left ##uportal
[13:54:52 EST(-0500)] * theclown_ (n=clown@guiseppi.atrc.utoronto.ca) has joined ##uportal
[13:58:25 EST(-0500)] * theclown__ (n=clown@142.150.154.101) has joined ##uportal
[15:49:23 EST(-0500)] <awills> EricDalquist I'm back (at last) just fyi
[15:51:11 EST(-0500)] <EricDalquist> cool, I got distracted working on some other stuff but I think I'm still on track
[16:14:31 EST(-0500)] * scottbattaglia (n=scottbat@wg-198-hill012.rutgers.edu) has joined ##uportal
[17:15:59 EST(-0500)] <EricDalquist> hey awills how does cernunnos handle property mapping?
[17:16:10 EST(-0500)] <EricDalquist> like if I call a method foo(String, Class)
[17:16:32 EST(-0500)] <EricDalquist> does it use PropertyEditors or some such to map a "a.b.Class" String to Class?
[17:17:34 EST(-0500)] <awills> do you mean, "how do I get a Class object from a String?"
[17:18:56 EST(-0500)] <EricDalquist> um ...
[17:19:21 EST(-0500)] <EricDalquist> http://uportal.pastebin.com/m42083d08
[17:19:37 EST(-0500)] <EricDalquist> so there are two versions of getBean on a Spring application context
[17:19:52 EST(-0500)] <EricDalquist> one has a signature of getBean(String) and another getBean(String, Class)
[17:20:09 EST(-0500)] <awills> ah ic
[17:20:22 EST(-0500)] <awills> it maps to the one that matches your argument types
[17:20:29 EST(-0500)] <awills> # and types*
[17:20:33 EST(-0500)] <EricDalquist> could I just add a second <parameter value="org.jasig.portal.io.support.PortletEntityPreferenceHandler" /> and Cernunnos would realize that String needs to be a Class?
[17:21:19 EST(-0500)]

<awills> atm... you'd have to do something like $

Unknown macro: {groovy(org.jasig.portal.io.support.PortletEntityPreferenceHandler.class)}

for the 2nd argument


[17:21:31 EST(-0500)] <EricDalquist> ah ok
[17:21:34 EST(-0500)] <EricDalquist> just curious
[17:21:44 EST(-0500)] <awills> but what you describe is something i'm keen to do, actually
[17:22:03 EST(-0500)] <EricDalquist> yeah, Spring's use of PropertyEditors has spoiled me (smile)
[17:22:10 EST(-0500)] <awills> like auto-boxing on steroids
[17:22:28 EST(-0500)] <EricDalquist> we actually define a couple custom ones in uPortal to deal with PortletMode and WindowState
[17:22:35 EST(-0500)] <awills> cool, maybe i can embed their approach, if it's nicely baked
[17:22:42 EST(-0500)] <EricDalquist> so you can specify "NORMAL" as a bean property
[17:23:01 EST(-0500)] <awills> meaning the window state
[17:23:05 EST(-0500)] <EricDalquist> yeah it is the Java standard for mapping arguments to method calls
[17:23:06 EST(-0500)] <EricDalquist> yeah
[17:23:12 EST(-0500)] <EricDalquist> in the XML it is just a String
[17:23:34 EST(-0500)] <EricDalquist> the custom property editor gets invoked for any type mapping from String <-> javax.portlet.WindowState
[17:23:36 EST(-0500)] <EricDalquist> to do the mapping
[17:23:54 EST(-0500)] <EricDalquist> oh awills did you seem my feature request about the .crn.xml file extension?
[17:24:09 EST(-0500)] <awills> i believe i could support either - do something intelligent based on the runtime type of the actual argument
[17:24:32 EST(-0500)] <awills> yes i did, i was just going to change the extensions in uP3 at some point
[17:24:50 EST(-0500)] <awills> the files don't have to have any particular extension
[17:24:53 EST(-0500)] <EricDalquist> ah cool
[17:25:02 EST(-0500)] <EricDalquist> I also had a thought while working on this today
[17:25:16 EST(-0500)] <EricDalquist> I wonder if a cernunnos.xsd could be generated in the same way the grammardoc is generated
[17:25:16 EST(-0500)] <awills> i mean the exported files do, that's part of the system... but the cernunnos XML can be anything you like
[17:25:34 EST(-0500)] <EricDalquist> then we could have something similar to auto-complete when editing crn files
[17:26:20 EST(-0500)] <awills> i know i could auto-generate one... but is xsd able to handle arbitrary, unexpected element names?
[17:26:44 EST(-0500)] <EricDalquist> that could probably be done
[17:27:00 EST(-0500)] <EricDalquist> I'm not a xsd guru but I believe you can allow any elements in places
[17:27:20 EST(-0500)] <awills> in this respect crn is less like spring (where the set of possible element/attribute names is known) and more like m2 (where they're not)
[17:27:37 EST(-0500)] <EricDalquist> m2 has a XSD (wink)
[17:27:47 EST(-0500)] <awills> then that's a good sign
[17:28:07 EST(-0500)] <awills> i know m2 allows arbitrary <properties>
[17:28:52 EST(-0500)] <awills> and btw, do the creators of m2 have some exotic allergy to XML attributes?
[17:29:16 EST(-0500)] <EricDalquist> no idea
[17:29:27 EST(-0500)] <EricDalquist> there is a #maven channel on freenode ... you could go ask there (wink)
[17:29:44 EST(-0500)] <awills> heh. that'd make a solid first impression
[17:29:58 EST(-0500)] <EricDalquist> can I use for-each to iterate over a Map?
[17:30:21 EST(-0500)]

<awills> sure... <for-each items="$

Unknown macro: {groovy(myMap.entrySet())}

">


[17:31:10 EST(-0500)] <awills> working with you on this task has made me keen to develop richer baked-in support for Java collections
[17:32:05 EST(-0500)] <EricDalquist> yeah that happens when you get stuck working with a developer that doesn't like working with XML in Java (smile)
[17:34:48 EST(-0500)] <awills> something like this: http://pastebin.com/m1647d2a
[17:37:00 EST(-0500)] <EricDalquist> yup
[17:38:40 EST(-0500)] <EricDalquist> hrm
[17:38:44 EST(-0500)]

<awills> it's a toy example... but you can see <map>, <add> (should be <put> actually), $

Unknown macro: {entrySet}

, $

Unknown macro: {getKey}

, $

Unknown macro: {getValue}

[17:39:03 EST(-0500)] <EricDalquist> http://pastebin.com/d42bc64ac
[17:39:09 EST(-0500)] <EricDalquist> I get this stack from that
[17:39:39 EST(-0500)] <EricDalquist> stack: http://pastebin.com/d3e7a0c15
[17:39:48 EST(-0500)] <awills> using agreed-upon default names for request attrs, it would all just "work" w/o having to be more explicit about what map you're using, etc
[17:40:37 EST(-0500)] <awills> the subtasks of <for-each> are direct children
[17:40:48 EST(-0500)] <EricDalquist> ah
[17:41:24 EST(-0500)] <awills> i like it much better if it can be done that way... sometimes i need child elements for task parameters, and then i use a <subtasks> element
[17:41:33 EST(-0500)] <EricDalquist> so that is what the XPath of * means in the grammar doc
[17:41:39 EST(-0500)] <EricDalquist> I do to
[17:41:40 EST(-0500)] <awills> that's right (smile)
[17:41:47 EST(-0500)] <EricDalquist> I just wasn't clear on the correct way
[17:42:12 EST(-0500)] <EricDalquist> on my invoke-method elements
[17:42:17 EST(-0500)] <EricDalquist> when I use object="foo"
[17:42:23 EST(-0500)]

<EricDalquist> should that be $

Unknown macro: {foo}

instead?


[17:42:38 EST(-0500)] <awills> yes, that has to be right
[17:42:48 EST(-0500)] <EricDalquist> ok
[17:43:13 EST(-0500)]

<awills> exactly... should be $

Unknown macro: {APP_CONTEXT}

on http://pastebin.com/d42bc64ac


[17:43:22 EST(-0500)] <EricDalquist> ok
[17:43:59 EST(-0500)]

<awills> used to have to say $

Unknown macro: {req(APP_CONTEXT)}

... but I "promoted" $

Unknown macro: {req}

to the default phrase


[17:44:21 EST(-0500)] <awills> it was more in line w/ ant, m2, EL
[17:44:59 EST(-0500)] <EricDalquist> ok
[17:45:08 EST(-0500)] <EricDalquist> so I wrap in ${} to dereference a var
[17:45:42 EST(-0500)]

<awills> conceptually, that's exactly right... under the hood, it's calling the $

Unknown macro: {req}

phrase


[17:46:01 EST(-0500)] <awills> which dereferences a request attribute
[17:47:22 EST(-0500)] <EricDalquist> getting closer to my snippet working ...
[17:51:32 EST(-0500)] <EricDalquist> ok I have to run to catch the bus ... I might try more later tonight but more likely I'll continue tomorrow
[17:52:43 EST(-0500)] <EricDalquist> just so you know I get this http://pastebin.com/dea0894d from this script http://pastebin.com/d582d939a
[17:52:45 EST(-0500)] <EricDalquist> later!