View Javadoc
1   package net.sumaris.core.config;
2   
3   /*-
4    * #%L
5    * SUMARiS :: Sumaris Core Shared
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2018 SUMARiS Consortium
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU General Public License as
13   * published by the Free Software Foundation, either version 3 of the
14   * License, or (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 General Public
22   * License along with this program.  If not, see
23   * <http://www.gnu.org/licenses/gpl-3.0.html>.
24   * #L%
25   */
26  
27  import net.sumaris.core.dao.technical.hibernate.spatial.HSQLSpatialDialect;
28  import org.nuiton.config.ConfigOptionDef;
29  import org.nuiton.version.Version;
30  
31  import java.io.File;
32  import java.net.URL;
33  import java.util.Locale;
34  
35  import static org.nuiton.i18n.I18n.n;
36  
37  /**
38   * All application configuration options.
39   *
40   * @author Benoit Lavenier <benoit.lavenier@e-is.pro>
41   * @since 1.0
42   */
43  public enum SumarisConfigurationOption implements ConfigOptionDef {
44  
45      // ------------------------------------------------------------------------//
46      // -- READ-ONLY OPTIONS ---------------------------------------------------//
47      // ------------------------------------------------------------------------//
48  
49      APP_NAME(
50              "sumaris.name",
51              n("sumaris.config.option.app.name.description"),
52              "SUMARiS",
53              String.class),
54  
55      VERSION(
56              "sumaris.version",
57              n("sumaris.config.option.persistence.version.description"),
58              "1.0.0",
59              Version.class),
60  
61      BASEDIR(
62              "sumaris.basedir",
63              n("sumaris.config.option.basedir.description"),
64              "${user.home}/.${sumaris.name}",
65              File.class),
66  
67      DATA_DIRECTORY(
68              "sumaris.data.directory",
69              n("sumaris.config.option.data.directory.description"),
70              "${sumaris.basedir}/data",
71              File.class),
72  
73      I18N_DIRECTORY(
74              "sumaris.i18n.directory",
75              n("sumaris.config.option.i18n.directory.description"),
76              "${sumaris.basedir}/i18n",
77              File.class),
78  
79      TMP_DIRECTORY(
80              "sumaris.tmp.directory",
81              n("sumaris.config.option.tmp.directory.description"),
82              "${sumaris.data.directory}/temp",
83              File.class),
84  
85      DB_DIRECTORY(
86              "sumaris.persistence.db.directory",
87              n("sumaris.config.option.persistence.db.directory.description"),
88              "${sumaris.data.directory}/db",
89              File.class),
90  
91      DB_ATTACHMENT_DIRECTORY(
92              "sumaris.persistence.db.attachment.directory",
93              n("sumaris.config.option.persistence.db.attachment.directory.description"),
94              "${sumaris.data.directory}/meas_files",
95              File.class),
96  
97      DB_NAME(
98              "sumaris.persistence.db.name",
99              n("sumaris.config.option.persistence.db.name.description"),
100             "sumaris",
101             String.class),
102 
103     DB_HOST(
104             "sumaris.persistence.db.host",
105             n("sumaris.config.option.persistence.db.host.description"),
106             "",
107             String.class),
108 
109     DB_PORT(
110             "sumaris.persistence.db.port",
111             n("sumaris.config.option.persistence.db.port.description"),
112             "",
113             String.class),
114 
115     DB_VALIDATION_QUERY(
116             "sumaris.persistence.db.validation-query",
117             n("sumaris.persistence.db.validation-query.description"),
118             "SELECT COUNT(*) FROM SYSTEM_VERSION",
119             String.class),
120 
121     DB_CREATE_SCRIPT_PATH(
122             "sumaris.persistence.db.script",
123             n("sumaris.config.option.db.script.description"),
124             "classpath:net/sumaris/core/db/changelog/sumaris.script",
125             String.class,
126             false),
127 
128     DB_TIMEZONE(
129             "sumaris.persistence.db.timezone",
130             n("sumaris.config.option.db.timezone.description"),
131             "${user.timezone}",
132             String.class,
133             false),
134 
135     DATASOURCE_TYPE(
136             "sumaris.persistence.datasource.type",
137             n("sumaris.persistence.datasource.type.description"),
138             "local",
139             String.class),
140 
141     DATASOURCE_JNDI_NAME(
142             "sumaris.persistence.jndi-name",
143             n("sumaris.config.option.persistence.jndi-name.description"),
144             "sumaris-ds",
145             String.class),
146 
147     JDBC_USERNAME(
148             "spring.datasource.username",
149             n("sumaris.config.option.spring.datasource.username.description"),
150             "sa",
151             String.class),
152 
153     JDBC_PASSWORD(
154             "spring.datasource.password",
155             n("sumaris.config.option.spring.datasource.password.description"),
156             "",
157             String.class),
158 
159     JDBC_URL(
160             "spring.datasource.url",
161             n("sumaris.config.option.spring.datasource.url.description"),
162             "jdbc:hsqldb:file:${sumaris.persistence.db.directory}/${sumaris.persistence.db.name}",
163             String.class, false),
164 
165     JDBC_CATALOG(
166             "spring.jpa.properties.hibernate.default_catalog",
167             n("sumaris.config.option.hibernate.default_catalog.description"),
168             "PUBLIC",
169             String.class),
170 
171     JDBC_SCHEMA(
172             "spring.jpa.properties.hibernate.default_schema",
173             n("sumaris.config.option.hibernate.default_schema.description"),
174             "PUBLIC",
175             String.class),
176 
177     JDBC_DRIVER(
178             "spring.datasource.driver-class-name",
179             n("sumaris.config.option.spring.datasource.driver-class-name.description"),
180             "org.hsqldb.jdbc.JDBCDriver",
181             Class.class),
182 
183     JDBC_BATCH_SIZE(
184             "sumaris.persistence.jdbc.batch-size",
185             n("sumaris.config.option.persistence.jdbc.batch-size.description"),
186             "15",
187             Integer.class),
188 
189     HIBERNATE_DIALECT(
190             "spring.jpa.database-platform",
191             n("sumaris.config.option.spring.jpa.database-platform.description"),
192             HSQLSpatialDialect.class.getName(),
193             Class.class),
194 
195     HIBERNATE_ENTITIES_PACKAGE(
196             "sumaris.persistence.hibernate.entities.package",
197             n("sumaris.config.option.persistence.hibernate.entities.package.description"),
198             "net.sumaris.core.model",
199             Class.class),
200 
201     DEBUG_ENTITY_LOAD(
202             "sumaris.persistence.hibernate.load.debug",
203             n("sumaris.config.option.persistence.hibernate.load.debug.description"),
204             Boolean.FALSE.toString(),
205             boolean.class),
206 
207     SITE_URL(
208             "sumaris.site.url",
209             n("sumaris.config.option.site.url.description"),
210             "https://www.sumaris.net",
211             URL.class),
212 
213     SITE_DOC_URL(
214             "sumaris.site.doc.url",
215             n("sumaris.config.option.site.doc.url.description"),
216             "http://doc.e-is.pro/sumaris",
217             URL.class),
218 
219     ORGANIZATION_NAME(
220             "sumaris.organizationName",
221             n("sumaris.config.option.organizationName.description"),
222             "SUMARiS consortium, E-IS.pro",
223             String.class),
224 
225     INCEPTION_YEAR(
226             "sumaris.inceptionYear",
227             n("sumaris.config.option.inceptionYear.description"),
228             "2011",
229             Integer.class),
230 
231     // ------------------------------------------------------------------------//
232     // -- DATA CONSTANTS --------------------------------------------------//
233     // ------------------------------------------------------------------------//
234 
235     STATUS_ID_TEMPORARY(
236             "sumaris.enumeration.StatusId.TEMPORARY",
237             n("sumaris.enumeration.StatusId.TEMPORARY.description"),
238             "2",
239             String.class,
240             false),
241 
242     STATUS_ID_ENABLE(
243             "sumaris.enumeration.StatusId.ENABLE",
244             n("sumaris.enumeration.StatusId.ENABLE.description"),
245             "1",
246             String.class,
247             false),
248 
249     UNIT_ID_NONE(
250             "sumaris.enumeration.UnitId.NONE",
251             n("sumaris.enumeration.UnitId.NONE.description"),
252             "0",
253             Integer.class,
254             false),
255 
256     MATRIX_ID_INDIVIDUAL(
257             "sumaris.enumeration.MatrixId.INDIVIDUAL",
258             n("sumaris.enumeration.MatrixId.INDIVIDUAL.description"),
259             "2",
260             Integer.class,
261             false),
262 
263     IMPORT_NB_YEARS_DATA_HISTORY (
264             "sumaris.synchro.import.nbYearDataHistory",
265             n("sumaris.config.option.synchro.import.nbYearDataHistory.description"),
266             "2",
267             Integer.class,
268             false),
269 
270     IMPORT_DATA_MAX_ROOT_ROW_COUNT(
271             "sumaris.synchro.import.data.maxRootRowCount",
272             n("sumaris.config.option.synchro.import.data.maxRootRowCount.description"),
273             "-1",
274             Integer.class,
275             false),
276 
277     EXPORT_DATA_UPDATE_DATE_DELAY(
278             "sumaris.synchro.export.updateDate.offset",
279             n("sumaris.config.option.synchro.export.data.updateDate.offset.description"),
280             String.valueOf(5 * 60), /* 5 min */
281             Integer.class,
282             false),
283 
284     EXPORT_DATA_UPDATE_DATE_SHORT_DELAY(
285             "sumaris.synchro.export.updateDate.offset.short",
286             n("sumaris.config.option.synchro.export.data.updateDate.offset.short.description"),
287             String.valueOf(30), /* 30 sec */
288             Integer.class,
289             false),
290 
291     IMPORT_REFERENTIAL_UPDATE_DATE_OFFSET(
292             "sumaris.synchro.import.updateDate.offset",
293             n("sumaris.config.option.synchro.import.referential.updateDate.offset.description"),
294             String.valueOf(-60), /* -1 min */
295             Integer.class,
296             false),
297 
298     IMPORT_REFERENTIAL_STATUS_INCLUDES(
299             "sumaris.synchro.import.referential.status.includes",
300             n("sumaris.config.option.synchro.import.referential.status.includes.description"),
301             null, /* all */
302             String.class,
303             false),
304 
305     SYNCHRO_PROGRAM_CODES_INCLUDES(
306             "sumaris.synchro.program.codes",
307             n("sumaris.config.option.synchro.program.codes.description"),
308             "",
309             String.class,
310             false),
311 
312     TIMEZONE(
313             "sumaris.timezone",
314             n("sumaris.config.option.timezone.description"),
315             "",
316             String.class,
317             false),
318 
319     // ------------------------------------------------------------------------//
320     // -- READ-WRITE OPTIONS --------------------------------------------------//
321     // ------------------------------------------------------------------------//
322 
323     DB_BACKUP_DIRECTORY(
324             "sumaris.persistence.db.backup.directory",
325             n("sumaris.config.option.persistence.db.backup.directory.description"),
326             "${sumaris.data.directory}/db-backup",
327             File.class,
328             false),
329     HIBERNATE_SHOW_SQL(
330             "spring.jpa.show-sql",
331             n("sumaris.config.option.spring.jpa.show-sql.description"),
332             Boolean.FALSE.toString(),
333             boolean.class,
334             false),
335 
336     HIBERNATE_USE_SQL_COMMENT(
337             "sumaris.persistence.hibernate.useSqlComment",
338             n("sumaris.config.option.persistence.hibernate.useSqlComment.description"),
339             Boolean.FALSE.toString(),
340             boolean.class,
341             false),
342 
343     HIBERNATE_FORMAT_SQL(
344             "sumaris.persistence.hibernate.formatSql",
345             n("sumaris.config.option.persistence.hibernate.formatSql.description"),
346             Boolean.FALSE.toString(),
347             boolean.class,
348             false),
349 
350     HIBERNATE_SECOND_LEVEL_CACHE(
351             "sumaris.persistence.hibernate.useSecondLevelCache",
352             n("sumaris.config.option.persistence.hibernate.useSecondLevelCache.description"),
353             Boolean.FALSE.toString(),
354             boolean.class,
355             false),
356 
357     HIBERNATE_CLIENT_QUERIES_FILE(
358             "sumaris.persistence.hibernate.queriesFile",
359             n("sumaris.config.option.persistence.hibernate.queriesFile.description"),
360             "queries-failsafe.hbm.xml",
361             String.class,
362             false),
363 
364     LIQUIBASE_RUN_AUTO(
365             "spring.liquibase.enabled",
366             n("sumaris.config.option.liquibase.should.run.description"),
367             Boolean.TRUE.toString(),
368             boolean.class,
369             false),
370 
371     LIQUIBASE_RUN_COMPACT(
372             "spring.liquibase.compact.enabled",
373             n("sumaris.config.option.liquibase.should.compact.description"),
374             Boolean.FALSE.toString(),
375             boolean.class,
376             false),
377 
378     LIQUIBASE_CHANGE_LOG_PATH(
379             "spring.liquibase.change-log",
380             n("sumaris.config.option.liquibase.changelog.path.description"),
381             "classpath:net/sumaris/core/db/changelog/db-changelog-master.xml",
382             String.class,
383             false),
384 
385     LIQUIBASE_DIFF_TYPES(
386             "sumaris.persistence.liquibase.diff.types",
387             n("sumaris.config.option.liquibase.diff.types.description"),
388             null,
389             String.class,
390             false),
391 
392     LIQUIBASE_OUTPUT_FILE(
393             "sumaris.persistence.liquibase.output.file",
394             n("sumaris.config.option.liquibase.output.file.description"),
395             null,
396             File.class,
397             false),
398 
399     LIQUIBASE_FORCE_OUTPUT_FILE(
400             "sumaris.persistence.liquibase.output.force",
401             n("sumaris.config.option.liquibase.output.force.description"),
402             Boolean.FALSE.toString(),
403             Boolean.class,
404             false),
405 
406     CSV_SEPARATOR(
407             "sumaris.csv.separator",
408             n("sumaris.config.option.csv.separator.description"),
409             ";",
410             String.class,
411             false),
412     VALUE_SEPARATOR(
413             "sumaris.value.separator",
414             n("sumaris.config.option.value.separator.description"),
415             ",",
416             String.class,
417             false),
418     ATTRIBUTE_SEPARATOR(
419             "sumaris.attribute.separator",
420             n("sumaris.config.option.attribute.separator.description"),
421             ".",
422             String.class,
423             false),
424 
425     /*
426     * Application options
427     */
428 
429     I18N_LOCALE(
430             "sumaris.i18n.locale",
431             n("sumaris.config.option.i18n.locale.description"),
432             Locale.FRANCE.getCountry(),
433             Locale.class,
434             false),
435 
436     LAUNCH_MODE(
437             "sumaris.launch.mode",
438             n("sumaris.config.option.launch.mode.description"),
439             LaunchModeEnum.development.name(),
440             String.class),
441 
442     DEFAULT_QUALITY_FLAG(
443             "sumaris.persistence.qualityFlagId.default",
444             n("sumaris.config.option.persistence.qualityFlagId.default.description"),
445             String.valueOf(0),
446             Integer.class),
447 
448     SEQUENCE_START_WITH(
449             "sumaris.persistence.sequence.startWith",
450             n("sumaris.config.option.persistence.sequence.startWith.description"),
451             String.valueOf(1),
452             Integer.class),
453 
454     SEQUENCE_INCREMENT(
455             "sumaris.persistence.sequence.increment",
456             n("sumaris.config.option.persistence.sequence.increment.description"),
457             null, // null as default to let Hibernate use allocationSize in model (@see javax.persistence.SequenceGenerator.allocationSize)
458             Integer.class),
459 
460     SEQUENCE_SUFFIX(
461             "sumaris.persistence.sequence.suffix",
462             n("sumaris.config.option.persistence.sequence.suffix.description"),
463             "_SEQ",
464             String.class),
465 
466     INIT_STATISTICAL_RECTANGLES(
467             "sumaris.persistence.init.statisticalRectangles",
468             n("sumaris.config.option.persistence.init.statisticalRectangles.description"),
469             Boolean.TRUE.toString(),
470             Boolean.class),
471 
472     PRESERVE_HISTORICAL_MEASUREMENTS(
473             "sumaris.persistence.preserve.historicalMeasurements",
474             n("sumaris.config.option.persistence.preserve.historicalMeasurements.description"),
475             Boolean.FALSE.toString(),
476             Boolean.class)
477 
478     ;
479 
480     /** Configuration key. */
481     private final String key;
482 
483     /** I18n key of option description */
484     private final String description;
485 
486     /** Type of option */
487     private final Class<?> type;
488 
489     /** Default value of option. */
490     private String defaultValue;
491 
492     /** Flag to not keep option value on disk */
493     private boolean isTransient;
494 
495     /** Flag to not allow option value modification */
496     private boolean isFinal;
497 
498     SumarisConfigurationOption(String key,
499                                String description,
500                                String defaultValue,
501                                Class<?> type,
502                                boolean isTransient) {
503         this.key = key;
504         this.description = description;
505         this.defaultValue = defaultValue;
506         this.type = type;
507         this.isTransient = isTransient;
508         this.isFinal = isTransient;
509     }
510 
511     SumarisConfigurationOption(String key,
512                                String description,
513                                String defaultValue,
514                                Class<?> type) {
515         this(key, description, defaultValue, type, true);
516     }
517 
518     /** {@inheritDoc} */
519     @Override
520     public String getKey() {
521         return key;
522     }
523 
524     /** {@inheritDoc} */
525     @Override
526     public Class<?> getType() {
527         return type;
528     }
529 
530     /** {@inheritDoc} */
531     @Override
532     public String getDescription() {
533         return description;
534     }
535 
536     /** {@inheritDoc} */
537     @Override
538     public String getDefaultValue() {
539         return defaultValue;
540     }
541 
542     /** {@inheritDoc} */
543     @Override
544     public boolean isTransient() {
545         return isTransient;
546     }
547 
548     /** {@inheritDoc} */
549     @Override
550     public boolean isFinal() {
551         return isFinal;
552     }
553 
554     /** {@inheritDoc} */
555     @Override
556     public void setDefaultValue(String defaultValue) {
557         this.defaultValue = defaultValue;
558     }
559 
560     /** {@inheritDoc} */
561     @Override
562     public void setTransient(boolean newValue) {
563         // not used
564     }
565 
566     /** {@inheritDoc} */
567     @Override
568     public void setFinal(boolean newValue) {
569         // not used
570     }
571 }