/* * Copyright (c) 1999 World Wide Web Consortium * (Massachusetts Institute of Technology, Institut National de Recherche * en Informatique et en Automatique, Keio University). * All Rights Reserved. http://www.w3.org/Consortium/Legal/ * * The original version of this interface comes from SAX : * http://www.megginson.com/SAX/ * * $Id: InputSource.java 477010 2006-11-20 02:54:38Z mrglavas $ */ package org.w3c.css.sac; import java.io.InputStream; import java.io.Reader; /** * A single input source for a CSS source. * * <p> * This class allows a CSS application to encapsulate information about an input * source in a single object, which may include a URI, a byte stream (possibly * with a specified encoding), and/or a character stream. * </p> * * <p> * The CSS parser will use the InputSource object to determine how to read CSS * input. If there is a character stream available, the parser will read that * stream directly; if not, the parser will use a byte stream, if available; if * neither a character stream nor a byte stream is available, the parser will * attempt to open a URI connection to the resource identified by the URI. * </p> * * <p> * An InputSource object belongs to the application: the CSS parser shall never * modify it in any way (it may modify a copy if necessary). * </p> * * @author Philippe Le Hegaret * @version $Revision: 477010 $ */ public class InputSource { /** The uri. */ private String uri; /** The byte stream. */ private InputStream byteStream; /** The encoding. */ private String encoding; /** The character stream. */ private Reader characterStream; /** The title. */ private String title; /** The media. */ private String media; /** * Zero-argument default constructor. * * @see #setURI * @see #setByteStream * @see #setCharacterStream * @see #setEncoding */ public InputSource() { } /** * Create a new input source with a URI. * * <p> * The URI must be full resolved. * </p> * * @param uri * The URI. * @see #setURI * @see #setByteStream * @see #setEncoding * @see #setCharacterStream */ public InputSource(String uri) { setURI(uri); } /** * Create a new input source with a character stream. * * <p> * Application writers may use setURI() to provide a base for resolving * relative URIs, and setPublicId to include a public identifier. * </p> * * <p> * The character stream shall not include a byte order mark. * </p> * * @param characterStream the character stream * @see #setURI * @see #setByteStream * @see #setCharacterStream */ public InputSource(Reader characterStream) { setCharacterStream(characterStream); } /** * Set the URI for this input source. * * <p> * The URI is optional if there is a byte stream or a character stream, but * it is still useful to provide one, since the application can use it to * resolve relative URIs and can include it in error messages and warnings * (the parser will attempt to open a connection to the URI only if there is * no byte stream or character stream specified). * </p> * * <p> * If the application knows the character encoding of the object pointed to * by the URI, it can register the encoding using the setEncoding method. * </p> * * <p> * The URI must be fully resolved. * </p> * * @param uri * The URI as a string. * @see #setEncoding * @see #getURI * @see Locator#getURI * @see CSSParseException#getURI */ public void setURI(String uri) { this.uri = uri; } /** * Get the URI for this input source. * * <p> * The getEncoding method will return the character encoding of the object * pointed to, or null if unknown. * </p> * * <p> * The URI will be fully resolved. * </p> * * @return The URI. * @see #setURI * @see #getEncoding */ public String getURI() { return uri; } /** * Set the byte stream for this input source. * * <p> * The SAX parser will ignore this if there is also a character stream * specified, but it will use a byte stream in preference to opening a URI * connection itself. * </p> * * <p> * If the application knows the character encoding of the byte stream, it * should set it with the setEncoding method. * </p> * * @param byteStream * A byte stream containing an CSS document or other entity. * @see #setEncoding * @see #getByteStream * @see #getEncoding */ public void setByteStream(InputStream byteStream) { this.byteStream = byteStream; } /** * Get the byte stream for this input source. * * <p> * The getEncoding method will return the character encoding for this byte * stream, or null if unknown. * </p> * * @return The byte stream, or null if none was supplied. * @see #getEncoding * @see #setByteStream */ public InputStream getByteStream() { return byteStream; } /** * Set the character encoding, if known. * * <p> * The encoding must be a string acceptable for an CHARSET encoding * declaration (see section 4.4 of the CSS recommendation Level 2). * </p> * * <p> * This method has no effect when the application provides a character * stream. * </p> * * @param encoding * A string describing the character encoding. * @see #setURI * @see #setByteStream * @see #getEncoding */ public void setEncoding(String encoding) { this.encoding = encoding; } /** * Get the character encoding for a byte stream or URI. * * @return The encoding, or null if none was supplied. * @see #setByteStream * @see #getURI * @see #getByteStream */ public String getEncoding() { return encoding; } /** * Set the character stream for this input source. * * <p> * If there is a character stream specified, the SAX parser will ignore any * byte stream and will not attempt to open a URI connection to the URI. * </p> * * @param characterStream * The character stream containing the CSS document or other * entity. * @see #getCharacterStream */ public void setCharacterStream(Reader characterStream) { this.characterStream = characterStream; } /** * Get the character stream for this input source. * * @return The character stream, or null if none was supplied. * @see #setCharacterStream */ public Reader getCharacterStream() { return characterStream; } /** * Set the title for this input source. * * @param title * The advisory title. See the title attribute definition for the * <a href= * "http://www.w3.org/TR/REC-html40/struct/links.html#edef-LINK" * >LINK</A> element in HTML 4.0, and the title pseudo-attribute * for the XML style sheet processing instruction. */ public void setTitle(String title) { this.title = title; } /** * Returns the title for this input source. * * @return the title */ public String getTitle() { return title; } /** * Set the media for this input source. * * @param media * A comma separated list with all media. */ public void setMedia(String media) { this.media = media; } /** * Returns the media associated to the input source or <code>null</code> if * media are currently unknown. * * @return the media associated to this input source. */ public String getMedia() { if (media == null) { return "all"; } return media; } }