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