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}