Tim: thank you for that walk-through of the Administrative aspect. It is very 
timely with some work that I'm doing. I'm curious, has anyone produced 
documentation, say perhaps a diagram (or several), of the various aspects and 
the flow of processing for them? I'm thinking something a bit more specific 
than Scott Phillips' excellent Manakin training slide stack 
(http://scott.phillips.name/wp-content/uploads/2009/05/tdl-manakin-training.pdf).
 The DSpace wiki has a great intro/overview of aspects for Manakin ( 
https://wiki.duraspace.org/display/DSPACE/Create+a+new+aspect+(Manakin) ) , and 
the JavaDocs for the XMLUI API 
(http://projects.dspace.org/dspace-xmlui/dspace-xmlui-api/apidocs/index.html) 
are helpful, too. But, if anyone has something more visual, to explain the flow 
of specific aspects, I'd love to see it. Thanks!

--Hardy 

> -----Original Message-----
> From: Tim Donohue [mailto:[email protected]]
> Sent: Thursday, October 07, 2010 10:00 AM
> To: Walker, David
> Cc: [email protected]
> Subject: Re: [Dspace-tech] manikin question
> 
> Hi Dave,
> 
> Meant to get back to this discussion -- but, as you can see, it has
> taken me a while to do so :)
> 
> On 10/1/2010 4:22 PM, Walker, David wrote:
> > If the goal here is to add an input button to the interface -- on the
> 'confirm item' page, let's say -- I think it would be *significantly*
> easier if the developer could just open an XSLT file, find the 'confirm
> item' template, and just add the button like this:
> >
> >    <input type="submit">
> >
> > If someone wanted to then change that button to a link or an image, I
> think it would, again, be significantly easier for them to locate the
> 'confirm item' template, find that input element, and then change it to:
> >
> >    <a href="">
> >
> > Done.  Easy.
> >
> > The way Manakin does it now, by comparison, seems both unnecessarily
> complex and unnecessarily restrictive.
> >
> > To add a button to the interface, the developer has to write several
> lines of Java code to create a pseudo-button DRI element and add it to
> the XML response.
> >
> > And then if someone wants to change that element, they have to either
> wade through a bunch of XSL templates to find the right one that can
> override buttons, or edit the Java source code and then recompile and
> redeploy Manakin.
> >
> > And that's just for this one very simple use case.  If you need to
> make (even slightly) more complex changes to the interface, like
> actually *moving* elements around -- putting that button above or below
> a different interface element, for example -- then you have to edit Java
> code (cumbersome), or make large-scale changes to the XSLT (a lot of
> work).
> >
> > That just seems ten times more difficult than opening-up an XSLT file,
> and just editing actual HTML directly.  Am I wrong?
> >
> 
> I think you have some good points you've made, and I appreciate it.
> 
> However, it is worth pointing out a small flaw in this logic (at least
> for HTML buttons or forms in general).  Obviously, as we both know, a
> button won't do anything unless there's some server-side code which
> understands how to process that request.  I agree with your point, that
> there may be ways to make it much easier to add simple HTML elements
> into Templates.  However, there will still need to be some Java code
> behind a button, which understands what that button needs to do when it
> is pressed.
> 
> So, maybe it's worth looking at a specific example here to make sure
> everyone is on the same page.  Let's look at how the "Administrative
> Aspect" works in Manakin, specifically the single form that allows you
> to Edit Metadata for an Item.  Here's the general flow of how Manakin
> creates that specific form (within the larger page):
> 
> (skipping over some underlying logic in Cocoon sitemaps, just to
> simplify)
> 
> (0) Manakin sees you have the Administrative aspect enabled (it is
> possible to *disable* an aspect, so if you did NOT have the
> Administrative aspect installed/enabled, then you would be unable to
> access this form and your DSpace install would essentially be
> 'read-only').  Assume you are logged in as an Admin, so it will show you
> this form.
> 
> (1) The
> 'org.dspace.app.xmlui.aspect.administrative.item.EditItemMetadataForm'
> class generates the DRI version of this Form -- in DRI this form is
> actually a <dri:div interactive="yes">.   This <dri:div> also includes a
> <dri:list> of all editable metadata fields, along with a few <dri:field
> type="button"> elements which represent the buttons.
> 
> (2) Assuming you are using the Reference Theme, it is loaded by Manakin
> & called.
> 
> (3) The Reference Theme calls the structural.xsl.  In this file, the
> template matching "dri:d...@interactive='yes']" is matched, and the XSLT
> processing continues to match all the other templates in that file to
> built the XHTML (for simplicities sake, I'll refrain from listing them
> all -- plus as we've all already agreed this is a bit complex/confusing
> at times).
> 
> (4) The XHTML is built, CSS is applied & the page is shown to the user.
> 
> (5) The user then edits some fields, and presses the "Update" button
> 
> (6) This request is then processed by Manakin (Cocoon, actually).
> Specifically, it's processed by the 'administrative.js' file under the
> Administrative Aspect's config folder.  This is a Flowscript file
> (Cocoon's flowscript format is essentially javascript, but can embed
> some Java calls).
> 
> (7) In that flowscript file, the 'processEditItem()' method of the
> 'org.dspace.app.xmlui.aspect.administrative.FlowItemUtils' class is
> called.  This method includes the Java code that actually *saves* the
> metadata change, and updates the Item in DSpace.
> 
> So -- the reason for this exercise is to show that there's unfortunately
> a lot of complexities here, that we may be able to improve upon or clean
> up over time.  For example:
> 
> A. I think Dave makes a good point that we may wish to try and push more
> of the XHTML generation to the XSLs themselves (and simplify the amount
> of content the Aspects themselves are generating -- to ease the ability
> to customize pages).   Whether or not this does away with DRI (or if it
> just makes DRI much more simplistic, i.e. a smaller subset of itself) is
> still not 100% clear in my mind.
> 
> B. Obviously, as the above processing flow shows, some Aspects are quite
> confusing and it makes it difficult to debug or add new content.  It's
> possible you'd have to look not only in XSLT, but also in multiple Java
> files (the one generating the DRI and/or the one processing any form
> requests), and potentially even the Flowscript.  We can probably find
> ways to simplify this, or at least make it more straightforward, so that
> each developer doesn't need to re-determine the flow each time he/she
> adds new content.
> 
> 
> >> You can create your theme entirely from
> >> scratch if you choose
> >
> > Totally.  In fact, right now, I could rewrite the XSLT so that it
> follows the page-based structure that I'm advocating for, and all
> without having to touch a single line of Java code.
> >
> > Moreover, we could do that while basically ignoring 99% of the current
> DRI XML response -- I know, because we actually started to do this
> before realizing that having our own from-scratch theme would be a
> maintenance nightmare.
> >
> > But that just further strengthens my belief that we don't need DRI, or
> anything even like it.
> >
> > The XML will need to provide some information for the interface, no
> doubt.  But I see no reason at all to have the kind of quasi-
> presentational XML elements that DRI provides.
> >
> > I'm not trying to dump on DRI.  I'm really not.  But, I think, until
> the community can fully appreciate the problem that that approach
> creates, there is a  (totally understandable) reluctance to move away
> from it.
> >
> > XSLT can handle *all* of the presentational logic, and makes both
> building and customizing the interface so much easier.  I know, because
> I've seen it used that way in a number of other systems.
> >
> > I'm convinced that making the XSLT the (sole) presentation layer is a
> much better approach.
> 
> More interesting points.  I'm still not 100% sure that DRI could be done
> away with (you haven't swayed me completely yet). But, it could be that
> a much more simplistic XML could be created (i.e. a smaller subset of
> DRI) which could then allow XSLTs to create more of the page content
> directly.
> 
> In any case, this is very interesting discussion/brainstorming.  I hope
> we can continue it, and start to figure out possible routes forward.
> 
> - Tim
> 
> ------------------------------------------------------------------------
> ------
> Beautiful is writing same markup. Internet Explorer 9 supports
> standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
> Spend less time writing and  rewriting code and more time creating great
> experiences on the web. Be a part of the beta today.
> http://p.sf.net/sfu/beautyoftheweb
> _______________________________________________
> DSpace-tech mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/dspace-tech

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
DSpace-tech mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dspace-tech

Reply via email to