View Javadoc
1   package fr.ifremer.reefdb.service.referential;
2   
3   /*
4    * #%L
5    * Reef DB :: Core
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   * 
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   * 
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import fr.ifremer.quadrige3.ui.core.dto.referential.StatusDTO;
27  import fr.ifremer.reefdb.dto.ParameterTypeDTO;
28  import fr.ifremer.reefdb.dto.configuration.filter.department.DepartmentCriteriaDTO;
29  import fr.ifremer.reefdb.dto.configuration.filter.location.LocationCriteriaDTO;
30  import fr.ifremer.reefdb.dto.configuration.filter.taxon.TaxonCriteriaDTO;
31  import fr.ifremer.reefdb.dto.configuration.filter.taxongroup.TaxonGroupCriteriaDTO;
32  import fr.ifremer.reefdb.dto.referential.*;
33  import fr.ifremer.reefdb.dto.referential.pmfm.*;
34  import fr.ifremer.reefdb.service.StatusFilter;
35  import org.springframework.security.access.prepost.PreAuthorize;
36  import org.springframework.transaction.annotation.Transactional;
37  
38  import java.util.Collection;
39  import java.util.List;
40  
41  /**
42   * Les sevices pour les donnees de reference.
43   */
44  @Transactional(readOnly = true)
45  public interface ReferentialService {
46  
47      // ---------- SamplingEquipmentDTO ----------
48  
49      /**
50       * La liste des engins du référentiel.
51       *
52       * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
53       * @return La liste des engins
54       */
55      List<SamplingEquipmentDTO> getSamplingEquipments(StatusFilter statusFilter);
56  
57      /**
58       * <p>saveSamplingEquipments.</p>
59       *
60       * @param samplingEquipments a {@link java.util.List} object.
61       */
62      @Transactional()
63      @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
64      void saveSamplingEquipments(List<? extends SamplingEquipmentDTO> samplingEquipments);
65  
66      /**
67       * <p>deleteSamplingEquipments.</p>
68       *
69       * @param samplingEquipmentIds a {@link java.util.List} object.
70       */
71      @Transactional()
72      @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
73      void deleteSamplingEquipments(List<Integer> samplingEquipmentIds);
74  
75      /**
76       * Check if this sampling equipment is used in data
77       * SAMPLING_OPERATION
78       *
79       * @param samplingEquipmentId a int.
80       * @return a boolean.
81       */
82      boolean isSamplingEquipmentUsedInData(int samplingEquipmentId);
83  
84      /**
85       * <p>isSamplingEquipmentUsedInValidatedData.</p>
86       *
87       * @param samplingEquipmentId a int.
88       * @return a boolean.
89       */
90      boolean isSamplingEquipmentUsedInValidatedData(int samplingEquipmentId);
91  
92      /**
93       * <p>replaceSamplingEquipment.</p>
94       *
95       * @param source a {@link fr.ifremer.reefdb.dto.referential.SamplingEquipmentDTO} object.
96       * @param target a {@link fr.ifremer.reefdb.dto.referential.SamplingEquipmentDTO} object.
97       * @param delete a boolean.
98       */
99      @Transactional()
100     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
101     void replaceSamplingEquipment(SamplingEquipmentDTO source, SamplingEquipmentDTO target, boolean delete);
102 
103     /**
104      * The search service for sampling equipment
105      *
106      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
107      * @param samplingEquipmentId a {@link java.lang.Integer} object.
108      * @param statusCode a {@link java.lang.String} object.
109      * @param unitId a {@link java.lang.Integer} object.
110      * @return A list of sampling equipment
111      */
112     List<SamplingEquipmentDTO> searchSamplingEquipments(StatusFilter statusFilter, Integer samplingEquipmentId, String statusCode, Integer unitId);
113 
114     /**
115      * <p>searchSamplingEquipments.</p>
116      *
117      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
118      * @param equipmentName a {@link java.lang.String} object.
119      * @param statusCode a {@link java.lang.String} object.
120      * @return a {@link java.util.List} object.
121      */
122     List<SamplingEquipmentDTO> searchSamplingEquipments(StatusFilter statusFilter, String equipmentName, String statusCode);
123 
124     // ---------- UnitDTO ----------
125 
126     /**
127      * La liste des unites du referential.
128      *
129      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
130      * @return La liste des unites du referential
131      */
132     List<UnitDTO> getUnits(StatusFilter statusFilter);
133 
134     /**
135      * <p>saveUnits.</p>
136      *
137      * @param units a {@link java.util.List} object.
138      */
139     @Transactional()
140     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
141     void saveUnits(List<? extends UnitDTO> units);
142 
143     /**
144      * <p>deleteUnits.</p>
145      *
146      * @param unitIds a {@link java.util.List} object.
147      */
148     @Transactional()
149     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
150     void deleteUnits(List<Integer> unitIds);
151 
152     /**
153      * <p>isUnitUsedInReferential.</p>
154      *
155      * @param unitId a int.
156      * @return a boolean.
157      */
158     boolean isUnitUsedInReferential(int unitId);
159 
160     /**
161      * <p>isUnitUsedInData.</p>
162      *
163      * @param unitId a int.
164      * @return a boolean.
165      */
166     boolean isUnitUsedInData(int unitId);
167 
168     /**
169      * <p>isUnitUsedInValidatedData.</p>
170      *
171      * @param unitId a int.
172      * @return a boolean.
173      */
174     boolean isUnitUsedInValidatedData(int unitId);
175 
176     /**
177      * <p>replaceUnit.</p>
178      *
179      * @param source a {@link fr.ifremer.reefdb.dto.referential.UnitDTO} object.
180      * @param target a {@link fr.ifremer.reefdb.dto.referential.UnitDTO} object.
181      * @param delete a boolean.
182      */
183     @Transactional()
184     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
185     void replaceUnit(UnitDTO source, UnitDTO target, boolean delete);
186 
187     /**
188      * The search service for unit
189      *
190      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
191      * @param unitId a {@link java.lang.Integer} object.
192      * @param statusCode a {@link java.lang.String} object.
193      * @return A list of unit
194      */
195     List<UnitDTO> searchUnits(StatusFilter statusFilter, Integer unitId, String statusCode);
196 
197     // ---------- PersonDTO ----------
198 
199     /**
200      * wrapped method used in referential replacement
201      *
202      * @param person a {@link fr.ifremer.reefdb.dto.referential.PersonDTO} object.
203      * @return a {@link java.util.List} object.
204      */
205     List<PersonDTO> getUsersInSameDepartment(PersonDTO person);
206 
207     /**
208      * <p>isUserUsedInProgram.</p>
209      *
210      * @param id a {@link java.lang.Integer} object.
211      * @return a boolean.
212      */
213     boolean isUserUsedInProgram(Integer id);
214 
215     /**
216      * <p>isUserUsedInRules.</p>
217      *
218      * @param id a {@link java.lang.Integer} object.
219      * @return a boolean.
220      */
221     boolean isUserUsedInRules(Integer id);
222 
223     /**
224      * <p>isUserUsedInValidatedData.</p>
225      *
226      * @param id a {@link java.lang.Integer} object.
227      * @return a boolean.
228      */
229     boolean isUserUsedInValidatedData(Integer id);
230 
231     /**
232      * wrapped method used in referential replacement
233      *
234      * @param souce a {@link fr.ifremer.reefdb.dto.referential.PersonDTO} object.
235      * @param target a {@link fr.ifremer.reefdb.dto.referential.PersonDTO} object.
236      * @param delete a boolean.
237      */
238     @Transactional()
239     void replaceUser(PersonDTO souce, PersonDTO target, boolean delete);
240 
241     // ---------- DepartmentDTO ----------
242 
243     /**
244      * La liste des libelles pour la recherche d'une date (entre, avant, apres).
245      *
246      * @return La liste des valeurs
247      */
248     List<DepartmentDTO> getDepartments();
249 
250     /**
251      * <p>getDepartments.</p>
252      *
253      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
254      * @return a {@link java.util.List} object.
255      */
256     List<DepartmentDTO> getDepartments(StatusFilter statusFilter);
257 
258     /**
259      * <p>getDepartmentById.</p>
260      *
261      * @param departmentId a int.
262      * @return a {@link fr.ifremer.reefdb.dto.referential.DepartmentDTO} object.
263      */
264     DepartmentDTO getDepartmentById(int departmentId);
265 
266     /**
267      * <p>saveDepartments.</p>
268      *
269      * @param departments a {@link List} object.
270      * @return a {@link java.util.List} object.
271      */
272     @Transactional()
273     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
274     void saveDepartments(List<DepartmentDTO> departments);
275 
276     /**
277      * <p>deleteDepartments.</p>
278      *
279      * @param departmentIds a {@link java.util.List} object.
280      */
281     @Transactional()
282     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
283     void deleteDepartments(List<Integer> departmentIds);
284 
285     /**
286      * <p>isDepartmentUsedInProgram.</p>
287      *
288      * @param departmentId a int.
289      * @return a boolean.
290      */
291     boolean isDepartmentUsedInProgram(int departmentId);
292 
293     /**
294      * <p>isDepartmentUsedInRules.</p>
295      *
296      * @param departmentId a int.
297      * @return a boolean.
298      */
299     boolean isDepartmentUsedInRules(int departmentId);
300 
301     /**
302      * <p>isDepartmentUsedInData.</p>
303      *
304      * @param departmentId a int.
305      * @return a boolean.
306      */
307     boolean isDepartmentUsedInData(int departmentId);
308 
309     /**
310      * <p>isDepartmentUsedInValidatedData.</p>
311      *
312      * @param id a {@link java.lang.Integer} object.
313      * @return a boolean.
314      */
315     boolean isDepartmentUsedInValidatedData(Integer id);
316 
317     /**
318      * <p>replaceDepartment.</p>
319      *
320      * @param source a {@link fr.ifremer.reefdb.dto.referential.DepartmentDTO} object.
321      * @param target a {@link fr.ifremer.reefdb.dto.referential.DepartmentDTO} object.
322      * @param delete a boolean.
323      */
324     @Transactional()
325     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
326     void replaceDepartment(DepartmentDTO source, DepartmentDTO target, boolean delete);
327 
328     /**
329      * Search department.
330      *
331      * @param searchCriteria a {@link fr.ifremer.reefdb.dto.configuration.filter.department.DepartmentCriteriaDTO} object.
332      * @return Department list
333      */
334     List<DepartmentDTO> searchDepartments(DepartmentCriteriaDTO searchCriteria);
335 
336     // ---------- LocationDTO ----------
337 
338     /**
339      * La liste de tous les lieux.
340      *
341      * @return Les lieux
342      */
343     List<LocationDTO> getActiveLocations();
344 
345     /**
346      * Recupere la liste des lieux du referential
347      *
348      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
349      * @return une liste de lieux du referential
350      */
351     List<LocationDTO> getLocations(StatusFilter statusFilter);
352 
353     /**
354      * le lieu selon sont identifiant
355      *
356      * @param locationId a int.
357      * @return a {@link fr.ifremer.reefdb.dto.referential.LocationDTO} object.
358      */
359     LocationDTO getLocation(int locationId);
360 
361     /**
362      * La liste des lieu selectionne suivant une campagne et un programme.
363      *
364      * @param campaignId  identifiant de la camapgne
365      * @param programCode code du programme selectionne
366      * @return La liste des lieux selectionnes
367      */
368     List<LocationDTO> getLocations(Integer campaignId, String programCode);
369 
370     /**
371      * <p>saveLocations.</p>
372      *
373      * @param locations a {@link java.util.List} object.
374      */
375     @Transactional()
376     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
377     void saveLocations(List<? extends LocationDTO> locations);
378 
379     /**
380      * <p>deleteLocations.</p>
381      *
382      * @param locationIds a {@link java.util.List} object.
383      */
384     @Transactional()
385     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
386     void deleteLocations(List<Integer> locationIds);
387 
388     /**
389      * <p>isLocationUsedInProgram.</p>
390      *
391      * @param locationId a int.
392      * @return a boolean.
393      */
394     boolean isLocationUsedInProgram(int locationId);
395 
396     /**
397      * <p>isLocationUsedInData.</p>
398      *
399      * @param locationId a int.
400      * @return a boolean.
401      */
402     boolean isLocationUsedInData(int locationId);
403 
404     /**
405      * <p>isLocationUsedInValidatedData.</p>
406      *
407      * @param locationId a int.
408      * @return a boolean.
409      */
410     boolean isLocationUsedInValidatedData(int locationId);
411 
412     /**
413      * <p>replaceLocation.</p>
414      *
415      * @param source a {@link fr.ifremer.reefdb.dto.referential.LocationDTO} object.
416      * @param target a {@link fr.ifremer.reefdb.dto.referential.LocationDTO} object.
417      * @param delete a boolean.
418      */
419     @Transactional()
420     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
421     void replaceLocation(LocationDTO source, LocationDTO target, boolean delete);
422 
423     /**
424      * <p>searchLocations.</p>
425      *
426      * @param searchCriteria a {@link fr.ifremer.reefdb.dto.configuration.filter.location.LocationCriteriaDTO} object.
427      * @return A list of Referential Location
428      */
429     List<LocationDTO> searchLocations(LocationCriteriaDTO searchCriteria);
430 
431     /**
432      * <p>getHarbours.</p>
433      *
434      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
435      * @return a {@link java.util.List} object.
436      */
437     List<HarbourDTO> getHarbours(StatusFilter statusFilter);
438 
439     // ---------- TaxonGroupDTO ----------
440 
441     /**
442      * La liste des groupes de taxons.
443      *
444      * @return La liste des groupe de taxons
445      */
446     List<TaxonGroupDTO> getTaxonGroups();
447 
448     /**
449      * Get taxon groups associated to the specified taxon at the specified date
450      *
451      * @param taxon the taxon
452      * @return the list of taxon groups
453      */
454     List<TaxonGroupDTO> getTaxonGroups(TaxonDTO taxon);
455 
456     /**
457      * <p>getTaxonGroup.</p>
458      *
459      * @param taxonGroupId a int.
460      * @return a {@link fr.ifremer.reefdb.dto.referential.TaxonGroupDTO} object.
461      */
462     TaxonGroupDTO getTaxonGroup(int taxonGroupId);
463 
464     /**
465      * Reload the initial taxon group list from cache (or db)
466      *
467      * @param taxonGroups a {@link java.util.List} object.
468      * @return a {@link java.util.List} object.
469      */
470     List<TaxonGroupDTO> getFullTaxonGroups(List<TaxonGroupDTO> taxonGroups);
471 
472     /**
473      * <p>saveTaxonGroups.</p>
474      *
475      * @param taxonGroups a {@link java.util.List} object.
476      */
477     @Transactional()
478     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
479     void saveTaxonGroups(List<? extends TaxonGroupDTO> taxonGroups);
480 
481     /**
482      * <p>deleteTaxonGroups.</p>
483      *
484      * @param taxonGroupIds a {@link java.util.List} object.
485      */
486     @Transactional()
487     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
488     void deleteTaxonGroups(List<Integer> taxonGroupIds);
489 
490     /**
491      * <p>isTaxonGroupUsedInReferential.</p>
492      *
493      * @param taxonGroupId a int.
494      * @return a boolean.
495      */
496     boolean isTaxonGroupUsedInReferential(int taxonGroupId);
497 
498     /**
499      * <p>isTaxonGroupUsedInData.</p>
500      *
501      * @param taxonGroupId a int.
502      * @return a boolean.
503      */
504     boolean isTaxonGroupUsedInData(int taxonGroupId);
505 
506     /**
507      * <p>isTaxonGroupUsedInValidatedData.</p>
508      *
509      * @param taxonGroupId a int.
510      * @return a boolean.
511      */
512     boolean isTaxonGroupUsedInValidatedData(int taxonGroupId);
513 
514     /**
515      * <p>replaceTaxonGroup.</p>
516      *
517      * @param source a {@link fr.ifremer.reefdb.dto.referential.TaxonGroupDTO} object.
518      * @param target a {@link fr.ifremer.reefdb.dto.referential.TaxonGroupDTO} object.
519      * @param delete a boolean.
520      */
521     @Transactional()
522     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
523     void replaceTaxonGroup(TaxonGroupDTO source, TaxonGroupDTO target, boolean delete);
524 
525     /**
526      * <p>searchTaxonGroups.</p>
527      *
528      * @param searchCriteria a {@link fr.ifremer.reefdb.dto.configuration.filter.taxongroup.TaxonGroupCriteriaDTO} object.
529      * @return a {@link java.util.List} object.
530      */
531     List<TaxonGroupDTO> searchTaxonGroups(TaxonGroupCriteriaDTO searchCriteria);
532 
533     // ---------- TaxonDTO ----------
534 
535     /**
536      * List of taxon name. Could be filtered by parent taxon group
537      *
538      * @param taxonGroupId the parent taxon group, or null for all taxons
539      * @return list of taxon names
540      */
541     List<TaxonDTO> getTaxons(Integer taxonGroupId);
542 
543     /**
544      * <p>getTaxon.</p>
545      *
546      * @param taxonId a int.
547      * @return a {@link fr.ifremer.reefdb.dto.referential.TaxonDTO} object.
548      */
549     TaxonDTO getTaxon(int taxonId);
550 
551     /**
552      * <p>saveTaxons.</p>
553      *
554      * @param taxons a {@link java.util.List} object.
555      */
556     @Transactional()
557     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
558     void saveTaxons(List<? extends TaxonDTO> taxons);
559 
560     /**
561      * <p>deleteTaxons.</p>
562      *
563      * @param taxonIds a {@link java.util.List} object.
564      */
565     @Transactional()
566     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
567     void deleteTaxons(List<Integer> taxonIds);
568 
569     /**
570      * <p>isTaxonNameUsedInReferential.</p>
571      *
572      * @param taxonId a int.
573      * @return a boolean.
574      */
575     boolean isTaxonNameUsedInReferential(int taxonId);
576 
577     /**
578      * <p>isTaxonNameUsedInData.</p>
579      *
580      * @param taxonId a int.
581      * @return a boolean.
582      */
583     boolean isTaxonNameUsedInData(int taxonId);
584 
585     /**
586      * <p>isTaxonNameUsedInValidatedData.</p>
587      *
588      * @param taxonId a int.
589      * @return a boolean.
590      */
591     boolean isTaxonNameUsedInValidatedData(int taxonId);
592 
593     /**
594      * <p>replaceTaxon.</p>
595      *
596      * @param source a {@link fr.ifremer.reefdb.dto.referential.TaxonDTO} object.
597      * @param target a {@link fr.ifremer.reefdb.dto.referential.TaxonDTO} object.
598      * @param delete a boolean.
599      */
600     @Transactional()
601     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
602     void replaceTaxon(TaxonDTO source, TaxonDTO target, boolean delete);
603 
604     /**
605      * <p>searchTaxons.</p>
606      *
607      * @param taxonCriteria
608      * @return a {@link java.util.List} object.
609      */
610     List<TaxonDTO> searchTaxons(TaxonCriteriaDTO taxonCriteria);
611 
612     /**
613      * Fill all properties of the taxon list
614      *
615      * @param taxons a {@link java.util.List} object.
616      */
617     void fillTaxonsProperties(List<TaxonDTO> taxons);
618 
619     /**
620      * Fill referent taxon of the taxon list
621      *
622      * @param taxons a {@link java.util.List} object.
623      */
624     void fillReferentTaxons(List<TaxonDTO> taxons);
625 
626     /**
627      * <p>getTaxonomicLevels.</p>
628      *
629      * @return a {@link java.util.List} object.
630      */
631     List<TaxonomicLevelDTO> getTaxonomicLevels();
632 
633     /**
634      * <p>getCitations.</p>
635      *
636      * @return list of taxon citations
637      */
638     List<CitationDTO> getCitations();
639 
640     // ---------- ParameterGroupDTO ----------
641 
642     /**
643      * All Pmfm parameter group.
644      *
645      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
646      * @return Pmfm parameter group list
647      */
648     List<ParameterGroupDTO> getParameterGroup(StatusFilter statusFilter);
649 
650     // ---------- ParameterDTO ----------
651 
652     /**
653      * La liste des parametres.
654      *
655      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
656      * @return Les parametres
657      */
658     List<ParameterDTO> getParameters(StatusFilter statusFilter);
659 
660     /**
661      * <p>saveParameters.</p>
662      *
663      * @param parameters a {@link java.util.List} object.
664      */
665     @Transactional()
666     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
667     void saveParameters(List<? extends ParameterDTO> parameters);
668 
669     /**
670      * <p>deleteParameters.</p>
671      *
672      * @param parametersCodes a {@link java.util.List} object.
673      */
674     @Transactional()
675     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
676     void deleteParameters(List<String> parametersCodes);
677 
678     /**
679      * <p>isParameterUsedInProgram.</p>
680      *
681      * @param parameterCode a {@link java.lang.String} object.
682      * @return a boolean.
683      */
684     boolean isParameterUsedInProgram(String parameterCode);
685 
686     /**
687      * <p>isParameterUsedInRules.</p>
688      *
689      * @param parameterCode a {@link java.lang.String} object.
690      * @return a boolean.
691      */
692     boolean isParameterUsedInRules(String parameterCode);
693 
694     /**
695      * <p>isParameterUsedInReferential.</p>
696      *
697      * @param parameterCode a {@link java.lang.String} object.
698      * @return a boolean.
699      */
700     boolean isParameterUsedInReferential(String parameterCode);
701 
702     /**
703      * <p>replaceParameter.</p>
704      *
705      * @param source a {@link fr.ifremer.reefdb.dto.referential.pmfm.ParameterDTO} object.
706      * @param target a {@link fr.ifremer.reefdb.dto.referential.pmfm.ParameterDTO} object.
707      * @param delete a boolean.
708      */
709     @Transactional()
710     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
711     void replaceParameter(ParameterDTO source, ParameterDTO target, boolean delete);
712 
713     /**
714      * All Pmfm parameter.
715      *
716      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
717      * @param parameterCode a {@link java.lang.String} object.
718      * @param statusCode a {@link java.lang.String} object.
719      * @param parameterGroup a {@link fr.ifremer.reefdb.dto.referential.pmfm.ParameterGroupDTO} object.
720      * @return Pmfm Parameter list
721      */
722     List<ParameterDTO> searchParameters(StatusFilter statusFilter, String parameterCode, String statusCode, ParameterGroupDTO parameterGroup);
723 
724     /**
725      * The parameterType list
726      *
727      * @return the parameterTypes
728      */
729     List<ParameterTypeDTO> getParameterTypes();
730 
731     // ---------- MatrixDTO ----------
732 
733     /**
734      * La liste des supports.
735      *
736      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
737      * @return Les supports
738      */
739     List<MatrixDTO> getMatrices(StatusFilter statusFilter);
740 
741     /**
742      * <p>saveMatrices.</p>
743      *
744      * @param matrices a {@link java.util.List} object.
745      */
746     @Transactional()
747     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
748     void saveMatrices(List<? extends MatrixDTO> matrices);
749 
750     /**
751      * <p>deleteMatrices.</p>
752      *
753      * @param matrixIds a {@link java.util.List} object.
754      */
755     @Transactional()
756     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
757     void deleteMatrices(List<Integer> matrixIds);
758 
759     /**
760      * <p>isMatrixUsedInProgram.</p>
761      *
762      * @param matrixId a int.
763      * @return a boolean.
764      */
765     boolean isMatrixUsedInProgram(int matrixId);
766 
767     /**
768      * <p>isMatrixUsedInRules.</p>
769      *
770      * @param matrixId a int.
771      * @return a boolean.
772      */
773     boolean isMatrixUsedInRules(int matrixId);
774 
775     /**
776      * <p>isMatrixUsedInReferential.</p>
777      *
778      * @param matrixId a int.
779      * @return a boolean.
780      */
781     boolean isMatrixUsedInReferential(int matrixId);
782 
783     /**
784      * <p>replaceMatrix.</p>
785      *
786      * @param source a {@link fr.ifremer.reefdb.dto.referential.pmfm.MatrixDTO} object.
787      * @param target a {@link fr.ifremer.reefdb.dto.referential.pmfm.MatrixDTO} object.
788      * @param delete a boolean.
789      */
790     @Transactional()
791     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
792     void replaceMatrix(MatrixDTO source, MatrixDTO target, boolean delete);
793 
794     /**
795      * All Pmfm matrice.
796      *
797      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
798      * @param matrixId a {@link java.lang.Integer} object.
799      * @param statusCode a {@link java.lang.String} object.
800      * @return Pmfm Matrice list
801      */
802     List<MatrixDTO> searchMatrices(StatusFilter statusFilter, Integer matrixId, String statusCode);
803 
804     // ---------- FractionDTO ----------
805 
806     /**
807      * La liste des fractions.
808      *
809      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
810      * @return Les fractions
811      */
812     List<FractionDTO> getFractions(StatusFilter statusFilter);
813 
814     /**
815      * <p>saveFractions.</p>
816      *
817      * @param fractions a {@link java.util.List} object.
818      */
819     @Transactional()
820     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
821     void saveFractions(List<? extends FractionDTO> fractions);
822 
823     /**
824      * <p>deleteFractions.</p>
825      *
826      * @param fractionIds a {@link java.util.List} object.
827      */
828     @Transactional()
829     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
830     void deleteFractions(List<Integer> fractionIds);
831 
832     /**
833      * <p>isFractionUsedInProgram.</p>
834      *
835      * @param fractionId a int.
836      * @return a boolean.
837      */
838     boolean isFractionUsedInProgram(int fractionId);
839 
840     /**
841      * <p>isFractionUsedInRules.</p>
842      *
843      * @param fractionId a int.
844      * @return a boolean.
845      */
846     boolean isFractionUsedInRules(int fractionId);
847 
848     /**
849      * <p>isFractionUsedInReferential.</p>
850      *
851      * @param fractionId a int.
852      * @return a boolean.
853      */
854     boolean isFractionUsedInReferential(int fractionId);
855 
856     /**
857      * <p>replaceFraction.</p>
858      *
859      * @param source a {@link fr.ifremer.reefdb.dto.referential.pmfm.FractionDTO} object.
860      * @param target a {@link fr.ifremer.reefdb.dto.referential.pmfm.FractionDTO} object.
861      * @param delete a boolean.
862      */
863     @Transactional()
864     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
865     void replaceFraction(FractionDTO source, FractionDTO target, boolean delete);
866 
867     /**
868      * All Pmfm fraction.
869      *
870      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
871      * @param fractionId a {@link java.lang.Integer} object.
872      * @param statusCode a {@link java.lang.String} object.
873      * @return Pmfm Fraction list
874      */
875     List<FractionDTO> searchFractions(StatusFilter statusFilter, Integer fractionId, String statusCode);
876 
877     // ---------- MethodDTO ----------
878 
879     /**
880      * La liste des methodes.
881      *
882      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
883      * @return Les methodes
884      */
885     List<MethodDTO> getMethods(StatusFilter statusFilter);
886 
887     /**
888      * <p>saveMethods.</p>
889      *
890      * @param methods a {@link java.util.List} object.
891      */
892     @Transactional()
893     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
894     void saveMethods(List<? extends MethodDTO> methods);
895 
896     /**
897      * <p>deleteMethods.</p>
898      *
899      * @param methodIds a {@link java.util.List} object.
900      */
901     @Transactional()
902     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
903     void deleteMethods(List<Integer> methodIds);
904 
905     /**
906      * <p>isMethodUsedInProgram.</p>
907      *
908      * @param methodId a int.
909      * @return a boolean.
910      */
911     boolean isMethodUsedInProgram(int methodId);
912 
913     /**
914      * <p>isMethodUsedInRules.</p>
915      *
916      * @param methodId a int.
917      * @return a boolean.
918      */
919     boolean isMethodUsedInRules(int methodId);
920 
921     /**
922      * <p>isMethodUsedInReferential.</p>
923      *
924      * @param methodId a int.
925      * @return a boolean.
926      */
927     boolean isMethodUsedInReferential(int methodId);
928 
929     /**
930      * <p>replaceMethod.</p>
931      *
932      * @param source a {@link fr.ifremer.reefdb.dto.referential.pmfm.MethodDTO} object.
933      * @param target a {@link fr.ifremer.reefdb.dto.referential.pmfm.MethodDTO} object.
934      * @param delete a boolean.
935      */
936     @Transactional()
937     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
938     void replaceMethod(MethodDTO source, MethodDTO target, boolean delete);
939 
940     /**
941      * All Pmfm method.
942      *
943      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
944      * @param methodId a {@link java.lang.Integer} object.
945      * @param statusCode a {@link java.lang.String} object.
946      * @return Pmfm Method list
947      */
948     List<MethodDTO> searchMethods(StatusFilter statusFilter, Integer methodId, String statusCode);
949 
950     // ---------- PmfmDTO ----------
951 
952     /**
953      * The quadruplet list
954      *
955      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
956      * @return the quadruplets
957      */
958     List<PmfmDTO> getPmfms(StatusFilter statusFilter);
959 
960     /**
961      * <p>getPmfm.</p>
962      *
963      * @param pmfmId a int.
964      * @return a {@link fr.ifremer.reefdb.dto.referential.pmfm.PmfmDTO} object.
965      */
966     PmfmDTO getPmfm(int pmfmId);
967 
968     /**
969      * <p>savePmfms.</p>
970      *
971      * @param pmfms a {@link java.util.List} object.
972      */
973     @Transactional()
974     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
975     void savePmfms(List<? extends PmfmDTO> pmfms);
976 
977     /**
978      * <p>deletePmfms.</p>
979      *
980      * @param pmfmIds a {@link java.util.List} object.
981      */
982     @Transactional()
983     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
984     void deletePmfms(List<Integer> pmfmIds);
985 
986     /**
987      * <p>isPmfmUsedInData.</p>
988      *
989      * @param pmfmId a int.
990      * @return a boolean.
991      */
992     boolean isPmfmUsedInData(int pmfmId);
993 
994     /**
995      * <p>isPmfmUsedInValidatedData.</p>
996      *
997      * @param pmfmId a int.
998      * @return a boolean.
999      */
1000     boolean isPmfmUsedInValidatedData(int pmfmId);
1001 
1002     /**
1003      * <p>isPmfmUsedInProgram.</p>
1004      *
1005      * @param pmfmId a int.
1006      * @return a boolean.
1007      */
1008     boolean isPmfmUsedInProgram(int pmfmId);
1009 
1010     /**
1011      * <p>isPmfmUsedInRules.</p>
1012      *
1013      * @param pmfmId a int.
1014      * @return a boolean.
1015      */
1016     boolean isPmfmUsedInRules(int pmfmId);
1017 
1018     /**
1019      * <p>replacePmfm.</p>
1020      *
1021      * @param source a {@link fr.ifremer.reefdb.dto.referential.pmfm.PmfmDTO} object.
1022      * @param target a {@link fr.ifremer.reefdb.dto.referential.pmfm.PmfmDTO} object.
1023      * @param delete a boolean.
1024      */
1025     @Transactional()
1026     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
1027     void replacePmfm(PmfmDTO source, PmfmDTO target, boolean delete);
1028 
1029     /**
1030      * <p>searchPmfms.</p>
1031      *
1032      * @param statusFilter a {@link StatusFilter} object.
1033      * @param parameterCode a {@link String} object.
1034      * @param matrixId a {@link Integer} object.
1035      * @param fractionId a {@link Integer} object.
1036      * @param methodId a {@link Integer} object.
1037      * @param unitId
1038      * @param pmfmName a {@link String} object.
1039      * @param statusCode a {@link String} object.
1040      * @return a {@link java.util.List} object.
1041      */
1042     List<PmfmDTO> searchPmfms(StatusFilter statusFilter, String parameterCode, Integer matrixId, Integer fractionId, Integer methodId, Integer unitId, String pmfmName, String statusCode);
1043 
1044     // ---------- AnalysisInstrumentDTO ----------
1045 
1046     /**
1047      * The list of Analysis Instruments
1048      *
1049      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
1050      * @return The list of Analysis Instruments
1051      */
1052     List<AnalysisInstrumentDTO> getAnalysisInstruments(StatusFilter statusFilter);
1053 
1054     /**
1055      * <p>saveAnalysisInstruments.</p>
1056      *
1057      * @param analysisInstruments a {@link java.util.List} object.
1058      */
1059     @Transactional()
1060     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
1061     void saveAnalysisInstruments(List<? extends AnalysisInstrumentDTO> analysisInstruments);
1062 
1063     /**
1064      * <p>deleteAnalysisInstruments.</p>
1065      *
1066      * @param analysisInstrumentIds a {@link java.util.List} object.
1067      */
1068     @Transactional()
1069     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
1070     void deleteAnalysisInstruments(List<Integer> analysisInstrumentIds);
1071 
1072     /**
1073      * Check if this analysis instrument is used in data
1074      * MEASUREMENT, TAXON_MEASUREMENT, TODO MEASUREMENT_FILE
1075      *
1076      * @param analysisInstrumentId a int.
1077      * @return a boolean.
1078      */
1079     boolean isAnalysisInstrumentUsedInData(int analysisInstrumentId);
1080 
1081     /**
1082      * Check if this analysis instrument is used in validated data
1083      * MEASUREMENT, TAXON_MEASUREMENT, TODO MEASUREMENT_FILE
1084      *
1085      * @param analysisInstrumentId a int.
1086      * @return a boolean.
1087      */
1088     boolean isAnalysisInstrumentUsedInValidatedData(int analysisInstrumentId);
1089 
1090     /**
1091      * Check if this analysis instrument is used in strategy
1092      * PMFM_APPLIED_STRATEGY
1093      *
1094      * @param analysisInstrumentId a int.
1095      * @return a boolean.
1096      */
1097     boolean isAnalysisInstrumentUsedInProgram(int analysisInstrumentId);
1098 
1099     /**
1100      * <p>replaceAnalysisInstrument.</p>
1101      *
1102      * @param source a {@link fr.ifremer.reefdb.dto.referential.AnalysisInstrumentDTO} object.
1103      * @param target a {@link fr.ifremer.reefdb.dto.referential.AnalysisInstrumentDTO} object.
1104      * @param delete a boolean.
1105      */
1106     @Transactional()
1107     @PreAuthorize("hasPermission(null, T(fr.ifremer.quadrige3.core.security.QuadrigeUserAuthority).USER)")
1108     void replaceAnalysisInstrument(AnalysisInstrumentDTO source, AnalysisInstrumentDTO target, boolean delete);
1109 
1110     /**
1111      * The search service for analysis instrument
1112      *
1113      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
1114      * @param analysisInstrumentId a {@link java.lang.Integer} object.
1115      * @param statusCode a {@link java.lang.String} object.
1116      * @return A list of analysis instruments
1117      */
1118     List<AnalysisInstrumentDTO> searchAnalysisInstruments(StatusFilter statusFilter, Integer analysisInstrumentId, String statusCode);
1119 
1120     /**
1121      * <p>searchAnalysisInstruments.</p>
1122      *
1123      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
1124      * @param instrumentName a {@link java.lang.String} object.
1125      * @return a {@link java.util.List} object.
1126      */
1127     List<AnalysisInstrumentDTO> searchAnalysisInstruments(StatusFilter statusFilter, String instrumentName);
1128 
1129     // ---------- MISC. ----------
1130 
1131     /**
1132      * La liste des systemes de positionnement
1133      *
1134      * @return La liste des systemes de positionnement
1135      */
1136     List<PositioningSystemDTO> getPositioningSystems();
1137 
1138     /**
1139      * La liste des niveaux.
1140      *
1141      * @return La liste des niveaux
1142      */
1143     List<LevelDTO> getLevels();
1144 
1145     /**
1146      * La liste des profondeurs.
1147      *
1148      * @return Les profondeurs
1149      */
1150     List<DepthDTO> getDepths();
1151 
1152     /**
1153      * The list of referential status
1154      *
1155      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
1156      * @return the list of referential status
1157      */
1158     List<StatusDTO> getStatus(StatusFilter statusFilter);
1159 
1160     /**
1161      * The list of Quality Levels
1162      *
1163      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
1164      * @return The list of Quality Levels
1165      */
1166     List<QualityLevelDTO> getQualityLevels(StatusFilter statusFilter);
1167 
1168     /**
1169      * The search service for quality level
1170      *
1171      * @param statusFilter a {@link fr.ifremer.reefdb.service.StatusFilter} object.
1172      * @param qualityLevelCode a {@link java.lang.String} object.
1173      * @param statusCode a {@link java.lang.String} object.
1174      * @return A list of quality level
1175      */
1176     List<QualityLevelDTO> searchQualityLevels(StatusFilter statusFilter, String qualityLevelCode, String statusCode);
1177 
1178     /**
1179      * The service for grouping type
1180      *
1181      * @return A list of grouping type
1182      */
1183     List<GroupingTypeDTO> getGroupingTypes();
1184 
1185     /**
1186      * <p>getPhotoTypes.</p>
1187      *
1188      * @return a {@link java.util.List} object.
1189      */
1190     List<PhotoTypeDTO> getPhotoTypes();
1191 
1192     /**
1193      * Return the unique pmfm id from the quadruplet in the parameter pmfm
1194      *
1195      * @param pmfm the pmfm filter
1196      * @return the pmfm id
1197      */
1198     Integer getUniquePmfmIdFromPmfm(PmfmDTO pmfm);
1199 
1200     /**
1201      * Return the unique pmfm from the quadruplet in the parameter pmfm
1202      *
1203      * @param pmfm the pmfm filter
1204      * @return the pmfm
1205      */
1206     PmfmDTO getUniquePmfmFromPmfm(PmfmDTO pmfm);
1207 
1208     // ---------- QualitativeValueDTO ----------
1209 
1210     /**
1211      * Get the qualitative value by its Id
1212      *
1213      * @param qualitativeValueId the qualitative value id
1214      * @return Qualitative Value
1215      */
1216     QualitativeValueDTO getQualitativeValue(int qualitativeValueId);
1217 
1218     List<QualitativeValueDTO> getQualitativeValues(Collection<Integer> qualitativeValueIds);
1219 
1220     List<QualitativeValueDTO> getQualitativeValues(String parameterCode);
1221 }
1222 
1223