001 package org.apache.myfaces.tobago.taglib.component;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more
005 * contributor license agreements. See the NOTICE file distributed with
006 * this work for additional information regarding copyright ownership.
007 * The ASF licenses this file to You under the Apache License, Version 2.0
008 * (the "License"); you may not use this file except in compliance with
009 * the License. You may obtain a copy of the License at
010 *
011 * http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020 import org.apache.commons.logging.Log;
021 import org.apache.commons.logging.LogFactory;
022 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_DISABLED;
023 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_HEIGHT;
024 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_HIDDEN;
025 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_INLINE;
026 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_LABEL;
027 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_READONLY;
028 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_TITLE;
029 import static org.apache.myfaces.tobago.TobagoConstants.ATTR_WIDTH;
030 import static org.apache.myfaces.tobago.TobagoConstants.TOBAGO_COMPONENT_CREATED;
031 import org.apache.myfaces.tobago.component.ComponentUtil;
032 import org.apache.myfaces.tobago.component.OnComponentCreated;
033 import org.apache.myfaces.tobago.util.Deprecation;
034
035 import javax.faces.component.UIComponent;
036 import javax.faces.webapp.UIComponentTag;
037 import javax.servlet.jsp.JspException;
038
039 public abstract class TobagoTag extends UIComponentTag
040 implements TobagoTagDeclaration {
041
042 private static final Log LOG = LogFactory.getLog(TobagoTag.class);
043
044 private String label;
045 private String title;
046 private String width;
047 private String height;
048 private String hidden;
049 private String readonly;
050 private String disabled;
051 private String inline;
052
053 @Override
054 public int doStartTag() throws JspException {
055 if (LOG.isDebugEnabled()) {
056 LOG.debug("doStartTag() rendererType " + getRendererType());
057 LOG.debug("doStartTag() componentType " + getComponentType());
058 }
059 return super.doStartTag();
060 }
061
062 @Override
063 public String getRendererType() {
064 String name = getClass().getName();
065 int beginIndex = name.lastIndexOf('.');
066 if (beginIndex < 0) {
067 beginIndex = 0;
068 } else {
069 beginIndex++;
070 }
071 int endIndex = name.length() - 3; // 3 = "Tag".length()
072 return name.substring(beginIndex, endIndex);
073 }
074
075 @Override
076 public void release() {
077 super.release();
078 hidden = null;
079 readonly = null;
080 disabled = null;
081 inline = null;
082 label = null;
083 title = null;
084 width = null;
085 height = null;
086 }
087
088 @Override
089 protected void setProperties(UIComponent component) {
090 super.setProperties(component);
091
092 ComponentUtil.setStringProperty(component, ATTR_LABEL, label);
093 ComponentUtil.setStringProperty(component, ATTR_TITLE, title);
094
095 ComponentUtil.setBooleanProperty(component, ATTR_DISABLED, disabled);
096 ComponentUtil.setBooleanProperty(component, ATTR_READONLY, readonly);
097 ComponentUtil.setBooleanProperty(component, ATTR_HIDDEN, hidden);
098 ComponentUtil.setBooleanProperty(component, ATTR_INLINE, inline);
099
100 if (width != null) {
101 LOG.warn("the width attribute is deprecated, please use a layout manager. (" + getClass().getSimpleName() + ")");
102 }
103 ComponentUtil.setStringProperty(component, ATTR_WIDTH, width);
104 if (height != null) {
105 LOG.warn("the height attribute is deprecated, please use a layout manager. (" + getClass().getSimpleName() + ")");
106 }
107 ComponentUtil.setStringProperty(component, ATTR_HEIGHT, height);
108 }
109
110 public String getDisabled() {
111 return disabled;
112 }
113
114 public void setDisabled(String disabled) {
115 this.disabled = disabled;
116 }
117
118 public String getHeight() {
119 return height;
120 }
121
122 public void setHeight(String height) {
123 if (Deprecation.LOG.isWarnEnabled()) {
124 Deprecation.LOG.warn("Attribute 'height' is deprecated, "
125 + "and will removed soon! Please use a layout manager instead.");
126 }
127 this.height = height;
128 }
129
130 public String getHidden() {
131 return hidden;
132 }
133
134 public void setHidden(String hidden) {
135 this.hidden = hidden;
136 }
137
138 public String getInline() {
139 return inline;
140 }
141
142 public void setInline(String inline) {
143 this.inline = inline;
144 }
145
146 public String getLabel() {
147 return label;
148 }
149
150 public void setLabel(String label) {
151 this.label = label;
152 }
153
154 public String getReadonly() {
155 return readonly;
156 }
157
158 public void setReadonly(String readonly) {
159 this.readonly = readonly;
160 }
161
162 public String getTitle() {
163 return title;
164 }
165
166 public void setTitle(String title) {
167 this.title = title;
168 }
169
170 public String getWidth() {
171 return width;
172 }
173
174 public void setWidth(String width) {
175 if (Deprecation.LOG.isWarnEnabled()) {
176 Deprecation.LOG.warn("Attribute 'width' is deprecated, "
177 + "and will removed soon! Please use a layout manager instead.");
178 }
179 this.width = width;
180 }
181
182 public int doEndTag() throws JspException {
183
184 UIComponent component = getComponentInstance();
185 if (component instanceof OnComponentCreated
186 && component.getAttributes().get(TOBAGO_COMPONENT_CREATED) == null) {
187 component.getAttributes().put(TOBAGO_COMPONENT_CREATED, Boolean.TRUE);
188 ((OnComponentCreated) component).onComponentCreated();
189 }
190 return super.doEndTag();
191 }
192 }