1 package fr.ifremer.adagio.synchro.config;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import static org.nuiton.i18n.I18n.t;
27
28 import java.io.File;
29 import java.util.Locale;
30 import java.util.Properties;
31 import java.util.Set;
32
33 import org.apache.commons.lang3.StringUtils;
34 import org.apache.commons.logging.Log;
35 import org.apache.commons.logging.LogFactory;
36 import org.nuiton.config.ApplicationConfig;
37 import org.nuiton.config.ApplicationConfigHelper;
38 import org.nuiton.config.ApplicationConfigProvider;
39 import org.nuiton.config.ArgumentsParserException;
40
41 import com.google.common.base.Charsets;
42 import com.google.common.collect.ImmutableSet;
43
44 import fr.ifremer.adagio.synchro.SynchroTechnicalException;
45 import fr.ifremer.adagio.synchro.dao.DaoUtils;
46
47 public class SynchroConfiguration {
48
49 private static final Log log = LogFactory.getLog(SynchroConfiguration.class);
50
51
52
53
54 protected final ApplicationConfig applicationConfig;
55
56 private static SynchroConfiguration instance;
57
58 public static SynchroConfiguration getInstance() {
59 return instance;
60 }
61
62 public static void setInstance(SynchroConfiguration instance) {
63 SynchroConfiguration.instance = instance;
64 }
65
66 protected final String[] optionKeyToNotSave;
67
68 protected File configFile;
69
70 public SynchroConfiguration(ApplicationConfig applicationConfig) {
71 super();
72 this.applicationConfig = applicationConfig;
73 this.optionKeyToNotSave = null;
74 }
75
76 public SynchroConfiguration(String file, String... args) {
77 super();
78 this.applicationConfig = new ApplicationConfig();
79 this.applicationConfig.setEncoding(Charsets.UTF_8.name());
80 this.applicationConfig.setConfigFileName(file);
81
82
83 Set<ApplicationConfigProvider> providers =
84 ApplicationConfigHelper.getProviders(null,
85 null,
86 null,
87 true);
88
89
90 ApplicationConfigHelper.loadAllDefaultOption(applicationConfig,
91 providers);
92
93
94 for (ApplicationConfigProvider provider : providers) {
95 applicationConfig.loadActions(provider.getActions());
96 }
97
98
99 applicationConfig.loadActions(SynchroConfigurationAction.values());
100
101 applicationConfig.addAlias("-u", "--option", SynchroConfigurationOption.JDBC_USERNAME.getKey());
102 applicationConfig.addAlias("--user", "--option", SynchroConfigurationOption.JDBC_USERNAME.getKey());
103 applicationConfig.addAlias("-p", "--option", SynchroConfigurationOption.JDBC_PASSWORD.getKey());
104 applicationConfig.addAlias("--password", "--option", SynchroConfigurationOption.JDBC_PASSWORD.getKey());
105 applicationConfig.addAlias("-db", "--option", SynchroConfigurationOption.JDBC_URL.getKey());
106 applicationConfig.addAlias("--database", "--option", SynchroConfigurationOption.JDBC_URL.getKey());
107
108 applicationConfig.addAlias("-iu", "--option", SynchroConfigurationOption.IMPORT_JDBC_USERNAME.getKey());
109 applicationConfig.addAlias("--import-user", "--option", SynchroConfigurationOption.IMPORT_JDBC_USERNAME.getKey());
110 applicationConfig.addAlias("-ip", "--option", SynchroConfigurationOption.IMPORT_JDBC_PASSWORD.getKey());
111 applicationConfig.addAlias("--import-password", "--option", SynchroConfigurationOption.IMPORT_JDBC_PASSWORD.getKey());
112 applicationConfig.addAlias("-idb", "--option", SynchroConfigurationOption.IMPORT_JDBC_URL.getKey());
113 applicationConfig.addAlias("--import-database", "--option", SynchroConfigurationOption.IMPORT_JDBC_URL.getKey());
114
115
116 applicationConfig.addAlias("--port", "--option", SynchroConfigurationOption.SERVER_PORT.getKey());
117 applicationConfig.addAlias("--keystore", "--option", SynchroConfigurationOption.SERVER_SSL_KEYSTORE.getKey());
118
119
120 Set<String> optionToSkip =
121 ApplicationConfigHelper.getTransientOptionKeys(providers);
122
123 if (log.isDebugEnabled()) {
124 log.debug("Option that won't be saved: " + optionToSkip);
125 }
126 optionKeyToNotSave = optionToSkip.toArray(new String[optionToSkip.size()]);
127
128 try {
129 applicationConfig.parse(args);
130
131 } catch (ArgumentsParserException e) {
132 throw new SynchroTechnicalException(t("adagio.config.parse.error"), e);
133 }
134
135
136 File allegroBasedir = applicationConfig.getOptionAsFile(
137 SynchroConfigurationOption.BASEDIR.getKey());
138
139 if (allegroBasedir == null) {
140 allegroBasedir = new File("");
141 }
142 if (!allegroBasedir.isAbsolute()) {
143 allegroBasedir = new File(allegroBasedir.getAbsolutePath());
144 }
145 if (allegroBasedir.getName().equals("..")) {
146 allegroBasedir = allegroBasedir.getParentFile().getParentFile();
147 }
148 if (allegroBasedir.getName().equals(".")) {
149 allegroBasedir = allegroBasedir.getParentFile();
150 }
151 if (log.isInfoEnabled()) {
152 log.info("Application basedir: " + allegroBasedir);
153 }
154 applicationConfig.setOption(
155 SynchroConfigurationOption.BASEDIR.getKey(),
156 allegroBasedir.getAbsolutePath());
157 }
158
159 public File getConfigFile() {
160 if (configFile == null) {
161 File dir = getBasedir();
162 if (dir == null || !dir.exists()) {
163 dir = new File(applicationConfig.getUserConfigDirectory());
164 }
165 configFile = new File(dir, applicationConfig.getConfigFileName());
166 }
167 return configFile;
168 }
169
170
171 public File getBasedir() {
172 File result = applicationConfig.getOptionAsFile(SynchroConfigurationOption.BASEDIR.getKey());
173 return result;
174 }
175
176
177 public File getDataDirectory() {
178 File result = applicationConfig.getOptionAsFile(SynchroConfigurationOption.DATA_DIRECTORY.getKey());
179 return result;
180 }
181
182 public ApplicationConfig getApplicationConfig() {
183 return applicationConfig;
184 }
185
186 public File getDbDirectory() {
187 return applicationConfig.getOptionAsFile(SynchroConfigurationOption.DB_DIRECTORY.getKey());
188 }
189
190 public void setDbDirectory(File dbDirectory) {
191 applicationConfig.setOption(SynchroConfigurationOption.DB_DIRECTORY.getKey(), dbDirectory.getPath());
192 }
193
194 public File getDbAttachmentDirectory() {
195 return applicationConfig.getOptionAsFile(SynchroConfigurationOption.DB_ATTACHMENT_DIRECTORY.getKey());
196 }
197
198 public File getCacheDirectory() {
199 return applicationConfig.getOptionAsFile(SynchroConfigurationOption.DB_CACHE_DIRECTORY.getKey());
200 }
201
202 public File getDbBackupDirectory() {
203 return applicationConfig.getOptionAsFile(SynchroConfigurationOption.DB_BACKUP_DIRECTORY.getKey());
204 }
205
206 public String getHibernateDialect() {
207 return applicationConfig.getOption(SynchroConfigurationOption.HIBERNATE_DIALECT.getKey());
208 }
209
210 public String getJdbcDriver() {
211 return applicationConfig.getOption(SynchroConfigurationOption.JDBC_DRIVER.getKey());
212 }
213
214 public String getJdbcURL() {
215 return applicationConfig.getOption(SynchroConfigurationOption.JDBC_URL.getKey());
216 }
217
218 public String getDbName() {
219 return applicationConfig.getOption(SynchroConfigurationOption.DB_NAME.getKey());
220 }
221
222 public String getDbValidationQuery() {
223 return applicationConfig.getOption(SynchroConfigurationOption.DB_VALIDATION_QUERY.getKey());
224 }
225
226 public String getJdbcUsername() {
227 return applicationConfig.getOption(SynchroConfigurationOption.JDBC_USERNAME.getKey());
228 }
229
230 public String getJdbcPassword() {
231 return applicationConfig.getOption(SynchroConfigurationOption.JDBC_PASSWORD.getKey());
232 }
233
234 public File getI18nDirectory() {
235 return applicationConfig.getOptionAsFile(
236 SynchroConfigurationOption.I18N_DIRECTORY.getKey());
237 }
238
239 public Locale getI18nLocale() {
240 return applicationConfig.getOptionAsLocale(
241 SynchroConfigurationOption.I18N_LOCALE.getKey());
242 }
243
244 public void setI18nLocale(Locale locale) {
245 applicationConfig.setOption(SynchroConfigurationOption.I18N_LOCALE.getKey(), locale.toString());
246 }
247
248 public String getImportJdbcURL() {
249 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_JDBC_URL.getKey());
250 }
251
252 public String getImportJdbcUsername() {
253 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_JDBC_USERNAME.getKey());
254 }
255
256 public String getImportJdbcPassword() {
257 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_JDBC_PASSWORD.getKey());
258 }
259
260 public String getImportJdbcSchema() {
261 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_JDBC_SCHEMA.getKey());
262 }
263
264 public String getImportJdbcCatalog() {
265 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_JDBC_CATALOG.getKey());
266 }
267
268 public String getImportJdbcDriver() {
269 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_JDBC_DRIVER.getKey());
270 }
271
272 public int getImportJdbcBatchSize() {
273 int importJdbcBatchSize = applicationConfig.getOptionAsInt(SynchroConfigurationOption.IMPORT_JDBC_BATCH_SIZE.getKey());
274 if (importJdbcBatchSize == 0) {
275 return 1000;
276 }
277 return importJdbcBatchSize;
278 }
279
280 public String getImportHibernateDialect() {
281 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_HIBERNATE_DIALECT.getKey());
282 }
283
284 public String getSynchronizationStatusSynchronized() {
285 return applicationConfig.getOption(SynchroConfigurationOption.SYNCHRONIZATION_STATUS_SYNCHRONIZED.getKey());
286 }
287
288 public String getSynchronizationStatusReadyToSynchronize() {
289 return applicationConfig.getOption(SynchroConfigurationOption.SYNCHRONIZATION_STATUS_READY_TO_SYNCHRONIZE.getKey());
290 }
291
292 public String getSynchronizationStatusDeleted() {
293 return applicationConfig.getOption(SynchroConfigurationOption.SYNCHRONIZATION_STATUS_DELETED.getKey());
294 }
295
296 public String getSynchronizationStatusDirty() {
297 return applicationConfig.getOption(SynchroConfigurationOption.SYNCHRONIZATION_STATUS_DIRTY.getKey());
298 }
299
300 public int getServerPort() {
301 return applicationConfig.getOptionAsInt(SynchroConfigurationOption.SERVER_PORT.getKey());
302 }
303
304 public File getServerSslKeyStore() {
305 return applicationConfig.getOptionAsFile(SynchroConfigurationOption.SERVER_SSL_KEYSTORE.getKey());
306 }
307
308 public Properties getConnectionProperties() {
309 return DaoUtils.getConnectionProperties(
310 getJdbcURL(),
311 getJdbcUsername(),
312 getJdbcPassword(),
313 null,
314 getHibernateDialect(),
315 getJdbcDriver());
316 }
317
318 public Properties getImportConnectionProperties() {
319 return DaoUtils.getConnectionProperties(
320 getImportJdbcURL(),
321 getImportJdbcUsername(),
322 getImportJdbcPassword(),
323 getImportJdbcSchema(),
324 getImportHibernateDialect(),
325 getImportJdbcDriver());
326 }
327
328 public String getImportVesselProgramCode() {
329 return applicationConfig.getOption(SynchroConfigurationOption.DEFAULT_VESSEL_PROGRAM_CODE.getKey());
330 }
331
332 public String getImportTranscribingItemTypeIds() {
333 return applicationConfig.getOption(SynchroConfigurationOption.IMPORT_TRANSCRIBING_ITEM_TYPE_IDS.getKey());
334 }
335
336 public Set<String> getImportDataTablesIncludes() {
337 String dataTablesStr = applicationConfig.getOption(SynchroConfigurationOption.IMPORT_TABLES_DATA_INCLUDES.getKey());
338 Set<String> result = null;
339 if (StringUtils.isNotBlank(dataTablesStr)) {
340 result = ImmutableSet.<String> builder().add(dataTablesStr.split("\\s*,\\s*")).build();
341 }
342 return result;
343 }
344
345 public Set<String> getImportReferentialTablesIncludes() {
346 String referentialTablesStr = applicationConfig.getOption(SynchroConfigurationOption.IMPORT_TABLES_REFERENTIAL_INCLUDES.getKey());
347 Set<String> result = null;
348 if (StringUtils.isNotBlank(referentialTablesStr)) {
349 result = ImmutableSet.<String> builder().add(referentialTablesStr.split("\\s*,\\s*")).build();
350 }
351 return result;
352 }
353
354 }