1 package fr.ifremer.tutti;
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 fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
26 import fr.ifremer.tutti.type.CoordinateEditorType;
27 import fr.ifremer.tutti.type.WeightUnit;
28 import fr.ifremer.tutti.util.BeepFrequency;
29 import org.hibernate.dialect.HSQLDialect;
30 import org.hsqldb.jdbcDriver;
31 import org.nuiton.config.ConfigOptionDef;
32 import org.nuiton.version.Version;
33
34 import javax.swing.KeyStroke;
35 import java.awt.Color;
36 import java.io.File;
37 import java.net.URL;
38 import java.util.Locale;
39
40 import static org.nuiton.i18n.I18n.n;
41
42
43
44
45
46
47
48
49
50 public enum TuttiConfigurationOption implements ConfigOptionDef {
51
52
53
54
55
56 BASEDIR(
57 "tutti.basedir",
58 n("tutti.config.option.basedir.description"),
59 "${user.home}/.tutti",
60 File.class),
61
62 DATA_DIRECTORY(
63 "tutti.data.directory",
64 n("tutti.config.option.data.directory.description"),
65 "${tutti.basedir}/data",
66 File.class),
67
68 I18N_DIRECTORY(
69 "tutti.i18n.directory",
70 n("tutti.config.option.i18n.directory.description"),
71 "${tutti.basedir}/i18n",
72 File.class),
73
74 HELP_DIRECTORY(
75 "tutti.help.directory",
76 n("tutti.config.option.help.directory.description"),
77 "${tutti.basedir}/help",
78 File.class),
79
80 TMP_DIRECTORY(
81 "tutti.tmp.directory",
82 n("tutti.config.option.tmp.directory.description"),
83 "${tutti.data.directory}/temp",
84 File.class),
85
86 REPORT_HOME_DIRECTORY(
87 "tutti.report.home.directory",
88 n("tutti.config.option.report.home.directory.description"),
89 "${tutti.basedir}/report",
90 File.class),
91 REPORT_DIRECTORY(
92 "tutti.report.directory",
93 n("tutti.config.option.report.directory.description"),
94 "${tutti.report.home.directory}/allegro-tutti/reports",
95 File.class),
96 REPORT_LOG_DIRECTORY(
97 "tutti.report.log.directory",
98 n("tutti.config.option.report.log.directory.description"),
99 "${tutti.data.directory}/reportlogs",
100 File.class),
101 DB_DIRECTORY(
102 "tutti.persistence.db.directory",
103 n("tutti.config.option.persistence.db.directory.description"),
104 "${tutti.data.directory}/db",
105 File.class),
106
107 DB_ATTACHMENT_DIRECTORY(
108 "tutti.persistence.db.attachment.directory",
109 n("tutti.config.option.persistence.db.attachment.directory.description"),
110 "${tutti.data.directory}/meas_files",
111 File.class),
112
113 DB_CACHE_DIRECTORY(
114 "tutti.persistence.db.cache.directory",
115 n("tutti.config.option.persistence.db.cache.directory.description"),
116 "${tutti.data.directory}/dbcache",
117 File.class),
118
119 DB_PROTOCOL_DIRECTORY(
120 "tutti.persistence.db.protocol.directory",
121 n("tutti.config.option.persistence.db.protocol.directory.description"),
122 "${tutti.data.directory}/protocol",
123 File.class),
124
125 DB_NAME(
126 "tutti.persistence.db.name",
127 n("tutti.config.option.persistence.db.name.description"),
128 "allegro",
129 String.class),
130
131 DB_SANITY(
132 "tutti.persistence.db.sanity",
133 n("tutti.persistence.db.sanity.description"),
134 "false",
135 Boolean.class),
136
137 JDBC_USERNAME(
138 "tutti.persistence.jdbc.username",
139 n("tutti.config.option.persistence.jdbc.username.description"),
140 "sa",
141 String.class),
142
143 JDBC_PASSWORD(
144 "tutti.persistence.jdbc.password",
145 n("tutti.config.option.persistence.jdbc.password.description"),
146 "",
147 String.class),
148
149 JDBC_URL(
150 "tutti.persistence.jdbc.url",
151 n("tutti.config.option.persistence.jdbc.url.description"),
152 "jdbc:hsqldb:file:${tutti.persistence.db.directory}/${tutti.persistence.db.name}",
153 String.class,
154 false),
155
156 JDBC_DRIVER(
157 "tutti.persistence.jdbc.driver",
158 n("tutti.config.option.persistence.jdbc.driver.description"),
159 jdbcDriver.class.getName(),
160 Class.class),
161
162 HIBERNATE_DIALECT(
163 "tutti.persistence.hibernate.dialect",
164 n("tutti.config.option.persistence.hibernate.dialect.description"),
165 HSQLDialect.class.getName(),
166 Class.class),
167
168 LAUNCH_MODE(
169 "tutti.launch.mode",
170 n("tutti.config.option.launch.mode.description"),
171 null,
172 String.class),
173
174 START_ACTION_FILE(
175 "tutti.startActionFile",
176 n("tutti.config.option.startActionFile.description"),
177 "${tutti.basedir}/tutti-start-action",
178 File.class),
179
180 VERSION(
181 "tutti.version",
182 n("tutti.config.option.version.description"),
183 "",
184 Version.class),
185
186 SITE_URL(
187 "tutti.site.url",
188 n("tutti.config.option.site.url.description"),
189 "https://tutti.codelutin.com",
190 URL.class),
191
192 ORGANIZATION_NAME(
193 "tutti.organizationName",
194 n("tutti.config.option.organizationName.description"),
195 "",
196 String.class),
197
198 INCEPTION_YEAR(
199 "tutti.inceptionYear",
200 n("tutti.config.option.inceptionYear.description"),
201 "2012",
202 Integer.class),
203
204
205
206
207
208 DB_BACKUP_DIRECTORY(
209 "tutti.persistence.db.backup.directory",
210 n("tutti.config.option.persistence.db.backup.directory.description"),
211 "${tutti.data.directory}/dbbackup",
212 File.class,
213 false),
214
215 EXPORT_BACKUP_DIRECTORY(
216 "tutti.export.backup.directory",
217 n("tutti.config.option.export.backup.directory.description"),
218 "${tutti.data.directory}/exportbackup",
219 File.class,
220 false),
221
222 HIBERNATE_SHOW_SQL(
223 "tutti.persistence.hibernate.showSql",
224 n("tutti.config.option.persistence.hibernate.showSql.description"),
225 Boolean.FALSE.toString(),
226 boolean.class,
227 false),
228
229 HIBERNATE_USE_SQL_COMMENT(
230 "tutti.persistence.hibernate.useSqlComment",
231 n("tutti.config.option.persistence.hibernate.useSqlComment.description"),
232 Boolean.FALSE.toString(),
233 boolean.class,
234 false),
235
236 HIBERNATE_FORMAT_SQL(
237 "tutti.persistence.hibernate.formatSql",
238 n("tutti.config.option.persistence.hibernate.formatSql.description"),
239 Boolean.FALSE.toString(),
240 boolean.class,
241 false),
242
243 SHOW_BATCH_LOG(
244 "tutti.persistence.showBatchLog",
245 n("tutti.config.option.persistence.showBatchLog.description"),
246 Boolean.FALSE.toString(),
247 Boolean.class,
248 false),
249
250 SHOW_MEMORY_USAGE(
251 "tutti.persistence.showMemoryUsage",
252 n("tutti.config.option.persistence.showMemoryUsage.description"),
253 Boolean.FALSE.toString(),
254 Boolean.class,
255 false),
256
257 GENERIC_FORMAT_IMPORT_SKIP_BACKUP(
258 "tutti.genericFormat.import.skipBackup",
259 n("tutti.config.option.genericFormat.import.skipBackup.description"),
260 Boolean.FALSE.toString(),
261 Boolean.class,
262 false),
263 GENERIC_FORMAT_IMPORT_MAXIMUM_ROWS_IN_ERROR_PER_FILE(
264 "tutti.genericFormat.import.maximumRowsInErrorPerFile",
265 n("tutti.config.option.genericFormat.import.maximumRowsInErrorPerFile.description"),
266 "100",
267 Integer.class,
268 false),
269
270 IMPORT_DB_SKIP_BACKUP(
271 "tutti.db.import.skipBackup",
272 n("tutti.config.option.db.import.skipBackup.description"),
273 Boolean.FALSE.toString(),
274 Boolean.class,
275 false),
276
277 SAMPLE_CATEGORY_MODEL(
278 "tutti.persistence.SampleCategoryModel",
279 n("tutti.config.option.persistence.SampleCategoryModel.description"),
280 "1428,V/HV,V_HV|198,Class Tri,Class_Tri|196,Sexe,Sexe|174,Maturite,Maturite|1430,Age,Age",
281 SampleCategoryModel.class,
282 false
283 ),
284
285 REPORT_BACKUP_DIRECTORY(
286 "tutti.report.backup.directory",
287 n("tutti.config.option.report.backup.directory.description"),
288 "${tutti.data.directory}/reportbackup",
289 File.class,
290 false),
291
292 GENERIC_FORMAT_REPORT_BACKUP_DIRECTORY(
293 "tutti.genericFormat.report.backup.directory",
294 n("tutti.config.option.genericFormat.report.backup.directory.description"),
295 "${tutti.data.directory}/genericFormat/reportbackup",
296 File.class,
297 false),
298
299 CSV_SEPARATOR(
300 "tutti.csv.separator",
301 n("tutti.config.option.csv.separator.description"),
302 ";",
303 char.class,
304 false),
305
306 EXPORT_COUNTRY_ID(
307 "tutti.export.countryId",
308 n("tutti.config.option.export.countryId.description"),
309 "12",
310 String.class,
311 false),
312
313 SAMPLING_CATEGORY_ORDER_IDS(
314 "tutti.samplingCategoryOrderIds",
315 n("tutti.config.option.samplingCategoryOrderIds.description"),
316 "198,196,174,1430",
317 Integer[].class,
318 false),
319
320 WEIGHT_UNIT_SPECIES(
321 "tutti.weight.unit.species",
322 n("tutti.config.option.weight.unit.species.description"),
323 WeightUnit.KG.name(),
324 WeightUnit.class,
325 false),
326
327 WEIGHT_UNIT_BENTHOS(
328 "tutti.weight.unit.benthos",
329 n("tutti.config.option.weight.unit.benthos.description"),
330 WeightUnit.G.name(),
331 WeightUnit.class,
332 false),
333
334 WEIGHT_UNIT_MARINE_LITTER(
335 "tutti.weight.unit.marineLitter",
336 n("tutti.config.option.weight.unit.marineLitter.description"),
337 WeightUnit.KG.name(),
338 WeightUnit.class,
339 false),
340
341 WEIGHT_UNIT_INDIVIDUAL_OBSERVATION(
342 "tutti.weight.unit.individualObservation",
343 n("tutti.config.option.weight.unit.individualObservation.description"),
344 WeightUnit.G.name(),
345 WeightUnit.class,
346 false),
347
348 WEIGHT_UNIT_ACCIDENTAL_CATCH(
349 "tutti.weight.unit.accidentalCatch",
350 n("tutti.config.option.weight.unit.accidentalCatch.description"),
351 WeightUnit.KG.name(),
352 WeightUnit.class,
353 false),
354
355 I18N_LOCALE(
356 "tutti.i18n.locale",
357 n("tutti.config.option.i18n.locale.description"),
358 Locale.FRANCE.getCountry(),
359 Locale.class,
360 false
361 ),
362
363 UPDATE_APPLICATION_URL(
364 "tutti.update.application.url",
365 n("tutti.config.option.update.application.url.description"),
366 "https://www.ifremer.fr/sih-resource-private/tutti/tutti-application.properties",
367 String.class,
368 false
369 ),
370
371 UPDATE_DATA_URL(
372 "tutti.update.data.url",
373 n("tutti.config.option.update.data.url.description"),
374 "https://www.ifremer.fr/sih-resource-private/tutti/tutti-data.properties",
375 String.class,
376 false
377 ),
378
379 UI_CONFIG_FILE(
380 "tutti.ui.config.file",
381 n("tutti.config.option.ui.config.file.description"),
382 "${tutti.data.directory}/tuttiUI.xml",
383 File.class,
384 false
385 ),
386
387 TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE(
388 "tutti.db.weights.rate.difference.totalAndSorted",
389 n("tutti.config.option.weights.rate.difference.totalAndSorted.description"),
390 "1.0",
391 Float.class,
392 false
393 ),
394
395 PUPITRI_IMPORT_MISSING_BATCHES(
396 "tutti.pupitriImportMissingBatches",
397 n("tutti.config.option.pupitriImportMissingBatches.description"),
398 "false",
399 Boolean.class,
400 false
401 ),
402
403 TREMIE_CAROUSSEL_VESSEL_ID(
404 "tutti.tremieCarousselVessel",
405 n("tutti.config.option.tremieCarousselVessel.description"),
406 "",
407 String.class,
408 false
409 ),
410
411 RTP_WEIGHTS_DIFFERENCE_RATE(
412 "tutti.db.weights.rate.difference.rtp",
413 n("tutti.config.option.weights.rate.difference.rtp.description"),
414 "20.0",
415 Float.class,
416 false
417 ),
418
419 PROGRAM_ID(
420 "tutti.programId",
421 n("tutti.config.option.programId.description"),
422 null,
423 String.class,
424 false
425 ),
426
427 CRUISE_ID(
428 "tutti.cruiseId",
429 n("tutti.config.option.cruiseId.description"),
430 null,
431 Integer.class,
432 false
433 ),
434
435 PROTOCOL_ID(
436 "tutti.protocolId",
437 n("tutti.config.option.protocolId.description"),
438 null,
439 String.class,
440 false
441 ),
442
443 AUTO_POPUP_NUMBER_EDITOR(
444 "tutti.ui.autoPopupNumberEditor",
445 n("tutti.config.option.ui.autoPopupNumberEditor.description"),
446 String.valueOf(false),
447 Boolean.class,
448 false
449 ),
450
451 SHOW_NUMBER_EDITOR_BUTTON(
452 "tutti.ui.showNumberEditorButton",
453 n("tutti.config.option.ui.showNumberEditorButton.description"),
454 String.valueOf(true),
455 Boolean.class,
456 false
457 ),
458
459 COLOR_ROW_READ_ONLY(
460 "tutti.ui.color.rowReadOnly",
461 n("tutti.config.option.ui.color.rowReadOnly.description"),
462 new Color(192, 192, 192).toString(),
463 Color.class,
464 false
465 ),
466
467 COLOR_ROW_INVALID(
468 "tutti.ui.color.rowInvalid",
469 n("tutti.config.option.ui.color.rowInvalid.description"),
470 new Color(255, 204, 153).toString(),
471 Color.class,
472 false
473 ),
474
475 COLOR_CELL_WITH_VALUE(
476 "tutti.ui.color.cellWithValue",
477 n("tutti.config.option.ui.color.cellWithValue.description"),
478 new Color(128, 255, 128).toString(),
479 Color.class,
480 false
481 ),
482
483 COLOR_ROW_TO_CONFIRM(
484 "tutti.ui.color.rowToConfirm",
485 n("tutti.config.option.ui.color.rowToConfirm.description"),
486 Color.ORANGE.toString(),
487 Color.class,
488 false
489 ),
490
491 COLOR_ALTERNATE_ROW(
492 "tutti.ui.color.alternateRow",
493 n("tutti.config.option.ui.color.alternateRow.description"),
494 new Color(217, 217, 217).toString(),
495 Color.class,
496 false
497 ),
498
499 COLOR_SELECTED_ROW(
500 "tutti.ui.color.selectedRow",
501 n("tutti.config.option.ui.color.selectedRow.description"),
502 new Color(57, 105, 138).toString(),
503 Color.class,
504 false
505 ),
506
507 COLOR_WARNING_ROW(
508 "tutti.ui.color.warningRow",
509 n("tutti.config.option.ui.color.warningRow.description"),
510 new Color(245, 218, 88).toString(),
511 Color.class,
512 false
513 ),
514
515 COLOR_CATCH(
516 "tutti.ui.color.catch",
517 n("tutti.config.option.ui.color.catch.description"),
518 new Color(136,136,136).toString(),
519 Color.class,
520 false
521 ),
522
523 COLOR_SPECIES(
524 "tutti.ui.color.species",
525 n("tutti.config.option.ui.color.species.description"),
526 new Color(0, 107, 186).toString(),
527 Color.class,
528 false
529 ),
530
531 COLOR_BENTHOS(
532 "tutti.ui.color.benthos",
533 n("tutti.config.option.ui.color.benthos.description"),
534 new Color(255, 127, 42).toString(),
535 Color.class,
536 false
537 ),
538 COLOR_SPECIES_OR_BENTHOS_UNSORTED_COMPUTED_WEIGHT_IN_WARNING(
539 "tutti.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning",
540 n("tutti.config.option.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning.description"),
541 new Color(255, 57, 28).toString(),
542 Color.class,
543 false
544 ),
545
546 COLOR_MARINE_LITTER(
547 "tutti.ui.color.marineLitter",
548 n("tutti.config.option.ui.color.marineLitter.description"),
549 new Color(255, 229, 23).toString(),
550 Color.class,
551 false
552 ),
553
554 COLOR_BLOCKING_LAYER(
555 "tutti.ui.color.blockingLayer",
556 n("tutti.config.option.ui.color.blockingLayer.description"),
557 new Color(200, 200, 200).toString(),
558 Color.class,
559 false
560 ),
561
562 COLOR_COMPUTED_WEIGHTS(
563 "tutti.ui.color.computedWeights",
564 n("tutti.config.option.ui.color.computedWeights.description"),
565 Color.BLUE.toString(),
566 Color.class,
567 false
568 ),
569
570 COLOR_HIGHLIGHT_INFO_BACKGROUND(
571 "tutti.ui.color.hightlightInfo.background",
572 n("tutti.config.option.ui.color.hightlightInfo.background.description"),
573 Color.YELLOW.toString(),
574 Color.class,
575 false
576 ),
577
578 COLOR_HIGHLIGHT_INFO_FOREGROUND(
579 "tutti.ui.color.hightlightInfo.foreground",
580 n("tutti.config.option.ui.color.hightlightInfo.foreground.description"),
581 Color.BLACK.toString(),
582 Color.class,
583 false
584 ),
585
586 SHORTCUT_CLOSE_POPUP(
587 "tutti.ui.shortcut.closePopup",
588 n("tutti.config.option.ui.shortcut.closePopup.description"),
589 "alt pressed F",
590 KeyStroke.class,
591 false
592 ),
593
594 COORDINATE_EDITOR_TYPE(
595 "tutti.ui.coordinateEditorType",
596 n("tutti.config.option.ui.coordinateEditorType.description"),
597 CoordinateEditorType.DD.toString(),
598 CoordinateEditorType.class,
599 false
600 ),
601
602 DATE_FORMAT(
603 "tutti.ui.dateFormat",
604 n("tutti.config.option.ui.dateFormat.description"),
605 "dd/MM/yyyy",
606 String.class,
607 false
608 ),
609
610 ADMIN_PASSWORD(
611 "tutti.admin.password",
612 n("tutti.config.option.ui.adminPassword.description"),
613
614 "ef399a6e6ec62c6e142440241a5b98f8",
615 String.class,
616 false
617 ),
618
619 MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE(
620 "tutti.ui.max.individualObservationRowsToCreate",
621 n("tutti.config.option.ui.individualObservationRowsToCreate.description"),
622 "10",
623 Integer.class,
624 false
625 ),
626
627 SAMPLING_CODE_PREFIX(
628 "tutti.ui.max.sampligCodePrefix",
629 n("tutti.config.option.ui.sampligCodePrefix.description"),
630 "",
631 String.class,
632 false
633 ),
634
635 FULL_BLUETOOTH_SCAN(
636 "tutti.ichtyometer.fullBluetoothScan",
637 n("tutti.config.option.ichtyometer.fullBluetoothScan.description"),
638 "false",
639 Boolean.class,
640 false
641 ),
642 ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT(
643 "tutti.ichtyometer.maximumNumberOfAttemptToConnect",
644 n("tutti.config.option.ichtyometer.maximumNumberOfAttemptToConnect.description"),
645 "5",
646 int.class,
647 false
648 ),
649 CALIPER_SERIAL_PORT(
650 "tutti.ichtyometer.caliperSerialPort",
651 n("tutti.config.option.caliper.serialPort.description"),
652 "1",
653 int.class,
654 false
655 ),
656 EXTERNAL_DEVICES_VOICE_ENABLED(
657 "tutti.ichtyometer.voice.enabled",
658 n("tutti.config.option.externalDevices.voice.enabled.description"),
659 "true",
660 Boolean.class,
661 false
662 ),
663 EXTERNAL_DEVICES_READS_UNIT(
664 "tutti.ichtyometer.reads.unit",
665 n("tutti.config.option.externalDevices.reads.unit.description"),
666 "true",
667 Boolean.class,
668 false
669 ),
670 EXTERNAL_DEVICES_DATA_RECEPTION_BEEP_ENABLED(
671 "tutti.ichtyometer.beep.data.enabled",
672 n("tutti.config.option.externalDevices.beep.data.enabled.description"),
673 "true",
674 Boolean.class,
675 false
676 ),
677 EXTERNAL_DEVICES_DATA_RECEPTION_BEEP_FREQUENCY(
678 "tutti.ichtyometer.beep.data.frequency",
679 n("tutti.config.option.externalDevices.beep.data.frequency.description"),
680 "A2",
681 BeepFrequency.class,
682 false
683 ),
684 EXTERNAL_DEVICES_ERROR_RECEPTION_BEEP_ENABLED(
685 "tutti.ichtyometer.beep.error.enabled",
686 n("tutti.config.option.externalDevices.beep.error.enabled.description"),
687 "true",
688 Boolean.class,
689 false
690 ),
691 EXTERNAL_DEVICES_ERROR_RECEPTION_BEEP_FREQUENCY(
692 "tutti.ichtyometer.beep.error.frequency",
693 n("tutti.config.option.externalDevices.beep.error.frequency.description"),
694 "A1",
695 BeepFrequency.class,
696 false
697 );
698
699
700 private final String key;
701
702
703 private final String description;
704
705
706 private final Class<?> type;
707
708
709 private String defaultValue;
710
711
712 private boolean isTransient;
713
714
715 private boolean isFinal;
716
717 TuttiConfigurationOption(String key,
718 String description,
719 String defaultValue,
720 Class<?> type,
721 boolean isTransient) {
722 this.key = key;
723 this.description = description;
724 this.defaultValue = defaultValue;
725 this.type = type;
726 this.isTransient = isTransient;
727 this.isFinal = isTransient;
728 }
729
730 TuttiConfigurationOption(String key,
731 String description,
732 String defaultValue,
733 Class<?> type) {
734 this(key, description, defaultValue, type, true);
735 }
736
737 @Override
738 public String getKey() {
739 return key;
740 }
741
742 @Override
743 public Class<?> getType() {
744 return type;
745 }
746
747 @Override
748 public String getDescription() {
749 return description;
750 }
751
752 @Override
753 public String getDefaultValue() {
754 return defaultValue;
755 }
756
757 @Override
758 public boolean isTransient() {
759 return isTransient;
760 }
761
762 @Override
763 public boolean isFinal() {
764 return isFinal;
765 }
766
767 @Override
768 public void setDefaultValue(String defaultValue) {
769 this.defaultValue = defaultValue;
770 }
771
772 @Override
773 public void setTransient(boolean newValue) {
774
775 }
776
777 @Override
778 public void setFinal(boolean newValue) {
779
780 }
781 }