View Javadoc
1   package fr.ifremer.quadrige3.core.config;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: Quadrige3 Core Shared
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2017 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (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 Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  
27  
28  import org.hibernate.dialect.HSQLDialect;
29  import org.nuiton.config.ConfigOptionDef;
30  import org.nuiton.version.Version;
31  
32  import java.io.File;
33  import java.net.URL;
34  import java.util.Locale;
35  
36  import static org.nuiton.i18n.I18n.n;
37  
38  /**
39   * All application configuration options.
40   *
41   * @author Benoit Lavenier <benoit.lavenier@e-is.pro>
42   * @since 1.0
43   */
44  public enum QuadrigeConfigurationOption implements ConfigOptionDef {
45  
46      // -------------------- //
47      // --- MAIN OPTIONS --- //
48      // -------------------- //
49  
50      BASEDIR(
51              "quadrige3.basedir",
52              n("quadrige3.config.option.basedir.description"),
53              "${user.home}/.quadrige3",
54              File.class),
55  
56      DATA_DIRECTORY(
57              "quadrige3.data.directory",
58              n("quadrige3.config.option.data.directory.description"),
59              "${quadrige3.basedir}/data",
60              File.class),
61  
62      I18N_DIRECTORY(
63              "quadrige3.i18n.directory",
64              n("quadrige3.config.option.i18n.directory.description"),
65              "${quadrige3.basedir}/i18n",
66              File.class),
67  
68      TMP_DIRECTORY(
69              "quadrige3.tmp.directory",
70              n("quadrige3.config.option.tmp.directory.description"),
71              "${quadrige3.data.directory}/temp",
72              File.class),
73  
74      DB_DIRECTORY(
75              "quadrige3.persistence.db.directory",
76              n("quadrige3.config.option.persistence.db.directory.description"),
77              "${quadrige3.data.directory}/db",
78              File.class),
79  
80      DB_ATTACHMENT_DIRECTORY(
81              "quadrige3.persistence.db.attachment.directory",
82              n("quadrige3.config.option.persistence.db.attachment.directory.description"),
83              "${quadrige3.data.directory}/meas_files",
84              File.class),
85  
86      DB_PHOTO_DIRECTORY(
87              "quadrige3.persistence.db.photo.directory",
88              n("quadrige3.config.option.persistence.db.photo.directory.description"),
89              "${quadrige3.data.directory}/photos",
90              File.class),
91  
92      DB_CACHE_DIRECTORY(
93              "quadrige3.persistence.db.cache.directory",
94              n("quadrige3.config.option.persistence.db.cache.directory.description"),
95              "${quadrige3.data.directory}/dbcache",
96              File.class),
97  
98      DB_NAME(
99              "quadrige3.persistence.db.name",
100             n("quadrige3.config.option.persistence.db.name.description"),
101             "quadrige3",
102             String.class),
103 
104     DB_HOST(
105             "quadrige3.persistence.db.host",
106             n("quadrige3.config.option.persistence.db.host.description"),
107             "",
108             String.class),
109 
110     DB_PORT(
111             "quadrige3.persistence.db.port",
112             n("quadrige3.config.option.persistence.db.port.description"),
113             "",
114             String.class),
115 
116     DB_VALIDATION_QUERY(
117             "quadrige3.persistence.db.validation-query",
118             n("quadrige3.persistence.db.validation-query.description"),
119             "SELECT COUNT(*) FROM STATUS",
120             String.class),
121 
122     DB_CREATE_SCRIPT_PATH(
123             "quadrige3.persistence.db.script",
124             n("quadrige3.config.option.db.script.description"),
125             "classpath:fr/ifremer/quadrige3/core/db/changelog/${quadrige3.persistence.dbms}/quadrige3.script",
126             String.class,
127             false),
128 
129     DB_TIMEZONE(
130             "quadrige3.persistence.db.timezone",
131             n("quadrige3.config.option.db.timezone.description"),
132             "${user.timezone}",
133             String.class,
134             false),
135 
136     DBMS(
137             "quadrige3.persistence.dbms",
138             n("quadrige3.persistence.dbms.description"),
139             "hsqldb",
140             String.class),
141 
142     DATASOURCE_TYPE(
143             "quadrige3.persistence.datasource.type",
144             n("quadrige3.persistence.datasource.type.description"),
145             "local",
146             String.class),
147 
148     DATASOURCE_JNDI_NAME(
149             "quadrige3.persistence.jndi-name",
150             n("quadrige3.config.option.persistence.jndi-name.description"),
151             "quadrige3-ds",
152             String.class),
153 
154     JDBC_USERNAME(
155             "quadrige3.persistence.jdbc.username",
156             n("quadrige3.config.option.persistence.jdbc.username.description"),
157             "sa",
158             String.class),
159 
160     JDBC_PASSWORD(
161             "quadrige3.persistence.jdbc.password",
162             n("quadrige3.config.option.persistence.jdbc.password.description"),
163             "",
164             String.class),
165 
166     JDBC_URL(
167             "quadrige3.persistence.jdbc.url",
168             n("quadrige3.config.option.persistence.jdbc.url.description"),
169             "jdbc:hsqldb:file:${quadrige3.persistence.db.directory}/${quadrige3.persistence.db.name}",
170             String.class, false),
171 
172     JDBC_CATALOG(
173             "quadrige3.persistence.jdbc.catalog",
174             n("quadrige3.config.option.persistence.jdbc.catalog.description"),
175             "PUBLIC",
176             String.class),
177 
178     JDBC_SCHEMA(
179             "quadrige3.persistence.jdbc.schema",
180             n("quadrige3.config.option.persistence.jdbc.schema.description"),
181             "PUBLIC",
182             String.class),
183 
184     JDBC_DRIVER(
185             "quadrige3.persistence.jdbc.driver",
186             n("quadrige3.config.option.persistence.jdbc.driver.description"),
187             "org.hsqldb.jdbcDriver",
188             Class.class),
189 
190     JDBC_BATCH_SIZE(
191             "quadrige3.persistence.jdbc.batch-size",
192             n("quadrige3.config.option.persistence.jdbc.batch-size.description"),
193             "15",
194             Integer.class),
195 
196     POSTGIS_SCHEMA(
197             "quadrige3.persistence.postgis.schema",
198             n("quadrige3.config.option.persistence.postgis.schema.description"),
199             "postgis",
200             String.class),
201 
202     HIBERNATE_DIALECT(
203             "quadrige3.persistence.hibernate.dialect",
204             n("quadrige3.config.option.persistence.hibernate.dialect.description"),
205             HSQLDialect.class.getName(),
206             Class.class),
207 
208     DEBUG_ENTITY_LOAD(
209             "quadrige3.persistence.hibernate.load.debug",
210             n("quadrige3.config.option.persistence.hibernate.load.debug.description"),
211             Boolean.FALSE.toString(),
212             boolean.class),
213 
214     VERSION(
215             "quadrige3.version",
216             n("quadrige3.config.option.persistence.version.description"),
217             "2.4.0",
218             Version.class),
219 
220     SITE_URL(
221             "quadrige3.site.url",
222             n("quadrige3.config.option.site.url.description"),
223             "http://www.ifremer.fr/maven/reports/quadrige3",
224             URL.class),
225 
226     ORGANIZATION_NAME(
227             "quadrige3.organizationName",
228             n("quadrige3.config.option.organizationName.description"),
229             "Ifremer",
230             String.class),
231 
232     INCEPTION_YEAR(
233             "quadrige3.inceptionYear",
234             n("quadrige3.config.option.inceptionYear.description"),
235             "2011",
236             Integer.class),
237 
238     // --------------------- //
239     // -- DATA CONSTANTS --- //
240     // --------------------- //
241 
242     STATUS_CODE_TEMPORARY(
243             "quadrige3.enumeration.StatusCode.TEMPORARY",
244             n("quadrige3.enumeration.StatusCode.TEMPORARY.description"),
245             "2",
246             String.class),
247 
248     STATUS_CODE_ENABLE(
249             "quadrige3.enumeration.StatusCode.ENABLE",
250             n("quadrige3.enumeration.StatusCode.ENABLE.description"),
251             "1",
252             String.class),
253 
254     // ----------------- //
255     // -- DB OPTIONS --- //
256     // ----------------- //
257 
258     DB_BACKUP_DIRECTORY(
259             "quadrige3.persistence.db.backup.directory",
260             n("quadrige3.config.option.persistence.db.backup.directory.description"),
261             "${quadrige3.data.directory}/dbbackup",
262             File.class,
263             false),
264     DB_ENUMERATION_RESOURCE(
265 	        "quadrige3.persistence.db.enumeration.resource",
266 	        n("quadrige3.config.option.persistence.db.enumeration.resource"),
267 	        "classpath*:quadrige3-db-enumerations.properties",
268 	        String.class,
269 	        false),
270     HIBERNATE_SHOW_SQL(
271             "quadrige3.persistence.hibernate.showSql",
272             n("quadrige3.config.option.persistence.hibernate.showSql.description"),
273             Boolean.FALSE.toString(),
274             boolean.class,
275             false),
276 
277     HIBERNATE_USE_SQL_COMMENT(
278             "quadrige3.persistence.hibernate.useSqlComment",
279             n("quadrige3.config.option.persistence.hibernate.useSqlComment.description"),
280             Boolean.FALSE.toString(),
281             boolean.class,
282             false),
283 
284     HIBERNATE_FORMAT_SQL(
285             "quadrige3.persistence.hibernate.formatSql",
286             n("quadrige3.config.option.persistence.hibernate.formatSql.description"),
287             Boolean.FALSE.toString(),
288             boolean.class,
289             false),
290 
291     HIBERNATE_SECOND_LEVEL_CACHE(
292             "quadrige3.persistence.hibernate.useSecondLevelCache",
293             n("quadrige3.config.option.persistence.hibernate.useSecondLevelCache.description"),
294             Boolean.FALSE.toString(),
295             boolean.class,
296             false),
297 
298     HIBERNATE_CLIENT_QUERIES_FILE(
299             "quadrige3.persistence.hibernate.queriesFile",
300             n("quadrige3.config.option.persistence.hibernate.queriesFile.description"),
301             "queries-failsafe.hbm.xml",
302             String.class,
303             false),
304 
305     LIQUIBASE_RUN_AUTO(
306             "quadrige3.persistence.liquibase.should.run",
307             n("quadrige3.config.option.liquibase.should.run.description"),
308             Boolean.FALSE.toString(),
309             boolean.class,
310             false),
311 
312     LIQUIBASE_CHANGE_LOG_PATH(
313             "quadrige3.persistence.liquibase.changelog.path",
314             n("quadrige3.config.option.liquibase.changelog.path.description"),
315             "classpath:fr/ifremer/quadrige3/core/db/changelog/${quadrige3.persistence.dbms}/db-changelog-master.xml",
316             String.class,
317             false),
318 
319     LIQUIBASE_DIFF_TYPES(
320             "quadrige3.persistence.liquibase.diff.types",
321             n("quadrige3.config.option.liquibase.diff.types.description"),
322             null,
323             String.class,
324             false),
325 
326     LIQUIBASE_OUTPUT_FILE(
327             "quadrige3.persistence.liquibase.output.file",
328             n("quadrige3.config.option.liquibase.output.file.description"),
329             null,
330             File.class,
331             false),
332 
333     LIQUIBASE_FORCE_OUTPUT_FILE(
334             "quadrige3.persistence.liquibase.output.force",
335             n("quadrige3.config.option.liquibase.output.force.description"),
336             Boolean.FALSE.toString(),
337             Boolean.class,
338             false),
339 
340     CSV_SEPARATOR(
341             "quadrige3.csv.separator",
342             n("quadrige3.config.option.csv.separator.description"),
343             ";",
344             String.class,
345             false),
346     VALUE_SEPARATOR(
347             "quadrige3.value.separator",
348             n("quadrige3.config.option.value.separator.description"),
349             ",",
350             String.class,
351             false),
352     ATTRIBUTE_SEPARATOR(
353             "quadrige3.attribute.separator",
354             n("quadrige3.config.option.attribute.separator.description"),
355             ".",
356             String.class,
357             false),
358 
359     I18N_LOCALE(
360             "quadrige3.i18n.locale",
361             n("quadrige3.config.option.i18n.locale.description"),
362             Locale.FRANCE.toString(),
363             Locale.class,
364             false),
365 
366     SERVER_PORT(
367             "quadrige3.server.port",
368             n("quadrige3.config.option.server.port.description"),
369             "8888",
370             Integer.class,
371             false),
372 
373     ADMIN_EMAIL(
374             "quadrige3.admin.email",
375             n("quadrige3.config.option.admin.email.description"),
376             "q2support@ifremer.fr",
377             String.class,
378             false),
379 
380     // ------------------------------ //
381     // -- SYNCHRONIZATION OPTIONS --- //
382     // ------------------------------ //
383 
384     SYNCHRONIZATION_USE_SERVER(
385             "quadrige3.synchronization.useServer",
386             n("quadrige3.config.option.synchro.useServer.description"),
387             String.valueOf(true),
388             Boolean.class,
389             false),
390 
391     SYNCHRONIZATION_SITE_URL(
392             "quadrige3.synchronization.site.url",
393             n("quadrige3.config.option.synchro.site.url.description"),
394             null,
395             String.class,
396             false),
397     SYNCHRONIZATION_SITE_TIMEOUT(
398             "quadrige3.synchronization.site.timeout",
399             n("quadrige3.config.option.synchro.site.timeout.description"),
400             "30000",
401             Integer.class,
402             false),
403     SYNCHRONIZATION_REFRESH_TIMEOUT(
404             "quadrige3.synchronization.refresh.timeout",
405             n("quadrige3.config.option.synchro.refresh.timeout.description"),
406             "100",
407             Integer.class,
408             false),
409     SYNCHRONIZATION_RETRY_COUNT(
410             "quadrige3.synchronization.retry.count",
411             n("quadrige3.config.option.synchro.retry.count.description"),
412             "10",
413             Integer.class,
414             false),
415     SYNCHRONIZATION_RETRY_TIMEOUT(
416             "quadrige3.synchronization.retry.timeout",
417             n("quadrige3.config.option.synchro.retry.timeout.description"),
418             "5000",
419             Integer.class,
420             false),
421     SYNCHRONIZATION_DIRECTORY(
422             "quadrige3.synchro.directory",
423             n("quadrige3.config.option.synchro.directory.description"),
424             "${quadrige3.data.directory}/synchro",
425             File.class),
426 
427     SYNCHRONIZATION_ZIP_FILE_PREFIX(
428             "quadrige3.synchro.zipFile.prefix",
429             n("quadrige3.config.option.synchro.zipFile.prefix.description"),
430             "${quadrige3.persistence.db.name}-db-",
431             String.class,
432             false),
433 
434     IMPORT_TABLES_DATA_INCLUDES(
435             "quadrige3.synchro.import.tables.data.includes",
436             n("quadrige3.config.option.synchro.import.tables.data.includes.description"),
437             "",
438             String.class),
439 
440     IMPORT_TABLES_REFERENTIAL_INCLUDES(
441             "quadrige3.synchro.import.tables.referential.includes",
442             n("quadrige3.config.option.synchro.import.tables.referential.includes.description"),
443             "",
444             String.class),
445 
446     IMPORT_TABLES_RULES_ENABLE(
447             "quadrige3.synchro.import.tables.rules.enable",
448             n("quadrige3.config.option.synchro.import.tables.rules.enable.description"),
449             Boolean.TRUE.toString(),
450             boolean.class,
451             false),
452 
453     IMPORT_DATA_PK_INCLUDES(
454             "quadrige3.synchro.import.pk.includes",
455             n("quadrige3.config.option.synchro.import.pk.includes.description"),
456             "",
457             String.class),
458 
459     IMPORT_NB_YEARS_DATA_HISTORY (
460             "quadrige3.synchro.import.nbYearDataHistory",
461             n("quadrige3.config.option.synchro.import.nbYearDataHistory.description"),
462             "2", // TODO à confirmer par Ifremer (rien dans le CU)
463             Integer.class,
464             false),
465 
466     IMPORT_DATA_MAX_ROOT_ROW_COUNT(
467             "quadrige3.synchro.import.data.maxRootRowCount",
468             n("quadrige3.config.option.synchro.import.data.maxRootRowCount.description"),
469             "-1",
470             Integer.class,
471             false),
472 
473     EXPORT_DATA_UPDATE_DATE_DELAY(
474             "quadrige3.synchro.export.updateDate.offset",
475             n("quadrige3.config.option.synchro.export.data.updateDate.offset.description"),
476             String.valueOf(5 * 60), /* 5 min */
477             Integer.class),
478 
479     EXPORT_DATA_UPDATE_DATE_SHORT_DELAY(
480             "quadrige3.synchro.export.updateDate.offset.short",
481             n("quadrige3.config.option.synchro.export.data.updateDate.offset.short.description"),
482             String.valueOf(30), /* 30 sec */
483             Integer.class,
484             false),
485 
486     EXPORT_DATA_FILE_MAX_UPLOAD_SIZE(
487             "quadrige3.synchro.export.data.file.maxUploadSize",
488             n("quadrige3.config.option.synchro.export.data.file.maxUploadSize.description"),
489             "268435456", // 1024*1024*256 = 256 Mo
490             Long.class,
491             false),
492 
493     IMPORT_REFERENTIAL_UPDATE_DATE_OFFSET(
494             "quadrige3.synchro.import.updateDate.offset",
495             n("quadrige3.config.option.synchro.import.referential.updateDate.offset.description"),
496             String.valueOf(60), /* 1 min */
497             Integer.class),
498 
499     IMPORT_REFERENTIAL_STATUS_INCLUDES(
500             "quadrige3.synchro.import.referential.status.includes",
501             n("quadrige3.config.option.synchro.import.referential.status.includes.description"),
502             null, /* all */
503             String.class),
504 
505     IMPORT_TRANSCRIBING_ITEM_TYPE_LB_INCLUDES(
506             "quadrige3.synchro.import.referential.transcribingItemType.label.includes",
507             n("quadrige3.config.option.synchro.import.referential.transcribingItemType.label.includes.description"),
508             null, /* all */
509             String.class),
510 
511     SYNCHRO_PROGRAM_CODES_INCLUDES(
512             "quadrige3.synchro.program.codes",
513             n("quadrige3.config.option.synchro.program.codes.description"),
514             "",
515             String.class,
516             false),
517 
518     TEMP_QUERY_PARAMETER_GENERATED(
519         "quadrige3.synchro.tempQueryParameter.generated",
520         n("quadrige3.synchro.tempQueryParameter.generated.description"),
521         Boolean.FALSE.toString(),
522         Boolean.class,
523         false),
524 
525     // -------------------------- //
526     // --- Extraction options --- //
527     // -------------------------- //
528     EXTRACTION_BASE_DIRECTORY(
529             "quadrige3.extraction.base.directory",
530             n("quadrige3.config.option.extraction.base.directory.description"),
531             "${quadrige3.data.directory}/extraction",
532             File.class),
533     EXTRACTION_SINP_DIRECTORY(
534             "quadrige3.extraction.sinp.directory",
535             n("quadrige3.config.option.extraction.sinp.directory.description"),
536             "${quadrige3.extraction.base.directory}/sinp",
537             File.class),
538     EXTRACTION_PAMPA_DIRECTORY(
539             "quadrige3.extraction.pampa.directory",
540             n("quadrige3.config.option.extraction.pampa.directory.description"),
541             "${quadrige3.extraction.base.directory}/pampa",
542             File.class),
543 
544     // -------------------- //
545     // --- Mail service --- //
546     // -------------------- //
547     MAIL_SMTP_HOST(
548             "quadrige3.smtp.host",
549             "quadrige3.config.option.smtp.host.description",
550             "",
551             String.class,
552             false),
553     MAIL_SMTP_PORT(
554             "quadrige3.smtp.port",
555             "quadrige3.config.option.smtp.port.description",
556             "25",
557             Integer.class,
558             false),
559     MAIL_SMTP_USERNAME(
560             "quadrige3.smtp.username",
561             "quadrige3.config.option.smtp.username.description",
562             "",
563             String.class,
564             false),
565     MAIL_SMTP_PASSWORD(
566             "quadrige3.smtp.password",
567             "quadrige3.config.option.smtp.password.description",
568             "",
569             String.class,
570             false),
571     MAIL_SMTP_SENDER(
572             "quadrige3.smtp.sender",
573             "quadrige3.config.option.smtp.sender.description",
574             "",
575             String.class,
576             false),
577     MAIL_SMTP_STARTTLS(
578             "quadrige3.smtp.starttls.enable",
579             "quadrige3.config.option.smtp.starttls.enable.description",
580             "false",
581             Boolean.class,
582             false),
583     MAIL_SMTP_SSL(
584             "quadrige3.smtp.ssl.enable",
585             "quadrige3.config.option.smtp.ssl.enable.description",
586             "false",
587             Boolean.class,
588             false)
589 
590     ;
591 
592     /** Configuration key. */
593     private final String key;
594 
595     /** I18n key of option description */
596     private final String description;
597 
598     /** Type of option */
599     private final Class<?> type;
600 
601     /** Default value of option. */
602     private String defaultValue;
603 
604     /** Flag to not keep option value on disk */
605     private boolean isTransient;
606 
607     /** Flag to not allow option value modification */
608     private boolean isFinal;
609 
610     QuadrigeConfigurationOption(String key,
611                                 String description,
612                                 String defaultValue,
613                                 Class<?> type,
614                                 boolean isTransient) {
615         this.key = key;
616         this.description = description;
617         this.defaultValue = defaultValue;
618         this.type = type;
619         this.isTransient = isTransient;
620         this.isFinal = isTransient;
621     }
622 
623     QuadrigeConfigurationOption(String key,
624                                 String description,
625                                 String defaultValue,
626                                 Class<?> type) {
627         this(key, description, defaultValue, type, true);
628     }
629 
630     /** {@inheritDoc} */
631     @Override
632     public String getKey() {
633         return key;
634     }
635 
636     /** {@inheritDoc} */
637     @Override
638     public Class<?> getType() {
639         return type;
640     }
641 
642     /** {@inheritDoc} */
643     @Override
644     public String getDescription() {
645         return description;
646     }
647 
648     /** {@inheritDoc} */
649     @Override
650     public String getDefaultValue() {
651         return defaultValue;
652     }
653 
654     /** {@inheritDoc} */
655     @Override
656     public boolean isTransient() {
657         return isTransient;
658     }
659 
660     /** {@inheritDoc} */
661     @Override
662     public boolean isFinal() {
663         return isFinal;
664     }
665 
666     /** {@inheritDoc} */
667     @Override
668     public void setDefaultValue(String defaultValue) {
669         this.defaultValue = defaultValue;
670     }
671 
672     /** {@inheritDoc} */
673     @Override
674     public void setTransient(boolean newValue) {
675         // not used
676     }
677 
678     /** {@inheritDoc} */
679     @Override
680     public void setFinal(boolean newValue) {
681         // not used
682     }
683 }