001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019
020 package org.apache.myfaces.tobago.taglib.extension;
021
022 import org.apache.myfaces.tobago.TobagoConstants;
023 import org.apache.myfaces.tobago.apt.annotation.ExtensionTag;
024 import org.apache.myfaces.tobago.apt.annotation.Tag;
025 import org.apache.myfaces.tobago.component.ComponentUtil;
026 import org.apache.myfaces.tobago.component.UICommand;
027 import org.apache.myfaces.tobago.taglib.component.AbstractCommandTagDeclaration;
028 import org.apache.myfaces.tobago.taglib.component.MenuCommandTag;
029 import org.apache.myfaces.tobago.taglib.component.SelectBooleanCheckboxTag;
030 import org.apache.myfaces.tobago.taglib.decl.HasBooleanValue;
031 import org.apache.myfaces.tobago.taglib.decl.HasIdBindingAndRendered;
032 import org.apache.myfaces.tobago.taglib.decl.HasLabel;
033 import org.apache.myfaces.tobago.taglib.decl.IsDisabled;
034
035 import javax.faces.component.UIComponent;
036 import javax.faces.el.ValueBinding;
037 import javax.faces.webapp.FacetTag;
038 import javax.servlet.jsp.JspException;
039 import javax.servlet.jsp.tagext.BodyTagSupport;
040
041 /**
042 * Renders a checkable menuitem.
043 */
044 @Tag(name = "menuCheckbox", tagExtraInfoClassName = "org.apache.myfaces.tobago.taglib.component.CommandTagExtraInfo")
045 @ExtensionTag(baseClassName = "org.apache.myfaces.tobago.taglib.component.MenuCheckboxTag")
046 public class MenuCheckboxExtensionTag extends BodyTagSupport implements AbstractCommandTagDeclaration,
047 HasIdBindingAndRendered, IsDisabled, HasBooleanValue, HasLabel {
048 private String rendered;
049 private String value;
050
051 private MenuCommandTag menuCommandTag;
052 private SelectBooleanCheckboxTag selectBooleanCheckbox;
053 private FacetTag facetTag;
054 private String action;
055 private String actionListener;
056 private String onclick;
057 private String link;
058 private String resource;
059 private String jsfResource;
060 private String disabled;
061 private String binding;
062 private String label;
063 private String immediate;
064 private String transition;
065
066 @Override
067 public int doStartTag() throws JspException {
068
069 menuCommandTag = new MenuCommandTag();
070 menuCommandTag.setPageContext(pageContext);
071 menuCommandTag.setParent(getParent()); // ???
072 if (rendered != null) {
073 menuCommandTag.setRendered(rendered);
074 }
075 if (action != null) {
076 menuCommandTag.setAction(action);
077 }
078 if (actionListener != null) {
079 menuCommandTag.setActionListener(actionListener);
080 }
081 if (onclick != null) {
082 menuCommandTag.setOnclick(onclick);
083 }
084 if (link != null) {
085 menuCommandTag.setLink(link);
086 }
087 if (resource != null) {
088 menuCommandTag.setResource(resource);
089 }
090 if (jsfResource != null) {
091 menuCommandTag.setJsfResource(jsfResource);
092 }
093 if (disabled != null) {
094 menuCommandTag.setDisabled(disabled);
095 }
096 if (binding != null) {
097 menuCommandTag.setBinding(binding);
098 }
099 if (label != null) {
100 menuCommandTag.setLabel(label);
101 }
102 if (immediate != null) {
103 menuCommandTag.setImmediate(immediate);
104 }
105 if (transition != null) {
106 menuCommandTag.setTransition(transition);
107 }
108 menuCommandTag.doStartTag();
109
110 facetTag = new FacetTag();
111 facetTag.setPageContext(pageContext);
112 facetTag.setParent(menuCommandTag);
113 facetTag.setName(org.apache.myfaces.tobago.TobagoConstants.FACET_ITEMS);
114
115 facetTag.doStartTag();
116 selectBooleanCheckbox = new SelectBooleanCheckboxTag();
117 selectBooleanCheckbox.setPageContext(pageContext);
118 if (value != null) {
119 selectBooleanCheckbox.setValue(value);
120 }
121 selectBooleanCheckbox.setParent(facetTag);
122 selectBooleanCheckbox.doStartTag();
123 return super.doStartTag();
124 }
125
126 @Override
127 public int doEndTag() throws JspException {
128
129 // Move attribute renderedPartially from selectBoolean to menuCommand component
130 UIComponent selectBooleanComponent = selectBooleanCheckbox.getComponentInstance();
131 UICommand command = (UICommand) menuCommandTag.getComponentInstance();
132 ValueBinding binding = selectBooleanComponent.getValueBinding(TobagoConstants.ATTR_RENDERED_PARTIALLY);
133 if (binding != null) {
134 command.setValueBinding(TobagoConstants.ATTR_RENDERED_PARTIALLY, binding);
135 } else {
136 Object renderedPartially = selectBooleanComponent.getAttributes().get(TobagoConstants.ATTR_RENDERED_PARTIALLY);
137 ComponentUtil.setRenderedPartially(command, (String) renderedPartially);
138 }
139
140 selectBooleanCheckbox.doEndTag();
141 facetTag.doEndTag();
142 menuCommandTag.doEndTag();
143 return super.doEndTag();
144 }
145
146 public void setAction(String action) {
147 this.action = action;
148 }
149
150 public void setActionListener(String actionListener) {
151 this.actionListener = actionListener;
152 }
153
154 public void setOnclick(String onclick) {
155 this.onclick = onclick;
156 }
157
158 public void setLink(String navigate) {
159 this.link = navigate;
160 }
161
162 public void setResource(String resource) {
163 this.resource = resource;
164 }
165
166 public void setJsfResource(String jsfResource) {
167 this.jsfResource = jsfResource;
168 }
169
170 public void setBinding(String binding) throws JspException {
171 this.binding = binding;
172 }
173
174 public void setRendered(String rendered) {
175 this.rendered = rendered;
176 }
177
178 public void setDisabled(String disabled) {
179 this.disabled = disabled;
180 }
181
182 public void setValue(String value) {
183 this.value = value;
184 }
185
186 public void setLabel(String label) {
187 this.label = label;
188 }
189
190 public void setImmediate(String immediate) {
191 this.immediate = immediate;
192 }
193
194 public void setTransition(String transition) {
195 this.transition = transition;
196 }
197
198 public void release() {
199 super.release();
200 rendered = null;
201 value = null;
202 action = null;
203 actionListener = null;
204 onclick = null;
205 link = null;
206 resource = null;
207 jsfResource = null;
208 disabled = null;
209 binding = null;
210 label = null;
211 immediate = null;
212 transition = null;
213 menuCommandTag = null;
214 facetTag = null;
215 selectBooleanCheckbox = null;
216 }
217
218 }