1 package fr.ifremer.tutti.ui.swing.content.cruise;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import com.google.common.collect.Lists;
26 import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode;
27 import fr.ifremer.tutti.persistence.entities.data.Attachment;
28 import fr.ifremer.tutti.persistence.entities.data.Cruise;
29 import fr.ifremer.tutti.persistence.entities.data.Cruises;
30 import fr.ifremer.tutti.persistence.entities.data.Program;
31 import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder;
32 import fr.ifremer.tutti.persistence.entities.referential.Person;
33 import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation;
34 import fr.ifremer.tutti.persistence.entities.referential.Vessel;
35 import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel;
36 import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware;
37 import org.apache.commons.lang3.StringUtils;
38 import org.apache.commons.lang3.time.DateUtils;
39 import org.nuiton.util.DateUtil;
40 import org.nuiton.util.beans.Binder;
41 import org.nuiton.util.beans.BinderFactory;
42
43 import java.util.Calendar;
44 import java.util.Collection;
45 import java.util.Date;
46 import java.util.List;
47
48
49
50
51
52
53
54 public class EditCruiseUIModel extends AbstractTuttiBeanUIModel<Cruise, EditCruiseUIModel> implements AttachmentModelAware, Cruise {
55
56 private static final long serialVersionUID = 1L;
57
58 public static final String PROPERTY_CAN_GENERATE_NAME = "canGenerateName";
59
60 public static final String PROPERTY_CAN_SHOW_GEAR_CARACTERISTIC = "canShowGearCatacteristic";
61
62 public static final String PROPERTY_CAN_EDIT_GEAR_CARACTERISTIC = "canEditGearCatacteristic";
63
64 public static final String PROPERTY_VESSEL_TYPE = "vesselType";
65
66 public static final String PROPERTY_VESSEL_TYPE_ALL = "vesselTypeAll";
67
68 public static final String PROPERTY_VESSEL_TYPE_SCIENTIFIC = "vesselTypeScientific";
69
70 public static final String PROPERTY_VESSEL_TYPE_FISHING = "vesselTypeFishing";
71
72 public static final String PROPERTY_VALIDATION_CONTEXT = "validationContext";
73
74
75
76
77
78
79 protected final Cruise editObject = Cruises.newCruise();
80
81
82
83
84
85
86
87 protected VesselTypeEnum vesselType;
88
89
90
91
92
93
94
95 protected boolean canEditGearCatacteristic;
96
97
98
99
100
101
102 protected boolean canShowGearCatacteristic;
103
104
105
106
107
108
109 protected String validationContext;
110
111 protected final List<Attachment> attachment = Lists.newArrayList();
112
113 protected static Binder<EditCruiseUIModel, Cruise> toBeanBinder =
114 BinderFactory.newBinder(EditCruiseUIModel.class,
115 Cruise.class);
116
117 protected static Binder<Cruise, EditCruiseUIModel> fromBeanBinder =
118 BinderFactory.newBinder(Cruise.class, EditCruiseUIModel.class);
119
120 public EditCruiseUIModel() {
121 super(fromBeanBinder, toBeanBinder);
122 }
123
124 @Override
125 protected Cruise newEntity() {
126 return Cruises.newCruise();
127 }
128
129 public boolean isCanEditGearCatacteristic() {
130 return canEditGearCatacteristic;
131 }
132
133 public void setCanEditGearCatacteristic(boolean canEditGearCatacteristic) {
134 this.canEditGearCatacteristic = canEditGearCatacteristic;
135 firePropertyChange(PROPERTY_CAN_EDIT_GEAR_CARACTERISTIC, null, canEditGearCatacteristic);
136 }
137
138 public boolean isCanShowGearCatacteristic() {
139 return canShowGearCatacteristic;
140 }
141
142 public void setCanShowGearCatacteristic(boolean canShowGearCatacteristic) {
143 this.canShowGearCatacteristic = canShowGearCatacteristic;
144 firePropertyChange(PROPERTY_CAN_SHOW_GEAR_CARACTERISTIC, null, canShowGearCatacteristic);
145 }
146
147 public VesselTypeEnum getVesselType() {
148 return vesselType;
149 }
150
151 public void setVesselType(VesselTypeEnum vesselType) {
152 boolean oldAll = isVesselTypeAll();
153 boolean oldScientific = isVesselTypeScientific();
154 boolean oldFishing = isVesselTypeFishing();
155 Object oldValue = getVesselType();
156 this.vesselType = vesselType;
157 firePropertyChange(PROPERTY_VESSEL_TYPE, oldValue, vesselType);
158 firePropertyChange(PROPERTY_VESSEL_TYPE_ALL, oldAll, isVesselTypeAll());
159 firePropertyChange(PROPERTY_VESSEL_TYPE_SCIENTIFIC, oldScientific, isVesselTypeScientific());
160 firePropertyChange(PROPERTY_VESSEL_TYPE_FISHING, oldFishing, isVesselTypeFishing());
161 }
162
163 public boolean isVesselTypeAll() {
164 return VesselTypeEnum.ALL.equals(vesselType);
165 }
166
167 public boolean isVesselTypeScientific() {
168 return VesselTypeEnum.SCIENTIFIC.equals(vesselType);
169 }
170
171 public boolean isVesselTypeFishing() {
172 return VesselTypeEnum.FISHING.equals(vesselType);
173 }
174
175 public boolean isCanGenerateName() {
176 return getProgram() != null && getBeginDate() != null;
177 }
178
179 public static final String CRUISE_NAME_FORMAT = "%1$s_%2$s";
180
181 public String getGeneratedCampaignName() {
182 int year;
183 if (getBeginDate() == null) {
184 year = 0;
185 } else {
186 Calendar c = Calendar.getInstance();
187 c.setTime(getBeginDate());
188 year = c.get(Calendar.YEAR);
189 }
190 String result = String.format(CRUISE_NAME_FORMAT, getProgram().getName(), year);
191 if (StringUtils.isNotEmpty(getSurveyPart())) {
192 result += "_" + getSurveyPart();
193 }
194 return result;
195 }
196
197 public String getValidationContext() {
198 return validationContext;
199 }
200
201 public void setValidationContext(String validationContext) {
202 Object oldValue = getValidationContext();
203 this.validationContext = validationContext;
204 firePropertyChange(PROPERTY_VALIDATION_CONTEXT, oldValue, validationContext);
205 }
206
207
208
209
210
211 @Override
212 public ObjectTypeCode getObjectType() {
213 return ObjectTypeCode.SCIENTIFIC_CRUISE;
214 }
215
216 @Override
217 public Integer getObjectId() {
218 return getIdAsInt();
219 }
220
221 @Override
222 public List<Attachment> getAttachment() {
223 return attachment;
224 }
225
226 @Override
227 public void addAllAttachment(Collection<Attachment> attachments) {
228 this.attachment.addAll(attachments);
229 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
230 }
231
232 @Override
233 public void addAttachment(Attachment attachment) {
234 this.attachment.add(attachment);
235 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
236 }
237
238 @Override
239 public void removeAllAttachment(Collection<Attachment> attachments) {
240 this.attachment.removeAll(attachments);
241 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
242 }
243
244 @Override
245 public void removeAttachment(Attachment attachment) {
246 this.attachment.remove(attachment);
247 firePropertyChange(PROPERTY_ATTACHMENT, null, getAttachment());
248 }
249
250
251
252
253
254 @Override
255 public Program getProgram() {
256 return editObject.getProgram();
257 }
258
259 @Override
260 public void setProgram(Program program) {
261 Object oldValue = getProgram();
262 editObject.setProgram(program);
263 firePropertyChange(PROPERTY_PROGRAM, oldValue, program);
264 firePropertyChange(PROPERTY_CAN_GENERATE_NAME, null, isCanGenerateName());
265 }
266
267 @Override
268 public String getName() {
269 return editObject.getName();
270 }
271
272 @Override
273 public void setName(String name) {
274 Object oldValue = getName();
275 editObject.setName(name);
276 firePropertyChange(PROPERTY_NAME, oldValue, name);
277 }
278
279 @Override
280 public String getComment() {
281 return editObject.getComment();
282 }
283
284 @Override
285 public void setComment(String comment) {
286 Object oldValue = getComment();
287 editObject.setComment(comment);
288 firePropertyChange(PROPERTY_COMMENT, oldValue, comment);
289 }
290
291 @Override
292 public TuttiLocation getDepartureLocation() {
293 return editObject.getDepartureLocation();
294 }
295
296 @Override
297 public void setDepartureLocation(TuttiLocation departureLocation) {
298 Object oldValue = getDepartureLocation();
299 editObject.setDepartureLocation(departureLocation);
300 firePropertyChange(PROPERTY_DEPARTURE_LOCATION, oldValue, departureLocation);
301 }
302
303 @Override
304 public TuttiLocation getReturnLocation() {
305 return editObject.getReturnLocation();
306 }
307
308 @Override
309 public void setReturnLocation(TuttiLocation returnLocation) {
310 Object oldValue = getReturnLocation();
311 editObject.setReturnLocation(returnLocation);
312 firePropertyChange(PROPERTY_RETURN_LOCATION, oldValue, returnLocation);
313 }
314
315 @Override
316 public String getSurveyPart() {
317 return editObject.getSurveyPart();
318 }
319
320 @Override
321 public void setSurveyPart(String surveyPart) {
322 Object oldValue = getSurveyPart();
323 editObject.setSurveyPart(surveyPart);
324 firePropertyChange(PROPERTY_SURVEY_PART, oldValue, surveyPart);
325 firePropertyChange(PROPERTY_CAN_GENERATE_NAME, null, isCanGenerateName());
326 }
327
328 @Override
329 public Integer getMultirigNumber() {
330 return editObject.getMultirigNumber();
331 }
332
333 @Override
334 public void setMultirigNumber(Integer multirigNumber) {
335 Object oldValue = getMultirigNumber();
336 editObject.setMultirigNumber(multirigNumber);
337 firePropertyChange(PROPERTY_MULTIRIG_NUMBER, oldValue, multirigNumber);
338 }
339
340 @Override
341 public Date getBeginDate() {
342 return editObject.getBeginDate();
343 }
344
345 @Override
346 public void setBeginDate(Date beginDate) {
347 Date oldValue = getBeginDate();
348 Date newDate = beginDate;
349 if (oldValue != null && beginDate != null) {
350
351 newDate = applyTime(beginDate, oldValue);
352 }
353 setBeginDate0(newDate);
354 }
355
356 @Override
357 public Date getEndDate() {
358 return editObject.getEndDate();
359 }
360
361 @Override
362 public void setEndDate(Date endDate) {
363 Date oldValue = getEndDate();
364 Date newDate = endDate;
365 if (oldValue != null && endDate != null) {
366
367 newDate = applyTime(endDate, oldValue);
368 }
369 setEndDate0(newDate);
370 }
371
372 @Override
373 public Vessel getVessel() {
374 return editObject.getVessel();
375 }
376
377 @Override
378 public void setVessel(Vessel vessel) {
379 Object oldValue = getVessel();
380 editObject.setVessel(vessel);
381 firePropertyChange(PROPERTY_VESSEL, oldValue, vessel);
382 }
383
384 @Override
385 public String getSynchronizationStatus() {
386 return editObject.getSynchronizationStatus();
387 }
388
389 @Override
390 public void setSynchronizationStatus(String synchronizationStatus) {
391 String oldValue = getSynchronizationStatus();
392 editObject.setSynchronizationStatus(synchronizationStatus);
393 firePropertyChange(PROPERTY_SYNCHRONIZATION_STATUS, oldValue, synchronizationStatus);
394 }
395
396 @Override
397 public List<GearWithOriginalRankOrder> getGear() {
398 return editObject.getGear();
399 }
400
401 @Override
402 public void setGear(List<GearWithOriginalRankOrder> gear) {
403 editObject.setGear(gear);
404 firePropertyChange(PROPERTY_GEAR, null, gear);
405 }
406
407 @Override
408 public List<Person> getHeadOfMission() {
409 return editObject.getHeadOfMission();
410 }
411
412 @Override
413 public void setHeadOfMission(List<Person> headOfMission) {
414 editObject.setHeadOfMission(headOfMission);
415 firePropertyChange(PROPERTY_HEAD_OF_MISSION, null, headOfMission);
416 }
417
418 @Override
419 public List<Person> getHeadOfSortRoom() {
420 return editObject.getHeadOfSortRoom();
421 }
422
423 @Override
424 public void setHeadOfSortRoom(List<Person> headOfSortRoom) {
425 editObject.setHeadOfSortRoom(headOfSortRoom);
426 firePropertyChange(PROPERTY_HEAD_OF_SORT_ROOM, null, headOfSortRoom);
427 }
428
429 @Override
430 public GearWithOriginalRankOrder getGear(int index) {
431 return editObject.getGear(index);
432 }
433
434 @Override
435 public boolean isGearEmpty() {
436 return editObject.isGearEmpty();
437 }
438
439 @Override
440 public int sizeGear() {
441 return editObject.sizeGear();
442 }
443
444 @Override
445 public void addGear(GearWithOriginalRankOrder gear) {
446 editObject.addGear(gear);
447 }
448
449 @Override
450 public void addAllGear(Collection<GearWithOriginalRankOrder> gear) {
451 editObject.addAllGear(gear);
452 }
453
454 @Override
455 public boolean removeGear(GearWithOriginalRankOrder gear) {
456 return editObject.removeGear(gear);
457 }
458
459 @Override
460 public boolean removeAllGear(Collection<GearWithOriginalRankOrder> gear) {
461 return editObject.removeAllGear(gear);
462 }
463
464 @Override
465 public boolean containsGear(GearWithOriginalRankOrder gear) {
466 return editObject.containsGear(gear);
467 }
468
469 @Override
470 public boolean containsAllGear(Collection<GearWithOriginalRankOrder> gear) {
471 return editObject.containsAllGear(gear);
472 }
473
474 @Override
475 public Person getHeadOfMission(int index) {
476 return null;
477 }
478
479 @Override
480 public boolean isHeadOfMissionEmpty() {
481 return false;
482 }
483
484 @Override
485 public int sizeHeadOfMission() {
486 return 0;
487 }
488
489 @Override
490 public void addHeadOfMission(Person headOfMission) {
491 }
492
493 @Override
494 public void addAllHeadOfMission(Collection<Person> headOfMission) {
495 }
496
497 @Override
498 public boolean removeHeadOfMission(Person headOfMission) {
499 return false;
500 }
501
502 @Override
503 public boolean removeAllHeadOfMission(Collection<Person> headOfMission) {
504 return false;
505 }
506
507 @Override
508 public boolean containsHeadOfMission(Person headOfMission) {
509 return false;
510 }
511
512 @Override
513 public boolean containsAllHeadOfMission(Collection<Person> headOfMission) {
514 return false;
515 }
516
517 @Override
518 public Person getHeadOfSortRoom(int index) {
519 return null;
520 }
521
522 @Override
523 public boolean isHeadOfSortRoomEmpty() {
524 return false;
525 }
526
527 @Override
528 public int sizeHeadOfSortRoom() {
529 return 0;
530 }
531
532 @Override
533 public void addHeadOfSortRoom(Person headOfSortRoom) {
534 }
535
536 @Override
537 public void addAllHeadOfSortRoom(Collection<Person> headOfSortRoom) {
538 }
539
540 @Override
541 public boolean removeHeadOfSortRoom(Person headOfSortRoom) {
542 return false;
543 }
544
545 @Override
546 public boolean removeAllHeadOfSortRoom(Collection<Person> headOfSortRoom) {
547 return false;
548 }
549
550 @Override
551 public boolean containsHeadOfSortRoom(Person headOfSortRoom) {
552 return false;
553 }
554
555 @Override
556 public boolean containsAllHeadOfSortRoom(Collection<Person> headOfSortRoom) {
557 return false;
558 }
559
560
561
562
563
564 public void setBeginTime(Date beginTime) {
565 Date oldValue = getBeginDate();
566 if (oldValue != null && beginTime != null) {
567
568 Date newDate = applyTime(oldValue, beginTime);
569 setBeginDate0(newDate);
570 }
571 }
572
573 public void setEndTime(Date endTime) {
574 Date oldValue = getEndDate();
575 if (oldValue != null && endTime != null) {
576
577 Date newDate = applyTime(oldValue, endTime);
578 setEndDate0(newDate);
579 }
580 }
581
582
583
584
585
586 protected Date applyTime(Date date, Date timeDate) {
587
588 Calendar cal = DateUtils.toCalendar(timeDate);
589 Date newDate = DateUtils.setHours(date, cal.get(Calendar.HOUR_OF_DAY));
590 newDate = DateUtils.setMinutes(newDate, cal.get(Calendar.MINUTE));
591
592 return newDate;
593 }
594
595 protected void setBeginDate0(Date beginDate) {
596 Date oldValue = getBeginDate();
597 if (beginDate != null) {
598 Calendar calendar = DateUtil.getDefaultCalendar(beginDate);
599 calendar.set(Calendar.SECOND, 0);
600 editObject.setBeginDate(calendar.getTime());
601
602 } else {
603 editObject.setBeginDate(null);
604 }
605 firePropertyChange(PROPERTY_BEGIN_DATE, oldValue, getBeginDate());
606 firePropertyChange(PROPERTY_CAN_GENERATE_NAME, null, isCanGenerateName());
607 }
608
609 protected void setEndDate0(Date endDate) {
610 Object oldValue = getEndDate();
611 if (endDate != null) {
612 Calendar calendar = DateUtil.getDefaultCalendar(endDate);
613 calendar.set(Calendar.SECOND, 0);
614 editObject.setEndDate(calendar.getTime());
615
616 } else {
617 editObject.setEndDate(null);
618 }
619 firePropertyChange(PROPERTY_END_DATE, oldValue, getEndDate());
620 }
621 }