use of com.github.bordertech.wcomponents.WComponentGroup in project wcomponents by BorderTech.
the class WSubordinateControlRenderer method paintStandardAction.
/**
* Paint a standard action - where a single item or single group is targeted.
*
* @param action the action to paint
* @param elementName the enclosing element name ("ui:onFalse" or "ui:onTrue").
* @param xml the output response
*/
private void paintStandardAction(final Action action, final String elementName, final XmlStringBuilder xml) {
xml.appendTagOpen(elementName);
xml.appendAttribute("action", getActionTypeName(action.getActionType()));
xml.appendClose();
xml.appendTagOpen("ui:target");
SubordinateTarget target = action.getTarget();
if (target instanceof WComponentGroup<?>) {
xml.appendAttribute("groupId", target.getId());
} else {
xml.appendAttribute("id", target.getId());
}
xml.appendEnd();
xml.appendEndTag(elementName);
}
use of com.github.bordertech.wcomponents.WComponentGroup in project wcomponents by BorderTech.
the class WComponentGroupRenderer method doRender.
/**
* Paints the given WComponentGroup.
*
* @param component the WComponentGroup to paint.
* @param renderContext the RenderContext to paint to.
*/
@Override
public void doRender(final WComponent component, final WebXmlRenderContext renderContext) {
WComponentGroup group = (WComponentGroup) component;
XmlStringBuilder xml = renderContext.getWriter();
List<WComponent> components = group.getComponents();
if (components != null && !components.isEmpty()) {
xml.appendTagOpen("ui:componentGroup");
xml.appendAttribute("id", component.getId());
xml.appendOptionalAttribute("track", component.isTracking(), "true");
xml.appendClose();
for (WComponent comp : components) {
xml.appendTagOpen("ui:component");
xml.appendAttribute("id", comp.getId());
xml.appendEnd();
}
xml.appendEndTag("ui:componentGroup");
}
}
use of com.github.bordertech.wcomponents.WComponentGroup in project wcomponents by BorderTech.
the class WSubordinateControlRenderer_Test method testMultipleControlsAndGroups.
@Test
public void testMultipleControlsAndGroups() throws IOException, SAXException, XpathException {
SubordinateTrigger condTrigger = new WCheckBox();
// Setup Groups
SubordinateTarget actionTarget1 = new WTextField();
SubordinateTarget actionTarget2 = new WTextField();
SubordinateTarget actionTarget3 = new WTextField();
SubordinateTarget actionTarget4 = new WTextField();
// Multiple Groups
WComponentGroup<SubordinateTarget> group1 = new WComponentGroup<>();
group1.addToGroup(actionTarget1);
group1.addToGroup(actionTarget2);
WComponentGroup<SubordinateTarget> group2 = new WComponentGroup<>();
group2.addToGroup(actionTarget3);
group2.addToGroup(actionTarget4);
// Multiple Rules
Rule rule1 = new Rule();
rule1.setCondition(new Equal(condTrigger, Boolean.TRUE));
rule1.addActionOnTrue(new Show(group1));
rule1.addActionOnFalse(new Hide(group1));
Rule rule2 = new Rule();
rule2.setCondition(new Equal(condTrigger, Boolean.FALSE));
rule2.addActionOnTrue(new Show(group2));
rule2.addActionOnFalse(new Hide(group2));
// Setup Subordinate
WSubordinateControl control = new WSubordinateControl();
control.addRule(rule1);
control.addRule(rule2);
WContainer root = new WContainer();
root.add(condTrigger);
root.add(actionTarget1);
root.add(actionTarget2);
root.add(actionTarget3);
root.add(actionTarget4);
root.add(control);
root.add(group1);
root.add(group2);
setActiveContext(createUIContext());
// Apply the controls
control.applyTheControls();
// Validate Schema
assertSchemaMatch(root);
// Check for basic elements
assertXpathEvaluatesTo("2", "count(//ui:subordinate)", root);
assertXpathEvaluatesTo("2", "count(//ui:subordinate/ui:condition)", root);
assertXpathEvaluatesTo("2", "count(//ui:subordinate/ui:onTrue)", root);
assertXpathEvaluatesTo("2", "count(//ui:subordinate/ui:onFalse)", root);
assertXpathEvaluatesTo("2", "count(//ui:componentGroup)", root);
assertXpathEvaluatesTo("2", "count(//ui:componentGroup[position()=1]/ui:component)", root);
assertXpathEvaluatesTo("2", "count(//ui:componentGroup[position()=2]/ui:component)", root);
// Check ids
assertXpathEvaluatesTo(control.getId() + "-c0", "//ui:subordinate[position()=1]/@id", root);
assertXpathEvaluatesTo(control.getId() + "-c1", "//ui:subordinate[position()=2]/@id", root);
}
use of com.github.bordertech.wcomponents.WComponentGroup in project wcomponents by BorderTech.
the class WSubordinateControlRenderer_Test method testGroupShowInHideInAction.
@Test
public void testGroupShowInHideInAction() throws IOException, SAXException, XpathException {
SubordinateTrigger condTrigger = new WCheckBox();
// Setup Group
SubordinateTarget actionTarget1 = new WTextField();
SubordinateTarget actionTarget2 = new WTextField();
SubordinateTarget actionTarget3 = new WTextField();
WComponentGroup<SubordinateTarget> group1 = new WComponentGroup<>();
group1.addToGroup(actionTarget1);
group1.addToGroup(actionTarget2);
group1.addToGroup(actionTarget3);
// Setup Rule with ShowInGroup/HideInGroup actions
Rule rule = new Rule();
rule.setCondition(new Equal(condTrigger, Boolean.TRUE));
// OnTrue - ShowInGroup
rule.addActionOnTrue(new ShowInGroup(actionTarget1, group1));
// OnFalse - HideInGroup
rule.addActionOnFalse(new HideInGroup(actionTarget1, group1));
// Setup Subordinate
WSubordinateControl control = new WSubordinateControl();
control.addRule(rule);
WContainer root = new WContainer();
root.add(condTrigger);
root.add(actionTarget1);
root.add(actionTarget2);
root.add(actionTarget3);
root.add(control);
root.add(group1);
setActiveContext(createUIContext());
// Apply the controls (False conditions)
control.applyTheControls();
// Validate Schema
assertSchemaMatch(root);
// Check onTrue
assertXpathEvaluatesTo("1", "count(//ui:subordinate/ui:onTrue)", root);
assertXpathEvaluatesTo("showIn", "//ui:subordinate/ui:onTrue/@action", root);
assertXpathEvaluatesTo(group1.getId(), "//ui:subordinate/ui:onTrue/ui:target/@groupId", root);
assertXpathEvaluatesTo(actionTarget1.getId(), "//ui:subordinate/ui:onTrue/ui:target/@id", root);
// Check onFalse
assertXpathEvaluatesTo("1", "count(//ui:subordinate/ui:onFalse)", root);
assertXpathEvaluatesTo("hideIn", "//ui:subordinate/ui:onFalse/@action", root);
assertXpathEvaluatesTo(group1.getId(), "//ui:subordinate/ui:onFalse/ui:target/@groupId", root);
assertXpathEvaluatesTo(actionTarget1.getId(), "//ui:subordinate/ui:onFalse/ui:target/@id", root);
// Check action target (Target 1 should be hidden)
assertXpathEvaluatesTo("true", "//ui:textfield[@id='" + actionTarget1.getId() + "']/@hidden", root);
assertXpathEvaluatesTo("", "//ui:textfield[@id='" + actionTarget2.getId() + "']/@hidden", root);
assertXpathEvaluatesTo("", "//ui:textfield[@id='" + actionTarget3.getId() + "']/@hidden", root);
}
use of com.github.bordertech.wcomponents.WComponentGroup in project wcomponents by BorderTech.
the class WSubordinateControlRenderer_Test method testEnableDisableActions.
@Test
public void testEnableDisableActions() throws IOException, SAXException, XpathException {
SubordinateTrigger condTrigger = new WCheckBox();
// Setup Group
SubordinateTarget actionTarget = new WTextField();
SubordinateTarget actionTarget1 = new WTextField();
SubordinateTarget actionTarget2 = new WTextField();
SubordinateTarget actionTarget3 = new WTextField();
WComponentGroup<SubordinateTarget> group1 = new WComponentGroup<>();
group1.addToGroup(actionTarget1);
group1.addToGroup(actionTarget2);
group1.addToGroup(actionTarget3);
// Setup Rule with Enable/Disable actions
Rule rule = new Rule();
rule.setCondition(new Equal(condTrigger, Boolean.TRUE));
// Single Component Target
rule.addActionOnTrue(new Enable(actionTarget));
rule.addActionOnFalse(new Disable(actionTarget));
// Group Target
rule.addActionOnTrue(new Enable(group1));
rule.addActionOnFalse(new Disable(group1));
// Setup Subordinate
WSubordinateControl control = new WSubordinateControl();
control.addRule(rule);
WContainer root = new WContainer();
root.add(condTrigger);
root.add(actionTarget);
root.add(actionTarget1);
root.add(actionTarget2);
root.add(actionTarget3);
root.add(control);
root.add(group1);
setActiveContext(createUIContext());
// Apply the controls
control.applyTheControls();
// Validate Schema
assertSchemaMatch(root);
// Check onTrue
assertXpathEvaluatesTo("2", "count(//ui:subordinate/ui:onTrue)", root);
// Check onTrue - Component
assertXpathEvaluatesTo("enable", "//ui:subordinate/ui:onTrue[position()=1]/@action", root);
assertXpathEvaluatesTo(actionTarget.getId(), "//ui:subordinate/ui:onTrue[position()=1]/ui:target/@id", root);
assertXpathEvaluatesTo("", "//ui:subordinate/ui:onTrue[position()=1]/ui:target/@groupId", root);
// Check onTrue - Group
assertXpathEvaluatesTo("enable", "//ui:subordinate/ui:onTrue[position()=2]/@action", root);
assertXpathEvaluatesTo(group1.getId(), "//ui:subordinate/ui:onTrue[position()=2]/ui:target/@groupId", root);
assertXpathEvaluatesTo("", "//ui:subordinate/ui:onTrue[position()=2]/ui:target/@id", root);
// Check onFalse
assertXpathEvaluatesTo("2", "count(//ui:subordinate/ui:onFalse)", root);
// Check onFalse - Component
assertXpathEvaluatesTo("disable", "//ui:subordinate/ui:onFalse[position()=1]/@action", root);
assertXpathEvaluatesTo(actionTarget.getId(), "//ui:subordinate/ui:onFalse[position()=1]/ui:target/@id", root);
assertXpathEvaluatesTo("", "//ui:subordinate/ui:onFalse[position()=1]/ui:target/@groupId", root);
// Check onFalse - Group
assertXpathEvaluatesTo("disable", "//ui:subordinate/ui:onFalse[position()=2]/@action", root);
assertXpathEvaluatesTo(group1.getId(), "//ui:subordinate/ui:onFalse[position()=2]/ui:target/@groupId", root);
assertXpathEvaluatesTo("", "//ui:subordinate/ui:onFalse[position()=2]/ui:target/@id", root);
// Check action target
assertXpathEvaluatesTo("true", "//ui:textfield[@id='" + actionTarget.getId() + "']/@disabled", root);
assertXpathEvaluatesTo("true", "//ui:textfield[@id='" + actionTarget1.getId() + "']/@disabled", root);
assertXpathEvaluatesTo("true", "//ui:textfield[@id='" + actionTarget2.getId() + "']/@disabled", root);
assertXpathEvaluatesTo("true", "//ui:textfield[@id='" + actionTarget3.getId() + "']/@disabled", root);
}
Aggregations