/** * Copyright (C) 2012-2017 52°North Initiative for Geospatial Open Source * Software GmbH * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 as published * by the Free Software Foundation. * * If the program is linked with libraries which are licensed under one of * the following licenses, the combination of the program with the linked * library is not considered a "derivative work" of the program: * * - Apache License, version 2.0 * - Apache Software License, version 1.0 * - GNU Lesser General Public License, version 3 * - Mozilla Public License, versions 1.0, 1.1 and 2.0 * - Common Development and Distribution License (CDDL), version 1.0 * * Therefore the distribution of the program linked with libraries licensed * under the aforementioned licenses, is permitted by the copyright holders * if the distribution is compliant with both the GNU General Public * License version 2 and the aforementioned licenses. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. */ package org.n52.sos.inspire.capabilities; import java.util.Collection; import java.util.List; import java.util.Set; import org.n52.sos.inspire.InspireConformity; import org.n52.sos.inspire.InspireKeyword; import org.n52.sos.inspire.InspireLanguageISO6392B; import org.n52.sos.inspire.InspireMandatoryKeyword; import org.n52.sos.inspire.InspireMetadataPointOfContact; import org.n52.sos.inspire.InspireResourceLocator; import org.n52.sos.inspire.InspireSupportedCRS; import org.n52.sos.inspire.InspireSupportedLanguages; import org.n52.sos.inspire.InspireTemporalReference; import org.n52.sos.inspire.InspireUniqueResourceIdentifier; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesConformity; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesKeyword; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesMandatoryKeyword; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesMetadataDate; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesMetadataPointOfContact; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesMetadataURL; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesResourceLocator; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesResourceType; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesSpatialDataServiceType; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireExtendedCapabilitiesTemporalReference; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireServiceSpatialDataResourceType; import org.n52.sos.inspire.capabilities.InspireCapabilities.InspireSpatialDataServiceType; import org.n52.sos.ogc.gml.time.TimeInstant; import org.n52.sos.util.CollectionHelper; import com.google.common.collect.Lists; /** * Service internal object to represent the full INSPIRE DLS ExtendedCapabilities * * @author Carsten Hollmann <c.hollmann@52north.org> * @since 4.1.0 * */ public class FullInspireExtendedCapabilities extends InspireExtendedCapabilitiesDLS implements InspireExtendedCapabilitiesResourceLocator, InspireExtendedCapabilitiesMetadataURL, InspireExtendedCapabilitiesResourceType, InspireExtendedCapabilitiesTemporalReference<FullInspireExtendedCapabilities>, InspireExtendedCapabilitiesConformity, InspireExtendedCapabilitiesMetadataPointOfContact, InspireExtendedCapabilitiesMetadataDate, InspireExtendedCapabilitiesMandatoryKeyword, InspireExtendedCapabilitiesKeyword, InspireExtendedCapabilitiesSpatialDataServiceType { /* ResourceLocator 1..* */ private List<InspireResourceLocator> resourceLocator = Lists.newArrayList(); /* ResourceType 1..1 */ private InspireServiceSpatialDataResourceType resourceType = InspireServiceSpatialDataResourceType.service; /* TemporalReference 1..* */ private List<InspireTemporalReference> temporalReferences = Lists.newArrayList(); /* Conformity 1..* */ private List<InspireConformity> conformities = Lists.newArrayList(); /* MetadataPointOfContact 1..* */ private List<InspireMetadataPointOfContact> metadataPointOfContacts = Lists.newArrayList(); /* MetadataDate 1..1 */ private TimeInstant metadataDate; /* SpatialDataServiceType 1..1 */ private InspireSpatialDataServiceType spatialDataServiceType = InspireSpatialDataServiceType.download; /* MandatoryKeyword 1..* */ private List<InspireMandatoryKeyword> mandatoryKeywords = Lists.newArrayList(); /* Keyword 0..* */ private List<InspireKeyword> keywords = Lists.newArrayList(); /* MetadataUrl" 0..1 */ private InspireResourceLocator metadataUrl; /** * constructor * * @param resourceLocator * resourceLocator to set * @param supportedLanguages * Supported languages to set * @param responseLanguage * Response language to set * @param spatialDataSetIdentifier * Spatial dataset identifier to set * @param supportedCRS * Supported CRSes to set */ public FullInspireExtendedCapabilities(InspireResourceLocator resourceLocator, InspireSupportedLanguages supportedLanguages, InspireLanguageISO6392B responseLanguage, InspireUniqueResourceIdentifier spatialDataSetIdentifier, InspireSupportedCRS supportedCRS) { super(supportedLanguages, responseLanguage, spatialDataSetIdentifier,supportedCRS); addResourceLocator(resourceLocator); } /** * constructor * * @param resourceLocators * resourceLocators to set * @param supportedLanguages * Supported languages to set * @param responseLanguage * Response language to set * @param spatialDataSetIdentifier * Spatial dataset identifier to set * @param supportedCRS * Supported CRSes to set */ public FullInspireExtendedCapabilities(List<InspireResourceLocator> resourceLocators, InspireSupportedLanguages supportedLanguages, InspireLanguageISO6392B responseLanguage, InspireUniqueResourceIdentifier spatialDataSetIdentifier, InspireSupportedCRS supportedCRS) { super(supportedLanguages, responseLanguage, spatialDataSetIdentifier, supportedCRS); setResourceLocator(resourceLocators); } /** * constructor * * @param resourceLocator * resourceLocator to set * @param supportedLanguages * Supported languages to set * @param responseLanguage * Response language to set * @param spatialDataSetIdentifiers * Spatial dataset identifiers to set * @param supportedCRS * Supported CRSes to set */ public FullInspireExtendedCapabilities(InspireResourceLocator resourceLocator, InspireSupportedLanguages supportedLanguages, InspireLanguageISO6392B responseLanguage, Set<InspireUniqueResourceIdentifier> spatialDataSetIdentifiers, InspireSupportedCRS supportedCRS) { super(supportedLanguages, responseLanguage, spatialDataSetIdentifiers, supportedCRS); addResourceLocator(resourceLocator); } /** * constructor * * @param resourceLocators * resourceLocators to set * @param supportedLanguages * Supported languages to set * @param responseLanguage * Response language to set * @param spatialDataSetIdentifiers * Spatial dataset identifiers to set * @param supportedCRS * Supported CRSes to set */ public FullInspireExtendedCapabilities(List<InspireResourceLocator> resourceLocators, InspireSupportedLanguages supportedLanguages, InspireLanguageISO6392B responseLanguage, Set<InspireUniqueResourceIdentifier> spatialDataSetIdentifiers, InspireSupportedCRS supportedCRS) { super(supportedLanguages, responseLanguage, spatialDataSetIdentifiers,supportedCRS); setResourceLocator(resourceLocators); } @Override public List<InspireResourceLocator> getResourceLocator() { return resourceLocator; } @Override public InspireExtendedCapabilitiesResourceLocator setResourceLocator( Collection<InspireResourceLocator> resourceLocator) { if (CollectionHelper.isNotEmpty(resourceLocator)) { getResourceLocator().clear(); this.resourceLocator.addAll(resourceLocator); } return this; } @Override public InspireExtendedCapabilitiesResourceLocator addResourceLocator(InspireResourceLocator resourceLocator) { getResourceLocator().add(resourceLocator); return this; } @Override public boolean isSetResourceLocators() { return CollectionHelper.isNotEmpty(getResourceLocator()); } @Override public InspireResourceLocator getMetadataUrl() { return metadataUrl; } @Override public FullInspireExtendedCapabilities setMetadataUrl(InspireResourceLocator metadataUrl) { this.metadataUrl = metadataUrl; return this; } @Override public boolean isSetMetadataUrl() { return getMetadataUrl() != null; } @Override public String toString() { return String.format("%s %n[%n \tresourceLocator=%s," + "%n resourceType=%s," + "%n temporalReferences=%s," + "%n conformity=%s," + "%n metadataPointOfContacts=%s," + "%n metadataDate=%s," + "%n spatialDataServiceType=%s," + "%n mandatoryKeywords=%s," + "%n keywords=%s," + "%n supportedLanguages=%s," + "%n responseLanguage=%s," + "%n metadataUrl=%s%n]", this.getClass() .getSimpleName(), CollectionHelper.collectionToString(getResourceLocator()), getResourceType(), CollectionHelper.collectionToString(getTemporalReferences()), CollectionHelper .collectionToString(getConformity()), CollectionHelper .collectionToString(getMetadataPointOfContacts()), getMetadataDate(), getSpatialDataServiceType(), CollectionHelper.collectionToString(getMandatoryKeywords()), CollectionHelper.collectionToString(getKeywords()), getSupportedLanguages(), getResponseLanguage(), getMetadataUrl()); } @Override public InspireServiceSpatialDataResourceType getResourceType() { return resourceType; } @Override public InspireExtendedCapabilitiesResourceType setResourceType(InspireServiceSpatialDataResourceType resourceType) { this.resourceType = resourceType; return this; } @Override public boolean isSetResourceType() { return getResourceType() != null; } @Override public List<InspireTemporalReference> getTemporalReferences() { return temporalReferences; } @Override public FullInspireExtendedCapabilities setTemporalReferences( Collection<InspireTemporalReference> temporalReferences) { if (CollectionHelper.isNotEmpty(temporalReferences)) { getTemporalReferences().clear(); getTemporalReferences().addAll(temporalReferences); } return this; } @Override public FullInspireExtendedCapabilities addTemporalReference(InspireTemporalReference temporalReference) { getTemporalReferences().add(temporalReference); return this; } @Override public boolean isSetTemporalReferences() { return CollectionHelper.isNotEmpty(getTemporalReferences()); } @Override public List<InspireConformity> getConformity() { return conformities; } @Override public FullInspireExtendedCapabilities setConformity(Collection<InspireConformity> conformities) { if (CollectionHelper.isNotEmpty(conformities)) { getConformity().clear(); getConformity().addAll(conformities); } return this; } @Override public FullInspireExtendedCapabilities addConformity(InspireConformity conformity) { getConformity().add(conformity); return this; } @Override public boolean isSetConformity() { return CollectionHelper.isNotEmpty(getConformity()); } @Override public List<InspireMetadataPointOfContact> getMetadataPointOfContacts() { return metadataPointOfContacts; } @Override public FullInspireExtendedCapabilities setMetadataPointOfContacts( Collection<InspireMetadataPointOfContact> metadataPointOfContacts) { if (CollectionHelper.isNotEmpty(metadataPointOfContacts)) { getMetadataPointOfContacts().clear(); getMetadataPointOfContacts().addAll(metadataPointOfContacts); } return this; } @Override public FullInspireExtendedCapabilities addMetadataPointOfContact( InspireMetadataPointOfContact metadataPointOfContact) { getMetadataPointOfContacts().add(metadataPointOfContact); return this; } @Override public boolean isSetMetadataPointOfContact() { return CollectionHelper.isNotEmpty(getMetadataPointOfContacts()); } public TimeInstant getMetadataDate() { return metadataDate; } @Override public FullInspireExtendedCapabilities setMetadataDate(TimeInstant metadataDate) { this.metadataDate = metadataDate; return this; } @Override public boolean isSetMetadataDate() { return getMetadataDate() != null; } @Override public InspireSpatialDataServiceType getSpatialDataServiceType() { return spatialDataServiceType; } @Override public InspireExtendedCapabilitiesSpatialDataServiceType setSpatialDataServiceType( InspireSpatialDataServiceType spatialDataServiceType) { this.spatialDataServiceType = spatialDataServiceType; return this; } @Override public boolean isSetSpatialDataServiceType() { return getSpatialDataServiceType() != null; } @Override public List<InspireMandatoryKeyword> getMandatoryKeywords() { return mandatoryKeywords; } @Override public FullInspireExtendedCapabilities setMandatoryKeywords(Collection<InspireMandatoryKeyword> mandatoryKeywords) { if (CollectionHelper.isNotEmpty(mandatoryKeywords)) { getMandatoryKeywords().clear(); getMandatoryKeywords().addAll(mandatoryKeywords); } return this; } @Override public FullInspireExtendedCapabilities addMandatoryKeyword(InspireMandatoryKeyword mandatoryKeyword) { getMandatoryKeywords().add(mandatoryKeyword); return this; } @Override public boolean isSetMandatoryKeyword() { return getMandatoryKeywords() != null; } @Override public List<InspireKeyword> getKeywords() { return keywords; } @Override public FullInspireExtendedCapabilities setKeywords(Collection<InspireKeyword> keywords) { if (CollectionHelper.isNotEmpty(keywords)) { getKeywords().clear(); getKeywords().addAll(keywords); } return this; } @Override public FullInspireExtendedCapabilities addKeyword(InspireKeyword keyword) { keywords.add(keyword); return this; } @Override public boolean isSetKeywords() { return CollectionHelper.isNotEmpty(getKeywords()); } }