001: /*
002: * This file is part of the WfMOpen project.
003: * Copyright (C) 2001-2006 Danet GmbH (www.danet.de), BU BTS.
004: * All rights reserved.
005: *
006: * This program is free software; you can redistribute it and/or modify
007: * it under the terms of the GNU General Public License as published by
008: * the Free Software Foundation; either version 2 of the License, or
009: * (at your option) any later version.
010: *
011: * This program is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
014: * GNU General Public License for more details.
015: *
016: * You should have received a copy of the GNU General Public License
017: * along with this program; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: *
020: * $Id: MyFacesResourceHandler.java,v 1.2 2006/12/12 09:58:39 drmlipp Exp $
021: *
022: * $Log: MyFacesResourceHandler.java,v $
023: * Revision 1.2 2006/12/12 09:58:39 drmlipp
024: * Added resources and minor cleanup.
025: *
026: * Revision 1.1.4.1 2006/11/08 12:47:02 drmlipp
027: * Started using stylesheet.
028: *
029: * Revision 1.1 2006/10/05 13:27:39 drmlipp
030: * New tag for XML display.
031: *
032: */
033: package de.danet.an.util.jsf.taglib;
034:
035: import javax.faces.context.FacesContext;
036:
037: import org.apache.myfaces.renderkit.html.util.ResourceHandler;
038:
039: /**
040: * This class provides a resource handler for this taglib.
041: *
042: * @author Michael Lipp
043: *
044: */
045: public class MyFacesResourceHandler implements ResourceHandler {
046: private final Class _myfacesCustomComponent;
047: private final String _resource;
048:
049: /**
050: * Constructor.
051: *
052: * @param myfacesCustomComponent is a class that must be in package
053: * de.danet.an.util.jsf.taglib. The resource to be served will be
054: * located relative to this class in the classpath. Note that code
055: * wishing to serve resources from other locations in the classpath
056: * must write a custom ResourceHandler implementation.
057: *
058: * @param resourceName is the name of a file that can be found in dir
059: * "resource/{resourceName} relative to the location of the specified
060: * component class in the classpath.
061: */
062: public MyFacesResourceHandler(Class myfacesCustomComponent,
063: String resourceName) {
064: validateCustomComponent(myfacesCustomComponent);
065: _myfacesCustomComponent = myfacesCustomComponent;
066: _resource = resourceName;
067: }
068:
069: /**
070: * Return a Class object which can decode the url generated by this class in
071: * the getResourceUri method and use that info to locate the resource data
072: * represented by this object.
073: *
074: * @see org.apache.myfaces.shared.renderkit.html.util.ResourceHandler#getResourceLoaderClass()
075: */
076: public Class getResourceLoaderClass() {
077: return MyFacesResourceLoader.class;
078: }
079:
080: /**
081: * Verify that the base class for the resource lookup is in the
082: * de.danet.an.util.jsf.taglib package.
083: *
084: * @param myfacesCustomComponent
085: * is the base component for the lookup.
086: * @throws IllegalArgumentException
087: * if the class is not in the expected package.
088: */
089: protected void validateCustomComponent(Class myfacesCustomComponent) {
090: if (!myfacesCustomComponent
091: .getName()
092: .startsWith(
093: MyFacesResourceLoader.DE_DANET_AN_UTIL_JSF_TAGLIB
094: + ".")) {
095: throw new IllegalArgumentException(
096: "expected a Danet util custom component class in package "
097: + MyFacesResourceLoader.DE_DANET_AN_UTIL_JSF_TAGLIB);
098: }
099: }
100:
101: /**
102: * Return a URL that the browser can later submit to retrieve the resource
103: * handled by this instance.
104: * <p>
105: * The emitted URL is of form:
106: *
107: * <pre>
108: * {partial.class.name}/{resourceName}
109: * </pre>
110: *
111: * where partial.class.name is the name of the base class specified in the
112: * constructor, and resourceName is the resource specified in the
113: * constructor.
114: *
115: * @see org.apache.myfaces.shared.renderkit.html.util.ResourceHandler#getResourceUri(javax.faces.context.FacesContext)
116: */
117: public String getResourceUri(FacesContext context) {
118: String className = _myfacesCustomComponent.getName();
119: StringBuffer sb = new StringBuffer();
120: sb
121: .append(className
122: .substring(MyFacesResourceLoader.DE_DANET_AN_UTIL_JSF_TAGLIB
123: .length() + 1));
124: sb.append("/");
125: if (_resource != null) {
126: sb.append(_resource);
127: }
128: return sb.toString();
129: }
130:
131: }
|