Refactoring of taxon business logic methods and started to write tests for these...
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / service / ITermService.java
index df63882d3b1bfa04540386d42b8e3ac514e1dcf5..0ea323f4ff34fc3071bf8ef1925932e91ae30c8c 100644 (file)
@@ -1,3 +1,4 @@
+// $Id$
 /**
 * Copyright (C) 2007 EDIT
 * European Distributed Institute of Taxonomy 
 
 package eu.etaxonomy.cdm.api.service;
 
-import java.util.Collection;
+import java.util.Enumeration;
 import java.util.List;
-import java.util.Map;
+import java.util.Locale;
 import java.util.Set;
 import java.util.UUID;
 
+import eu.etaxonomy.cdm.api.service.pager.Pager;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
-import eu.etaxonomy.cdm.model.common.TermBase;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.model.common.Language;
+import eu.etaxonomy.cdm.model.common.LanguageString;
+import eu.etaxonomy.cdm.model.common.LanguageStringBase;
+import eu.etaxonomy.cdm.model.common.Representation;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
+import eu.etaxonomy.cdm.model.location.NamedAreaType;
+import eu.etaxonomy.cdm.model.media.Media;
+import eu.etaxonomy.cdm.persistence.dao.BeanInitializer;
+import eu.etaxonomy.cdm.persistence.query.OrderHint;
 
-public interface ITermService extends IService<DefinedTermBase> {
+public interface ITermService extends IIdentifiableEntityService<DefinedTermBase> {
 
-       public abstract DefinedTermBase getTermByUri(String uri);
+       public DefinedTermBase getByUri(String uri);
 
-       public abstract DefinedTermBase getTermByUuid(UUID uuid);
-
-       public abstract TermVocabulary getVocabulary(UUID vocabularyUuid);
+       public UUID saveLanguageData(LanguageStringBase languageData);
+       
+       public List<LanguageString> getAllLanguageStrings(int limit, int start);
+       
+       public List<Representation> getAllRepresentations(int limit, int start);
+       
+       public Language getLanguageByIso(String iso639);
+       
+       public List<Language> getLanguagesByLocale(Enumeration<Locale> locales);
+       
+       public NamedArea getAreaByTdwgAbbreviation(String tdwgAbbreviation);
+       
+        /**
+     * Returns a paged list of Media that represent a given DefinedTerm instance
+     * 
+        * @param definedTerm the definedTerm represented by these media
+        * @param pageSize The maximum number of media returned (can be null for all related media)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+     * @return a Pager of media instances
+     */
+       public Pager<Media> getMedia(DefinedTermBase definedTerm, Integer pageSize, Integer pageNumber);
        
-       public abstract Set<TermVocabulary> listVocabularies(Class termClass);
-
        /**
-        * @param termBase
-        * @return
+        * Returns a paged list of NamedArea instances (optionally filtered by type or level)
+        * 
+        * @param level restrict the result set to named areas of a certain level (can be null)
+        * @param type restrict the result set to named areas of a certain type (can be null)
+        * @param pageSize The maximum number of namedAreas returned (can be null for all named areas)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+        * @return a Pager of named areas
         */
-       public abstract UUID saveTerm(DefinedTermBase termBase);
-
-       public Map<UUID, DefinedTermBase> saveTermsAll(Collection<DefinedTermBase> termBaseCollection);
+       public Pager<NamedArea> list(NamedAreaLevel level, NamedAreaType type, Integer pageSize, Integer pageNumber,  List<OrderHint> orderHints, List<String> propertyPaths);
+       
+       /**
+        * Return a paged list of terms which are specializations of a given definedTerm
+        * 
+        * @param definedTerm The term which is a generalization of the terms returned
+        * @param pageSize The maximum number of terms returned (can be null for all specializations)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+        * @return a Pager of DefinedTerms
+        */
+       public <T extends DefinedTermBase> Pager<T> getGeneralizationOf(T definedTerm, Integer pageSize, Integer pageNumber);
+       
+       /**
+        * Return a paged list of distinct terms which include the terms supplied
+        * 
+        * @param definedTerms the set of terms which are part of the terms of interest 
+        * @param pageSize The maximum number of terms returned (can be null for all terms)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+        * @param propertyPaths properties to initialize - see {@link BeanInitializer#initialize(Object, List)}
+        * @return a Pager of DefinedTerms
+        */
+       public <T extends DefinedTermBase> Pager<T> getPartOf(Set<T> definedTerms, Integer pageSize, Integer pageNumber, List<String> propertyPaths);
+       
+       /**
+        * Return a paged list of terms which are part of the terms supplied
+        * 
+        * @param definedTerms the set of terms which include the terms of interest 
+        * @param pageSize The maximum number of terms returned (can be null for all terms)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+        * @param propertyPaths properties to initialize - see {@link BeanInitializer#initialize(Object, List)}
+        * @return a Pager of DefinedTerms
+        */
+       public <T extends DefinedTermBase> Pager<T> getIncludes(Set<T> definedTerms, Integer pageSize, Integer pageNumber, List<String> propertyPaths);
 
+       /**
+        * Return a paged list of terms which have representations that match the supplied string
+        * 
+        * @param label a string to match (exactly)
+        * @param pageSize The maximum number of terms returned (can be null for all terms)
+        * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
+        * @return a Pager of DefinedTerms
+        */
+       public <T extends DefinedTermBase> Pager<T> findByRepresentationText(String label, Class<T> clazz,  Integer pageSize, Integer pageNumber);
        
+       /**
+        * 
+        * @param <TERM>
+        * @param clazz
+        * @param limit
+        * @param start
+        * @param orderHints
+        * @param propertyPaths
+        * @return
+        */
+       public <TERM extends DefinedTermBase> List<TERM> listByTermClass(Class<TERM> clazz, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths);
 }