View Javadoc
1   package fr.ifremer.quadrige3.core;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: Quadrige3 Client Core
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  import fr.ifremer.common.synchro.config.SynchroConfiguration;
27  import fr.ifremer.common.synchro.config.SynchroConfigurationOption;
28  import fr.ifremer.quadrige3.core.config.QuadrigeConfiguration;
29  import fr.ifremer.quadrige3.core.config.QuadrigeConfigurationOption;
30  import fr.ifremer.quadrige3.core.exception.QuadrigeTechnicalException;
31  import fr.ifremer.quadrige3.core.service.ServiceLocator;
32  import org.apache.commons.io.FileUtils;
33  import org.apache.commons.io.IOUtils;
34  import org.apache.commons.logging.Log;
35  import org.apache.commons.logging.LogFactory;
36  import org.nuiton.config.ApplicationConfig;
37  import org.nuiton.i18n.I18n;
38  import org.nuiton.i18n.init.DefaultI18nInitializer;
39  import org.nuiton.i18n.init.UserI18nInitializer;
40  
41  import java.io.File;
42  import java.io.IOException;
43  import java.util.Arrays;
44  import java.util.Locale;
45  
46  /**
47   * <p>
48   * QuadrigeCoreMain class.
49   * </p>
50   * 
51   */
52  public class QuadrigeCoreMain {
53  
54  	/* Logger */
55  	private static final Log log = LogFactory.getLog(QuadrigeCoreMain.class);
56  
57  	/**
58  	 * <p>
59  	 * main.
60  	 * </p>
61  	 * 
62  	 * @param args
63  	 *            an array of {@link java.lang.String} objects.
64  	 */
65  	public static void main(String[] args) {
66  		if (log.isInfoEnabled()) {
67  			log.info("Starting Quadrige3 :: Core Client with arguments: " + Arrays.toString(args));
68  		}
69  
70  		// By default, display help
71  		if (args == null || args.length == 0) {
72  			args = new String[] { "-h" };
73  		}
74  
75  		// Could override config file name (useful for dev)
76  		String configFile = "quadrige3-core.config";
77  		if (System.getProperty(configFile) != null) {
78  			configFile = System.getProperty(configFile);
79  			configFile = configFile.replaceAll("\\\\", "/");
80  		}
81  
82  		// Create configuration
83  		QuadrigeConfiguration config = new QuadrigeConfiguration(configFile, args) {
84  			protected void addAlias(ApplicationConfig applicationConfig) {
85  				super.addAlias(applicationConfig);
86  				// Add custom alias (synchro config)
87  				applicationConfig.addAlias("-iu", "--option", SynchroConfigurationOption.IMPORT_JDBC_USERNAME.getKey());
88  				applicationConfig.addAlias("--import-user", "--option", SynchroConfigurationOption.IMPORT_JDBC_USERNAME.getKey());
89  				applicationConfig.addAlias("-ip", "--option", SynchroConfigurationOption.IMPORT_JDBC_PASSWORD.getKey());
90  				applicationConfig.addAlias("--import-password", "--option", SynchroConfigurationOption.IMPORT_JDBC_PASSWORD.getKey());
91  				applicationConfig.addAlias("-idb", "--option", SynchroConfigurationOption.IMPORT_JDBC_URL.getKey());
92  				applicationConfig.addAlias("--import-database", "--option", SynchroConfigurationOption.IMPORT_JDBC_URL.getKey());
93  				applicationConfig.addAlias("-is", "--option", SynchroConfigurationOption.IMPORT_JDBC_SCHEMA.getKey());
94  				applicationConfig.addAlias("--import-schema", "--option", SynchroConfigurationOption.IMPORT_JDBC_SCHEMA.getKey());
95  
96  				// Alias for import
97  				applicationConfig.addAlias("-ny", "--option", QuadrigeConfigurationOption.IMPORT_NB_YEARS_DATA_HISTORY.getKey());
98  				applicationConfig.addAlias("--nb-years", "--option", QuadrigeConfigurationOption.IMPORT_NB_YEARS_DATA_HISTORY.getKey());
99  			}
100 		};
101 		QuadrigeConfiguration.setInstance(config);
102 
103 		// Cascade the application config to the synchro module
104 		SynchroConfiguration synchroConfig = new SynchroConfiguration(config.getApplicationConfig());
105 		SynchroConfiguration.setInstance(synchroConfig);
106 
107 		// Init i18n
108 		try {
109 			initI18n(config);
110 		} catch (IOException e) {
111 			throw new QuadrigeTechnicalException("i18n initialization failed", e);
112 		}
113 
114 		try {
115 			config.getApplicationConfig().doAllAction();
116 		} catch (Exception e) {
117 			e.printStackTrace();
118 		}
119 
120 		IOUtils.closeQuietly(ServiceLocator.instance());
121 	}
122 
123 	/**
124 	 * <p>
125 	 * initI18n.
126 	 * </p>
127 	 * 
128 	 * @param config
129 	 *            a {@link QuadrigeConfiguration} object.
130 	 * @throws java.io.IOException
131 	 *             if any.
132 	 */
133 	protected static void initI18n(QuadrigeConfiguration config) throws IOException {
134 
135 		// --------------------------------------------------------------------//
136 		// init i18n
137 		// --------------------------------------------------------------------//
138 		File i18nDirectory = new File(config.getDataDirectory(), "i18n");
139 		if (i18nDirectory.exists()) {
140 			// clean i18n cache
141 			FileUtils.cleanDirectory(i18nDirectory);
142 		}
143 
144 		FileUtils.forceMkdir(i18nDirectory);
145 
146 		if (log.isDebugEnabled()) {
147 			log.debug("I18N directory: " + i18nDirectory);
148 		}
149 
150 		Locale i18nLocale = config.getI18nLocale();
151 
152 		if (log.isInfoEnabled()) {
153 			log.info(String.format("Starts i18n with locale [%s] at [%s]",
154 					i18nLocale, i18nDirectory));
155 		}
156 		I18n.init(new UserI18nInitializer(
157 				i18nDirectory, new DefaultI18nInitializer(getI18nBundleName())),
158 				i18nLocale);
159 	}
160 
161 	/**
162 	 * <p>
163 	 * getI18nBundleName.
164 	 * </p>
165 	 * 
166 	 * @return a {@link java.lang.String} object.
167 	 */
168 	protected static String getI18nBundleName() {
169 		return "quadrige3-core-client-i18n";
170 	}
171 }