blob: 7a3ef5ff363d21f4e6d0fb22f1984f522d5f882b [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.internal.jaxb.gco;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import org.apache.sis.internal.jaxb.gml.Measure;
import org.apache.sis.measure.Units;
/**
* The ISO 19103 {@code Distance} with a {@code unit of measure} defined, using the
* {@code gco} namespace linked to the {@code http://www.isotc211.org/2005/gco} URL.
*
* <p>This class is identical to {@link GO_Measure} except for the name of the element,
* which is {@code "Distance"}.</p>
*
* @author Cédric Briançon (Geomatys)
* @author Martin Desruisseaux (Geomatys)
* @version 0.8
* @since 0.3
* @module
*/
@XmlType(name = "Distance_PropertyType")
public final class GO_Distance extends XmlAdapter<GO_Distance, Double> {
/**
* A proxy representation of the {@code <gco:Distance>} element.
*/
@XmlElement(name = "Distance")
private Measure distance;
/**
* Empty constructor used only by JAXB.
*/
public GO_Distance() {
}
/**
* Constructs an adapter for the given value before marshalling.
*
* @param value the value.
*
* @todo The unit of measurement is fixed to metres for now because we do not have this information
* in current metadata interface. This will need to be revisited in a future SIS version if we
* replace the Double type by some quantity type.
*/
private GO_Distance(final Double value) {
distance = new Measure(value, Units.METRE);
distance.asXPointer = true;
}
/**
* Allows JAXB to generate a Double object using the value found in the adapter.
*
* @param value the value wrapped in an adapter.
* @return the double value extracted from the adapter.
*/
@Override
public Double unmarshal(final GO_Distance value) {
if (value != null) {
final Measure distance = value.distance;
if (distance != null) {
return distance.value;
}
}
return null;
}
/**
* Allows JAXB to change the result of the marshalling process, according to the
* ISO 19115-3 standard and its requirements about {@code measures}.
*
* @param value the double value we want to integrate into a {@code <gco:Distance>} element.
* @return an adaptation of the double value, that is to say a double value surrounded
* by {@code <gco:Distance>} element, with an {@code uom} attribute.
*/
@Override
public GO_Distance marshal(final Double value) {
return (value != null) ? new GO_Distance(value) : null;
}
}