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