[rhmessaging-commits] rhmessaging commits: r3755 - in mgmt/trunk: cumin/python/cumin/grid and 2 other directories.
rhmessaging-commits at lists.jboss.org
rhmessaging-commits at lists.jboss.org
Mon Dec 21 17:54:55 EST 2009
Author: justi9
Date: 2009-12-21 17:54:54 -0500 (Mon, 21 Dec 2009)
New Revision: 3755
Modified:
mgmt/trunk/cumin/python/cumin/grid/submission.py
mgmt/trunk/cumin/python/cumin/messaging/exchange.py
mgmt/trunk/cumin/python/cumin/widgets.py
mgmt/trunk/wooly/python/wooly/forms.py
mgmt/trunk/wooly/python/wooly/forms.strings
mgmt/trunk/wooly/python/wooly/parameters.py
Log:
* Create radio and checkbox input fields that work from a
data-oriented interface (get_items)
* Convert ExchangeAdd to use them
Modified: mgmt/trunk/cumin/python/cumin/grid/submission.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/grid/submission.py 2009-12-21 15:12:54 UTC (rev 3754)
+++ mgmt/trunk/cumin/python/cumin/grid/submission.py 2009-12-21 22:54:54 UTC (rev 3755)
@@ -261,23 +261,23 @@
def render_title(self, session):
return "Standard error"
- class OptionsField(CheckboxField):
- def __init__(self, app, name):
- super(SubmissionAddForm.OptionsField, self).__init__(app, name)
+ # class OptionsField(CheckboxField):
+ # def __init__(self, app, name):
+ # super(SubmissionAddForm.OptionsField, self).__init__(app, name)
- self.add_option(self.SaveAsTemplate(app, "template"))
- self.add_option(self.UseCloud(app, "cloud"))
+ # self.add_option(self.SaveAsTemplate(app, "template"))
+ # self.add_option(self.UseCloud(app, "cloud"))
- def render_title(self, session):
- return "Options"
+ # def render_title(self, session):
+ # return "Options"
- class SaveAsTemplate(CheckboxFieldOption):
- def render_title(self, session):
- return "Save as template"
+ # class SaveAsTemplate(CheckboxFieldOption):
+ # def render_title(self, session):
+ # return "Save as template"
- class UseCloud(CheckboxFieldOption):
- def render_title(self, session):
- return "Use cloud"
+ # class UseCloud(CheckboxFieldOption):
+ # def render_title(self, session):
+ # return "Use cloud"
class AttributesField(MultilineStringField):
def render_title(self, session):
Modified: mgmt/trunk/cumin/python/cumin/messaging/exchange.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/exchange.py 2009-12-21 15:12:54 UTC (rev 3754)
+++ mgmt/trunk/cumin/python/cumin/messaging/exchange.py 2009-12-21 22:54:54 UTC (rev 3755)
@@ -246,156 +246,147 @@
elems.append(self.phase.get_sql_constraint(session, exchange))
return "where %s" % " and ".join(elems)
-class ExchangeAddForm(CuminFieldForm):
- def __init__(self, app, name, task):
- super(ExchangeAddForm, self).__init__(app, name)
+class ExchangeTypeField(RadioItemSetField):
+ def __init__(self, app, name):
+ param = SymbolParameter(app, "param")
+ param.default = "direct"
- self.task = task
+ super(ExchangeTypeField, self).__init__(app, name, param)
- self.vhost = VhostParameter(app, "vhost")
- self.add_parameter(self.vhost)
+ self.add_parameter(param)
- self.exchange_name = ExchangeNameField(app, "exchange_name")
- self.add_field(self.exchange_name)
+ def render_title(self, session):
+ return "Routing"
- self.exchange_type = self.ExchangeTypeField(app, "exchange_type")
- self.add_field(self.exchange_type)
+ def do_get_items(self, session):
+ items = list()
- self.more = MoreFieldSet(app, "more")
- self.add_field(self.more)
+ item = RadioItem("direct")
+ item.title = "Direct"
+ item.description = "Route messages to queues by queue name"
+ items.append(item)
- self.durable = self.ExchangeDurabilityField(app, "durable")
- self.more.add_field(self.durable)
+ item = RadioItem("topic")
+ item.title = "Topic"
+ item.description = "Route messages to topics by matching routing-key pattern"
+ items.append(item)
- self.sequence = self.SequenceField(app, "sequence")
- self.more.add_field(self.sequence)
+ item = RadioItem("fanout")
+ item.title = "Fan out"
+ item.description = \
+ "Route messages to all queues bound to this exchange"
+ items.append(item)
- self.ive = self.IVEField(app, "ive")
- self.more.add_field(self.ive)
+ item = RadioItem("header")
+ item.title = "Header"
+ item.description = \
+ "Route messages to queues by the content of their headers"
+ items.append(item)
- def process_submit(self, session):
- self.check(session)
+ item = RadioItem("xml")
+ item.title = "XML"
+ item.description = "Route messages to queues by their XML content"
+ items.append(item)
- if not self.errors.get(session):
- vhost = self.vhost.get(session)
- name = self.exchange_name.get(session)
- type = self.exchange_type.get(session)
- durable = self.durable.get(session) == "yes"
- sequence = self.sequence.get(session) == "yes"
- ive = self.ive.get(session) == "yes"
+ return items
- self.task.invoke(session, vhost, name, type,
- durable, sequence, ive)
- self.task.exit_with_redirect(session, vhost)
+class ExchangeDurabilityField(RadioItemSetField):
+ def __init__(self, app, name):
+ param = BooleanParameter(app, "param")
+ param.default = True
- def render_title(self, session):
- vhost = self.vhost.get(session)
- return self.task.get_description(session, vhost)
+ super(ExchangeDurabilityField, self).__init__(app, name, param)
- class SequenceField(TwoOptionRadioField):
- def render_title(self, session):
- return "Insert Sequence?"
+ # XXX don't like this
+ self.add_parameter(param)
- def render_field_help(self, session):
- return "(Exchange will insert a 'qpid.msg_sequence' field in the message header)"
+ def render_title(self, session):
+ return "Durability"
- def render_title_1(self, session):
- return "Insert Sequence"
+ def do_get_items(self, session):
+ items = list()
- def render_title_2(self, session):
- return "No Sequence"
+ item = RadioItem(True)
+ item.title = "Durable"
+ item.description = \
+ "Save this exchange definition and restore it when the broker " + \
+ "restarts"
+ items.append(item)
- class IVEField(TwoOptionRadioField):
- def render_title(self, session):
- return "Initial Value Exchange?"
+ item = RadioItem(False)
+ item.title = "Transient"
+ item.description = \
+ "Discard this exchange definition when the broker restarts"
+ items.append(item)
- def render_field_help(self, session):
- return "(Exchange will behave as an 'initial-value-exchange', keeping a reference to the last message forwarded and enqueuing that message to newly bound queues)"
+ return items
- def render_title_1(self, session):
- return "Initial-Value-Exchange"
+class ExchangeArgumentsField(CheckboxItemSetField):
+ def __init__(self, app, name):
+ item_parameter = SymbolParameter(app, "item")
- def render_title_2(self, session):
- return "No IVE"
+ super(ExchangeArgumentsField, self).__init__(app, name, item_parameter)
- class ExchangeDurabilityField(TwoOptionRadioField):
- def render_title(self, session):
- return "Durable?"
+ def do_get_items(self, session):
+ items = list()
- def render_field_help(self, session):
- return "(Queue is durable)"
+ item = CheckboxItem("initial_value")
+ item.title = "Initial value"
+ item.description = "Save the last message encountered and send it to newly bound queues"
+ items.append(item)
- def render_title_1(self, session):
- return "Durable"
+ item = CheckboxItem("message_sequence")
+ item.title = "Sequence numbers"
+ item.description = "Insert a sequence number into the header of each message"
+ items.append(item)
- def render_title_2(self, session):
- return "Transient"
+ return items
- class ExchangeTypeField(RadioField):
- def __init__(self, app, name):
- super(ExchangeAddForm.ExchangeTypeField, self).__init__ \
- (app, name, None)
+ def render_title(self, session):
+ return "Advanced options"
- self.param = Parameter(app, "param")
- self.param.default = "direct"
- self.add_parameter(self.param)
+class ExchangeAddForm(FoldingFieldSubmitForm):
+ def __init__(self, app, name, task):
+ super(ExchangeAddForm, self).__init__(app, name)
- option = self.Direct(app, "direct", self.param)
- self.add_option(option)
+ self.task = task
- option = self.Topic(app, "topic", self.param)
- self.add_option(option)
+ self.vhost = VhostParameter(app, "vhost")
+ self.add_parameter(self.vhost)
- option = self.Fanout(app, "fanout", self.param)
- self.add_option(option)
+ self.exchange_name = ExchangeNameField(app, "exchange_name")
+ self.main_fields.add_field(self.exchange_name)
- option = self.Headers(app, "headers", self.param)
- self.add_option(option)
+ self.exchange_type = ExchangeTypeField(app, "exchange_type")
+ self.main_fields.add_field(self.exchange_type)
- option = self.XML(app, "xml", self.param)
- self.add_option(option)
+ self.durability = ExchangeDurabilityField(app, "durability")
+ self.main_fields.add_field(self.durability)
- def render_title(self, session):
- return "Exchange Type"
+ self.args = ExchangeArgumentsField(app, "args")
+ self.extra_fields.add_field(self.args)
- def render_field_help(self, session):
- return "(Type of exchange to add)"
+ def process_submit(self, session):
+ self.check(session)
- class Direct(RadioFieldOption):
- def render_value(self, session):
- return "direct"
+ if not self.errors.get(session):
+ vhost = self.vhost.get(session)
+ name = self.exchange_name.get(session)
+ type = self.exchange_type.get(session)
+ durable = self.durability.get(session)
+ args = self.args.get(session)
- def render_title(self, session):
- return "<em>Direct:</em> Route messages to queues by queue name"
+ sequence_numbers = "sequence_numbers" in args
+ initial_value = "initial_value" in args
- class Topic(RadioFieldOption):
- def render_value(self, session):
- return "topic"
+ self.task.invoke(session, vhost, name, type,
+ durable, sequence_numbers, initial_value)
+ self.task.exit_with_redirect(session, vhost)
- def render_title(self, session):
- return "<em>Topic:</em> Route messages to queues by topic keyword match"
+ def render_title(self, session):
+ vhost = self.vhost.get(session)
+ return self.task.get_description(session, vhost)
- class Fanout(RadioFieldOption):
- def render_value(self, session):
- return "fanout"
-
- def render_title(self, session):
- return "<em>Fan Out:</em> Route message to all queues attached to this exchange"
-
- class Headers(RadioFieldOption):
- def render_value(self, session):
- return "headers"
-
- def render_title(self, session):
- return "<em>Headers:</em> Route message to queues based on content of the message header"
-
- class XML(RadioFieldOption):
- def render_value(self, session):
- return "xml"
-
- def render_title(self, session):
- return "<em>XML:</em> Route message to queues based on XML content of the message"
-
class ExchangeStats(Widget):
def __init__(self, app, name, exchange):
super(ExchangeStats, self).__init__(app, name)
Modified: mgmt/trunk/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.py 2009-12-21 15:12:54 UTC (rev 3754)
+++ mgmt/trunk/cumin/python/cumin/widgets.py 2009-12-21 22:54:54 UTC (rev 3755)
@@ -301,6 +301,7 @@
def render_help_href(self, session, *args):
return "resource?name=help.html#%s" % self.path
+# XXX get rid of this!
class CuminFieldForm(FieldSubmitForm, Frame):
def validate(self, session):
self.check(session)
Modified: mgmt/trunk/wooly/python/wooly/forms.py
===================================================================
--- mgmt/trunk/wooly/python/wooly/forms.py 2009-12-21 15:12:54 UTC (rev 3754)
+++ mgmt/trunk/wooly/python/wooly/forms.py 2009-12-21 22:54:54 UTC (rev 3755)
@@ -151,7 +151,7 @@
def __init__(self, app, name):
super(StringInput, self).__init__(app, name, None)
- self.param = Parameter(app, "param")
+ self.param = StringParameter(app, "param")
self.add_parameter(self.param)
self.size = 30
@@ -247,12 +247,61 @@
return "click_button"
class CheckboxInputSet(FormInput, ItemSet):
- def render_item_value(self, session, *args):
+ def render_item_value(self, session, item):
return None
- def render_item_checked_attr(self, session, *args):
+ def render_item_checked_attr(self, session, item):
return None
+class FormInputItemSet(FormInput, ItemSet):
+ def render_item_value(self, session, item):
+ return item.value
+
+ def render_item_title(self, session, item):
+ return item.title
+
+ def render_item_description(self, session, item):
+ return item.description
+
+ def render_item_disabled_attr(self, session, item):
+ if item.disabled:
+ return "disabled=\"disabled\""
+
+class FormInputItem(object):
+ def __init__(self, value):
+ self.value = value
+ self.title = None
+ self.description = None
+ self.disabled = False
+
+class RadioItemSet(FormInputItemSet):
+ def render_item_type(self, session, item):
+ return "radio"
+
+ def render_item_checked_attr(self, session, item):
+ if item.value == self.get(session):
+ return "checked=\"checked\""
+
+class RadioItem(FormInputItem):
+ pass
+
+class CheckboxItemSet(FormInputItemSet):
+ def __init__(self, app, name, item_parameter):
+ super(CheckboxItemSet, self).__init__(app, name, None)
+
+ self.param = ListParameter(app, "param", item_parameter)
+ self.add_parameter(self.param)
+
+ def render_item_type(self, session, item):
+ return "checkbox"
+
+ def render_item_checked_attr(self, session, item):
+ if item.value in self.get(session):
+ return "checked=\"checked\""
+
+class CheckboxItem(FormInputItem):
+ pass
+
class RadioInputSet(ScalarInput, ItemSet):
def render_item_value(self, session, *args):
return None
@@ -297,6 +346,7 @@
def render_help(self, session, *args):
return self.help
+ # XXX hmmm
def render_form_field_class(self, session, *args):
return self.css_class
@@ -440,29 +490,40 @@
class RadioFieldOption(RadioInput):
pass
-class CheckboxField(FormField):
- def __init__(self, app, name):
- super(CheckboxField, self).__init__(app, name)
+class RadioItemSetField(FormField):
+ def __init__(self, app, name, param):
+ super(RadioItemSetField, self).__init__(app, name)
- self.options = list()
+ self.inputs = self.Inputs(app, "inputs", param)
+ self.add_child(self.inputs)
- def add_option(self, option):
- assert isinstance(option, CheckboxFieldOption)
+ def get(self, session):
+ return self.inputs.get(session)
- self.options.append(option)
- self.add_child(option)
+ def do_get_items(self, session):
+ raise Exception("Not implemented")
- def render_inputs(self, session, *args):
- writer = Writer()
+ class Inputs(RadioItemSet):
+ def do_get_items(self, session):
+ return self.parent.do_get_items(session)
- for option in self.options:
- writer.write(option.render(session))
+class CheckboxItemSetField(FormField):
+ def __init__(self, app, name, item_parameter):
+ super(CheckboxItemSetField, self).__init__(app, name)
- return writer.to_string()
+ self.inputs = self.Inputs(app, "inputs", item_parameter)
+ self.add_child(self.inputs)
-class CheckboxFieldOption(CheckboxInput):
- pass
+ def get(self, session):
+ return self.inputs.get(session)
+ def do_get_items(self, session):
+ raise Exception("Not implemented")
+
+ class Inputs(CheckboxItemSet):
+ def do_get_items(self, session):
+ return self.parent.do_get_items(session)
+
class ButtonForm(Form):
def __init__(self, app, name):
super(ButtonForm, self).__init__(app, name)
@@ -594,8 +655,8 @@
def check(self, session):
super(FoldingFieldSubmitForm, self).check(session)
- self.main.check(session)
- self.extra.check(session)
+ self.main_fields.check(session)
+ self.extra_fields.check(session)
def render_content(self, session, *args):
return self.content.render(session, *args)
Modified: mgmt/trunk/wooly/python/wooly/forms.strings
===================================================================
--- mgmt/trunk/wooly/python/wooly/forms.strings 2009-12-21 15:12:54 UTC (rev 3754)
+++ mgmt/trunk/wooly/python/wooly/forms.strings 2009-12-21 22:54:54 UTC (rev 3755)
@@ -86,24 +86,62 @@
[RadioInput.html]
<input type="radio" id="{id}" name="{name}" value="{value}" tabindex="{tab_index}" {checked_attr} {disabled_attr}/>
-[CheckboxInputSet.html]
+[RadioInputSet.html]
<ul>{items}</ul>
-[CheckboxInputSet.item_html]
+[RadioInputSet.item_html]
<li>
- <input type="checkbox" name="{name}" value="{item_value}" tabindex="{tab_index}" {item_checked_attr} {disabled_attr}/>
+ <input type="radio" name="{name}" value="{item_value}" tabindex="{tab_index}" {item_checked_attr} {disabled_attr}/>
{item_content}
</li>
-[RadioInputSet.html]
+[CheckboxInputSet.html]
<ul>{items}</ul>
-[RadioInputSet.item_html]
+[CheckboxInputSet.item_html]
<li>
- <input type="radio" name="{name}" value="{item_value}" tabindex="{tab_index}" {item_checked_attr} {disabled_attr}/>
+ <input type="checkbox" name="{name}" value="{item_value}" tabindex="{tab_index}" {item_checked_attr} {disabled_attr}/>
{item_content}
</li>
+[FormInputItemSet.css]
+table.FormInputItemSet {
+ border-collapse: collapse;
+}
+
+table.FormInputItemSet > tbody > tr {
+ vertical-align: top;
+}
+
+table.FormInputItemSet > tbody > tr > td {
+ padding: 0 0.5em 0.5em 0;
+ font-size: 0.9em;
+}
+
+table.FormInputItemSet > tbody > tr > td > input {
+ margin: 0.25em 0 0 0;
+}
+
+table.FormInputItemSet > tbody > tr > td > label {
+ font-weight: bold;
+ display: block;
+}
+
+[FormInputItemSet.html]
+<table class="FormInputItemSet"><tbody>{items}</tbody></table>
+
+[FormInputItemSet.item_html]
+<tr>
+ <td>
+ <input id="{id}.{item_value}" type="{item_type}" name="{name}" value="{item_value}"
+ tabindex="{tab_index}" {item_checked_attr} {item_disabled_attr}/>
+ </td>
+ <td>
+ <label for="{id}.{item_value}">{item_title}</label>
+ {item_description}
+ </td>
+</tr>
+
[OptionInputSet.html]
<select name="{name}" tabindex="{tab_index}" {disabled_attr}>{items}</select>
@@ -223,13 +261,6 @@
<label for="{id}">{title}</label>
</div>
-[CheckboxFieldOption.html]
-<div>
- <input type="checkbox" name="{name}" id="{id}" value="{value}"
- tabindex="{tab_index}" {checked_attr} {disabled_attr}/>
- <label for="{id}">{title}</label>
-</div>
-
[ButtonForm.css]
form.ButtonForm {
background-color: #fafafa;
Modified: mgmt/trunk/wooly/python/wooly/parameters.py
===================================================================
--- mgmt/trunk/wooly/python/wooly/parameters.py 2009-12-21 15:12:54 UTC (rev 3754)
+++ mgmt/trunk/wooly/python/wooly/parameters.py 2009-12-21 22:54:54 UTC (rev 3755)
@@ -73,6 +73,13 @@
def do_marshal(self, object):
return self.item_parameter.do_marshal(object)
+class StringParameter(Parameter):
+ pass
+
+# XXX this will be a strict sort of string parameter
+class SymbolParameter(StringParameter):
+ pass
+
class IntegerParameter(Parameter):
def do_unmarshal(self, string):
try:
More information about the rhmessaging-commits
mailing list