content: /*************************************************************************
  *                                                                        *
  *  This file is part of the 20n/act project.                             *
  *  20n/act enables DNA prediction for synthetic biology/bioengineering.  *
  *  Copyright (C) 2017 20n Labs, Inc.                                     *
  *                                                                        *
  *  Please direct all queries to act@20n.com.                             *
  *                                                                        *
  *  This program is free software: you can redistribute it and/or modify  *
  *  it under the terms of the GNU General Public License as published by  *
  *  the Free Software Foundation, either version 3 of the License, or     *
  *  (at your option) any later version.                                   *
  *                                                                        *
  *  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.                          *
  *                                                                        *
  *  You should have received a copy of the GNU General Public License     *
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  *                                                                        *
  *************************************************************************/
  
  package act.installer.bing;
  
  import com.mongodb.BasicDBList;
  import com.mongodb.BasicDBObject;
  import org.apache.logging.log4j.LogManager;
  import org.apache.logging.log4j.Logger;
  
  import java.util.HashSet;
  import java.util.Set;
  
  /**
   * This class represents a single usage term with the set of URLs it was found in
   * (more exactly in the associated description).
   * Provides methods for populating the object and translating it to BasicDBObject
   */
  
  public class UsageTermUrlSet {
    private static final Logger LOGGER = LogManager.getFormatterLogger(UsageTermUrlSet.class);
  
    private String usageTerm;
    private Set<String> urlSet = new HashSet<>();
  
    public Set<String> getUrlSet() {
      return urlSet;
    }
  
    public UsageTermUrlSet(String usageTerm) {
      this.usageTerm = usageTerm;
    }
  
    public void populateUrlsFromNameSearchResults(NameSearchResults nameSearchResults) {
      Set<SearchResult> topSearchResults = nameSearchResults.getTopSearchResults();
      if (topSearchResults == null) {
        LOGGER.debug("Top search results have not been initialized for %s", nameSearchResults.getName());
        return;
      }
      for (SearchResult searchResult : topSearchResults) {
        String description = searchResult.getDescription();
        if (description.toLowerCase().contains(usageTerm)) {
          urlSet.add(searchResult.getUrl());
        }
      }
    }
  
    public BasicDBObject getBasicDBObject() {
      BasicDBObject usageTermUrlSetBasicDBObject = new BasicDBObject("usage_term", usageTerm);
      BasicDBList urlsBasicDBList = new BasicDBList();
      for (String url : urlSet) {
        urlsBasicDBList.add(url);
      }
      usageTermUrlSetBasicDBObject.put("urls", urlsBasicDBList);
      return usageTermUrlSetBasicDBObject;
    }
  
  }
  