001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. The ASF licenses this file to You
004: * under the Apache License, Version 2.0 (the "License"); you may not
005: * use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License. For additional information regarding
015: * copyright in this work, please see the NOTICE file in the top level
016: * directory of this distribution.
017: */
018:
019: package org.apache.roller.ui.rendering.velocity;
020:
021: import java.io.InputStream;
022: import javax.servlet.ServletContext;
023: import org.apache.commons.collections.ExtendedProperties;
024: import org.apache.commons.logging.Log;
025: import org.apache.commons.logging.LogFactory;
026: import org.apache.roller.ui.core.RollerContext;
027: import org.apache.velocity.exception.ResourceNotFoundException;
028: import org.apache.velocity.runtime.resource.Resource;
029: import org.apache.velocity.runtime.resource.loader.ResourceLoader;
030:
031: /**
032: * Loads Velocity resources from the webapp.
033: *
034: * All resource urls begin from the root of the webapp. If a resource path
035: * is relative (does not begin with a /) then it is prefixed with the path
036: * /WEB-INF/velocity/, which is where Roller keeps its velocity files.
037: */
038: public class WebappResourceLoader extends ResourceLoader {
039:
040: private static Log log = LogFactory
041: .getLog(WebappResourceLoader.class);
042:
043: private ServletContext mContext = null;
044:
045: /**
046: * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#init(org.apache.commons.collections.ExtendedProperties)
047: */
048: public void init(ExtendedProperties config) {
049:
050: log.debug("WebappResourceLoader : initialization starting.");
051:
052: if (mContext == null) {
053: mContext = RollerContext.getServletContext();
054: log.debug("Servlet Context = "
055: + mContext.getRealPath("/WEB-INF/velocity/"));
056: }
057:
058: log.debug(config);
059:
060: log.debug("WebappResourceLoader : initialization complete.");
061: }
062:
063: /**
064: * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#getResourceStream(java.lang.String)
065: */
066: public InputStream getResourceStream(String name)
067: throws ResourceNotFoundException {
068:
069: log.debug("Looking up resource named ... " + name);
070:
071: if (name == null || name.length() == 0) {
072: throw new ResourceNotFoundException(
073: "No template name provided");
074: }
075:
076: InputStream result = null;
077:
078: try {
079: if (!name.startsWith("/"))
080: name = "/WEB-INF/velocity/" + name;
081:
082: result = this .mContext.getResourceAsStream(name);
083:
084: } catch (Exception e) {
085: throw new ResourceNotFoundException(e.getMessage());
086: }
087:
088: if (result == null) {
089: throw new ResourceNotFoundException("Couldn't find " + name);
090: }
091:
092: return result;
093: }
094:
095: /**
096: * Files loaded by this resource loader are considered static, so they are
097: * never reloaded by velocity.
098: *
099: * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#isSourceModified(org.apache.velocity.runtime.resource.Resource)
100: */
101: public boolean isSourceModified(Resource arg0) {
102: return false;
103: }
104:
105: /**
106: * Defaults to return 0.
107: *
108: * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#getLastModified(org.apache.velocity.runtime.resource.Resource)
109: */
110: public long getLastModified(Resource arg0) {
111: return 0;
112: }
113:
114: }
|