3 * Copyright (C) 2009 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.cdm
.api
.service
;
13 import java
.io
.IOException
;
14 import java
.util
.Collection
;
15 import java
.util
.List
;
17 import java
.util
.UUID
;
19 import org
.apache
.lucene
.index
.CorruptIndexException
;
20 import org
.apache
.lucene
.queryParser
.ParseException
;
21 import org
.hibernate
.search
.spatial
.impl
.Rectangle
;
23 import eu
.etaxonomy
.cdm
.api
.facade
.DerivedUnitFacade
;
24 import eu
.etaxonomy
.cdm
.api
.facade
.DerivedUnitFacadeNotSupportedException
;
25 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
26 import eu
.etaxonomy
.cdm
.api
.service
.search
.SearchResult
;
27 import eu
.etaxonomy
.cdm
.api
.service
.util
.TaxonRelationshipEdge
;
28 import eu
.etaxonomy
.cdm
.model
.common
.ICdmBase
;
29 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
30 import eu
.etaxonomy
.cdm
.model
.common
.UuidAndTitleCache
;
31 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionBase
;
32 import eu
.etaxonomy
.cdm
.model
.description
.IndividualsAssociation
;
33 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
34 import eu
.etaxonomy
.cdm
.model
.location
.Country
;
35 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
36 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
37 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
38 import eu
.etaxonomy
.cdm
.model
.name
.HomotypicalGroup
;
39 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignation
;
40 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
41 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
42 import eu
.etaxonomy
.cdm
.model
.occurrence
.DeterminationEvent
;
43 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldUnit
;
44 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
45 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
46 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
47 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationship
;
48 import eu
.etaxonomy
.cdm
.persistence
.dao
.initializer
.IBeanInitializer
;
49 import eu
.etaxonomy
.cdm
.persistence
.query
.OrderHint
;
52 * @author a.babadshanjan
55 public interface IOccurrenceService
extends IIdentifiableEntityService
<SpecimenOrObservationBase
> {
57 public Country
getCountryByIso(String iso639
);
59 public List
<Country
> getCountryByName(String name
);
62 * Returns a paged list of occurrences that have been determined to belong
63 * to the taxon concept determinedAs, optionally restricted to objects
64 * belonging to a class that that extends SpecimenOrObservationBase.
66 * In contrast to {@link #listByAnyAssociation(Class, Taxon, List)} this
67 * method only takes SpecimenOrObservationBase instances into account which
68 * are actually determined as the taxon specified by
69 * <code>determinedAs</code>.
72 * The type of entities to return (can be null to count all
73 * entities of type <T>)
75 * the taxon concept that the occurrences have been determined to
78 * The maximum number of objects returned (can be null for all
81 * The offset (in pageSize chunks) from the start of the result
82 * set (0 - based, can be null, equivalent of starting at the
83 * beginning of the recordset)
85 * Supports path like <code>orderHints.propertyNames</code> which
86 * include *-to-one properties like createdBy.username or
87 * authorTeam.persistentTitleCache
88 * @param propertyPaths
89 * properties to be initialized
92 public Pager
<SpecimenOrObservationBase
> list(Class
<?
extends SpecimenOrObservationBase
> type
, TaxonBase determinedAs
, Integer limit
, Integer start
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
);
95 * Returns a List of Media that are associated with a given occurence
97 * @param occurence the occurence associated with these media
98 * @param pageSize The maximum number of media returned (can be null for all related media)
99 * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
100 * @param propertyPaths properties to initialize - see {@link IBeanInitializer#initialize(Object, List)}
101 * @return a Pager of media instances
103 public Pager
<Media
> getMedia(SpecimenOrObservationBase occurence
, Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
);
106 * Returns a count of determinations that have been made for a given occurence and for a given taxon concept
108 * @param occurence the occurence associated with these determinations (can be null for all occurrences)
109 * @param taxonbase the taxon concept associated with these determinations (can be null for all taxon concepts)
110 * @return a count of determination events
112 public int countDeterminations(SpecimenOrObservationBase occurence
,TaxonBase taxonbase
);
115 * Returns a List of determinations that have been made for a given occurence
117 * @param occurence the occurence associated with these determinations (can be null for all occurrences)
118 * @param taxonbase the taxon concept associated with these determinations (can be null for all taxon concepts)
119 * @param pageSize The maximum number of determinations returned (can be null for all related determinations)
120 * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
121 * @return a Pager of determination instances
123 public Pager
<DeterminationEvent
> getDeterminations(SpecimenOrObservationBase occurence
, TaxonBase taxonBase
, Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
);
126 * Returns a list of derivation events that have involved creating new DerivedUnits from this occurence
128 * @param occurence the occurence that was a source of these derivation events
129 * @param pageSize The maximum number of derivation events returned (can be null for all related derivation events)
130 * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
131 * @return a Pager of derivation events
133 public Pager
<DerivationEvent
> getDerivationEvents(SpecimenOrObservationBase occurence
, Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
);
136 * Returns a Paged List of SpecimenOrObservationBase instances where the default field matches the String queryString (as interpreted by the Lucene QueryParser)
138 * @param clazz filter the results by class (or pass null to return all SpecimenOrObservationBase instances)
140 * @param pageSize The maximum number of occurrences returned (can be null for all matching occurrences)
141 * @param pageNumber The offset (in pageSize chunks) from the start of the result set (0 - based)
143 * Supports path like <code>orderHints.propertyNames</code> which
144 * include *-to-one properties like createdBy.username or
145 * authorTeam.persistentTitleCache
146 * @param propertyPaths properties to be initialized
147 * @return a Pager SpecimenOrObservationBase instances
148 * @see <a href="http://lucene.apache.org/java/2_4_0/queryparsersyntax.html">Apache Lucene - Query Parser Syntax</a>
151 public Pager
<SpecimenOrObservationBase
> search(Class
<?
extends SpecimenOrObservationBase
> clazz
, String query
, Integer pageSize
,Integer pageNumber
, List
<OrderHint
> orderHints
,List
<String
> propertyPaths
);
154 * Retrieves the {@link UUID} and the string representation (title cache) of all
155 * {@link FieldUnit}s found in the data base.
156 * @return a list of {@link UuidAndTitleCache}
158 public List
<UuidAndTitleCache
<FieldUnit
>> getFieldUnitUuidAndTitleCache();
161 * Retrieves the {@link UUID} and the string representation (title cache) of all
162 * {@link DerivedUnit}s found in the data base.
163 * @return a list of {@link UuidAndTitleCache}
165 public List
<UuidAndTitleCache
<DerivedUnit
>> getDerivedUnitUuidAndTitleCache();
167 public DerivedUnitFacade
getDerivedUnitFacade(DerivedUnit derivedUnit
, List
<String
> propertyPaths
) throws DerivedUnitFacadeNotSupportedException
;
169 public List
<DerivedUnitFacade
> listDerivedUnitFacades(DescriptionBase description
, List
<String
> propertyPaths
);
172 * Lists all instances of {@link SpecimenOrObservationBase} which are
173 * associated with the <code>taxon</code> specified as parameter.
174 * SpecimenOrObservationBase instances can be associated to taxa in multiple
175 * ways, all these possible relations are taken into account:
177 * <li>The {@link IndividualsAssociation} elements in a
178 * {@link TaxonDescription} contain {@link DerivedUnit}s</li>
179 * <li>{@link SpecimenTypeDesignation}s may be associated with any
180 * {@link HomotypicalGroup} related to the specific {@link Taxon}.</li>
181 * <li>A {@link Taxon} may be referenced by the {@link DeterminationEvent}
182 * of the {@link SpecimenOrObservationBase}</li>
184 * Further more there also can be taxa which are associated with the taxon
185 * in question (parameter associatedTaxon) by {@link TaxonRelationship}s. If
186 * the parameter <code>includeRelationships</code> is containing elements,
187 * these according {@TaxonRelationshipType}s and
188 * directional information will be used to collect further
189 * {@link SpecimenOrObservationBase} instances found this way.
193 * @param associatedTaxon
194 * @param Set<TaxonRelationshipVector> includeRelationships. TaxonRelationships will not be taken into account if this is <code>NULL</code>.
195 * @param maxDepth TODO
199 * @param propertyPaths
202 public <T
extends SpecimenOrObservationBase
> List
<T
> listByAssociatedTaxon(Class
<T
> type
, Set
<TaxonRelationshipEdge
> includeRelationships
,
203 Taxon associatedTaxon
, Integer maxDepth
, Integer pageSize
, Integer pageNumber
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
);
206 * See {@link #listByAssociatedTaxon(Class, Set, Taxon, Integer, Integer, Integer, List, List)}
209 * @param includeRelationships
210 * @param associatedTaxon
215 * @param propertyPaths
218 public <T
extends SpecimenOrObservationBase
> Pager
<T
> pageByAssociatedTaxon(Class
<T
> type
, Set
<TaxonRelationshipEdge
> includeRelationships
,
219 Taxon associatedTaxon
, Integer maxDepth
, Integer pageSize
, Integer pageNumber
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
);
222 * Retrieves all {@link FieldUnit}s for the {@link DerivedUnit} with the given {@link UUID}.<br>
223 * @param derivedUnitUuid the UUID of the derived unit
224 * @return a collection of FieldUnits this DerivedUnit was derived from or an empty collection if no FieldUnits were found
226 public Collection
<FieldUnit
> getFieldUnits(UUID derivedUnitUuid
);
232 * @param highlightFragments
236 * @param propertyPaths
238 * @throws CorruptIndexException
239 * @throws IOException
240 * @throws ParseException
242 Pager
<SearchResult
<SpecimenOrObservationBase
>> findByFullText(Class
<?
extends SpecimenOrObservationBase
> clazz
,
243 String queryString
, Rectangle boundingBox
, List
<Language
> languages
, boolean highlightFragments
, Integer pageSize
,
244 Integer pageNumber
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
) throws CorruptIndexException
,
245 IOException
, ParseException
;
247 * See {@link #listByAssociatedTaxon(Class, Set, String, Integer, Integer, Integer, List, List)}
250 * @param includeRelationships
251 * @param associatedTaxon
256 * @param propertyPaths
259 public <T
extends SpecimenOrObservationBase
> Pager
<T
> pageByAssociatedTaxon(Class
<T
> type
, Set
<TaxonRelationshipEdge
> includeRelationships
,
260 String taxonUUID
, Integer maxDepth
, Integer pageSize
, Integer pageNumber
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
);
263 * Moves the given {@link Sequence} from one {@link DnaSample} to another
264 * @param from the DnaSample from which the sequence will be removed
265 * @param to the DnaSample which to which the sequence will be added
266 * @param sequence the Sequence to move
267 * @return <code>true</code> if successfully moved, <code>false</code> otherwise
269 public boolean moveSequence(DnaSample from
, DnaSample to
, Sequence sequence
);
272 * Moves the given {@link DerivedUnit} from one {@link SpecimenOrObservationBase} to another.
273 * @param from the SpecimenOrObservationBase from which the DerivedUnit will be removed
274 * @param to the SpecimenOrObservationBase to which the DerivedUnit will be added
275 * @param derivate the DerivedUnit to move
276 * @return <code>true</code> if successfully moved, <code>false</code> otherwise
278 public boolean moveDerivate(SpecimenOrObservationBase
<?
> from
, SpecimenOrObservationBase
<?
> to
, DerivedUnit derivate
);
281 * Returns a collection of {@link ICdmBase}s that are not persisted via cascading when saving the given specimen (mostly DefinedTerms).
282 * @param specimen the specimen that is checked for non-cascaded elements.
283 * @return collection of non-cascaded element associated with the specimen
285 public Collection
<ICdmBase
> getNonCascadedAssociatedElements(SpecimenOrObservationBase
<?
> specimen
);