[rhmessaging-commits] rhmessaging commits: r1819 - mgmt/cumin/python/wooly.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Tue Apr 1 11:47:34 EDT 2008


Author: justi9
Date: 2008-04-01 11:47:34 -0400 (Tue, 01 Apr 2008)
New Revision: 1819

Modified:
   mgmt/cumin/python/wooly/widgets.py
   mgmt/cumin/python/wooly/widgets.strings
Log:
Introduces a new kind of ItemSet, RenderingItemSet, which uses an
ItemRenderer to generate each item's output.  The default
implementation uses a template, as before.

Eventually RenderingItemSet will replace ItemSet altogether.

Modify Paginator to use the new item set class.

Introduce PropertySet and ActionSet.



Modified: mgmt/cumin/python/wooly/widgets.py
===================================================================
--- mgmt/cumin/python/wooly/widgets.py	2008-04-01 15:44:42 UTC (rev 1818)
+++ mgmt/cumin/python/wooly/widgets.py	2008-04-01 15:47:34 UTC (rev 1819)
@@ -183,6 +183,61 @@
         
         return None
 
+class RenderingItemSet(Widget):
+    def __init__(self, app, name, item_renderer):
+        super(RenderingItemSet, self).__init__(app, name)
+
+        self.item_renderer = item_renderer
+
+        self.items = Attribute(app, "items")
+        self.add_attribute(self.items)
+
+    def get_item_count(self, session, *args):
+        return len(self.get_items(session, *args))
+
+    def get_items(self, session, *args):
+        items = self.items.get(session)
+
+        if items is None:
+            items = self.do_get_items(session, *args)
+            
+            if items is None:
+                items = ()
+
+        return items
+
+    def do_get_items(self, session, *args):
+        pass
+
+    def render_items(self, session, *args):
+        items = self.get_items(session, *args)
+        writer = Writer()
+
+        for item in items:
+            self.item_renderer.render(writer, session, item)
+
+        return writer.to_string()
+
+class ItemRenderer(object):
+    def __init__(self, widget):
+        self.widget = widget
+
+    def render_content(self, session, item):
+        return item
+
+    def render(self, writer, session, item):
+        return self.render_content(session, item)
+
+class TemplateRenderer(ItemRenderer):
+    def __init__(self, widget, template_key):
+        super(TemplateRenderer, self).__init__(widget)
+
+        text = self.widget.get_string(template_key)
+        self.__tmpl = ObjectBoundTemplate(self, text)
+
+    def render(self, writer, session, item):
+        self.__tmpl.render(writer, session, item)
+
 class ItemTree(ItemSet):
     def get_items(self, session, *args):
         """Get the root items"""
@@ -195,41 +250,42 @@
         writer = Writer()
         
         for child in self.get_child_items(session, *args):
-            self.item_tmpl.render(writer, session, child)
+            self.item_renderer.render(writer, session, child)
 
         return writer.to_string()
 
-class Paginator(ItemSet):
+class Paginator(RenderingItemSet):
     def __init__(self, app, name):
-        super(Paginator, self).__init__(app, name)
+        renderer = self.PageLink(self, "page_html")
+        super(Paginator, self).__init__(app, name, renderer)
 
-        self.__page = IntegerParameter(app, "page")
-        self.__page.default = 0
-        self.add_parameter(self.__page)
+        self.page_index = IntegerParameter(app, "page")
+        self.page_index.default = 0
+        self.add_parameter(self.page_index)
 
-        self.__pageset = IntegerParameter(app, "pageset")
-        self.__pageset.default = 0
-        self.add_parameter(self.__pageset)
+        self.pageset_index = IntegerParameter(app, "pageset")
+        self.pageset_index.default = 0
+        self.add_parameter(self.pageset_index)
 
-        self.__count = Attribute(app, "count")
-        self.add_attribute(self.__count)
+        self.page_count = Attribute(app, "count")
+        self.add_attribute(self.page_count)
 
         self.page_size = 15
         self.pageset_size = 5
 
     def get_bounds(self, session):
-        page = self.__page.get(session)
+        page = self.page_index.get(session)
         return self.page_size * page, self.page_size * (page + 1)
 
     def get_pageset_bounds(self, session):
-        pageset = self.__pageset.get(session)
+        pageset = self.pageset_index.get(session)
         return self.pageset_size * pageset, self.pageset_size * (pageset + 1)
 
     def set_count(self, session, count):
-        return self.__count.set(session, count)
+        return self.page_count.set(session, count)
 
     def get_count(self, session):
-        return self.__count.get(session)
+        return self.page_count.get(session)
 
     def get_page_count(self, session):
         count = self.get_count(session)
@@ -244,7 +300,7 @@
             (href, class_ and " class=\"%s\" " % class_ or " ", content)
     
     def render_prev_page_link(self, session, *args):
-        page = self.__page.get(session)
+        page = self.page_index.get(session)
         
         if page < 1:
             html = self.__link(session.marshal(), "&lt;", "pagenav disabled")
@@ -253,15 +309,16 @@
             pageset_start = self.get_pageset_bounds(session)[0]
 
             branch = session.branch()
