View Javadoc
1   package fr.ifremer.tutti.persistence.service.util;
2   
3   /*
4    * #%L
5    * Tutti :: Persistence
6    * %%
7    * Copyright (C) 2012 - 2014 Ifremer
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU General Public License as
11   * published by the Free Software Foundation, either version 3 of the 
12   * License, or (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU General Public 
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/gpl-3.0.html>.
22   * #L%
23   */
24  
25  import fr.ifremer.adagio.core.dao.administration.user.Person;
26  import fr.ifremer.adagio.core.dao.administration.user.PersonImpl;
27  import fr.ifremer.adagio.core.dao.data.operation.FishingOperation;
28  import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip;
29  import fr.ifremer.adagio.core.dao.data.vessel.feature.person.VesselPersonFeatures;
30  import fr.ifremer.adagio.core.dao.referential.VesselPersonRole;
31  import fr.ifremer.adagio.core.dao.referential.VesselPersonRoleId;
32  import fr.ifremer.adagio.core.dao.referential.VesselPersonRoleImpl;
33  import fr.ifremer.tutti.persistence.service.AbstractPersistenceService;
34  import org.apache.commons.logging.Log;
35  import org.apache.commons.logging.LogFactory;
36  import org.springframework.stereotype.Component;
37  
38  import java.util.Date;
39  import java.util.Map;
40  
41  /**
42   * Helper around {@link VesselPersonFeatures}.
43   *
44   * @author Tony Chemit - chemit@codelutin.com
45   * @since 2.0
46   */
47  @Component("vesselPersonFeaturesPersistenceHelper")
48  public class VesselPersonFeaturesPersistenceHelper extends AbstractPersistenceService {
49  
50      /** Logger. */
51      private static final Log log =
52              LogFactory.getLog(VesselPersonFeaturesPersistenceHelper.class);
53  
54      public VesselPersonFeaturesPersistenceHelper() {
55      }
56  
57      public VesselPersonRole getScientificCruiseManagerRole() {
58          return load(VesselPersonRoleImpl.class, VesselPersonRoleId.SCIENTIFIC_CRUISE_MANAGER.getValue());
59      }
60  
61      public VesselPersonRole getSortRoomManagerRole() {
62          return load(VesselPersonRoleImpl.class, VesselPersonRoleId.SORT_ROOM_MANAGER.getValue());
63      }
64  
65      public VesselPersonRole getRecorderPersonRole() {
66          return load(VesselPersonRoleImpl.class, VesselPersonRoleId.RECORDER_PERSON.getValue());
67      }
68  
69      public void fillVesselPersonFeatures(Map<Integer, VesselPersonFeatures> vesselPersonFeaturesPerPerson,
70                                           Integer personId,
71                                           FishingTrip fishingTrip,
72                                           VesselPersonRole role,
73                                           short rankOrder) {
74  
75          VesselPersonFeatures vesselPersonFeatures =
76                  vesselPersonFeaturesPerPerson.get(personId);
77          if (vesselPersonFeatures == null) {
78  
79              PersonImpl person = load(PersonImpl.class, personId);
80  
81              if (log.isDebugEnabled()) {
82                  log.debug("Create an new vesselPersonFeatures for person: [" + personId + "]" + person.getFirstname() + " - " + person.getLastname());
83              }
84  
85              vesselPersonFeatures = VesselPersonFeatures.Factory.newInstance();
86              vesselPersonFeaturesPerPerson.put(personId, vesselPersonFeatures);
87              vesselPersonFeatures.setPerson(person);
88  
89              vesselPersonFeatures.setFishingTrip(fishingTrip);
90              vesselPersonFeatures.setStartDate(fishingTrip.getDepartureDateTime());
91              vesselPersonFeatures.setEndDate(fishingTrip.getReturnDateTime());
92              vesselPersonFeatures.setVessel(fishingTrip.getVessel());
93              vesselPersonFeatures.setProgram(fishingTrip.getProgram());
94  
95              vesselPersonFeatures.setCreationDate(fishingTrip.getCreationDate());
96              vesselPersonFeatures.setQualityFlag(fishingTrip.getQualityFlag());
97              vesselPersonFeatures.setRankOrder(rankOrder);
98          }
99  
100         addRole(role, vesselPersonFeatures);
101     }
102 
103     public void fillVesselPersonFeatures(Map<Integer, VesselPersonFeatures> vesselPersonFeaturesPerPerson,
104                                          Integer personId,
105                                          FishingOperation fishingOperation,
106                                          VesselPersonRole role,
107                                          short rankOrder) {
108 
109         VesselPersonFeatures vesselPersonFeatures =
110                 vesselPersonFeaturesPerPerson.get(personId);
111         if (vesselPersonFeatures == null) {
112 
113             PersonImpl person = load(PersonImpl.class, personId);
114             if (log.isDebugEnabled()) {
115                 log.debug("Create an new vesselPersonFeatures for person: [" + personId + "]" + person.getFirstname() + " - " + person.getLastname());
116             }
117 
118             vesselPersonFeatures = VesselPersonFeatures.Factory.newInstance();
119             vesselPersonFeaturesPerPerson.put(personId, vesselPersonFeatures);
120             vesselPersonFeatures.setOperation(fishingOperation);
121             vesselPersonFeatures.setPerson(person);
122             vesselPersonFeatures.setStartDate(fishingOperation.getStartDateTime());
123             vesselPersonFeatures.setEndDate(fishingOperation.getEndDateTime());
124             vesselPersonFeatures.setVessel(fishingOperation.getVessel());
125             vesselPersonFeatures.setProgram(fishingOperation.getFishingTrip().getProgram());
126 
127             vesselPersonFeatures.setCreationDate(new Date());
128             vesselPersonFeatures.setQualityFlag(fishingOperation.getQualityFlag());
129             vesselPersonFeatures.setRankOrder(rankOrder);
130         }
131 
132         addRole(role, vesselPersonFeatures);
133     }
134 
135     protected void addRole(VesselPersonRole role,
136                            VesselPersonFeatures vesselPersonFeatures) {
137         Person person = vesselPersonFeatures.getPerson();
138         if (vesselPersonFeatures.getVesselPersonRoles().contains(role)) {
139             if (log.isWarnEnabled()) {
140                 log.warn("vessel person feature for person: " + person.getId() + " with role: " + role.getName() + " already exist, do not add it twice.");
141             }
142         } else {
143 
144             // add this new role
145             if (log.isInfoEnabled()) {
146                 log.info("Add vessel person feature for person: " + person.getId() + " with role: " + role.getName());
147             }
148             vesselPersonFeatures.getVesselPersonRoles().add(role);
149 
150         }
151     }
152 }