content: package org.alien4cloud.tosca.catalog.index;
  
  import java.util.Map;
  
  import org.alien4cloud.tosca.model.templates.Topology;
  
  import alien4cloud.dao.model.FacetedSearchResult;
  import alien4cloud.plugin.aop.Overridable;
  
  /**
   * Interface for the TopologyCatalogService to allow jdk dynamic proxy.
   */
  public interface ITopologyCatalogService {
      /**
       * Creates a topology and register it as a template in the catalog
       *
       * @param name The name of the topology template
       * @param description The description of the topology template
       * @param version The version of the topology
       * @param workspace The workspace in which to create the topology.
       * @param fromTopologyId The id of an existing topology to use to create the new topology.
       * @return The @{@link Topology} newly created
       */
      Topology createTopologyAsTemplate(String name, String description, String version, String workspace, String fromTopologyId);
  
      /**
       * Get all topologies matching the given set of filters.
       *
       * @param filters The filters to query the topologies.
       * @param archiveName The name of the related archive
       * @return Return the matching
       */
      Topology[] getAll(Map<String, String[]> filters, String archiveName);
  
      /**
       * Get a single topology from it's id or throw a NotFoundException.
       *
       * @param id The id of the topology to look for.
       * @return The topology matching the requested id.
       */
      Topology getOrFail(String id);
  
      /**
       * Get a single topology from it's id or null if it does not exists.
       *
       * @param id The id of the topology to look for.
       * @return The topology matching the requested id or null if not found.
       */
      Topology get(String id);
  
      /**
       * Return true if the given id exists.
       *
       * @param id The id to check.
       * @return True if a topology with the given id exists, false if not.
       */
      boolean exists(String id);
  
      /**
       * Search for Abstract tosca types in the catalog.
       *
       * @param clazz The class to search for.
       * @param query The text query.
       * @param size The size of the query.
       * @param filters Filters.
       * @return A faceted search result that provides both result data and facets.
       */
      @Overridable
      FacetedSearchResult search(Class<? extends Topology> clazz, String query, Integer size, Map<String, String[]> filters);
  }
  