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 com.google.common.base.Charsets;
26 import fr.ifremer.adagio.core.config.AdagioConfiguration;
27 import fr.ifremer.adagio.core.config.AdagioConfigurationOption;
28 import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
29 import fr.ifremer.tutti.type.CoordinateEditorType;
30 import fr.ifremer.tutti.type.WeightUnit;
31 import fr.ifremer.tutti.util.BeepFrequency;
32 import org.apache.commons.lang3.StringUtils;
33 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
34 import org.apache.commons.logging.Log;
35 import org.apache.commons.logging.LogFactory;
36 import org.nuiton.config.ApplicationConfig;
37 import org.nuiton.config.ApplicationConfigHelper;
38 import org.nuiton.config.ApplicationConfigProvider;
39 import org.nuiton.config.ArgumentsParserException;
40 import org.nuiton.config.ConfigOptionDef;
41 import org.nuiton.jaxx.application.ApplicationConfiguration;
42 import org.nuiton.jaxx.application.ApplicationIOUtil;
43 import org.nuiton.jaxx.application.ApplicationTechnicalException;
44 import org.nuiton.version.Version;
45
46 import javax.swing.KeyStroke;
47 import java.awt.Color;
48 import java.io.File;
49 import java.io.IOException;
50 import java.net.URL;
51 import java.util.HashMap;
52 import java.util.List;
53 import java.util.Locale;
54 import java.util.Map;
55 import java.util.Set;
56
57 import static org.nuiton.i18n.I18n.t;
58
59
60
61
62
63
64
65 public class TuttiConfiguration extends ApplicationConfiguration {
66
67
68 private static final Log log = LogFactory.getLog(TuttiConfiguration.class);
69
70 private static TuttiConfiguration instance;
71
72 private final boolean windowsOS;
73
74 public static TuttiConfiguration getInstance() {
75 return instance;
76 }
77
78 public static void setInstance(TuttiConfiguration instance) {
79 TuttiConfiguration.instance = instance;
80 }
81
82 public static Set<ApplicationConfigProvider> getDefaultApplicationConfig(ApplicationConfig applicationConfig) {
83
84
85 Set<ApplicationConfigProvider> providers =
86 ApplicationConfigHelper.getProviders(null,
87 null,
88 null,
89 true);
90
91
92 ApplicationConfigHelper.loadAllDefaultOption(applicationConfig,
93 providers);
94
95
96 Map<ConfigOptionDef, ConfigOptionDef> translateOptions = new HashMap<>();
97
98 translateOptions.put(TuttiConfigurationOption.BASEDIR, AdagioConfigurationOption.BASEDIR);
99 translateOptions.put(TuttiConfigurationOption.DATA_DIRECTORY, AdagioConfigurationOption.DATA_DIRECTORY);
100 translateOptions.put(TuttiConfigurationOption.DB_NAME, AdagioConfigurationOption.DB_NAME);
101 translateOptions.put(TuttiConfigurationOption.JDBC_USERNAME, AdagioConfigurationOption.JDBC_USERNAME);
102 translateOptions.put(TuttiConfigurationOption.JDBC_PASSWORD, AdagioConfigurationOption.JDBC_PASSWORD);
103 translateOptions.put(TuttiConfigurationOption.JDBC_URL, AdagioConfigurationOption.JDBC_URL);
104
105 for (Map.Entry<ConfigOptionDef, ConfigOptionDef> entry : translateOptions.entrySet()) {
106 ConfigOptionDef tuttiKey = entry.getKey();
107 ConfigOptionDef adagioKey = entry.getValue();
108 String tuttiOptionValue = String.format("${%s}", tuttiKey.getKey());
109 applicationConfig.setDefaultOption(adagioKey.getKey(), tuttiOptionValue);
110 }
111
112 applicationConfig.setDefaultOption(AdagioConfigurationOption.DB_ENUMERATION_RESOURCE.getKey(),
113 "classpath*:adagio-db-enumerations.properties,classpath*:tutti-db-enumerations.properties");
114
115 return providers;
116 }
117
118 protected final String[] optionKeyToNotSave;
119
120 protected File configFile;
121
122 protected AdagioConfiguration adagioConfig;
123
124 public TuttiConfiguration(ApplicationConfig applicationConfig) {
125 super(applicationConfig);
126 optionKeyToNotSave = null;
127 this.windowsOS = System.getProperty("os.name").startsWith("Windows");
128 }
129
130 public TuttiConfiguration(String file, String... args) {
131 super(new ApplicationConfig());
132 this.windowsOS = System.getProperty("os.name").startsWith("Windows");
133 applicationConfig.setEncoding(Charsets.UTF_8.name());
134 Set<ApplicationConfigProvider> providers = getDefaultApplicationConfig(applicationConfig);
135
136
137 Set<String> optionToSkip =
138 ApplicationConfigHelper.getTransientOptionKeys(providers);
139
140 if (log.isDebugEnabled()) {
141 log.debug("Option that won't be saved: " + optionToSkip);
142 }
143 optionKeyToNotSave = optionToSkip.toArray(new String[optionToSkip.size()]);
144
145 applicationConfig.setConfigFileName(file);
146
147 applicationConfig.addAlias("--launch-mode", "--option", TuttiConfigurationOption.LAUNCH_MODE.getKey());
148 applicationConfig.addAlias("--basedir", "--option", TuttiConfigurationOption.BASEDIR.getKey());
149 applicationConfig.addAlias("--config-path", "--option", "config.path");
150 applicationConfig.addAlias("--db-sanity", "--option", TuttiConfigurationOption.DB_SANITY.getKey());
151
152
153 try {
154 applicationConfig.parse(args);
155
156 } catch (ArgumentsParserException e) {
157 throw new ApplicationTechnicalException(t("tutti.config.parse.error"), e);
158 }
159
160
161 File tuttiBasedir = applicationConfig.getOptionAsFile(
162 TuttiConfigurationOption.BASEDIR.getKey());
163
164 if (tuttiBasedir == null) {
165 tuttiBasedir = new File("");
166 }
167 if (!tuttiBasedir.isAbsolute()) {
168 tuttiBasedir = new File(tuttiBasedir.getAbsolutePath());
169 }
170 if (tuttiBasedir.getName().equals("..")) {
171 tuttiBasedir = tuttiBasedir.getParentFile().getParentFile();
172 }
173 if (tuttiBasedir.getName().equals(".")) {
174 tuttiBasedir = tuttiBasedir.getParentFile();
175 }
176 if (log.isInfoEnabled()) {
177 log.info("Application basedir: " + tuttiBasedir);
178 }
179 applicationConfig.setOption(
180 TuttiConfigurationOption.BASEDIR.getKey(),
181 tuttiBasedir.getAbsolutePath());
182 }
183
184 public void initConfig() {
185
186
187 adagioConfig = new AdagioConfiguration(applicationConfig);
188 AdagioConfiguration.setInstance(adagioConfig);
189
190 File directory = getDbDirectory();
191 ApplicationIOUtil.forceMkdir(directory, t("tutti.io.mkDir.error", directory));
192 directory = getDbAttachmentDirectory();
193 ApplicationIOUtil.forceMkdir(directory, t("tutti.io.mkDir.error", directory));
194 directory = getProtocolDirectory();
195 ApplicationIOUtil.forceMkdir(directory, t("tutti.io.mkDir.error", directory));
196 directory = getDbBackupDirectory();
197 ApplicationIOUtil.forceMkdir(directory, t("tutti.io.mkDir.error", directory));
198
199 File dataDirectory = getDataDirectory();
200 ApplicationIOUtil.forceMkdir(dataDirectory, t("tutti.io.mkDir.error", dataDirectory));
201
202 File tmpDirectory = getTmpDirectory();
203 if (tmpDirectory.exists()) {
204
205 try {
206 if (tmpDirectory.isFile()) {
207 ApplicationIOUtil.deleteFile(tmpDirectory, t("tutti.io.deleteTempDirectory.error", tmpDirectory));
208 } else {
209 ApplicationIOUtil.deleteDirectory(tmpDirectory, t("tutti.io.deleteTempDirectory.error", tmpDirectory));
210 }
211 } catch (Exception e) {
212 if (log.isErrorEnabled()) {
213 log.error("Can't delete temporary directory, but still go forward...",e);
214 }
215 }
216 }
217 ApplicationIOUtil.forceMkdir(tmpDirectory, t("tutti.io.mkDir.error", tmpDirectory));
218
219 ApplicationIOUtil.forceMkdir(getReportBackupDirectory(), t("tutti.io.mkDir.error", getReportBackupDirectory()));
220 ApplicationIOUtil.forceMkdir(getGenericFormatReportBackupDirectory(), t("tutti.io.mkDir.error", getGenericFormatReportBackupDirectory()));
221 }
222
223 public void prepareDirectories() {
224
225 File dataDirectory = getDataDirectory();
226 ApplicationIOUtil.forceMkdir(
227 dataDirectory,
228 t("tutti.io.mkDir.error", dataDirectory));
229
230 File tmpDirectory = getTmpDirectory();
231 if (tmpDirectory.exists()) {
232
233 try {
234 ApplicationIOUtil.deleteDirectory(
235 tmpDirectory,
236 t("tutti.io.deleteTempDirectory.error", tmpDirectory));
237 } catch (Exception e) {
238 if (log.isErrorEnabled()) {
239 log.error("Can't delete temporary directory, but still go forward...",e);
240 }
241 }
242
243 }
244 ApplicationIOUtil.forceMkdir(
245 tmpDirectory,
246 t("tutti.io.mkDir.error", tmpDirectory));
247
248 ApplicationIOUtil.forceMkdir(
249 getReportBackupDirectory(),
250 t("tutti.io.mkDir.error", getReportBackupDirectory()));
251
252 ApplicationIOUtil.forceMkdir(
253 getExportBackupDirectory(),
254 t("tutti.io.mkDir.error", getExportBackupDirectory()));
255 }
256
257 public File newTempFile(String basename) {
258 return newTempFile(basename, "");
259 }
260
261 public File newTempFile(String basename, String extension) {
262 return new File(getTmpDirectory(), basename + "_" + System.nanoTime() + extension);
263 }
264
265 public boolean isDbExists() {
266 File f = new File(getDbDirectory(), getDbName() + ".data");
267 return f.exists();
268 }
269
270 public File getConfigFile() {
271 if (configFile == null) {
272 File dir = getBasedir();
273 if (dir == null || !dir.exists() || !isFullLaunchMode()) {
274 dir = new File(applicationConfig.getUserConfigDirectory());
275 }
276 configFile = new File(dir, applicationConfig.getConfigFileName());
277 }
278 return configFile;
279 }
280
281 public String getHelpResourceWithLocale(String value) {
282 File directory = new File(getHelpDirectory(),
283 getI18nLocale().getLanguage());
284 File result = new File(directory, value);
285 return result.toString();
286 }
287
288 public void save() {
289
290 File file = getConfigFile();
291 if (log.isInfoEnabled()) {
292 log.info("Save configuration at: " + file);
293 }
294 try {
295 applicationConfig.save(file, false, optionKeyToNotSave);
296 } catch (IOException e) {
297 throw new ApplicationTechnicalException(
298 t("tutti.config.save.error", file), e);
299 }
300 }
301
302 @Override
303 public String toString() {
304 return ReflectionToStringBuilder.toString(this);
305 }
306
307
308
309
310
311 public void setSampleCategoryModel(SampleCategoryModel model) {
312 applicationConfig.setOption(TuttiConfigurationOption.SAMPLE_CATEGORY_MODEL.getKey(), String.valueOf(model));
313 }
314
315 public void setCsvSeparator(char c) {
316 applicationConfig.setOption(
317 TuttiConfigurationOption.CSV_SEPARATOR.getKey(), c + "");
318 }
319
320 public void setExportCountry(String exportCountryId) {
321 applicationConfig.setOption(
322 TuttiConfigurationOption.EXPORT_COUNTRY_ID.getKey(), exportCountryId);
323 }
324
325 public void setI18nLocale(Locale locale) {
326 applicationConfig.setOption(TuttiConfigurationOption.I18N_LOCALE.getKey(), locale.toString());
327 }
328
329 public void setProgramId(String programId) {
330 if (programId == null) {
331 programId = "";
332 }
333 applicationConfig.setOption(TuttiConfigurationOption.PROGRAM_ID.getKey(), programId);
334 }
335
336 public void setCruiseId(Integer cruiseId) {
337 if (cruiseId == null) {
338 applicationConfig.setOption(TuttiConfigurationOption.CRUISE_ID.getKey(), "");
339 }else {
340 applicationConfig.setOption(TuttiConfigurationOption.CRUISE_ID.getKey(), cruiseId.toString());
341 }
342 }
343
344 public void setProtocolId(String protocolId) {
345 if (protocolId == null) {
346 protocolId = "";
347 }
348 applicationConfig.setOption(TuttiConfigurationOption.PROTOCOL_ID.getKey(), protocolId);
349 }
350
351
352
353
354
355 public File getDbDirectory() {
356 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.DB_DIRECTORY.getKey());
357 }
358
359 public File getDbAttachmentDirectory() {
360 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.DB_ATTACHMENT_DIRECTORY.getKey());
361 }
362
363 public File getCacheDirectory() {
364 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.DB_CACHE_DIRECTORY.getKey());
365 }
366
367 public File getDbBackupDirectory() {
368 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.DB_BACKUP_DIRECTORY.getKey());
369 }
370
371 public File getProtocolDirectory() {
372 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.DB_PROTOCOL_DIRECTORY.getKey());
373 }
374
375 public String getDbName() {
376 return applicationConfig.getOption(TuttiConfigurationOption.DB_NAME.getKey());
377 }
378
379 public SampleCategoryModel getSampleCategoryModel() {
380 return applicationConfig.getOption(SampleCategoryModel.class, TuttiConfigurationOption.SAMPLE_CATEGORY_MODEL.getKey());
381 }
382
383 public String getJdbcUrl() {
384 return applicationConfig.getOption(TuttiConfigurationOption.JDBC_URL.getKey());
385 }
386
387 public Class getJdbcDriver() {
388 return applicationConfig.getOptionAsClass(TuttiConfigurationOption.JDBC_DRIVER.getKey());
389 }
390
391 public String getJdbcUsername() {
392 return applicationConfig.getOption(TuttiConfigurationOption.JDBC_USERNAME.getKey());
393 }
394
395 public String getJdbcPassword() {
396 return applicationConfig.getOption(TuttiConfigurationOption.JDBC_PASSWORD.getKey());
397 }
398
399 public Class getHibernateDialect() {
400 return applicationConfig.getOptionAsClass(TuttiConfigurationOption.HIBERNATE_DIALECT.getKey());
401 }
402
403 public boolean isSanityDb() {
404 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.DB_SANITY.getKey());
405 }
406
407 public boolean isHibernateShowSql() {
408 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.HIBERNATE_SHOW_SQL.getKey());
409 }
410
411 public boolean isHibernateUseSqlComment() {
412 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.HIBERNATE_USE_SQL_COMMENT.getKey());
413 }
414
415 public boolean isHibernateFormatSql() {
416 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.HIBERNATE_FORMAT_SQL.getKey());
417 }
418
419 public boolean isShowBatchLog() {
420 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.SHOW_BATCH_LOG.getKey());
421 }
422
423 public boolean isShowMemoryUsage() {
424 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.SHOW_MEMORY_USAGE.getKey());
425 }
426
427 public boolean isGenericFormatImportSkipBackup() {
428 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.GENERIC_FORMAT_IMPORT_SKIP_BACKUP.getKey());
429 }
430
431 public int getGenericFormatImportMaximumRowsInErrorsPerFile() {
432 return applicationConfig.getOptionAsInt(TuttiConfigurationOption.GENERIC_FORMAT_IMPORT_MAXIMUM_ROWS_IN_ERROR_PER_FILE.getKey());
433 }
434
435 public boolean isImportDbSkipBackup() {
436 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.IMPORT_DB_SKIP_BACKUP.getKey());
437 }
438
439 @Override
440 public String getApplicationName() {
441 return "Allegro Campagne";
442 }
443
444
445 @Override
446 public Version getVersion() {
447 return applicationConfig.getOptionAsVersion(TuttiConfigurationOption.VERSION.getKey());
448 }
449
450
451 public URL getSiteUrl() {
452 return applicationConfig.getOptionAsURL(TuttiConfigurationOption.SITE_URL.getKey());
453 }
454
455
456 public String getOrganizationName() {
457 return applicationConfig.getOption(TuttiConfigurationOption.ORGANIZATION_NAME.getKey());
458 }
459
460
461 public int getInceptionYear() {
462 return applicationConfig.getOptionAsInt(TuttiConfigurationOption.INCEPTION_YEAR.getKey());
463 }
464
465
466 public File getBasedir() {
467 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.BASEDIR.getKey());
468 }
469
470
471 public File getDataDirectory() {
472 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.DATA_DIRECTORY.getKey());
473 }
474
475
476 public File getReportHomeDirectory() {
477 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.REPORT_HOME_DIRECTORY.getKey());
478 }
479
480
481 public File getReportDirectory() {
482 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.REPORT_DIRECTORY.getKey());
483 }
484
485
486 public File getExportBackupDirectory() {
487 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.EXPORT_BACKUP_DIRECTORY.getKey());
488 }
489
490
491
492 public File getReportLogDirectory() {
493 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.REPORT_LOG_DIRECTORY.getKey());
494 }
495
496
497 public File getReportBackupDirectory() {
498 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.REPORT_BACKUP_DIRECTORY.getKey());
499 }
500
501
502 public File getGenericFormatReportBackupDirectory() {
503 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.GENERIC_FORMAT_REPORT_BACKUP_DIRECTORY.getKey());
504 }
505
506 public File getTmpDirectory() {
507 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.TMP_DIRECTORY.getKey());
508 }
509
510 public char getCsvSeparator() {
511 return applicationConfig.getOption(
512 TuttiConfigurationOption.CSV_SEPARATOR.getKey()).charAt(0);
513 }
514
515 public String getExportCountryId() {
516 return applicationConfig.getOption(
517 TuttiConfigurationOption.EXPORT_COUNTRY_ID.getKey());
518 }
519
520 public List<Integer> getSamplingOrderIds() {
521 ApplicationConfig.OptionList result = applicationConfig.getOptionAsList(TuttiConfigurationOption.SAMPLING_CATEGORY_ORDER_IDS.getKey());
522 return result.getOptionAsInt();
523 }
524
525 public WeightUnit getSpeciesWeightUnit() {
526 return applicationConfig.getOption(WeightUnit.class, TuttiConfigurationOption.WEIGHT_UNIT_SPECIES.getKey());
527 }
528
529 public WeightUnit getBenthosWeightUnit() {
530 return applicationConfig.getOption(WeightUnit.class, TuttiConfigurationOption.WEIGHT_UNIT_BENTHOS.getKey());
531 }
532
533 public WeightUnit getMarineLitterWeightUnit() {
534 return applicationConfig.getOption(WeightUnit.class, TuttiConfigurationOption.WEIGHT_UNIT_MARINE_LITTER.getKey());
535 }
536
537 public WeightUnit getIndividualObservationWeightUnit() {
538 return applicationConfig.getOption(WeightUnit.class, TuttiConfigurationOption.WEIGHT_UNIT_INDIVIDUAL_OBSERVATION.getKey());
539 }
540
541 public WeightUnit getAccidentalCatchWeightUnit() {
542 return applicationConfig.getOption(WeightUnit.class, TuttiConfigurationOption.WEIGHT_UNIT_ACCIDENTAL_CATCH.getKey());
543 }
544
545 public boolean isFullLaunchMode() {
546 return "full".equals(getTuttiLaunchMode());
547 }
548
549 public String getTuttiLaunchMode() {
550 return applicationConfig.getOption(TuttiConfigurationOption.LAUNCH_MODE.getKey());
551 }
552
553
554 public File getUIConfigFile() {
555 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.UI_CONFIG_FILE.getKey());
556 }
557
558
559 public File getStartActionFile() {
560 return applicationConfig.getOptionAsFile(TuttiConfigurationOption.START_ACTION_FILE.getKey());
561 }
562
563 public Float getDifferenceRateBetweenSortedAndTotalWeights() {
564 return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE.getKey());
565 }
566
567 public Float getDifferenceRateBetweenWeightAndRtpWeight() {
568 return applicationConfig.getOptionAsFloat(TuttiConfigurationOption.RTP_WEIGHTS_DIFFERENCE_RATE.getKey());
569 }
570
571 public boolean getPupitriImportMissingBatches() {
572 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES.getKey());
573 }
574
575 public String getTremieCarousselVesselId() {
576 return applicationConfig.getOption(TuttiConfigurationOption.TREMIE_CAROUSSEL_VESSEL_ID.getKey());
577 }
578
579 public boolean isAutoPopupNumberEditor() {
580 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.AUTO_POPUP_NUMBER_EDITOR.getKey());
581 }
582
583 public boolean isShowNumberEditorButton() {
584 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.SHOW_NUMBER_EDITOR_BUTTON.getKey());
585 }
586
587 public CoordinateEditorType getCoordinateEditorType() {
588 String value = applicationConfig.getOption(TuttiConfigurationOption.COORDINATE_EDITOR_TYPE.getKey());
589 return CoordinateEditorType.valueOf(value);
590 }
591
592 public String getProgramId() {
593 String result = applicationConfig.getOption(TuttiConfigurationOption.PROGRAM_ID.getKey());
594 return StringUtils.isBlank(result) ? null : result;
595 }
596
597 public Integer getCruiseId() {
598 String result = applicationConfig.getOption(TuttiConfigurationOption.CRUISE_ID.getKey());
599 return StringUtils.isBlank(result) ? null : Integer.valueOf(result);
600 }
601
602 public String getProtocolId() {
603 String result = applicationConfig.getOption(TuttiConfigurationOption.PROTOCOL_ID.getKey());
604 return StringUtils.isBlank(result) ? null : result;
605 }
606
607 public Color getColorRowInvalid() {
608 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_ROW_INVALID.getKey());
609 }
610
611 public Color getColorRowReadOnly() {
612 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_ROW_READ_ONLY.getKey());
613 }
614
615 public Color getColorCellWithValue() {
616 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_CELL_WITH_VALUE.getKey());
617 }
618
619 public Color getColorRowToConfirm() {
620 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_ROW_TO_CONFIRM.getKey());
621 }
622
623 public Color getColorComputedWeights() {
624 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_COMPUTED_WEIGHTS.getKey());
625 }
626
627 public Color getColorBlockingLayer() {
628 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_BLOCKING_LAYER.getKey());
629 }
630
631 public Color getColorAlternateRow() {
632 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_ALTERNATE_ROW.getKey());
633 }
634
635 public Color getColorSelectedRow() {
636 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_SELECTED_ROW.getKey());
637 }
638
639 public Color getColorWarningRow() {
640 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_WARNING_ROW.getKey());
641 }
642
643 public Color getColorCatch() {
644 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_CATCH.getKey());
645 }
646
647 public Color getColorSpecies() {
648 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_SPECIES.getKey());
649 }
650
651 public Color getColorBenthos() {
652 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_BENTHOS.getKey());
653 }
654
655 public Color getColorSpeciesOrBenthosUnsortedComputedWeightInWarning() {
656 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_SPECIES_OR_BENTHOS_UNSORTED_COMPUTED_WEIGHT_IN_WARNING.getKey());
657 }
658
659 public Color getColorMarineLitter() {
660 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_MARINE_LITTER.getKey());
661 }
662
663 public Color getColorHighlightInfoBackground() {
664 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_HIGHLIGHT_INFO_BACKGROUND.getKey());
665 }
666
667 public Color getColorHighlightInfoForeground() {
668 return applicationConfig.getOptionAsColor(TuttiConfigurationOption.COLOR_HIGHLIGHT_INFO_FOREGROUND.getKey());
669 }
670
671 @Override
672 public KeyStroke getShortcutClosePopup() {
673 return applicationConfig.getOptionAsKeyStroke(TuttiConfigurationOption.SHORTCUT_CLOSE_POPUP.getKey());
674 }
675
676 public int getMaxIndividualObservationRowsToCreate() {
677 return applicationConfig.getOptionAsInt(TuttiConfigurationOption.MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE.getKey());
678 }
679
680 public String getSamplingCodePrefix() {
681 return applicationConfig.getOption(TuttiConfigurationOption.SAMPLING_CODE_PREFIX.getKey());
682 }
683
684 public KeyStroke getShortCut(String actionName) {
685 return applicationConfig.getOptionAsKeyStroke(
686 "tutti.ui." + actionName);
687 }
688
689 public String getDateFormat() {
690 return applicationConfig.getOption(TuttiConfigurationOption.DATE_FORMAT.getKey());
691 }
692
693 public File getNewTmpDirectory(String name) {
694 return new File(getTmpDirectory(), name + "_" + System.nanoTime());
695 }
696
697
698 public File getI18nDirectory() {
699 return applicationConfig.getOptionAsFile(
700 TuttiConfigurationOption.I18N_DIRECTORY.getKey());
701 }
702
703 public Locale getI18nLocale() {
704 return applicationConfig.getOptionAsLocale(
705 TuttiConfigurationOption.I18N_LOCALE.getKey());
706 }
707
708 public File getHelpDirectory() {
709 return applicationConfig.getOptionAsFile(
710 TuttiConfigurationOption.HELP_DIRECTORY.getKey());
711 }
712
713 public String getUpdateApplicationUrl() {
714
715 return applicationConfig.getOption(TuttiConfigurationOption.UPDATE_APPLICATION_URL.getKey()).trim();
716 }
717
718 public String getUpdateDataUrl() {
719
720 return applicationConfig.getOption(TuttiConfigurationOption.UPDATE_DATA_URL.getKey()).trim();
721 }
722
723 public String getAdminPassword() {
724 return applicationConfig.getOption(TuttiConfigurationOption.ADMIN_PASSWORD.getKey());
725 }
726
727 public boolean isFullBluetoothScan() {
728 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.FULL_BLUETOOTH_SCAN.getKey());
729 }
730
731 public int getIchtyometerMaximumNumberOfAttemptToConnect() {
732 return applicationConfig.getOptionAsInt(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT.getKey());
733 }
734
735 public int getCaliperSerialPort() {
736 return applicationConfig.getOptionAsInt(TuttiConfigurationOption.CALIPER_SERIAL_PORT.getKey());
737 }
738
739 public Boolean isExternalDevicesVoiceEnabled() {
740 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.EXTERNAL_DEVICES_VOICE_ENABLED.getKey());
741 }
742
743 public Boolean isExternalDevicesReadsUnit() {
744 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.EXTERNAL_DEVICES_READS_UNIT.getKey());
745 }
746
747 public Boolean isExternalDevicesDataReceptionBeepEnabled() {
748 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.EXTERNAL_DEVICES_DATA_RECEPTION_BEEP_ENABLED.getKey());
749 }
750
751 public BeepFrequency getExternalDevicesDataReceptionBeepFrequency() {
752 return BeepFrequency.valueOf(applicationConfig.getOption(TuttiConfigurationOption.EXTERNAL_DEVICES_DATA_RECEPTION_BEEP_FREQUENCY.getKey()));
753 }
754
755 public Boolean isExternalDevicesErrorReceptionBeepEnabled() {
756 return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.EXTERNAL_DEVICES_ERROR_RECEPTION_BEEP_ENABLED.getKey());
757 }
758
759 public BeepFrequency getExternalDevicesErrorReceptionBeepFrequency() {
760 return BeepFrequency.valueOf(applicationConfig.getOption(TuttiConfigurationOption.EXTERNAL_DEVICES_ERROR_RECEPTION_BEEP_FREQUENCY.getKey()));
761 }
762
763 public String getJavaCommandPath() {
764 String path;
765 String commandName = windowsOS ? "java.exe" : "java";
766 if (isFullLaunchMode()) {
767 path = getBasedir().toPath().resolve("jre").resolve("bin").resolve(commandName).toFile().getAbsolutePath();
768 } else {
769 path = commandName;
770 }
771 return path;
772 }
773
774 private File reportJarPath;
775
776 public File getReportJarPath() {
777 if (reportJarPath == null) {
778
779 String commandName = "tutti-report-generator.jar";
780 if (isFullLaunchMode()) {
781
782 reportJarPath = getBasedir().toPath().resolve("tutti").resolve("report-generator").resolve(commandName).toFile();
783
784 } else {
785
786 reportJarPath = guessReportJarPath(commandName);
787
788 if (reportJarPath == null) {
789
790 if (log.isWarnEnabled()) {
791 log.warn("You must defined yourself the path to " + commandName);
792 }
793
794 } else {
795
796 if (log.isInfoEnabled()) {
797 log.info("Guess reportGenerarorPath: "+reportJarPath);
798 }
799 }
800
801 }
802 }
803
804 return reportJarPath;
805
806 }
807
808 public void setReportJarPath(File reportJarPath) {
809 this.reportJarPath = reportJarPath;
810 }
811
812 protected File guessReportJarPath(String commandName) {
813
814 {
815 File file = getBasedir().toPath().resolve("tutti-report-generator").resolve(commandName).toFile();
816 if (file.exists()) {
817 return file;
818 }
819 }
820
821 {
822 File file = new File("").toPath().resolve("target").resolve("tutti-report-generator").resolve(commandName).toFile();
823 if (file.exists()) {
824 return file;
825 }
826 }
827
828 {
829 File file = new File("tutti-ui-swing").toPath().resolve("target").resolve("tutti-report-generator").resolve(commandName).toFile();
830 if (file.exists()) {
831 return file;
832 }
833 }
834
835 return null;
836
837 }
838 }