On 09/28/2011 09:51 AM, Scott Serr wrote:
I have a data model that follow this page structure:
Detectors
-> Detector1
-> Detector1History1
-> Detector1History2
-> Detector2
(Implemented with my DetectorClass and DetectorHistoryClass)
The Detectors is like a dashboard for Detectors and their history. It's mostly
working. My issue is that my Velocity code on that top dashboard page is looking pretty
ugly. It has nested loops and I don't know how to do any encapsulation. If I could
do things like detector1.getNewestHistory() that would be very helpful. But my Detector
Object Class is limited to what I can define in XWiki. To my knowledge, XWiki's
"user defined" classes aren't able to encapsulate code. Am I wrong?
It seems like defining my Velocity macros would help, but my understanding is a macro
can't return anything, just evaluates to output.
If I'm wrong-headed, please correct me.
From Velocity code only, you can't get very far towards clean
domain-specific code. You should consider writing some Java code that
wraps the XWiki plain data model into more useful rich objects.
The way I see it, you should have Detector and DetectorHistory java
classes that contain a com.xpn.xwiki.BaseObject object inside them to
which they forwards data requests, plus new methods that bridge them
together. Then, a ScriptService class that offers access to these
objects from Velocity, which you would access with $services.detector in
Velocity.
--
Sergiu Dumitriu
http://purl.org/net/sergiu/