1 package org.rcfaces.core.internal.taglib;
2
3 import javax.faces.application.Application;
4 import javax.faces.component.UIComponent;
5 import org.rcfaces.core.internal.component.Properties;
6 import javax.el.ValueExpression;
7 import javax.faces.component.UIViewRoot;
8 import org.apache.commons.logging.Log;
9 import javax.servlet.jsp.tagext.Tag;
10 import org.apache.commons.logging.LogFactory;
11 import org.rcfaces.core.component.MenuComponent;
12 import org.rcfaces.core.internal.tools.ListenersTools1_2;
13 import org.rcfaces.core.internal.tools.ListenersTools;
14 import javax.faces.context.FacesContext;
15
16 public class MenuTag extends CameliaTag implements Tag {
17
18
19 private static final Log LOG=LogFactory.getLog(MenuTag.class);
20
21 private ValueExpression preloadedLevelDepth;
22 private ValueExpression menuListeners;
23 private ValueExpression selectionListeners;
24 private ValueExpression checkListeners;
25 private ValueExpression checkedValues;
26 private ValueExpression menuId;
27 private ValueExpression removeAllWhenShown;
28 private ValueExpression converter;
29 private ValueExpression value;
30 public String getComponentType() {
31 return MenuComponent.COMPONENT_TYPE;
32 }
33
34 public final void setPreloadedLevelDepth(ValueExpression preloadedLevelDepth) {
35 this.preloadedLevelDepth = preloadedLevelDepth;
36 }
37
38 public final void setMenuListener(ValueExpression menuListeners) {
39 this.menuListeners = menuListeners;
40 }
41
42 public final void setSelectionListener(ValueExpression selectionListeners) {
43 this.selectionListeners = selectionListeners;
44 }
45
46 public final void setCheckListener(ValueExpression checkListeners) {
47 this.checkListeners = checkListeners;
48 }
49
50 public final void setCheckedValues(ValueExpression checkedValues) {
51 this.checkedValues = checkedValues;
52 }
53
54 public final void setMenuId(ValueExpression menuId) {
55 this.menuId = menuId;
56 }
57
58 public final void setRemoveAllWhenShown(ValueExpression removeAllWhenShown) {
59 this.removeAllWhenShown = removeAllWhenShown;
60 }
61
62 public final void setConverter(ValueExpression converter) {
63 this.converter = converter;
64 }
65
66 public final void setValue(ValueExpression value) {
67 this.value = value;
68 }
69
70 protected void setProperties(UIComponent uiComponent) {
71 if (LOG.isDebugEnabled()) {
72 if (MenuComponent.COMPONENT_TYPE==getComponentType()) {
73 LOG.debug("Component id='"+getId()+"' type='"+getComponentType()+"'.");
74 }
75 LOG.debug(" preloadedLevelDepth='"+preloadedLevelDepth+"'");
76 LOG.debug(" checkedValues='"+checkedValues+"'");
77 LOG.debug(" menuId='"+menuId+"'");
78 LOG.debug(" removeAllWhenShown='"+removeAllWhenShown+"'");
79 LOG.debug(" converter='"+converter+"'");
80 }
81 if ((uiComponent instanceof MenuComponent)==false) {
82 if (uiComponent instanceof UIViewRoot) {
83 throw new IllegalStateException("The first component of the page must be a UIViewRoot component !");
84 }
85 throw new IllegalStateException("Component specified by tag is not instanceof of 'MenuComponent'.");
86 }
87
88 super.setProperties(uiComponent);
89
90 MenuComponent component = (MenuComponent) uiComponent;
91 FacesContext facesContext = getFacesContext();
92
93 if (preloadedLevelDepth != null) {
94 if (preloadedLevelDepth.isLiteralText()==false) {
95 component.setValueExpression(Properties.PRELOADED_LEVEL_DEPTH, preloadedLevelDepth);
96
97 } else {
98 component.setPreloadedLevelDepth(getInt(preloadedLevelDepth.getExpressionString()));
99 }
100 }
101
102 if (menuListeners != null) {
103 ListenersTools1_2.parseListener(facesContext, component, ListenersTools.MENU_LISTENER_TYPE, menuListeners);
104 }
105
106 if (selectionListeners != null) {
107 ListenersTools1_2.parseListener(facesContext, component, ListenersTools.SELECTION_LISTENER_TYPE, selectionListeners);
108 }
109
110 if (checkListeners != null) {
111 ListenersTools1_2.parseListener(facesContext, component, ListenersTools.CHECK_LISTENER_TYPE, checkListeners);
112 }
113
114 if (checkedValues != null) {
115 component.setValueExpression(Properties.CHECKED_VALUES, checkedValues);
116 }
117
118 if (menuId != null) {
119 if (menuId.isLiteralText()==false) {
120 component.setValueExpression(Properties.MENU_ID, menuId);
121
122 } else {
123 component.setMenuId(menuId.getExpressionString());
124 }
125 }
126
127 if (removeAllWhenShown != null) {
128 if (removeAllWhenShown.isLiteralText()==false) {
129 component.setValueExpression(Properties.REMOVE_ALL_WHEN_SHOWN, removeAllWhenShown);
130
131 } else {
132 component.setRemoveAllWhenShown(getBool(removeAllWhenShown.getExpressionString()));
133 }
134 }
135
136 if (converter != null) {
137 if (converter.isLiteralText()==false) {
138 component.setValueExpression(Properties.CONVERTER, converter);
139
140 } else {
141 component.setConverter(converter.getExpressionString());
142 }
143 }
144
145 if (value != null) {
146 if (value.isLiteralText()==false) {
147 component.setValueExpression(Properties.VALUE, value);
148
149 } else {
150 component.setValue(value.getExpressionString());
151 }
152 }
153 }
154
155 public void release() {
156 preloadedLevelDepth = null;
157 menuListeners = null;
158 selectionListeners = null;
159 checkListeners = null;
160 checkedValues = null;
161 menuId = null;
162 removeAllWhenShown = null;
163 converter = null;
164 value = null;
165
166 super.release();
167 }
168
169 }