View Javadoc
1   package fr.ifremer.quadrige2.synchro.server.config;
2   
3   /*-
4    * #%L
5    * Quadrige2 Core :: Quadrige2 Synchro server
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.hibernate.spatial.dialect.oracle.OracleSpatial10gDialect;
30  import org.nuiton.config.ConfigOptionDef;
31  import org.nuiton.version.Version;
32  
33  import java.net.URL;
34  
35  import static org.nuiton.i18n.I18n.n;
36  
37  /**
38   * All application configuration options.
39   * 
40   * @author Benoit Lavenier <benoit.lavenier@e-is.pro>
41   * @since 1.0
42   */
43  public enum SynchroServerConfigurationOption implements ConfigOptionDef {
44  
45      // ------------------------------------------------------------------------//
46      // -- READ-ONLY OPTIONS ---------------------------------------------------//
47      // ------------------------------------------------------------------------//
48      // ------------------------------------------------------------------------//
49      // -- DATA CONSTANTS --------------------------------------------------//
50      // ------------------------------------------------------------------------//
51      // ------------------------------------------------------------------------//
52      // -- READ-WRITE OPTIONS --------------------------------------------------//
53      // ------------------------------------------------------------------------//
54  
55      DATASOURCE_TYPE(
56              "quadrige2.synchro.server.datasource.type",
57              n("quadrige2.config.option.synchro.server.datasource.type.description"),
58              "local",
59              String.class),
60  
61      SERVER_JDBC_USERNAME(
62              "quadrige2.synchro.server.jdbc.username",
63              n("quadrige2.config.option.synchro.server.jdbc.username.description"),
64              "",
65              String.class),
66  
67      SERVER_JDBC_PASSWORD(
68              "quadrige2.synchro.server.jdbc.password",
69              n("quadrige2.config.option.synchro.server.jdbc.password.description"),
70              "",
71              String.class),
72  
73      SERVER_JDBC_SCHEMA(
74              "quadrige2.synchro.server.jdbc.schema",
75              n("quadrige2.config.option.synchro.server.jdbc.schema.description"),
76              "",
77              String.class),
78  
79      SERVER_JDBC_CATALOG(
80              "quadrige2.synchro.server.jdbc.catalog",
81              n("quadrige2.config.option.synchro.server.jdbc.catalog.description"),
82              "",
83              String.class),
84  
85      SERVER_JDBC_URL(
86              "quadrige2.synchro.server.jdbc.url",
87              n("quadrige2.config.option.synchro.server.jdbc.url.description"),
88              "jdbc:oracle:thin:@HOST:1521:SID",
89              String.class),
90  
91      SERVER_JDBC_DRIVER(
92              "quadrige2.synchro.server.jdbc.driver",
93              n("quadrige2.config.option.synchro.server.jdbc.driver.description"),
94              "oracle.jdbc.driver.OracleDriver",
95              Class.class),
96  
97      SERVER_HIBERNATE_DIALECT(
98              "quadrige2.synchro.server.hibernate.dialect",
99              n("quadrige2.config.option.synchro.server.hibernate.dialect.description"),
100             OracleSpatial10gDialect.class.getName(),
101             Class.class),
102 
103     CLIENT_JDBC_USERNAME(
104             "quadrige2.synchro.client.jdbc.username",
105             n("quadrige2.config.option.synchro.client.jdbc.username.description"),
106             "sa",
107             String.class),
108 
109     CLIENT_JDBC_PASSWORD(
110             "quadrige2.synchro.client.jdbc.password",
111             n("quadrige2.config.option.synchro.client.jdbc.password.description"),
112             "",
113             String.class),
114 
115     CLIENT_JDBC_SCHEMA(
116             "quadrige2.synchro.client.jdbc.schema",
117             n("quadrige2.config.option.synchro.client.jdbc.schema.description"),
118             "PUBLIC",
119             String.class),
120 
121     CLIENT_JDBC_CATALOG(
122             "quadrige2.synchro.client.jdbc.catalog",
123             n("quadrige2.config.option.synchro.client.jdbc.catalog.description"),
124             "",
125             String.class),
126 
127     CLIENT_JDBC_URL(
128             "quadrige2.synchro.client.jdbc.url",
129             n("quadrige2.config.option.synchro.client.jdbc.url.description"),
130             "jdbc:hsqldb:file:/tmp/quadrige2",
131             String.class),
132 
133     CLIENT_JDBC_DRIVER(
134             "quadrige2.synchro.client.jdbc.driver",
135             n("quadrige2.config.option.synchro.client.jdbc.driver.description"),
136             "org.hsqldb.jdbcDriver",
137             Class.class),
138 
139     CLIENT_HIBERNATE_DIALECT(
140             "quadrige2.synchro.client.hibernate.dialect",
141             n("quadrige2.config.option.synchro.client.hibernate.dialect.description"),
142             HSQLDialect.class.getName(),
143             Class.class),
144 
145     SYNCHRO_MIN_COMPATIBLE_VERSION(
146             "quadrige2.synchro.server.minCompatibleVersion",
147             "quadrige2.synchro.server.config.option.minCompatibleVersion.description",
148             null,
149             Version.class,
150             false),
151 
152     SYNCHRO_CORE_POOL_SIZE(
153             "quadrige2.synchro.server.corePoolSize",
154             "quadrige2.synchro.server.config.option.corePoolSize.description",
155             "${quadrige2.synchro.server.maxPoolSize}",
156             Integer.class,
157             false),
158     SYNCHRO_MAX_POOL_SIZE(
159             "quadrige2.synchro.server.maxPoolSize",
160             "quadrige2.synchro.server.config.option.maxPoolSize.description",
161             "5",
162             Integer.class,
163             false),
164     SYNCHRO_QUEUE_CAPACITY(
165             "quadrige2.synchro.server.queueCapacity",
166             "quadrige2.synchro.server.config.option.queueCapacity.description",
167             "50",
168             Integer.class,
169             false),
170     SYNCHRO_STATUS_TIME_TO_IDLE(
171             "quadrige2.synchro.server.status.timeToIdle",
172             "quadrige2.synchro.server.config.option.status.timeToIdle.description",
173             "180", // 180s = 3min
174             Integer.class,
175             false),
176     SYNCHRO_SERVICE_LAZY(
177             "quadrige2.synchro.server.service.lazy",
178             "quadrige2.synchro.server.config.option.service.lazy.description",
179             Boolean.FALSE.toString(),
180             Boolean.class,
181             false),
182     UI_BASE_URL(
183             "quadrige2.synchro.server.baseUrl",
184             "quadrige2.synchro.server.config.option.baseUrl.description",
185             "http://localhost:8080/",
186             URL.class,
187             false),
188     UI_SECURITY_TYPE(
189             "quadrige2.synchro.server.security.type",
190             "quadrige2.synchro.server.config.option.security.type.description",
191             "mock",
192             String.class,
193             false),
194     SECURITY_LDAP_BASEDN(
195             "quadrige2.synchro.server.security.ldap.baseDn",
196             "quadrige2.synchro.server.config.option.security.ldap.baseDn.description",
197             "",
198             String.class,
199             false),
200     SECURITY_LDAP_URL(
201             "quadrige2.synchro.server.security.ldap.url",
202             "quadrige2.synchro.server.config.option.security.ldap.url.description",
203             "",
204             URL.class,
205             false),
206     SECURITY_AD_URL(
207             "quadrige2.synchro.server.security.ad.url",
208             "quadrige2.synchro.server.config.option.security.ad.url.description",
209             "",
210             URL.class,
211             false),
212     SECURITY_AD_DOMAIN(
213             "quadrige2.synchro.server.security.ad.domain",
214             "quadrige2.synchro.server.config.option.security.ad.domain.description",
215             "",
216             URL.class,
217             false),
218     SECURITY_MOCK_USERNAME(
219             "quadrige2.synchro.server.security.mock.username",
220             "quadrige2.synchro.server.config.option.security.mock.username.description",
221             "demo",
222             String.class,
223             false),
224     SECURITY_MOCK_PASSWORD(
225             "quadrige2.synchro.server.security.mock.password",
226             "quadrige2.synchro.server.config.option.security.mock.password.description",
227             "demo",
228             String.class,
229             false),
230     SECURITY_MOCK_USER_ID(
231             "quadrige2.synchro.server.security.mock.userId",
232             "quadrige2.synchro.server.config.option.security.mock.userId.description",
233             "263",
234             Integer.class,
235             false),
236     TIMEZONE(
237             "quadrige2.synchro.server.timezone",
238             "quadrige2.synchro.server.config.option.timezone.description",
239             "",
240             String.class,
241             false),
242 
243     SYNCHRO_EXPORT_FINALIZE_PROCEDURES(
244             "quadrige2.synchro.server.export.finalize.procedures",
245             "quadrige2.synchro.server.config.option.export.finalize.procedures.description",
246             "",
247             String.class,
248             false),
249 
250 
251     ;
252 
253     /**
254      * Configuration key.
255      */
256     private final String key;
257 
258     /**
259      * I18n key of option description
260      */
261     private final String description;
262 
263     /**
264      * Type of option
265      */
266     private final Class<?> type;
267 
268     /**
269      * Default value of option.
270      */
271     private String defaultValue;
272 
273     /**
274      * Flag to not keep option value on disk
275      */
276     private boolean isTransient;
277 
278     /**
279      * Flag to not allow option value modification
280      */
281     private boolean isFinal;
282 
283     SynchroServerConfigurationOption(String key,
284                                      String description,
285                                      String defaultValue,
286                                      Class<?> type,
287                                      boolean isTransient) {
288         this.key = key;
289         this.description = description;
290         this.defaultValue = defaultValue;
291         this.type = type;
292         this.isTransient = isTransient;
293         this.isFinal = isTransient;
294     }
295 
296     SynchroServerConfigurationOption(String key,
297                                      String description,
298                                      String defaultValue,
299                                      Class<?> type) {
300         this(key, description, defaultValue, type, true);
301     }
302 
303     @Override
304     public String getKey() {
305         return key;
306     }
307 
308     @Override
309     public Class<?> getType() {
310         return type;
311     }
312 
313     @Override
314     public String getDescription() {
315         return description;
316     }
317 
318     @Override
319     public String getDefaultValue() {
320         return defaultValue;
321     }
322 
323     @Override
324     public boolean isTransient() {
325         return isTransient;
326     }
327 
328     @Override
329     public boolean isFinal() {
330         return isFinal;
331     }
332 
333     @Override
334     public void setDefaultValue(String defaultValue) {
335         this.defaultValue = defaultValue;
336     }
337 
338     @Override
339     public void setTransient(boolean newValue) {
340         // not used
341     }
342 
343     @Override
344     public void setFinal(boolean newValue) {
345         // not used
346     }
347 }