/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.javascript.commonjs.module.provider; import java.io.Reader; import java.io.Serializable; import java.net.URI; /** * Represents the source text of the module as a tuple of a reader, a URI, a * security domain, and a cache validator. * <h1>Cache validators</h1> * Validators are used by caches subclassed from * {@link CachingModuleScriptProviderBase} to avoid repeated loading of * unmodified resources as well as automatic reloading of modified resources. * Such a validator can be any value that can be used to detect modification or * non-modification of the resource that provided the source of the module. It * can be as simple as a tuple of a URI or a file path, and a last-modified * date, or an ETag (in case of HTTP). It is left to the implementation. It is * also allowed to carry expiration information (i.e. in case of HTTP * expiration header, or if a default expiration is used by the source provider * to avoid too frequent lookup of the resource), and to short-circuit the * validation in case the validator indicates the cached representation has not * yet expired. All these are plainly recommendations; the validators are * considered opaque and should only make sure to implement * {@link Object#equals(Object)} as caches themselves can rely on it to compare * them semantically. Also, it is advisable to have them be serializable. * @author Attila Szegedi * @version $Id: ModuleSource.java,v 1.3 2011/04/07 20:26:12 hannes%helma.at Exp $ */ public class ModuleSource implements Serializable { private static final long serialVersionUID = 1L; private final Reader reader; private final Object securityDomain; private final URI uri; private final URI base; private final Object validator; /** * Creates a new module source. * @param reader the reader returning the source text of the module. * @param securityDomain the object representing the security domain for * the module's source (passed to Rhino script compiler). * @param uri the URI of the module's source text * @param validator a validator that can be used for subsequent cache * validation of the source text. */ public ModuleSource(Reader reader, Object securityDomain, URI uri, URI base, Object validator) { this.reader = reader; this.securityDomain = securityDomain; this.uri = uri; this.base = base; this.validator = validator; } /** * Returns the reader returning the source text of the module. Note that * subsequent calls to this method return the same object, thus it is not * possible to read the source twice. * @return the reader returning the source text of the module. */ public Reader getReader() { return reader; } /** * Returns the object representing the security domain for the module's * source. * @return the object representing the security domain for the module's * source. */ public Object getSecurityDomain() { return securityDomain; } /** * Returns the URI of the module source text. * @return the URI of the module source text. */ public URI getUri() { return uri; } /** * Returns the base URI from which this module source was loaded, or null * if it was loaded from an absolute URI. * @return the base URI, or null. */ public URI getBase() { return base; } /** * Returns the validator that can be used for subsequent cache validation * of the source text. * @return the validator that can be used for subsequent cache validation * of the source text. */ public Object getValidator() { return validator; } }