blob: c048d0c8868efbb2b70a5b5cc725ac5aaa6d2096 [file] [log] [blame]
/*
* 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.
*/
package org.apache.sis.xml;
import java.util.Locale;
import java.util.TimeZone;
import org.apache.sis.util.Version;
import org.opengis.util.InternationalString;
/**
* Context of a marshalling or unmarshalling process.
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.0
* @since 0.3
* @module
*/
public abstract class MarshalContext {
/**
* Creates a new (un)marshalling context.
*/
protected MarshalContext() {
}
/**
* Returns the locale to use for (un)marshalling, or {@code null} if no locale were explicitly specified.
* The locale returned by this method can be used for choosing a language in an {@link InternationalString}.
*
* <p>This locale may vary in different fragments of the same XML document.
* In particular children of {@link org.opengis.metadata.Metadata} inherit the locale
* specified by the {@link org.opengis.metadata.Metadata#getLanguage()} attribute.</p>
*
* <div class="section">Handling of {@code Locale.ROOT}</div>
* {@link Locale#ROOT} is interpreted as a request for locale-neutral strings.
* The meaning of "locale-neutral" is implementation specific - this is usually
* very close to the English locale, but not necessarily. For examples dates are
* formatted according ISO standard instead than the rules of the English locale.
*
* <div class="section">Handling of {@code null} locale</div>
* A {@code null} value means that the locale is unspecified. Callers are encouraged
* to use the root locale as the default value, but some flexibility is allowed.
*
* @return the locale for the XML fragment being (un)marshalled, or {@code null} is unspecified.
*
* @see org.apache.sis.util.iso.DefaultInternationalString#toString(Locale)
*/
public abstract Locale getLocale();
/**
* Returns the timezone to use for (un)marshalling, or {@code null} if none was explicitly specified.
*
* <div class="section">Handling of <code>null</code> timezone</div>
* A {@code null} value means that the timezone is unspecified. Callers are encouraged
* to use the UTC timezone as the default value, but some flexibility is allowed.
*
* <div class="warning"><b>Upcoming API change — Java time API</b><br>
* Return type may be changed to {@link java.time.ZoneId} when Apache SIS will target Java 8.
* This change may be applied in synchronization with GeoAPI 4.0.
* </div>
*
* @return the timezone for the XML fragment being (un)marshalled, or {@code null} if unspecified.
*/
public abstract TimeZone getTimeZone();
/**
* Returns the schema version of the XML document being (un)marshalled.
* The {@code prefix} argument can be any of the following values (case-sensitive):
*
* <table class="sis">
* <caption>Supported schemas</caption>
* <tr><th>Prefix</th> <th>Standard</th> <th>Typical values</th></tr>
* <tr><td>gml</td> <td>Geographic Markup Language</td> <td>{@code 3.0}, {@code 3.2}</td></tr>
* <tr><td>gmd</td> <td>Geographic MetaData</td> <td>{@code 2007}, {@code 2016}</td></tr>
* </table>
*
* @param prefix one of the above-cited prefix.
* @return the version for the given schema, or {@code null} if unknown.
*/
public abstract Version getVersion(final String prefix);
}