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.myfaces.tobago.apt.annotation.BodyContent; 023 import org.apache.myfaces.tobago.apt.annotation.BodyContentDescription; 024 import org.apache.myfaces.tobago.apt.annotation.Tag; 025 import org.apache.myfaces.tobago.apt.annotation.TagAttribute; 026 import org.apache.myfaces.tobago.component.ComponentUtil; 027 import org.apache.myfaces.tobago.component.UIPage; 028 import org.apache.myfaces.tobago.taglib.decl.HasId; 029 030 import javax.faces.context.FacesContext; 031 import javax.servlet.jsp.JspException; 032 import javax.servlet.jsp.tagext.BodyTagSupport; 033 034 /** 035 * Add a style tag. 036 * Collected bodyContent is rendered as content into a style tag. 037 */ 038 @Tag(name = "style", bodyContent = BodyContent.TAGDEPENDENT) 039 @BodyContentDescription(contentType = "css") 040 public class StyleTag extends BodyTagSupport implements HasId { 041 042 private static final long serialVersionUID = -2201525304632479403L; 043 044 private String style; 045 046 public int doEndTag() throws JspException { 047 048 FacesContext facesContext = FacesContext.getCurrentInstance(); 049 UIPage page = ComponentUtil.findPage(facesContext); 050 if (page == null) { 051 throw new JspException("The StyleTag cannot find the UIPage. " 052 + "Check you have defined the StyleTag inside of the PageTag!"); 053 } 054 055 if (style != null) { 056 page.getStyleFiles().add(ComponentUtil.getValueFromEl(style)); 057 } 058 059 if (bodyContent != null) { 060 String classes = bodyContent.getString(); 061 bodyContent.clearBody(); 062 page.getStyleBlocks().add(ComponentUtil.getValueFromEl(classes)); 063 } 064 065 return EVAL_PAGE; 066 } 067 068 public int doStartTag() throws JspException { 069 return EVAL_BODY_BUFFERED; 070 } 071 072 public void release() { 073 super.release(); 074 style = null; 075 } 076 077 public String getStyle() { 078 return style; 079 } 080 081 /** 082 * Name of the stylsheet file to add to page. 083 */ 084 @TagAttribute 085 public void setStyle(String style) { 086 this.style = style; 087 } 088 } 089