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