View Javadoc
1   package fr.ifremer.tutti;
2   
3   /*
4    * #%L
5    * Tutti :: Persistence
6    * %%
7    * Copyright (C) 2012 - 2014 Ifremer
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU General Public License as
11   * published by the Free Software Foundation, either version 3 of the 
12   * License, or (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU General Public 
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/gpl-3.0.html>.
22   * #L%
23   */
24  
25  import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel;
26  import fr.ifremer.tutti.type.CoordinateEditorType;
27  import fr.ifremer.tutti.type.WeightUnit;
28  import fr.ifremer.tutti.util.BeepFrequency;
29  import org.hibernate.dialect.HSQLDialect;
30  import org.hsqldb.jdbcDriver;
31  import org.nuiton.config.ConfigOptionDef;
32  import org.nuiton.version.Version;
33  
34  import javax.swing.KeyStroke;
35  import java.awt.Color;
36  import java.io.File;
37  import java.net.URL;
38  import java.util.Locale;
39  
40  import static org.nuiton.i18n.I18n.n;
41  
42  /**
43   * All application configuration options.
44   *
45   * Created on 11/24/13.
46   *
47   * @author Tony Chemit - chemit@codelutin.com
48   * @since 3.0
49   */
50  public enum TuttiConfigurationOption implements ConfigOptionDef {
51  
52      //------------------------------------------------------------------------//
53      //-- READ-ONLY OPTIONS ---------------------------------------------------//
54      //------------------------------------------------------------------------//
55  
56      BASEDIR(
57              "tutti.basedir",
58              n("tutti.config.option.basedir.description"),
59              "${user.home}/.tutti",
60              File.class),
61  
62      DATA_DIRECTORY(
63              "tutti.data.directory",
64              n("tutti.config.option.data.directory.description"),
65              "${tutti.basedir}/data",
66              File.class),
67  
68      I18N_DIRECTORY(
69              "tutti.i18n.directory",
70              n("tutti.config.option.i18n.directory.description"),
71              "${tutti.basedir}/i18n",
72              File.class),
73  
74      HELP_DIRECTORY(
75              "tutti.help.directory",
76              n("tutti.config.option.help.directory.description"),
77              "${tutti.basedir}/help",
78              File.class),
79  
80      TMP_DIRECTORY(
81              "tutti.tmp.directory",
82              n("tutti.config.option.tmp.directory.description"),
83              "${tutti.data.directory}/temp",
84              File.class),
85  
86      REPORT_HOME_DIRECTORY(
87              "tutti.report.home.directory",
88              n("tutti.config.option.report.home.directory.description"),
89              "${tutti.basedir}/report",
90              File.class),
91      REPORT_DIRECTORY(
92              "tutti.report.directory",
93              n("tutti.config.option.report.directory.description"),
94              "${tutti.report.home.directory}/allegro-tutti/reports",
95              File.class),
96      REPORT_LOG_DIRECTORY(
97              "tutti.report.log.directory",
98              n("tutti.config.option.report.log.directory.description"),
99              "${tutti.data.directory}/reportlogs",
100             File.class),
101     DB_DIRECTORY(
102             "tutti.persistence.db.directory",
103             n("tutti.config.option.persistence.db.directory.description"),
104             "${tutti.data.directory}/db",
105             File.class),
106 
107     DB_ATTACHMENT_DIRECTORY(
108             "tutti.persistence.db.attachment.directory",
109             n("tutti.config.option.persistence.db.attachment.directory.description"),
110             "${tutti.data.directory}/meas_files",
111             File.class),
112 
113     DB_CACHE_DIRECTORY(
114             "tutti.persistence.db.cache.directory",
115             n("tutti.config.option.persistence.db.cache.directory.description"),
116             "${tutti.data.directory}/dbcache",
117             File.class),
118 
119     DB_PROTOCOL_DIRECTORY(
120             "tutti.persistence.db.protocol.directory",
121             n("tutti.config.option.persistence.db.protocol.directory.description"),
122             "${tutti.data.directory}/protocol",
123             File.class),
124 
125     DB_NAME(
126             "tutti.persistence.db.name",
127             n("tutti.config.option.persistence.db.name.description"),
128             "allegro",
129             String.class),
130 
131     DB_SANITY(
132             "tutti.persistence.db.sanity",
133             n("tutti.persistence.db.sanity.description"),
134             "false",
135             Boolean.class),
136 
137     JDBC_USERNAME(
138             "tutti.persistence.jdbc.username",
139             n("tutti.config.option.persistence.jdbc.username.description"),
140             "sa",
141             String.class),
142 
143     JDBC_PASSWORD(
144             "tutti.persistence.jdbc.password",
145             n("tutti.config.option.persistence.jdbc.password.description"),
146             "",
147             String.class),
148 
149     JDBC_URL(
150             "tutti.persistence.jdbc.url",
151             n("tutti.config.option.persistence.jdbc.url.description"),
152             "jdbc:hsqldb:file:${tutti.persistence.db.directory}/${tutti.persistence.db.name}",
153             String.class,
154             false),
155 
156     JDBC_DRIVER(
157             "tutti.persistence.jdbc.driver",
158             n("tutti.config.option.persistence.jdbc.driver.description"),
159             jdbcDriver.class.getName(),
160             Class.class),
161 
162     HIBERNATE_DIALECT(
163             "tutti.persistence.hibernate.dialect",
164             n("tutti.config.option.persistence.hibernate.dialect.description"),
165             HSQLDialect.class.getName(),
166             Class.class),
167 
168     LAUNCH_MODE(
169             "tutti.launch.mode",
170             n("tutti.config.option.launch.mode.description"),
171             null,
172             String.class),
173 
174     START_ACTION_FILE(
175             "tutti.startActionFile",
176             n("tutti.config.option.startActionFile.description"),
177             "${tutti.basedir}/tutti-start-action",
178             File.class),
179 
180     VERSION(
181             "tutti.version",
182             n("tutti.config.option.version.description"),
183             "",
184             Version.class),
185 
186     SITE_URL(
187             "tutti.site.url",
188             n("tutti.config.option.site.url.description"),
189             "https://tutti.codelutin.com",
190             URL.class),
191 
192     ORGANIZATION_NAME(
193             "tutti.organizationName",
194             n("tutti.config.option.organizationName.description"),
195             "",
196             String.class),
197 
198     INCEPTION_YEAR(
199             "tutti.inceptionYear",
200             n("tutti.config.option.inceptionYear.description"),
201             "2012",
202             Integer.class),
203 
204     //------------------------------------------------------------------------//
205     //-- READ-WRITE OPTIONS --------------------------------------------------//
206     //------------------------------------------------------------------------//
207 
208     DB_BACKUP_DIRECTORY(
209             "tutti.persistence.db.backup.directory",
210             n("tutti.config.option.persistence.db.backup.directory.description"),
211             "${tutti.data.directory}/dbbackup",
212             File.class,
213             false),
214 
215     EXPORT_BACKUP_DIRECTORY(
216             "tutti.export.backup.directory",
217             n("tutti.config.option.export.backup.directory.description"),
218             "${tutti.data.directory}/exportbackup",
219             File.class,
220             false),
221 
222     HIBERNATE_SHOW_SQL(
223             "tutti.persistence.hibernate.showSql",
224             n("tutti.config.option.persistence.hibernate.showSql.description"),
225             Boolean.FALSE.toString(),
226             boolean.class,
227             false),
228 
229     HIBERNATE_USE_SQL_COMMENT(
230             "tutti.persistence.hibernate.useSqlComment",
231             n("tutti.config.option.persistence.hibernate.useSqlComment.description"),
232             Boolean.FALSE.toString(),
233             boolean.class,
234             false),
235 
236     HIBERNATE_FORMAT_SQL(
237             "tutti.persistence.hibernate.formatSql",
238             n("tutti.config.option.persistence.hibernate.formatSql.description"),
239             Boolean.FALSE.toString(),
240             boolean.class,
241             false),
242 
243     SHOW_BATCH_LOG(
244             "tutti.persistence.showBatchLog",
245             n("tutti.config.option.persistence.showBatchLog.description"),
246             Boolean.FALSE.toString(),
247             Boolean.class,
248             false),
249 
250     SHOW_MEMORY_USAGE(
251             "tutti.persistence.showMemoryUsage",
252             n("tutti.config.option.persistence.showMemoryUsage.description"),
253             Boolean.FALSE.toString(),
254             Boolean.class,
255             false),
256 
257     GENERIC_FORMAT_IMPORT_SKIP_BACKUP(
258             "tutti.genericFormat.import.skipBackup",
259             n("tutti.config.option.genericFormat.import.skipBackup.description"),
260             Boolean.FALSE.toString(),
261             Boolean.class,
262             false),
263     GENERIC_FORMAT_IMPORT_MAXIMUM_ROWS_IN_ERROR_PER_FILE(
264             "tutti.genericFormat.import.maximumRowsInErrorPerFile",
265             n("tutti.config.option.genericFormat.import.maximumRowsInErrorPerFile.description"),
266             "100",
267             Integer.class,
268             false),
269 
270     IMPORT_DB_SKIP_BACKUP(
271             "tutti.db.import.skipBackup",
272             n("tutti.config.option.db.import.skipBackup.description"),
273             Boolean.FALSE.toString(),
274             Boolean.class,
275             false),
276 
277     SAMPLE_CATEGORY_MODEL(
278             "tutti.persistence.SampleCategoryModel",
279             n("tutti.config.option.persistence.SampleCategoryModel.description"),
280             "1428,V/HV,V_HV|198,Class Tri,Class_Tri|196,Sexe,Sexe|174,Maturite,Maturite|1430,Age,Age",
281             SampleCategoryModel.class,
282             false
283     ),
284 
285     REPORT_BACKUP_DIRECTORY(
286             "tutti.report.backup.directory",
287             n("tutti.config.option.report.backup.directory.description"),
288             "${tutti.data.directory}/reportbackup",
289             File.class,
290             false),
291 
292     GENERIC_FORMAT_REPORT_BACKUP_DIRECTORY(
293             "tutti.genericFormat.report.backup.directory",
294             n("tutti.config.option.genericFormat.report.backup.directory.description"),
295             "${tutti.data.directory}/genericFormat/reportbackup",
296             File.class,
297             false),
298 
299     CSV_SEPARATOR(
300             "tutti.csv.separator",
301             n("tutti.config.option.csv.separator.description"),
302             ";",
303             char.class,
304             false),
305 
306     EXPORT_COUNTRY_ID(
307             "tutti.export.countryId",
308             n("tutti.config.option.export.countryId.description"),
309             "12",
310             String.class,
311             false),
312 
313     SAMPLING_CATEGORY_ORDER_IDS(
314             "tutti.samplingCategoryOrderIds",
315             n("tutti.config.option.samplingCategoryOrderIds.description"),
316             "198,196,174,1430",
317             Integer[].class,
318             false),
319 
320     WEIGHT_UNIT_SPECIES(
321             "tutti.weight.unit.species",
322             n("tutti.config.option.weight.unit.species.description"),
323             WeightUnit.KG.name(),
324             WeightUnit.class,
325             false),
326 
327     WEIGHT_UNIT_BENTHOS(
328             "tutti.weight.unit.benthos",
329             n("tutti.config.option.weight.unit.benthos.description"),
330             WeightUnit.G.name(),
331             WeightUnit.class,
332             false),
333 
334     WEIGHT_UNIT_MARINE_LITTER(
335             "tutti.weight.unit.marineLitter",
336             n("tutti.config.option.weight.unit.marineLitter.description"),
337             WeightUnit.KG.name(),
338             WeightUnit.class,
339             false),
340 
341     WEIGHT_UNIT_INDIVIDUAL_OBSERVATION(
342             "tutti.weight.unit.individualObservation",
343             n("tutti.config.option.weight.unit.individualObservation.description"),
344             WeightUnit.G.name(),
345             WeightUnit.class,
346             false),
347 
348     WEIGHT_UNIT_ACCIDENTAL_CATCH(
349             "tutti.weight.unit.accidentalCatch",
350             n("tutti.config.option.weight.unit.accidentalCatch.description"),
351             WeightUnit.KG.name(),
352             WeightUnit.class,
353             false),
354 
355     I18N_LOCALE(
356             "tutti.i18n.locale",
357             n("tutti.config.option.i18n.locale.description"),
358             Locale.FRANCE.getCountry(),
359             Locale.class,
360             false
361     ),
362 
363     UPDATE_APPLICATION_URL(
364             "tutti.update.application.url",
365             n("tutti.config.option.update.application.url.description"),
366             "https://www.ifremer.fr/sih-resource-private/tutti/tutti-application.properties",
367             String.class,
368             false
369     ),
370 
371     UPDATE_DATA_URL(
372             "tutti.update.data.url",
373             n("tutti.config.option.update.data.url.description"),
374             "https://www.ifremer.fr/sih-resource-private/tutti/tutti-data.properties",
375             String.class,
376             false
377     ),
378 
379     UI_CONFIG_FILE(
380             "tutti.ui.config.file",
381             n("tutti.config.option.ui.config.file.description"),
382             "${tutti.data.directory}/tuttiUI.xml",
383             File.class,
384             false
385     ),
386 
387     TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE(
388             "tutti.db.weights.rate.difference.totalAndSorted",
389             n("tutti.config.option.weights.rate.difference.totalAndSorted.description"),
390             "1.0",
391             Float.class,
392             false
393     ),
394 
395     PUPITRI_IMPORT_MISSING_BATCHES(
396             "tutti.pupitriImportMissingBatches",
397             n("tutti.config.option.pupitriImportMissingBatches.description"),
398             "false",
399             Boolean.class,
400             false
401     ),
402 
403     TREMIE_CAROUSSEL_VESSEL_ID(
404             "tutti.tremieCarousselVessel",
405             n("tutti.config.option.tremieCarousselVessel.description"),
406             "",
407             String.class,
408             false
409     ),
410 
411     RTP_WEIGHTS_DIFFERENCE_RATE(
412             "tutti.db.weights.rate.difference.rtp",
413             n("tutti.config.option.weights.rate.difference.rtp.description"),
414             "20.0",
415             Float.class,
416             false
417     ),
418 
419     PROGRAM_ID(
420             "tutti.programId",
421             n("tutti.config.option.programId.description"),
422             null,
423             String.class,
424             false
425     ),
426 
427     CRUISE_ID(
428             "tutti.cruiseId",
429             n("tutti.config.option.cruiseId.description"),
430             null,
431             Integer.class,
432             false
433     ),
434 
435     PROTOCOL_ID(
436             "tutti.protocolId",
437             n("tutti.config.option.protocolId.description"),
438             null,
439             String.class,
440             false
441     ),
442 
443     AUTO_POPUP_NUMBER_EDITOR(
444             "tutti.ui.autoPopupNumberEditor",
445             n("tutti.config.option.ui.autoPopupNumberEditor.description"),
446             String.valueOf(false),
447             Boolean.class,
448             false
449     ),
450 
451     SHOW_NUMBER_EDITOR_BUTTON(
452             "tutti.ui.showNumberEditorButton",
453             n("tutti.config.option.ui.showNumberEditorButton.description"),
454             String.valueOf(true),
455             Boolean.class,
456             false
457     ),
458 
459     COLOR_ROW_READ_ONLY(
460             "tutti.ui.color.rowReadOnly",
461             n("tutti.config.option.ui.color.rowReadOnly.description"),
462             new Color(192, 192, 192).toString(),
463             Color.class,
464             false
465     ),
466 
467     COLOR_ROW_INVALID(
468             "tutti.ui.color.rowInvalid",
469             n("tutti.config.option.ui.color.rowInvalid.description"),
470             new Color(255, 204, 153).toString(),
471             Color.class,
472             false
473     ),
474 
475     COLOR_CELL_WITH_VALUE(
476             "tutti.ui.color.cellWithValue",
477             n("tutti.config.option.ui.color.cellWithValue.description"),
478             new Color(128, 255, 128).toString(),
479             Color.class,
480             false
481     ),
482 
483     COLOR_ROW_TO_CONFIRM(
484             "tutti.ui.color.rowToConfirm",
485             n("tutti.config.option.ui.color.rowToConfirm.description"),
486             Color.ORANGE.toString(),
487             Color.class,
488             false
489     ),
490 
491     COLOR_ALTERNATE_ROW(
492             "tutti.ui.color.alternateRow",
493             n("tutti.config.option.ui.color.alternateRow.description"),
494             new Color(217, 217, 217).toString(),
495             Color.class,
496             false
497     ),
498 
499     COLOR_SELECTED_ROW(
500             "tutti.ui.color.selectedRow",
501             n("tutti.config.option.ui.color.selectedRow.description"),
502             new Color(57, 105, 138).toString(),
503             Color.class,
504             false
505     ),
506 
507     COLOR_WARNING_ROW(
508             "tutti.ui.color.warningRow",
509             n("tutti.config.option.ui.color.warningRow.description"),
510             new Color(245, 218, 88).toString(),
511             Color.class,
512             false
513     ),
514 
515     COLOR_CATCH(
516             "tutti.ui.color.catch",
517             n("tutti.config.option.ui.color.catch.description"),
518             new Color(136,136,136).toString(),
519             Color.class,
520             false
521     ),
522 
523     COLOR_SPECIES(
524             "tutti.ui.color.species",
525             n("tutti.config.option.ui.color.species.description"),
526             new Color(0, 107, 186).toString(),
527             Color.class,
528             false
529     ),
530 
531     COLOR_BENTHOS(
532             "tutti.ui.color.benthos",
533             n("tutti.config.option.ui.color.benthos.description"),
534             new Color(255, 127, 42).toString(),
535             Color.class,
536             false
537     ),
538     COLOR_SPECIES_OR_BENTHOS_UNSORTED_COMPUTED_WEIGHT_IN_WARNING(
539             "tutti.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning",
540             n("tutti.config.option.ui.color.speciesOrBenthosUnsortedComputedWeightInWarning.description"),
541             new Color(255, 57, 28).toString(),
542             Color.class,
543             false
544     ),
545 
546     COLOR_MARINE_LITTER(
547             "tutti.ui.color.marineLitter",
548             n("tutti.config.option.ui.color.marineLitter.description"),
549             new Color(255, 229, 23).toString(),
550             Color.class,
551             false
552     ),
553 
554     COLOR_BLOCKING_LAYER(
555             "tutti.ui.color.blockingLayer",
556             n("tutti.config.option.ui.color.blockingLayer.description"),
557             new Color(200, 200, 200).toString(),
558             Color.class,
559             false
560     ),
561 
562     COLOR_COMPUTED_WEIGHTS(
563             "tutti.ui.color.computedWeights",
564             n("tutti.config.option.ui.color.computedWeights.description"),
565             Color.BLUE.toString(),
566             Color.class,
567             false
568     ),
569 
570     COLOR_HIGHLIGHT_INFO_BACKGROUND(
571             "tutti.ui.color.hightlightInfo.background",
572             n("tutti.config.option.ui.color.hightlightInfo.background.description"),
573             Color.YELLOW.toString(),
574             Color.class,
575             false
576     ),
577 
578     COLOR_HIGHLIGHT_INFO_FOREGROUND(
579             "tutti.ui.color.hightlightInfo.foreground",
580             n("tutti.config.option.ui.color.hightlightInfo.foreground.description"),
581             Color.BLACK.toString(),
582             Color.class,
583             false
584     ),
585 
586     SHORTCUT_CLOSE_POPUP(
587             "tutti.ui.shortcut.closePopup",
588             n("tutti.config.option.ui.shortcut.closePopup.description"),
589             "alt pressed F",
590             KeyStroke.class,
591             false
592     ),
593 
594     COORDINATE_EDITOR_TYPE(
595             "tutti.ui.coordinateEditorType",
596             n("tutti.config.option.ui.coordinateEditorType.description"),
597             CoordinateEditorType.DD.toString(),
598             CoordinateEditorType.class,
599             false
600     ),
601 
602     DATE_FORMAT(
603             "tutti.ui.dateFormat",
604             n("tutti.config.option.ui.dateFormat.description"),
605             "dd/MM/yyyy",
606             String.class,
607             false
608     ),
609 
610     ADMIN_PASSWORD(
611             "tutti.admin.password",
612             n("tutti.config.option.ui.adminPassword.description"),
613             // "ifremer" by default
614             "ef399a6e6ec62c6e142440241a5b98f8",
615             String.class,
616             false
617     ),
618 
619     MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE(
620             "tutti.ui.max.individualObservationRowsToCreate",
621             n("tutti.config.option.ui.individualObservationRowsToCreate.description"),
622             "10",
623             Integer.class,
624             false
625     ),
626 
627     SAMPLING_CODE_PREFIX(
628             "tutti.ui.max.sampligCodePrefix",
629             n("tutti.config.option.ui.sampligCodePrefix.description"),
630             "",
631             String.class,
632             false
633     ),
634 
635     FULL_BLUETOOTH_SCAN(
636             "tutti.ichtyometer.fullBluetoothScan",
637             n("tutti.config.option.ichtyometer.fullBluetoothScan.description"),
638             "false",
639             Boolean.class,
640             false
641     ),
642     ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT(
643             "tutti.ichtyometer.maximumNumberOfAttemptToConnect",
644             n("tutti.config.option.ichtyometer.maximumNumberOfAttemptToConnect.description"),
645             "5",
646             int.class,
647             false
648     ),
649     CALIPER_SERIAL_PORT(
650             "tutti.ichtyometer.caliperSerialPort",
651             n("tutti.config.option.caliper.serialPort.description"),
652             "1",
653             int.class,
654             false
655     ),
656     EXTERNAL_DEVICES_VOICE_ENABLED(
657             "tutti.ichtyometer.voice.enabled",
658             n("tutti.config.option.externalDevices.voice.enabled.description"),
659             "true",
660             Boolean.class,
661             false
662     ),
663     EXTERNAL_DEVICES_READS_UNIT(
664             "tutti.ichtyometer.reads.unit",
665             n("tutti.config.option.externalDevices.reads.unit.description"),
666             "true",
667             Boolean.class,
668             false
669     ),
670     EXTERNAL_DEVICES_DATA_RECEPTION_BEEP_ENABLED(
671             "tutti.ichtyometer.beep.data.enabled",
672             n("tutti.config.option.externalDevices.beep.data.enabled.description"),
673             "true",
674             Boolean.class,
675             false
676     ),
677     EXTERNAL_DEVICES_DATA_RECEPTION_BEEP_FREQUENCY(
678             "tutti.ichtyometer.beep.data.frequency",
679             n("tutti.config.option.externalDevices.beep.data.frequency.description"),
680             "A2",
681             BeepFrequency.class,
682             false
683     ),
684     EXTERNAL_DEVICES_ERROR_RECEPTION_BEEP_ENABLED(
685             "tutti.ichtyometer.beep.error.enabled",
686             n("tutti.config.option.externalDevices.beep.error.enabled.description"),
687             "true",
688             Boolean.class,
689             false
690     ),
691     EXTERNAL_DEVICES_ERROR_RECEPTION_BEEP_FREQUENCY(
692             "tutti.ichtyometer.beep.error.frequency",
693             n("tutti.config.option.externalDevices.beep.error.frequency.description"),
694             "A1",
695             BeepFrequency.class,
696             false
697     );
698 
699     /** Configuration key. */
700     private final String key;
701 
702     /** I18n key of option description */
703     private final String description;
704 
705     /** Type of option */
706     private final Class<?> type;
707 
708     /** Default value of option. */
709     private String defaultValue;
710 
711     /** Flag to not keep option value on disk */
712     private boolean isTransient;
713 
714     /** Flag to not allow option value modification */
715     private boolean isFinal;
716 
717     TuttiConfigurationOption(String key,
718                              String description,
719                              String defaultValue,
720                              Class<?> type,
721                              boolean isTransient) {
722         this.key = key;
723         this.description = description;
724         this.defaultValue = defaultValue;
725         this.type = type;
726         this.isTransient = isTransient;
727         this.isFinal = isTransient;
728     }
729 
730     TuttiConfigurationOption(String key,
731                              String description,
732                              String defaultValue,
733                              Class<?> type) {
734         this(key, description, defaultValue, type, true);
735     }
736 
737     @Override
738     public String getKey() {
739         return key;
740     }
741 
742     @Override
743     public Class<?> getType() {
744         return type;
745     }
746 
747     @Override
748     public String getDescription() {
749         return description;
750     }
751 
752     @Override
753     public String getDefaultValue() {
754         return defaultValue;
755     }
756 
757     @Override
758     public boolean isTransient() {
759         return isTransient;
760     }
761 
762     @Override
763     public boolean isFinal() {
764         return isFinal;
765     }
766 
767     @Override
768     public void setDefaultValue(String defaultValue) {
769         this.defaultValue = defaultValue;
770     }
771 
772     @Override
773     public void setTransient(boolean newValue) {
774         // not used
775     }
776 
777     @Override
778     public void setFinal(boolean newValue) {
779         // not used
780     }
781 }