001package fr.ifremer.adagio.core.config;
002
003/*
004 * #%L
005 * Tutti :: Persistence
006 * $Id: TuttiConfigurationOption.java 1441 2013-12-09 20:13:47Z tchemit $
007 * $HeadURL: http://svn.forge.codelutin.com/svn/tutti/trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java $
008 * %%
009 * Copyright (C) 2012 - 2013 Ifremer
010 * %%
011 * This program is free software: you can redistribute it and/or modify
012 * it under the terms of the GNU Affero General Public License as published by
013 * the Free Software Foundation, either version 3 of the License, or
014 * (at your option) any later version.
015 * 
016 * This program is distributed in the hope that it will be useful,
017 * but WITHOUT ANY WARRANTY; without even the implied warranty of
018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
019 * GNU General Public License for more details.
020 * 
021 * You should have received a copy of the GNU Affero General Public License
022 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
023 * #L%
024 */
025
026import static org.nuiton.i18n.I18n.n;
027
028import java.io.File;
029import java.net.URL;
030import java.util.Locale;
031
032import org.hibernate.dialect.HSQLDialect;
033import org.nuiton.config.ConfigOptionDef;
034import org.nuiton.util.Version;
035
036import fr.ifremer.adagio.core.dao.technical.AdagioEnumerationDef;
037
038/**
039 * All application configuration options.
040 * 
041 * @author Benoit Lavenier <benoit.lavenier@e-is.pro>
042 * @since 3.4.3
043 */
044public enum AdagioConfigurationOption implements ConfigOptionDef {
045
046    // ------------------------------------------------------------------------//
047    // -- READ-ONLY OPTIONS ---------------------------------------------------//
048    // ------------------------------------------------------------------------//
049
050    BASEDIR(
051            "adagio.basedir",
052            n("adagio.config.option.basedir.description"),
053            "${user.home}/.adagio",
054            File.class),
055
056    DATA_DIRECTORY(
057            "adagio.data.directory",
058            n("adagio.config.option.data.directory.description"),
059            "${adagio.basedir}/data",
060            File.class),
061
062    I18N_DIRECTORY(
063            "adagio.i18n.directory",
064            n("adagio.config.option.i18n.directory.description"),
065            "${adagio.basedir}/i18n",
066            File.class),
067
068    TMP_DIRECTORY(
069            "adagio.tmp.directory",
070            n("adagio.config.option.tmp.directory.description"),
071            "${adagio.data.directory}/temp",
072            File.class),
073
074    DB_DIRECTORY(
075            "adagio.persistence.db.directory",
076            n("adagio.config.option.persistence.db.directory.description"),
077            "${adagio.data.directory}/db",
078            File.class),
079
080    DB_ATTACHMENT_DIRECTORY(
081            "adagio.persistence.db.attachment.directory",
082            n("adagio.config.option.persistence.db.attachment.directory.description"),
083            "${adagio.data.directory}/meas_files",
084            File.class),
085
086    DB_CACHE_DIRECTORY(
087            "adagio.persistence.db.cache.directory",
088            n("adagio.config.option.persistence.db.cache.directory.description"),
089            "${adagio.data.directory}/dbcache",
090            File.class),
091
092    DB_NAME(
093            "adagio.persistence.db.name",
094            n("adagio.config.option.persistence.db.name.description"),
095            "allegro",
096            String.class),
097
098    DB_HOST (
099            "adagio.persistence.db.host",
100            n("adagio.config.option.persistence.db.host.description"),
101            "",
102            String.class),
103
104    DB_PORT (
105            "adagio.persistence.db.port",
106            n("adagio.config.option.persistence.db.port.description"),
107            "",
108            String.class),
109
110    DB_VALIDATION_QUERY(
111            "adagio.persistence.db.validation-query",
112            n("adagio.persistence.db.validation-query.description"),
113            "SELECT COUNT(*) FROM STATUS",
114            String.class),
115
116    DATASOURCE_TYPE(
117            "adagio.persistence.datasource.type",
118            n("adagio.persistence.datasource.type.description"),
119            "local",
120            String.class),
121
122    DATASOURCE_JNDI_NAME(
123            "adagio.persistence.jndi-name",
124            n("adagio.config.option.persistence.jndi-name.description"),
125            "adagio-ds",
126            String.class),          
127
128    JDBC_USERNAME(
129            "adagio.persistence.jdbc.username",
130            n("adagio.config.option.persistence.jdbc.username.description"),
131            "sa",
132            String.class),
133
134    JDBC_PASSWORD(
135            "adagio.persistence.jdbc.password",
136            n("adagio.config.option.persistence.jdbc.password.description"),
137            "",
138            String.class),
139
140    JDBC_URL(
141            "adagio.persistence.jdbc.url",
142            n("adagio.config.option.persistence.jdbc.url.description"),
143            "jdbc:hsqldb:file:${adagio.persistence.db.directory}/${adagio.persistence.db.name}",
144            String.class),
145
146    JDBC_CATALOG(
147            "adagio.persistence.jdbc.catalog",
148            n("adagio.config.option.persistence.jdbc.catalog.description"),
149            null,
150            String.class),
151
152    JDBC_SCHEMA(
153            "adagio.persistence.jdbc.schema",
154            n("adagio.config.option.persistence.jdbc.schema.description"),
155            "PUBLIC",
156            String.class),
157
158    JDBC_DRIVER(
159            "adagio.persistence.jdbc.driver",
160            n("adagio.config.option.persistence.jdbc.driver.description"),
161            "org.hsqldb.jdbcDriver",
162            Class.class),
163
164    JDBC_BATCH_SIZE(
165            "adagio.persistence.jdbc.batch-size",
166            n("adagio.config.option.persistence.jdbc.batch-size.description"),
167            "15",
168            Integer.class),
169
170    HIBERNATE_DIALECT(
171            "adagio.persistence.hibernate.dialect",
172            n("adagio.config.option.persistence.hibernate.dialect.description"),
173            HSQLDialect.class.getName(),
174            Class.class),
175
176    DEBUG_ENTITY_LOAD(
177            "adagio.persistence.hibernate.load.debug",
178            n("adagio.config.option.persistence.hibernate.load.debug.description"),
179            Boolean.FALSE.toString(),
180            boolean.class),
181
182    STATUS_CODE_TEMPORARY(
183            "adagio.enumeration.StatusCode.TEMPORARY",
184            n("adagio.enumeration.StatusCode.TEMPORARY.description"),
185            String.format("${%sStatusCode.TEMPORARY}", AdagioEnumerationDef.CONFIG_OPTION_PREFIX),
186            String.class),
187
188    STATUS_CODE_ENABLE(
189            "adagio.enumeration.StatusCode.ENABLE",
190            n("adagio.enumeration.StatusCode.ENABLE.description"),
191            String.format("${%sStatusCode.ENABLE}", AdagioEnumerationDef.CONFIG_OPTION_PREFIX),
192            String.class),
193
194    PROGRAM_CODE_VESSEL_REGISTRY(
195            "adagio.enumeration.ProgramCode.SIH",
196            n("adagio.enumeration.ProgramCode.SIH.description"),
197            String.format("${%sProgramCode.SIH}", AdagioEnumerationDef.CONFIG_OPTION_PREFIX),
198            String.class),
199
200    VERSION(
201            "adagio.version",
202            n("adagio.config.option.persistence.version.description"),
203            "3.5.4",
204            Version.class),
205
206    SITE_URL(
207            "adagio.site.url",
208            n("adagio.config.option.site.url.description"),
209            "http://www.ifremer.fr/sih-adagio",
210            URL.class),
211
212    ORGANIZATION_NAME(
213            "adagio.organizationName",
214            n("adagio.config.option.organizationName.description"),
215            "Ifremer",
216            String.class),
217
218    INCEPTION_YEAR(
219            "adagio.inceptionYear",
220            n("adagio.config.option.inceptionYear.description"),
221            "2011",
222            Integer.class),
223
224    // ------------------------------------------------------------------------//
225    // -- READ-WRITE OPTIONS --------------------------------------------------//
226    // ------------------------------------------------------------------------//
227
228    DB_BACKUP_DIRECTORY(
229            "adagio.persistence.db.backup.directory",
230            n("adagio.config.option.persistence.db.backup.directory.description"),
231            "${adagio.data.directory}/dbbackup",
232            File.class,
233            false),
234
235    DB_ENUMERATION_RESOURCE(
236            "adagio.persistence.db.enumeration.resource",
237            n("adagio.config.option.persistence.db.enumeration.resource"),
238            "classpath*:adagio-db-enumerations.properties",
239            String.class,
240            false),
241
242    HIBERNATE_SHOW_SQL(
243            "adagio.persistence.hibernate.showSql",
244            n("adagio.config.option.persistence.hibernate.showSql.description"),
245            Boolean.FALSE.toString(),
246            boolean.class,
247            false),
248
249    HIBERNATE_USE_SQL_COMMENT(
250            "adagio.persistence.hibernate.useSqlComment",
251            n("adagio.config.option.persistence.hibernate.useSqlComment.description"),
252            Boolean.FALSE.toString(),
253            boolean.class,
254            false),
255
256    HIBERNATE_FORMAT_SQL(
257            "adagio.persistence.hibernate.formatSql",
258            n("adagio.config.option.persistence.hibernate.formatSql.description"),
259            Boolean.FALSE.toString(),
260            boolean.class,
261            false),
262
263    HIBERNATE_SECOND_LEVEL_CACHE(
264            "adagio.persistence.hibernate.useSecondLevelCache",
265            n("adagio.config.option.persistence.hibernate.useSecondLevelCache.description"),
266            Boolean.FALSE.toString(),
267            boolean.class,
268            false),
269
270    HIBERNATE_CLIENT_QUERIES_FILE(
271            "adagio.persistence.hibernate.queriesFile",
272            n("adagio.config.option.persistence.hibernate.queriesFile.description"),
273            "queries-failsafe.hbm.xml",
274            String.class,
275            false),
276
277    LIQUIBASE_RUN_AUTO(
278            "adagio.persistence.liquibase.should.run",
279            n("adagio.config.option.liquibase.should.run.description"),
280            Boolean.FALSE.toString(),
281            boolean.class,
282            false),
283
284    LIQUIBASE_CHANGE_LOG_PATH(
285            "adagio.persistence.liquibase.changelog.path",
286            n("adagio.config.option.liquibase.changelog.path.description"),
287            "classpath:fr/ifremer/adagio/core/db/changelog/db-changelog-master.xml",
288            String.class,
289            false),
290            
291    LIQUIBASE_DIFF_TYPES(
292            "adagio.persistence.liquibase.diff.types",
293            n("adagio.config.option.liquibase.diff.types.description"),
294            null,
295            String.class,
296            false),            
297            
298    LIQUIBASE_OUTPUT_FILE(
299            "adagio.persistence.liquibase.output.file",
300            n("adagio.config.option.liquibase.output.file.description"),
301            null,
302            File.class,
303            false),            
304
305    CACHE_BACTH_TREE(
306            "adagio.persistence.batch.use_tree_cache",
307            n("adagio.config.option.batch.use_tree_cache.description"),
308            Boolean.TRUE.toString(),
309            boolean.class,
310            false),
311
312    CSV_SEPARATOR(
313            "adagio.csv.separator",
314            n("adagio.config.option.csv.separator.description"),
315            ";",
316            char.class,
317            false),
318
319    I18N_LOCALE(
320            "adagio.i18n.locale",
321            n("adagio.config.option.i18n.locale.description"),
322            Locale.FRANCE.getCountry(),
323            Locale.class,
324            false
325    ),
326    
327    SERVER_PORT(
328            "adagio.server.port",
329            n("adagio.config.option.server.port.description"),
330            "8888",
331            Integer.class,
332            false
333    );
334
335    /** Configuration key. */
336    private final String key;
337
338    /** I18n key of option description */
339    private final String description;
340
341    /** Type of option */
342    private final Class<?> type;
343
344    /** Default value of option. */
345    private String defaultValue;
346
347    /** Flag to not keep option value on disk */
348    private boolean isTransient;
349
350    /** Flag to not allow option value modification */
351    private boolean isFinal;
352
353    AdagioConfigurationOption(String key,
354                                String description,
355                                String defaultValue,
356                                Class<?> type,
357                                boolean isTransient) {
358        this.key = key;
359        this.description = description;
360        this.defaultValue = defaultValue;
361        this.type = type;
362        this.isTransient = isTransient;
363        this.isFinal = isTransient;
364    }
365
366    AdagioConfigurationOption(String key,
367                                String description,
368                                String defaultValue,
369                                Class<?> type) {
370        this(key, description, defaultValue, type, true);
371    }
372
373    @Override
374    public String getKey() {
375        return key;
376    }
377
378    @Override
379    public Class<?> getType() {
380        return type;
381    }
382
383    @Override
384    public String getDescription() {
385        return description;
386    }
387
388    @Override
389    public String getDefaultValue() {
390        return defaultValue;
391    }
392
393    @Override
394    public boolean isTransient() {
395        return isTransient;
396    }
397
398    @Override
399    public boolean isFinal() {
400        return isFinal;
401    }
402
403    @Override
404    public void setDefaultValue(String defaultValue) {
405        this.defaultValue = defaultValue;
406    }
407
408    @Override
409    public void setTransient(boolean newValue) {
410        // not used
411    }
412
413    @Override
414    public void setFinal(boolean newValue) {
415        // not used
416    }
417}