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 org.apache.wicket.MarkupContainer;
020: import org.apache.wicket.settings.IMarkupSettings;
021:
022: /**
023: * Each Wicket application has a single IMarkupCache associated with it (see
024: * {@link IMarkupSettings}). The markup cache is used by every Component to get
025: * its associated markup stream. Note that it is the markup caches
026: * responsibility to load the markup, if not yet done.
027: *
028: * @author Juergen Donnerstag
029: */
030: public interface IMarkupCache {
031: /**
032: * Clear markup cache and force reload of all markup data
033: */
034: void clear();
035:
036: /**
037: * Gets any (immutable) markup resource for the container or any of its
038: * parent classes (markup inheritance)
039: *
040: * @param container
041: * The original requesting markup container
042: * @param clazz
043: * The class to get the associated markup for. If null, the
044: * container's class is used, but it can be a parent class of the
045: * container as well (markup inheritance)
046: * @param enforceReload
047: * The cache will be ignored and all, including inherited markup
048: * files, will be reloaded. Whatever is in the cache, it will be
049: * ignored
050: * @return Markup resource
051: */
052: Markup getMarkup(final MarkupContainer container,
053: final Class clazz, final boolean enforceReload);
054:
055: /**
056: * Gets a fresh markup stream that contains the (immutable) markup resource
057: * for this class.
058: *
059: * @param container
060: * The container the markup should be associated with
061: * @param enforceReload
062: * The cache will be ignored and all, including inherited markup
063: * files, will be reloaded. Whatever is in the cache, it will be
064: * ignored
065: * @param throwException
066: * If true, throw an exception, if markup could not be found
067: * @return A stream of MarkupElement elements
068: */
069: MarkupStream getMarkupStream(final MarkupContainer container,
070: final boolean enforceReload, final boolean throwException);
071:
072: /**
073: * Check if container has associated markup
074: *
075: * @param container
076: * The container the markup should be associated with
077: * @return True if this markup container has associated markup
078: */
079: boolean hasAssociatedMarkup(final MarkupContainer container);
080:
081: /**
082: * Remove the markup associated with the cache key from the cache including
083: * all dependent markups (markup inheritance)
084: *
085: * @see MarkupResourceStream#getCacheKey()
086: *
087: * @param cacheKey
088: * @return The markup removed from the cache. Null, if nothing was found.
089: */
090: Markup removeMarkup(final String cacheKey);
091:
092: /**
093: * @return the number of elements currently in the cache.
094: */
095: int size();
096:
097: /**
098: * Will be called by the application while shutting down. It allows the
099: * markup cache to cleanup if necessary.
100: */
101: void shutdown();
102: }
|