package org.apache.maven.shared.utils; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import org.apache.maven.shared.utils.xml.XmlStreamWriter; import javax.annotation.Nonnull; /** * Utility to create Writers, with explicit encoding choice: platform default, * XML, or specified. * * @author Hervé Boutemy * @see java.nio.charset.Charset * @see <a href="http://docs.oracle.com/javase/1.5.0/docs/guide/intl/encoding.doc.html">Supported encodings</a> * @version $Id$ */ public class WriterFactory { /** * ISO Latin Alphabet #1, also known as ISO-LATIN-1. * Every implementation of the Java platform is required to support this character encoding. * @see java.nio.charset.Charset */ public static final String ISO_8859_1 = "ISO-8859-1"; /** * Seven-bit ASCII, also known as ISO646-US, also known as the Basic Latin block of the Unicode character set. * Every implementation of the Java platform is required to support this character encoding. * @see java.nio.charset.Charset */ public static final String US_ASCII = "US-ASCII"; /** * Sixteen-bit Unicode Transformation Format, byte order specified by a mandatory initial byte-order mark (either * order accepted on input, big-endian used on output). * Every implementation of the Java platform is required to support this character encoding. * @see java.nio.charset.Charset */ public static final String UTF_16 = "UTF-16"; /** * Sixteen-bit Unicode Transformation Format, big-endian byte order. * Every implementation of the Java platform is required to support this character encoding. * @see java.nio.charset.Charset */ public static final String UTF_16BE = "UTF-16BE"; /** * Sixteen-bit Unicode Transformation Format, little-endian byte order. * Every implementation of the Java platform is required to support this character encoding. * @see java.nio.charset.Charset */ public static final String UTF_16LE = "UTF-16LE"; /** * Eight-bit Unicode Transformation Format. * Every implementation of the Java platform is required to support this character encoding. * @see java.nio.charset.Charset */ public static final String UTF_8 = "UTF-8"; /** * The <code>file.encoding</code> System Property. */ public static final String FILE_ENCODING = System.getProperty( "file.encoding" ); /** * Create a new Writer with XML encoding detection rules. * * @param out not null output stream. * @return an XML writer instance for the output stream. * @throws IOException if any. * @see XmlStreamWriter */ public static XmlStreamWriter newXmlWriter( @Nonnull OutputStream out ) throws IOException { return new XmlStreamWriter( out ); } /** * Create a new Writer with XML encoding detection rules. * * @param file not null file. * @return an XML writer instance for the output file. * @throws IOException if any. * @see XmlStreamWriter */ public static XmlStreamWriter newXmlWriter( @Nonnull File file ) throws IOException { return new XmlStreamWriter( file ); } /** * Create a new Writer with default platform encoding. * * @param out not null output stream. * @return a writer instance for the output stream using the default platform charset. * @see java.nio.charset.Charset#defaultCharset() */ public static Writer newPlatformWriter( @Nonnull OutputStream out ) { return new OutputStreamWriter( out ); } /** * Create a new Writer with default platform encoding. * * @param file not null file. * @return a writer instance for the output file using the default platform charset. * @throws IOException if any. * @see java.nio.charset.Charset#defaultCharset() */ public static Writer newPlatformWriter( @Nonnull File file ) throws IOException { return new FileWriter( file ); } /** * Create a new Writer with specified encoding. * * @param out not null output stream. * @param encoding not null supported encoding. * @return a writer instance for the output stream using the given encoding. * @throws UnsupportedEncodingException if any. * @see <a href="http://docs.oracle.com/javase/1.5.0/docs/guide/intl/encoding.doc.html">Supported encodings</a> */ public static Writer newWriter( @Nonnull OutputStream out, @Nonnull String encoding ) throws UnsupportedEncodingException { return new OutputStreamWriter( out, encoding ); } /** * Create a new Writer with specified encoding. * * @param file not null file. * @param encoding not null supported encoding. * @return a writer instance for the output file using the given encoding. * @throws UnsupportedEncodingException if any. * @throws FileNotFoundException if any. * @see <a href="http://docs.oracle.com/javase/1.5.0/docs/guide/intl/encoding.doc.html">Supported encodings</a> */ public static Writer newWriter( @Nonnull File file, @Nonnull String encoding ) throws UnsupportedEncodingException, FileNotFoundException { return newWriter( new FileOutputStream( file ), encoding ); } }