-            self.__page.set(branch, page)
+            self.page_index.set(branch, page)
             if page < pageset_start:
-                self.__pageset.set(branch, self.__pageset.get(session) - 1)
+                nindex = self.pageset_index.get(session) - 1
+                self.pageset_index.set(branch, nindex)
             html = self.__link(branch.marshal(), "&lt;", "pagenav")
 
         return html
 
     def render_next_page_link(self, session, *args):
-        page = self.__page.get(session)
+        page = self.page_index.get(session)
 
         if page >= self.get_page_count(session) - 1:
             html = self.__link(session.marshal(), "&gt;", "pagenav disabled")
@@ -270,53 +327,83 @@
             pageset_end = self.get_pageset_bounds(session)[1]
 
             branch = session.branch()
-            self.__page.set(branch, page)
+            self.page_index.set(branch, page)
             if page >= pageset_end: # XXX should be >? bounds func is funny
-                self.__pageset.set(branch, self.__pageset.get(session) + 1)
+                nindex = self.pageset_index.get(session) + 1
+                self.pageset_index.set(branch, nindex)
             html = self.__link(branch.marshal(), "&gt;", "pagenav")
 
         return html
 
     def render_prev_pageset_link(self, session, *args):
-        pageset = self.__pageset.get(session)
+        pageset = self.pageset_index.get(session)
 
         if pageset < 1:
             html = self.__link(session.marshal(), "&lt;&lt;", "pagenav disabled")
         else:
             branch = session.branch()
-            self.__pageset.set(branch, pageset - 1)
+            self.pageset_index.set(branch, pageset - 1)
             html = self.__link(branch.marshal(), "&lt;&lt;", "pagenav")
 
         return html
 
     def render_next_pageset_link(self, session, *args):
-        pageset = self.__pageset.get(session)
+        pageset = self.pageset_index.get(session)
 
         if pageset >= self.get_pageset_count(session) - 1:
             html = self.__link(session.marshal(), "&gt;&gt;", "pagenav disabled")
         else:
             branch = session.branch()
-            self.__pageset.set(branch, pageset + 1)
+            self.pageset_index.set(branch, pageset + 1)
             html = self.__link(branch.marshal(), "&gt;&gt;", "pagenav")
 
         return html
 
     def do_get_items(self, session, *args):
-        count = self.__count.get(session)
+        count = self.page_count.get(session)
 
         start, end = self.get_pageset_bounds(session)
         page_count = self.get_page_count(session)
 
         return range(start, min(end, page_count))
 
-    def render_item_class_attr(self, session, page):
-        if self.__page.get(session) == page:
-            return " class=\"selected\""
-        
-    def render_item_href(self, session, page):
-        branch = session.branch()
-        self.__page.set(branch, page)
-        return branch.marshal()
+    class PageLink(TemplateRenderer):
+        def render_class_attr(self, session, page):
+            if self.widget.page_index.get(session) == page:
+                return " class=\"selected\""
+            
+        def render_href(self, session, page):
+            branch = session.branch()
+            self.widget.page_index.set(branch, page)
+            return branch.marshal()
 
-    def render_item_content(self, session, page):
-        return page + 1
+        def render_content(self, session, page):
+            return page + 1
+
+class PropertySet(RenderingItemSet):
+    def __init__(self, app, name, item_renderer=None):
+        super(PropertySet, self).__init__(app, name, item_renderer)
+
+        if self.item_renderer is None:
+            self.item_renderer = PropertyRenderer(self, "property_html")
+
+class PropertyRenderer(TemplateRenderer):
+    def render_title(self, session, prop):
+        return prop[0]
+
+    def render_value(self, session, prop):
+        return prop[1]
+
+class ActionSet(RenderingItemSet):
+    def __init__(self, app, name, item_renderer=None):
+        super(ActionSet, self).__init__(app, name, item_renderer)
+
+        if self.item_renderer is None:
+            self.item_renderer = ActionRenderer(self, "action_html")
+
+class ActionRenderer(TemplateRenderer):
+    def render_href(self, session, action):
+        return action[0]
+
+    def render_content(self, session, action):
+        return action[1]

Modified: mgmt/cumin/python/wooly/widgets.strings
===================================================================
--- mgmt/cumin/python/wooly/widgets.strings	2008-04-01 15:44:42 UTC (rev 1818)
+++ mgmt/cumin/python/wooly/widgets.strings	2008-04-01 15:47:34 UTC (rev 1819)
@@ -128,5 +128,17 @@
   <li>{prev_pageset_link}</li><li>{prev_page_link}</li>{items}<li>{next_page_link}</li><li>{next_pageset_link}</li>
 </ul>
 
-[Paginator.item_html]
-<li><a {item_class_attr} href="{item_href}">{item_content}</a></li>
+[Paginator.page_html]
+<li><a {class_attr} href="{href}">{content}</a></li>
+
+[PropertySet.html]
+<table>{items}</table>
+
+[PropertySet.property_html]
+<tr><th>{title}</th><td>{value}</td></tr>
+
+[ActionSet.html]
+<ul>{items}</ul>
+
+[ActionSet.action_html]
+<li><a href="{href}">{content}</a></li>




More information about the rhmessaging-commits mailing list