001package fr.ifremer.adagio.core; 002 003/* 004 * #%L 005 * SIH-Adagio :: Core for Allegro 006 * $Id:$ 007 * $HeadURL:$ 008 * %% 009 * Copyright (C) 2012 - 2014 Ifremer 010 * %% 011 * This program is free software: you can redistribute it and/or modify 012 * it under the terms of the GNU Affero General Public License as published by 013 * the Free Software Foundation, either version 3 of the License, or 014 * (at your option) any later version. 015 * 016 * This program is distributed in the hope that it will be useful, 017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 019 * GNU General Public License for more details. 020 * 021 * You should have received a copy of the GNU Affero General Public License 022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 023 * #L% 024 */ 025 026import static org.nuiton.i18n.I18n.t; 027 028import java.io.File; 029import java.io.IOException; 030import java.util.Arrays; 031import java.util.Locale; 032 033import org.apache.commons.io.FileUtils; 034import org.apache.commons.io.IOUtils; 035import org.apache.commons.logging.Log; 036import org.apache.commons.logging.LogFactory; 037import org.nuiton.config.ApplicationConfig; 038import org.nuiton.config.ArgumentsParserException; 039import org.nuiton.i18n.I18n; 040import org.nuiton.i18n.init.DefaultI18nInitializer; 041import org.nuiton.i18n.init.UserI18nInitializer; 042 043import fr.ifremer.adagio.core.config.AdagioConfiguration; 044import fr.ifremer.adagio.core.service.ServiceLocator; 045import fr.ifremer.adagio.synchro.config.SynchroConfiguration; 046import fr.ifremer.adagio.synchro.config.SynchroConfigurationOption; 047 048public class RunAllegroCore { 049 050 /* Logger */ 051 private static final Log log = LogFactory.getLog(RunAllegroCore.class); 052 053 public static final int DELETE_DB_EXIT_CODE = 89; 054 055 public static final int UPATE_EXIT_CODE = 88; 056 057 public static final int NORMAL_EXIT_CODE = 0; 058 059 public static void main(String[] args) { 060 if (log.isInfoEnabled()) { 061 log.info("Starting SIH-Adagio :: Core for Allegro with arguments: " + Arrays.toString(args)); 062 } 063 064 // By default, display help 065 if (args == null || args.length == 0) { 066 args = new String[] { "-h" }; 067 } 068 069 // Could override config file name (useful for dev) 070 String configFile = "allegro-core.config"; 071 if (System.getProperty(configFile) != null) { 072 configFile = System.getProperty(configFile); 073 configFile = configFile.replaceAll("\\\\", "/"); 074 } 075 076 // Create configuration 077 AdagioConfiguration config = new AdagioConfiguration(configFile, args) { 078 protected void addAlias(ApplicationConfig applicationConfig) { 079 super.addAlias(applicationConfig); 080 // Add custom alias 081 applicationConfig.addAlias("-iu", "--option", SynchroConfigurationOption.IMPORT_JDBC_USERNAME.getKey()); 082 applicationConfig.addAlias("--import-user", "--option", SynchroConfigurationOption.IMPORT_JDBC_USERNAME.getKey()); 083 applicationConfig.addAlias("-ip", "--option", SynchroConfigurationOption.IMPORT_JDBC_PASSWORD.getKey()); 084 applicationConfig.addAlias("--import-password", "--option", SynchroConfigurationOption.IMPORT_JDBC_PASSWORD.getKey()); 085 applicationConfig.addAlias("-idb", "--option", SynchroConfigurationOption.IMPORT_JDBC_URL.getKey()); 086 applicationConfig.addAlias("--import-database", "--option", SynchroConfigurationOption.IMPORT_JDBC_URL.getKey()); 087 applicationConfig.addAlias("-is", "--option", SynchroConfigurationOption.IMPORT_JDBC_SCHEMA.getKey()); 088 applicationConfig.addAlias("--import-schema", "--option", SynchroConfigurationOption.IMPORT_JDBC_SCHEMA.getKey()); 089 }; 090 }; 091 AdagioConfiguration.setInstance(config); 092 093 // Cascade the application config to the synchro module 094 SynchroConfiguration synchroConfig = new SynchroConfiguration(config.getApplicationConfig()); 095 SynchroConfiguration.setInstance(synchroConfig); 096 097 // Init i18n 098 try { 099 initI18n(config); 100 } catch (IOException e) { 101 throw new AdagioTechnicalException("i18n initialization failed", e); 102 } 103 104 try { 105 config.getApplicationConfig().doAllAction(); 106 } catch (Exception e) { 107 e.printStackTrace(); 108 } 109 110 IOUtils.closeQuietly(ServiceLocator.instance()); 111 } 112 113 protected static void initI18n(AdagioConfiguration config) throws IOException { 114 115 // --------------------------------------------------------------------// 116 // init i18n 117 // --------------------------------------------------------------------// 118 File i18nDirectory = new File(config.getDataDirectory(), "i18n"); 119 if (i18nDirectory.exists()) { 120 // clean i18n cache 121 FileUtils.cleanDirectory(i18nDirectory); 122 } 123 124 FileUtils.forceMkdir(i18nDirectory); 125 126 if (log.isDebugEnabled()) { 127 log.debug("I18N directory: " + i18nDirectory); 128 } 129 130 Locale i18nLocale = config.getI18nLocale(); 131 132 if (log.isInfoEnabled()) { 133 log.info(String.format("Starts i18n with locale [%s] at [%s]", 134 i18nLocale, i18nDirectory)); 135 } 136 I18n.init(new UserI18nInitializer( 137 i18nDirectory, new DefaultI18nInitializer(getI18nBundleName())), 138 i18nLocale); 139 } 140 141 protected static String getI18nBundleName() { 142 return "adagio-core-allegro-i18n"; 143 } 144}