/* Loader.java Purpose: Description: History: Fri Jun 3 09:13:02 2005, Created by tomyeh Copyright (C) 2005 Potix Corporation. All Rights Reserved. {{IS_RIGHT This program is distributed under LGPL Version 2.1 in the hope that it will be useful, but WITHOUT ANY WARRANTY. }}IS_RIGHT */ package org.zkoss.util.resource; /** * A loader that could load a resource to another format. * It is mainly designed to work with {@link ResourceCache}. * * @author tomyeh */ public interface Loader<K, V> { /** Returns whether to call {@link #getLastModified}. * If false, it assumes the current cached content is up-to-date. * * @param expiredMillis how many milli-seconds are expired after the last * check. In most cases, just return true if expiredMillis > 0 */ public boolean shallCheck(K src, long expiredMillis); /** Returns the last modified time, or -1 if reload is required or not exists. */ public long getLastModified(K src); /** Loads the resource. * * <p>The returned resource could be anything. It will be returned * by {@link ResourceCache#get}. * However, if you want to have more control (e.g., whether to cache), * you can return an instance * of {@link Resource}. Then, the return value of {@link ResourceCache#get} * will be {@link Resource#resource}. * * @return null if not found * @exception Exception you might throw any exception which will be * passed back to the caller of {@link ResourceCache#get} */ public V load(K src) throws Exception; /** Represents the more information about an object loaded by * {@link Loader#load}. * * @since 5.0.0 */ public class Resource<V> { /** The real resource that shall be returned by {@link ResourceCache#get}. */ public final V resource; /** Whether the resource shall be cached in {@link ResourceCache}. */ public final boolean cacheable; public Resource(V resource, boolean cacheable) { this.cacheable = cacheable; this.resource = resource; } } }