001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.wicket.markup;
018:
019: import java.io.IOException;
020: import java.io.InputStream;
021: import java.util.Locale;
022:
023: import org.apache.wicket.util.lang.Classes;
024: import org.apache.wicket.util.resource.IResourceStream;
025: import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
026: import org.apache.wicket.util.time.Time;
027:
028: /**
029: * An IResourceStream implementation with specific extensions for markup
030: * resource streams.
031: *
032: * @author Juergen Donnerstag
033: */
034: public class MarkupResourceStream implements IResourceStream {
035: private static final long serialVersionUID = 1846489965076612828L;
036:
037: /** The associated markup resource stream */
038: private final IResourceStream resourceStream;
039:
040: /**
041: * Container info like Class, locale and style which were used to locate the
042: * resource
043: */
044: private final ContainerInfo containerInfo;
045:
046: /**
047: * The actual component class the markup is directly associated with. It
048: * might be super class of the component class
049: */
050: private final String markupClassName;
051:
052: /** The key used to cache the markup resource stream */
053: private String cacheKey;
054:
055: /**
056: * Construct.
057: *
058: * @param resourceStream
059: */
060: public MarkupResourceStream(final IResourceStream resourceStream) {
061: this .resourceStream = resourceStream;
062: this .containerInfo = null;
063: this .markupClassName = null;
064:
065: if (resourceStream == null) {
066: throw new IllegalArgumentException(
067: "Parameter 'resourceStream' must not be null");
068: }
069: }
070:
071: /**
072: * Construct.
073: *
074: * @param resourceStream
075: * @param containerInfo
076: * @param markupClass
077: */
078: public MarkupResourceStream(final IResourceStream resourceStream,
079: final ContainerInfo containerInfo, final Class markupClass) {
080: this .resourceStream = resourceStream;
081: this .containerInfo = containerInfo;
082: this .markupClassName = markupClass == null ? null : markupClass
083: .getName();
084:
085: if (resourceStream == null) {
086: throw new IllegalArgumentException(
087: "Parameter 'resourceStream' must not be null");
088: }
089: }
090:
091: /**
092: *
093: * @see org.apache.wicket.util.resource.IResourceStream#close()
094: */
095: public void close() throws IOException {
096: resourceStream.close();
097: }
098:
099: /**
100: *
101: * @see org.apache.wicket.util.resource.IResourceStream#getContentType()
102: */
103: public String getContentType() {
104: return resourceStream.getContentType();
105: }
106:
107: /**
108: *
109: * @see org.apache.wicket.util.resource.IResourceStream#getInputStream()
110: */
111: public InputStream getInputStream()
112: throws ResourceStreamNotFoundException {
113: return resourceStream.getInputStream();
114: }
115:
116: /**
117: *
118: * @see org.apache.wicket.util.resource.IResourceStream#getLocale()
119: */
120: public Locale getLocale() {
121: return resourceStream.getLocale();
122: }
123:
124: /**
125: *
126: * @see org.apache.wicket.util.watch.IModifiable#lastModifiedTime()
127: */
128: public Time lastModifiedTime() {
129: return resourceStream.lastModifiedTime();
130: }
131:
132: /**
133: *
134: * @see org.apache.wicket.util.resource.IResourceStream#length()
135: */
136: public long length() {
137: return resourceStream.length();
138: }
139:
140: /**
141: *
142: * @see org.apache.wicket.util.resource.IResourceStream#setLocale(java.util.Locale)
143: */
144: public void setLocale(Locale locale) {
145: resourceStream.setLocale(locale);
146: }
147:
148: /**
149: * Get the actual component class the markup is directly associated with.
150: * Note: it not necessarily must be the container class.
151: *
152: * @return The directly associated class
153: */
154: public Class getMarkupClass() {
155: return Classes.resolveClass(markupClassName);
156: }
157:
158: /**
159: * Get the container infos associated with the markup
160: *
161: * @return ContainerInfo
162: */
163: public ContainerInfo getContainerInfo() {
164: return containerInfo;
165: }
166:
167: /**
168: * Gets cacheKey.
169: * @return cacheKey
170: */
171: public final String getCacheKey() {
172: return cacheKey;
173: }
174:
175: /**
176: * Set the cache key
177: * @param cacheKey
178: */
179: public final void setCacheKey(final String cacheKey) {
180: this .cacheKey = cacheKey;
181: }
182:
183: /**
184: *
185: * @see java.lang.Object#toString()
186: */
187: public String toString() {
188: return resourceStream.toString();
189: }
190: }
|