1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.primefaces.extensions.component.calculator;
23
24 import java.io.IOException;
25
26 import javax.faces.FacesException;
27 import javax.faces.component.UIComponent;
28 import javax.faces.component.UIInput;
29 import javax.faces.context.FacesContext;
30
31 import org.primefaces.expression.SearchExpressionUtils;
32 import org.primefaces.extensions.util.ExtLangUtils;
33 import org.primefaces.renderkit.CoreRenderer;
34 import org.primefaces.util.ComponentUtils;
35 import org.primefaces.util.WidgetBuilder;
36
37
38
39
40
41
42
43 public class CalculatorRenderer extends CoreRenderer {
44
45 @Override
46 public void decode(final FacesContext context, final UIComponent component) {
47 decodeBehaviors(context, component);
48 }
49
50 @Override
51 public void encodeEnd(final FacesContext context, final UIComponent component) throws IOException {
52 final Calculator calculator = (Calculator) component;
53 encodeScript(context, calculator);
54 }
55
56 private void encodeScript(final FacesContext context, final Calculator calculator) throws IOException {
57 String target = SearchExpressionUtils.resolveClientIdsForClientSide(context, calculator, calculator.getFor());
58 if (isValueBlank(target)) {
59 target = calculator.getParent().getClientId(context);
60 }
61
62 final UIComponent targetComponent = SearchExpressionUtils.resolveComponent(target, calculator);
63 if (!(targetComponent instanceof UIInput)) {
64 throw new FacesException("Calculator must use for=\"target\" or be nested inside an input!");
65 }
66
67 final WidgetBuilder wb = getWidgetBuilder(context);
68 wb.init("ExtCalculator", calculator);
69 wb.attr("target", target);
70 wb.attr("showOn", ExtLangUtils.lowerCase(calculator.getShowOn()));
71 wb.attr("layout", ExtLangUtils.lowerCase(calculator.getLayout()));
72 wb.attr("precision", calculator.getPrecision());
73 wb.attr("locale", calculator.calculateLocale().toString());
74 wb.attr("isRTL", ComponentUtils.isRTL(context, calculator));
75 wb.attr("calculatorClass", calculator.getStyleClass());
76
77 if (calculator.getOnopen() != null) {
78
79 wb.callback("onOpen", "function(value, inst)", calculator.getOnopen());
80 }
81 if (calculator.getOnclose() != null) {
82
83 wb.callback("onClose", "function(value, inst)", calculator.getOnclose());
84 }
85 if (calculator.getOnbutton() != null) {
86
87 wb.callback("onButton", "function(label, value, inst)", calculator.getOnbutton());
88 }
89
90 encodeClientBehaviors(context, calculator);
91
92 wb.finish();
93 }
94
95 }