/** * 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.ds.hibernate.util.procedure.enrich; import java.util.List; import java.util.Set; import org.n52.sos.ogc.ows.OwsExceptionReport; import org.n52.sos.ogc.sensorML.AbstractSensorML; import org.n52.sos.ogc.sensorML.elements.SmlIdentifier; import org.n52.sos.util.CollectionHelper; import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.common.collect.Sets; /** * TODO JavaDoc * * @author Christian Autermann <c.autermann@52north.org> */ public class KeywordEnrichment extends SensorMLEnrichment { @Override protected void enrich(AbstractSensorML description) throws OwsExceptionReport { List<String> keywords = createKeywordsList(description); if (CollectionHelper.isNotEmpty(keywords)) { description.setKeywords(keywords); } } @Override public boolean isApplicable() { return super.isApplicable() && procedureSettings().isEnrichWithDiscoveryInformation(); } private List<String> createKeywordsList(AbstractSensorML description) { Set<String> keywords = Sets.newHashSet(); addExisting(description, keywords); addObservableProperties(keywords); addIdentifier(keywords); addIntendedApplication(keywords); addProcedureType(keywords); addOfferings(keywords); addLongName(description, keywords); addShortName(description, keywords); addFeatures(description, keywords); return Lists.newArrayList(keywords); } private void addLongName(AbstractSensorML description,Set<String> keywords) { Optional<SmlIdentifier> longName = description .findIdentification(longNamePredicate()); if (longName.isPresent()) { keywords.add(longName.get().getValue()); } } private void addShortName(AbstractSensorML description,Set<String> keywords) { Optional<SmlIdentifier> shortName = description .findIdentification(shortNamePredicate()); if (shortName.isPresent()) { keywords.add(shortName.get().getValue()); } } private void addFeatures(AbstractSensorML description,Set<String> keywords) { if (procedureSettings().isEnrichWithFeatures() && description.isSetFeaturesOfInterest()) { keywords.addAll(description.getFeaturesOfInterest()); } } private void addOfferings(Set<String> keywords) { if (procedureSettings().isEnrichWithOfferings()) { for (String offering : getCache() .getOfferingsForProcedure(getIdentifier())) { if (getCache().getPublishedOfferings().contains(offering)) { keywords.add(offering); } } } } private void addProcedureType(Set<String> keywords) { if (procedureSettings().isGenerateClassification() && !procedureSettings().getClassifierProcedureTypeValue().isEmpty()) { keywords.add(procedureSettings().getClassifierProcedureTypeValue()); } } private void addIntendedApplication(Set<String> keywords) { if (procedureSettings().isGenerateClassification() && !procedureSettings().getClassifierIntendedApplicationValue().isEmpty()) { keywords.add(procedureSettings().getClassifierIntendedApplicationValue()); } } private void addObservableProperties(Set<String> keywords) { for (String obsProp : getCache() .getObservablePropertiesForProcedure(getIdentifier())) { if (getCache().getPublishedObservableProperties().contains(obsProp)) { keywords.add(obsProp); } } } private void addExisting(AbstractSensorML description,Set<String> keywords) { if (description.isSetKeywords()) { keywords.addAll(description.getKeywords()); } } private void addIdentifier(Set<String> keywords) { keywords.add(getIdentifier()); } }