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.component;
021
022 import org.apache.commons.logging.Log;
023 import org.apache.commons.logging.LogFactory;
024 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_DISABLED;
025 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_HEIGHT;
026 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_HIDDEN;
027 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_INLINE;
028 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_LABEL;
029 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_READONLY;
030 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_TITLE;
031 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_WIDTH;
032 import static org.apache.myfaces.tobago.TobagoConstants.TOBAGO_COMPONENT_CREATED;
033 import org.apache.myfaces.tobago.component.ComponentUtil;
034 import org.apache.myfaces.tobago.component.OnComponentCreated;
035 import org.apache.myfaces.tobago.util.Deprecation;
036
037 import javax.faces.component.UIComponent;
038 import javax.faces.webapp.UIComponentTag;
039 import javax.servlet.jsp.JspException;
040
041 public abstract class TobagoTag extends UIComponentTag
042 implements TobagoTagDeclaration {
043
044 private static final Log LOG = LogFactory.getLog(TobagoTag.class);
045
046 private String label;
047 private String title;
048 private String width;
049 private String height;
050 private String hidden;
051 private String readonly;
052 private String disabled;
053 private String inline;
054
055 @Override
056 public int doStartTag() throws JspException {
057 if (LOG.isDebugEnabled()) {
058 LOG.debug("doStartTag() rendererType " + getRendererType());
059 LOG.debug("doStartTag() componentType " + getComponentType());
060 }
061 return super.doStartTag();
062 }
063
064 @Override
065 public String getRendererType() {
066 String name = getClass().getName();
067 int beginIndex = name.lastIndexOf('.');
068 if (beginIndex < 0) {
069 beginIndex = 0;
070 } else {
071 beginIndex++;
072 }
073 int endIndex = name.length() - 3; // 3 = "Tag".length()
074 return name.substring(beginIndex, endIndex);
075 }
076
077 @Override
078 public void release() {
079 super.release();
080 hidden = null;
081 readonly = null;
082 disabled = null;
083 inline = null;
084 label = null;
085 title = null;
086 width = null;
087 height = null;
088 }
089
090 @Override
091 protected void setProperties(UIComponent component) {
092 super.setProperties(component);
093
094 ComponentUtil.setStringProperty(component, ATTR_LABEL, label);
095 ComponentUtil.setStringProperty(component, ATTR_TITLE, title);
096
097 ComponentUtil.setBooleanProperty(component, ATTR_DISABLED, disabled);
098 ComponentUtil.setBooleanProperty(component, ATTR_READONLY, readonly);
099 ComponentUtil.setBooleanProperty(component, ATTR_HIDDEN, hidden);
100 ComponentUtil.setBooleanProperty(component, ATTR_INLINE, inline);
101
102 if (width != null) {
103 LOG.warn("the width attribute is deprecated, please use a layout manager. (" + getClass().getSimpleName() + ")");
104 }
105 ComponentUtil.setStringProperty(component, ATTR_WIDTH, width);
106 if (height != null) {
107 LOG.warn("the height attribute is deprecated, please use a layout manager. (" + getClass().getSimpleName() + ")");
108 }
109 ComponentUtil.setStringProperty(component, ATTR_HEIGHT, height);
110 }
111
112 public String getDisabled() {
113 return disabled;
114 }
115
116 public void setDisabled(String disabled) {
117 this.disabled = disabled;
118 }
119
120 public String getHeight() {
121 return height;
122 }
123
124 public void setHeight(String height) {
125 if (Deprecation.LOG.isWarnEnabled()) {
126 Deprecation.LOG.warn("Attribute 'height' is deprecated, "
127 + "and will removed soon! Please use a layout manager instead.");
128 }
129 this.height = height;
130 }
131
132 public String getHidden() {
133 return hidden;
134 }
135
136 public void setHidden(String hidden) {
137 this.hidden = hidden;
138 }
139
140 public String getInline() {
141 return inline;
142 }
143
144 public void setInline(String inline) {
145 this.inline = inline;
146 }
147
148 public String getLabel() {
149 return label;
150 }
151
152 public void setLabel(String label) {
153 this.label = label;
154 }
155
156 public String getReadonly() {
157 return readonly;
158 }
159
160 public void setReadonly(String readonly) {
161 this.readonly = readonly;
162 }
163
164 public String getTitle() {
165 return title;
166 }
167
168 public void setTitle(String title) {
169 this.title = title;
170 }
171
172 public String getWidth() {
173 return width;
174 }
175
176 public void setWidth(String width) {
177 if (Deprecation.LOG.isWarnEnabled()) {
178 Deprecation.LOG.warn("Attribute 'width' is deprecated, "
179 + "and will removed soon! Please use a layout manager instead.");
180 }
181 this.width = width;
182 }
183
184 public int doEndTag() throws JspException {
185
186 UIComponent component = getComponentInstance();
187 if (component instanceof OnComponentCreated
188 && component.getAttributes().get(TOBAGO_COMPONENT_CREATED) == null) {
189 component.getAttributes().put(TOBAGO_COMPONENT_CREATED, Boolean.TRUE);
190 ((OnComponentCreated) component).onComponentCreated();
191 }
192 return super.doEndTag();
193 }
194 }