All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.n52.shetland.ogc.om.ParameterHolder Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2016-2017 52°North Initiative for Geospatial Open Source
 * Software GmbH
 *
 * Licensed 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.n52.shetland.ogc.om;

import java.util.Collection;
import java.util.Optional;
import java.util.SortedSet;
import java.util.TreeSet;

import org.n52.shetland.ogc.gml.ReferenceType;
import org.n52.shetland.ogc.om.values.GeometryValue;
import org.n52.shetland.ogc.om.values.QuantityValue;
import org.n52.shetland.ogc.om.values.Value;
import org.n52.shetland.util.CollectionHelper;

import com.vividsolutions.jts.geom.Geometry;

public class ParameterHolder {

    private final SortedSet> parameter = new TreeSet<>();

    public SortedSet> getParameter() {
        return parameter;
    }

    @SuppressWarnings("unchecked")
    public  Optional> getParameter(String name) {
        if (this.parameter == null) {
            return Optional.empty();
        }
        return this.parameter.stream()
                .filter(nv -> nv.getName().getHref().equals(name))
                .map(nv -> (Value) nv.getValue())
                .findAny();
    }

    public ParameterHolder setParameter(Collection> parameter) {
        this.parameter.clear();
        if (parameter != null) {
            this.parameter.addAll(parameter);
        }
        return this;
    }

    public ParameterHolder addParameter(Collection> parameter) {
        if (parameter != null) {
            this.parameter.addAll(parameter);
        }
        return this;
    }

    public ParameterHolder addParameter(NamedValue parameter) {
        if (parameter != null) {
            this.parameter.add(parameter);
        }
        return this;
    }

    public boolean removeParameter(NamedValue parameter) {
        if (parameter != null) {
            return this.parameter.remove(parameter);
        }
        return false;
    }

    public boolean isSetParameter() {
        return CollectionHelper.isNotEmpty(getParameter());
    }

    /**
     * Check whether height parameter is set
     *
     * @return true, if height parameter is set
     */
    public boolean isSetHeightParameter() {
        return isSetParameter() ? getParameter().stream().anyMatch(this::isHeightParameter) : false;
    }

    /**
     * Get height parameter
     *
     * @return Height parameter
     */
    @SuppressWarnings("unchecked")
    public NamedValue getHeightParameter() {
        if (isSetParameter()) {
            for (NamedValue namedValue : getParameter()) {
                if (isHeightParameter(namedValue)) {
                    return (NamedValue) namedValue;
                }
            }
        }
        return null;
    }

    private boolean isHeightParameter(NamedValue namedValue) {
        return namedValue.isSetName() && namedValue.getName().isSetHref() &&
               (namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_HEIGHT_URL) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_HEIGHT) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_ELEVATION) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_FROM_DEPTH)) &&
               namedValue.getValue() instanceof QuantityValue;
    }

    /**
     * Check whether depth parameter is set
     *
     * @return true, if depth parameter is set
     */
    public boolean isSetDepthParameter() {
        return getParameter().stream().anyMatch(this::isDepthParameter);
    }

    /**
     * Get depth parameter
     *
     * @return Depth parameter
     */
    @SuppressWarnings("unchecked")
    public NamedValue getDepthParameter() {
        if (isSetParameter()) {
            for (NamedValue namedValue : getParameter()) {
                if (isHeightDepthParameter(namedValue)) {
                    return (NamedValue) namedValue;
                }
            }
        }
        return null;
    }

    private boolean isDepthParameter(NamedValue namedValue) {
        return namedValue.isSetName() && namedValue.getName().isSetHref() &&
               (namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_DEPTH_URL) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_DEPTH)) &&
               namedValue.getValue() instanceof QuantityValue;
    }

    public boolean isSetHeightDepthParameter() {
        return getParameter().stream().anyMatch(this::isHeightDepthParameter);
    }

    public NamedValue getHeightDepthParameter() {
        return isSetDepthParameter() ? getDepthParameter() : getHeightParameter();
    }

    private boolean isHeightDepthParameter(NamedValue namedValue) {
        return isHeightParameter(namedValue) || isDepthParameter(namedValue);
    }

    public boolean isSetFromToParameter() {
        return isSetFromParameter() || isSetToParameter();
    }

    private boolean isSetToParameter() {
        return getParameter().stream().anyMatch(this::isToParameter);
    }

    private boolean isSetFromParameter() {
        return getParameter().stream().anyMatch(this::isFromParameter);
    }

    private boolean isToParameter(NamedValue namedValue) {
        return namedValue.isSetName() && namedValue.getName().isSetHref() &&
               (namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_TO_DEPTH) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_TO_HEIGHT) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_TO)) &&
               namedValue.getValue() instanceof QuantityValue;
    }

    private boolean isFromParameter(NamedValue namedValue) {
        return namedValue.isSetName() && namedValue.getName().isSetHref() &&
               (namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_FROM_DEPTH) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_FROM_HEIGHT) ||
                namedValue.getName().getHref().equals(OmConstants.PARAMETER_NAME_FROM)) &&
               namedValue.getValue() instanceof QuantityValue;
    }

    @SuppressWarnings("unchecked")
    public NamedValue getToParameter() {
        return getParameter().stream().filter(this::isToParameter)
                .findFirst().map(nv -> (NamedValue) nv).orElse(null);
    }

    @SuppressWarnings("unchecked")
    public NamedValue getFromParameter() {
        return getParameter().stream().filter(this::isFromParameter)
                .findFirst().map(nv -> (NamedValue) nv).orElse(null);
    }

    /**
     * Check whether spatial filtering profile parameter is set
     *
     * @return true, if spatial filtering profile parameter is set
     */
    public boolean isSetSpatialFilteringProfileParameter() {
        return getParameter().stream().anyMatch(this::isSamplingGeometryParameter);
    }

    /**
     * Add sampling geometry to observation
     *
     * @param samplingGeometry The sampling geometry to set
     *
     * @return this
     */
    public ParameterHolder addSpatialFilteringProfileParameter(Geometry samplingGeometry) {
        final NamedValue namedValue = new NamedValue<>();
        namedValue.setName(new ReferenceType(OmConstants.PARAM_NAME_SAMPLING_GEOMETRY));
        namedValue.setValue(new GeometryValue(samplingGeometry));
        addParameter(namedValue);
        return this;
    }

    /**
     * Get spatial filtering profile parameter
     *
     * @return Spatial filtering profile parameter
     */
    @SuppressWarnings("unchecked")
    public NamedValue getSpatialFilteringProfileParameter() {
        return getParameter().stream().filter(this::isSamplingGeometryParameter)
                .findFirst().map(nv -> (NamedValue) nv).orElse(null);
    }

    /**
     * Check whether sampling geometry for spatial filtering profile is set
     *
     * @return true, if sampling geometry for spatial filtering profile is set
     */
    private boolean isSamplingGeometryParameter(NamedValue namedValue) {
        return namedValue.isSetName() && namedValue.getName().isSetHref() &&
               namedValue.getName().getHref().equals(OmConstants.PARAM_NAME_SAMPLING_GEOMETRY) &&
               namedValue.getValue() instanceof GeometryValue;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy