View Javadoc

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 }