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 /*
021 * Created on: 15.02.2002, 16:19:49
022 * $Id: TobagoBodyTag.java 601107 2007-12-04 22:12:14Z bommel $
023 */
024
025 import org.apache.commons.logging.Log;
026 import org.apache.commons.logging.LogFactory;
027
028 import javax.faces.component.UIComponent;
029 import javax.servlet.jsp.JspException;
030 import javax.servlet.jsp.tagext.BodyContent;
031 import javax.servlet.jsp.tagext.BodyTag;
032
033 public abstract class TobagoBodyTag extends TobagoTag implements TobagoBodyTagDeclaration {
034
035 private static final Log LOG = LogFactory.getLog(TobagoBodyTag.class);
036
037 private BodyContent bodyContent;
038
039 public int doAfterBody() throws JspException {
040 return getDoAfterBodyValue();
041 }
042
043 public void doInitBody() throws JspException {
044 }
045
046
047 public int doEndTag() throws JspException {
048 if (LOG.isWarnEnabled()) {
049 UIComponent component = getComponentInstance();
050 if (component != null && component.getRendersChildren() && !isBodyContentEmpty()) {
051 LOG.warn("BodyContent should be empty. Component with id " + component.getId()
052 + " class " + component.getClass().getName() + " content " + bodyContent.getString()
053 + " Please use the f:verbatim tag for nested content!");
054 }
055 }
056 return super.doEndTag();
057 }
058
059 protected boolean isBodyContentEmpty() {
060 if (bodyContent != null) {
061 String content = bodyContent.getString();
062 //bodyContent.clearBody();
063 String tmp = content.replace('\n', ' ');
064 if (tmp.trim().length() > 0) { // if there are only whitespaces: drop bodyContent
065 return false;
066 }
067 }
068 return true;
069 }
070
071 protected int getDoStartValue() throws JspException {
072 return BodyTag.EVAL_BODY_BUFFERED;
073 }
074
075 protected int getDoAfterBodyValue() throws JspException {
076 return BodyTag.SKIP_BODY;
077 }
078
079 public void release() {
080 super.release();
081 bodyContent = null;
082 }
083
084 public void setBodyContent(BodyContent bodyContent) {
085 this.bodyContent = bodyContent;
086 }
087 }
088