001/* 002 * Units of Measurement API 003 * Copyright (c) 2014-2019, Jean-Marie Dautelle, Werner Keil, Otavio Santana. 004 * 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without modification, 008 * are permitted provided that the following conditions are met: 009 * 010 * 1. Redistributions of source code must retain the above copyright notice, 011 * this list of conditions and the following disclaimer. 012 * 013 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions 014 * and the following disclaimer in the documentation and/or other materials provided with the distribution. 015 * 016 * 3. Neither the name of JSR-385 nor the names of its contributors may be used to endorse or promote products 017 * derived from this software without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 021 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 023 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 026 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 028 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 */ 030package javax.measure.format; 031 032import java.io.IOException; 033import java.text.ParsePosition; 034 035import javax.measure.Quantity; 036 037/** 038 * Formats instances of {@link Quantity}. 039 * 040 * <h3><a id="synchronization">Synchronization</a></h3> 041 * Instances of this class are not required to be thread-safe. It is recommended to use separate format instances for each thread. If multiple threads 042 * access a format concurrently, it must be synchronized externally. 043 * 044 * @author <a href="mailto:[email protected]">Werner Keil</a> 045 * @author <a href="mailto:[email protected]">Thodoris Bais</a> 046 * 047 * @version 0.9, 22 Feb, 2019 048 * @since 2.0 049 * 050 * @see Quantity 051 */ 052public interface QuantityFormat { 053 054 /** 055 * Formats the specified quantity into an {@code Appendable}. 056 * 057 * @param quantity 058 * the quantity to format. 059 * @param destination 060 * the appendable destination. 061 * @return the specified {@code Appendable}. 062 * @throws IOException 063 * if an I/O exception occurs. 064 */ 065 public Appendable format(Quantity<?> quantity, Appendable destination) throws IOException; 066 067 /** 068 * Formats the specified {@link Quantity}. 069 * 070 * @param quantity 071 * the {@link Quantity} to format, not {@code null} 072 * @return the string representation using the settings of this {@link QuantityFormat}. 073 */ 074 String format(Quantity<?> quantity); 075 076 /** 077 * Parses a portion of the specified {@code CharSequence} from the specified position to produce a {@link Quantity}. 078 * If parsing succeeds, then the index of the {@code pos} argument is updated to the index after the last character used. 079 * 080 * @param csq 081 * the {@code CharSequence} to parse. 082 * @param pos 083 * a ParsePosition object holding the current parsing index and error parsing index information as described above. 084 * @return the quantity parsed from the specified character sub-sequence. 085 * @throws IllegalArgumentException 086 * if any problem occurs while parsing the specified character sequence (e.g. illegal syntax). 087 */ 088 public Quantity<?> parse(CharSequence csq, ParsePosition pos) throws IllegalArgumentException, MeasurementParseException; 089 090 /** 091 * Parses a portion of the specified {@code CharSequence} from the specified position to produce a {@link Quantity}. 092 * 093 * @param csq 094 * the {@code CharSequence} to parse. 095 * @return the quantity parsed from the specified character sub-sequence. 096 * @throws IllegalArgumentException 097 * if any problem occurs while parsing the specified character sequence (e.g. illegal syntax). 098 */ 099 public Quantity<?> parse(CharSequence csq) throws MeasurementParseException; 100 101 /** 102 * Returns {@code true} if this {@link QuantityFormat} depends on a {@code Locale} to perform its tasks. 103 * <p> 104 * In environments that do not support a {@code Locale}, e.g. Java ME, this usually returns {@code false}. 105 * </p> 106 * 107 * @return whether this format depends on the locale. 108 */ 109 default boolean isLocaleSensitive() { 110 return false; 111 } 112}