001package fr.ifremer.adagio.synchro.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
036/**
037 * All application configuration options.
038 * 
039 * @author Benoit Lavenier <benoit.lavenier@e-is.pro>
040 * @since 3.5.3
041 */
042public enum SynchroConfigurationOption implements ConfigOptionDef {
043
044    // ------------------------------------------------------------------------//
045    // -- READ-ONLY OPTIONS ---------------------------------------------------//
046    // ------------------------------------------------------------------------//
047
048    BASEDIR(
049            "adagio.basedir",
050            n("adagio.config.option.basedir.description"),
051            "${user.home}/.adagio",
052            File.class),
053
054    DATA_DIRECTORY(
055            "adagio.data.directory",
056            n("adagio.config.option.data.directory.description"),
057            "${adagio.basedir}/data",
058            File.class),
059
060    I18N_DIRECTORY(
061            "adagio.i18n.directory",
062            n("adagio.config.option.i18n.directory.description"),
063            "${adagio.basedir}/i18n",
064            File.class),
065
066    TMP_DIRECTORY(
067            "adagio.tmp.directory",
068            n("adagio.config.option.tmp.directory.description"),
069            "${adagio.data.directory}/temp",
070            File.class),
071
072    DB_DIRECTORY(
073            "adagio.persistence.db.directory",
074            n("adagio.config.option.persistence.db.directory.description"),
075            "${adagio.data.directory}/db",
076            File.class),
077
078    DB_ATTACHMENT_DIRECTORY(
079            "adagio.persistence.db.attachment.directory",
080            n("adagio.config.option.persistence.db.attachment.directory.description"),
081            "${adagio.data.directory}/meas_files",
082            File.class),
083
084    DB_CACHE_DIRECTORY(
085            "adagio.persistence.db.cache.directory",
086            n("adagio.config.option.persistence.db.cache.directory.description"),
087            "${adagio.data.directory}/dbcache",
088            File.class),
089
090    DB_NAME(
091            "adagio.persistence.db.name",
092            n("adagio.config.option.persistence.db.name.description"),
093            "allegro",
094            String.class),
095
096    DB_HOST(
097            "adagio.persistence.db.host",
098            n("adagio.config.option.persistence.db.host.description"),
099            "",
100            String.class),
101
102    DB_PORT(
103            "adagio.persistence.db.port",
104            n("adagio.config.option.persistence.db.port.description"),
105            "",
106            String.class),
107
108    DB_VALIDATION_QUERY(
109            "adagio.persistence.db.validation-query",
110            n("adagio.persistence.db.validation-query.description"),
111            "SELECT COUNT(*) FROM STATUS",
112            String.class),
113
114    JDBC_USERNAME(
115            "adagio.persistence.jdbc.username",
116            n("adagio.config.option.persistence.jdbc.username.description"),
117            "sa",
118            String.class),
119
120    JDBC_PASSWORD(
121            "adagio.persistence.jdbc.password",
122            n("adagio.config.option.persistence.jdbc.password.description"),
123            "",
124            String.class),
125
126    JDBC_URL(
127            "adagio.persistence.jdbc.url",
128            n("adagio.config.option.persistence.jdbc.url.description"),
129            "jdbc:hsqldb:file:${adagio.persistence.db.directory}/${adagio.persistence.db.name}",
130            String.class),
131
132    JDBC_DRIVER(
133            "adagio.persistence.jdbc.driver",
134            n("adagio.config.option.persistence.jdbc.driver.description"),
135            "org.hsqldb.jdbcDriver",
136            Class.class),
137
138    HIBERNATE_DIALECT(
139            "adagio.persistence.hibernate.dialect",
140            n("adagio.config.option.persistence.hibernate.dialect.description"),
141            HSQLDialect.class.getName(),
142            Class.class),
143
144    VERSION(
145            "adagio.persistence.version",
146            n("adagio.config.option.persistence.version.description"),
147            "3.4.2",
148            Version.class),
149
150    SITE_URL(
151            "adagio.site.url",
152            n("adagio.config.option.site.url.description"),
153            "http://www.ifremer.fr/sih-adagio",
154            URL.class),
155
156    ORGANIZATION_NAME(
157            "adagio.organizationName",
158            n("adagio.config.option.organizationName.description"),
159            "Ifremer",
160            String.class),
161
162    INCEPTION_YEAR(
163            "adagio.inceptionYear",
164            n("adagio.config.option.inceptionYear.description"),
165            "2011",
166            Integer.class),
167
168    SYNCHRONIZATION_STATUS_SYNCHRONIZED(
169            "adagio.synchro.enumeration.SynchronizationStatus.SYNCHRONIZED",
170            n("adagio.synchro.enumeration.SynchronizationStatus.SYNCHRONIZED.description"),
171            "SYNC",
172            String.class),
173
174    SYNCHRONIZATION_STATUS_READY_TO_SYNCHRONIZE(
175            "adagio.synchro.enumeration.SynchronizationStatus.READY_TO_SYNCHRONIZE",
176            n("adagio.synchro.enumeration.SynchronizationStatus.READY_TO_SYNCHRONIZE.description"),
177            "READY_TO_SYNC",
178            String.class),
179
180    SYNCHRONIZATION_STATUS_DELETED(
181            "adagio.synchro.enumeration.SynchronizationStatus.DELETED",
182            n("adagio.synchro.enumeration.SynchronizationStatus.DELETED.description"),
183            "DELETED",
184            String.class),
185
186    SYNCHRONIZATION_STATUS_DIRTY(
187            "adagio.synchro.enumeration.SynchronizationStatus.DIRTY",
188            n("adagio.synchro.enumeration.SynchronizationStatus.DIRTY.description"),
189            "DIRTY",
190            String.class),
191
192    // ------------------------------------------------------------------------//
193    // -- DB use for IMPORT (READ-ONLY) OPTIONS ----------------------------------//
194    // ------------------------------------------------------------------------//
195
196    IMPORT_DB_DIRECTORY(
197            "adagio.synchro.import.db.directory",
198            n("adagio.config.option.synchro.import.db.directory.description"),
199            "${adagio.data.directory}/dbimport",
200            File.class),
201
202    IMPORT_DB_ATTACHMENT_DIRECTORY(
203            "adagio.synchro.import.db.attachment.directory",
204            n("adagio.config.option.synchro.import.db.attachment.directory.description"),
205            "${adagio.synchro.import.db.directory}/meas_files",
206            File.class),
207
208    IMPORT_DB_NAME(
209            "adagio.synchro.import.db.name",
210            n("adagio.config.option.synchro.import.db.name.description"),
211            "allegro",
212            String.class),
213
214    IMPORT_DB_HOST(
215            "adagio.synchro.import.db.host",
216            n("adagio.config.option.synchro.import.db.host.description"),
217            "",
218            String.class),
219
220    IMPORT_DB_PORT(
221            "adagio.synchro.import.db.port",
222            n("adagio.config.option.synchro.import.db.port.description"),
223            "",
224            String.class),
225
226    IMPORT_JDBC_USERNAME(
227            "adagio.synchro.import.jdbc.username",
228            n("adagio.config.option.synchro.import.jdbc.username.description"),
229            "sa",
230            String.class),
231
232    IMPORT_JDBC_PASSWORD(
233            "adagio.synchro.import.jdbc.password",
234            n("adagio.config.option.synchro.import.jdbc.password.description"),
235            "",
236            String.class),
237
238    IMPORT_JDBC_SCHEMA(
239            "adagio.synchro.import.jdbc.schema",
240            n("adagio.config.option.synchro.import.jdbc.schema.description"),
241            null,
242            String.class),
243
244    IMPORT_JDBC_CATALOG(
245            "adagio.synchro.import.jdbc.catalog",
246            n("adagio.config.option.synchro.import.jdbc.catalog.description"),
247            null,
248            String.class),
249
250    IMPORT_JDBC_URL(
251            "adagio.synchro.import.jdbc.url",
252            n("adagio.config.option.synchro.import.jdbc.url.description"),
253            "jdbc:hsqldb:file:${adagio.synchro.import.db.directory}/${adagio.synchro.import.db.name}",
254            String.class),
255
256    IMPORT_JDBC_DRIVER(
257            "adagio.synchro.import.jdbc.driver",
258            n("adagio.config.option.synchro.import.jdbc.driver.description"),
259            "org.hsqldb.jdbcDriver",
260            Class.class),
261
262    IMPORT_HIBERNATE_DIALECT(
263            "adagio.synchro.import.hibernate.dialect",
264            n("adagio.config.option.synchro.import.hibernate.dialect.description"),
265            HSQLDialect.class.getName(),
266            Class.class),
267
268    IMPORT_TABLES_DATA_INCLUDES(
269            "adagio.synchro.import.tables.data.includes",
270            n("adagio.config.option.synchro.import.tables.data.includes.description"),
271            "",
272            String.class),
273
274    IMPORT_TABLES_REFERENTIAL_INCLUDES(
275            "adagio.synchro.import.tables.referential.includes",
276            n("adagio.config.option.synchro.import.tables.referential.includes.description"),
277            "",
278            String.class),
279
280    IMPORT_JDBC_BATCH_SIZE(
281            "adagio.synchro.import.jdbc.batch-size",
282            n("adagio.config.option.synchro.import.jdbc.batch-size.description"),
283            "1000",
284            Integer.class),
285
286    IMPORT_TRANSCRIBING_ITEM_TYPE_IDS(
287            "adagio.synchro.import.transcribingTypeIds",
288            n("adagio.config.option.synchro.import.transcribingTypeIds.description"),
289            "",
290            String.class),
291
292    DEFAULT_VESSEL_PROGRAM_CODE(
293            "adagio.synchro.import.vessel.programCode",
294            n("adagio.config.option.synchro.import.vessel.programCode.description"),
295            "SIH",
296            String.class),
297
298    // ------------------------------------------------------------------------//
299    // -- Client/Server (READ-ONLY) OPTIONS ----------------------------------//
300    // ------------------------------------------------------------------------//
301
302    SERVER_PORT(
303            "adagio.server.port",
304            n("adagio.config.option.server.port.description"),
305            "8080",
306            Integer.class,
307            false),
308
309    SERVER_SSL_KEYSTORE(
310            "adagio.server.ssl.keystore.file",
311            n("adagio.config.option.server.ssl.keystore.file.description"),
312            "my.keystore",
313            File.class,
314            false),
315
316    // ------------------------------------------------------------------------//
317    // -- READ-WRITE OPTIONS --------------------------------------------------//
318    // ------------------------------------------------------------------------//
319
320    DB_BACKUP_DIRECTORY(
321            "adagio.persistence.db.backup.directory",
322            n("adagio.config.option.persistence.db.backup.directory.description"),
323            "${adagio.data.directory}/dbbackup",
324            File.class,
325            false),
326
327    I18N_LOCALE(
328            "adagio.i18n.locale",
329            n("adagio.config.option.i18n.locale.description"),
330            Locale.FRANCE.getCountry(),
331            Locale.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    SynchroConfigurationOption(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    SynchroConfigurationOption(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}