content: package alien4cloud.component;
  
  import java.util.Set;
  
  import org.alien4cloud.tosca.model.CSARDependency;
  import org.alien4cloud.tosca.model.Csar;
  import org.alien4cloud.tosca.model.types.AbstractToscaType;
  
  import alien4cloud.exception.NotFoundException;
  
  /**
   * Service interface to search elements in CSARs.
   */
  public interface ICSARRepositorySearchService {
  
      /**
       * Get an archive from it's id.
       *
       * @param archiveName The name of the archive.
       * @param archiveVersion The version of the archive.
       * @return The cloud service archive matching the given id.
       */
      Csar getArchive(String archiveName, String archiveVersion);
  
      /**
       * Check if an element exists in the given dependencies.
       *
       * @param elementClass The element class.
       * @param elementId The TOSCA element id of the element (without archive version).
       * @param dependencies A list of CSAR in which the element may be defined.
       * @return True if the element is found, false if not.
       */
      boolean isElementExistInDependencies(Class<? extends AbstractToscaType> elementClass, String elementId, Set<CSARDependency> dependencies);
  
      /**
       * Get an element from defined dependencies.
       *
       * @param elementClass The element class.
       * @param dependencies A list of CSAR in which the element may be defined.
       * @param keyValueFilters List of key1, value1, key2, value2 to add term filters to the query for each dependency.
       * @return The requested element or null if the element is not found.
       */
      <T extends AbstractToscaType> T getElementInDependencies(Class<T> elementClass, Set<CSARDependency> dependencies, String... keyValueFilters);
  
      /**
       * Get an element from defined dependencies.
       *
       * @param elementClass The element class.
       * @param elementId The TOSCA element id of the element (without archive version).
       * @param dependencies A list of CSAR in which the element may be defined.
       * @return The requested element or null if the element is not found.
       */
      <T extends AbstractToscaType> T getElementInDependencies(Class<T> elementClass, String elementId, Set<CSARDependency> dependencies);
  
      /**
       * Get an element from defined dependencies.
       *
       * @param elementClass The element class.
       * @param elementId The TOSCA element id of the element (without archive version).
       * @param dependencies A list of CSAR in which the element may be defined.
       * @return The requested element. The method must throw an {@link NotFoundException}.
       * @throws NotFoundException in case the element cannot be found.
       */
      <T extends AbstractToscaType> T getRequiredElementInDependencies(Class<T> elementClass, String elementId, Set<CSARDependency> dependencies)
              throws NotFoundException;
  }