package ch.ge.ve.offlineadmin;
/*-
* #%L
* Admin offline
* %%
* Copyright (C) 2015 - 2016 République et Canton de Genève
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import ch.ge.ve.offlineadmin.controller.InterruptibleProcessController;
import ch.ge.ve.offlineadmin.exception.ProcessInterruptedException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import org.apache.log4j.PropertyConfigurator;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.Security;
import java.util.ResourceBundle;
import static ch.ge.ve.offlineadmin.util.SecurityConstants.PROPERTIES_LOG4J;
/**
* Main class
*/
public class OfflineAdminApp extends Application {
/**
* @param args the arguments passed
*/
public static void main(String[] args) {
Security.addProvider(new BouncyCastleProvider());
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
PropertyConfigurator.configure(getLog4jProperties());
ResourceBundle resourceBundle = getBundle();
initializeDefaultExceptionHandler(resourceBundle);
primaryStage.setTitle(resourceBundle.getString("primaryStage.title"));
primaryStage.getIcons().add(new Image(OfflineAdminApp.class.getResourceAsStream("images/icon.gif")));
BorderPane rootLayout = initRootLayout(resourceBundle);
Scene mainScene = new Scene(rootLayout);
mainScene.getStylesheets().add(getStyleSheet().toExternalForm());
primaryStage.setScene(mainScene);
primaryStage.show();
}
private void initializeDefaultExceptionHandler(ResourceBundle resourceBundle) {
InterruptibleProcessController interruptibleProcessController = new InterruptibleProcessController() {
@Override
protected ResourceBundle getResourceBundle() {
return resourceBundle;
}
};
Thread.currentThread().setUncaughtExceptionHandler((t, e) -> {
final ProcessInterruptedException processInterruptedException = new ProcessInterruptedException(resourceBundle.getString("exception_alert.generic-message"), e);
interruptibleProcessController.handleInterruption(processInterruptedException);
});
}
private BorderPane initRootLayout(ResourceBundle bundle) throws IOException {
FXMLLoader loader = new FXMLLoader();
URL resource = this.getClass().getResource("/ch/ge/ve/offlineadmin/view/RootLayout.fxml");
loader.setLocation(resource);
loader.setResources(bundle);
return loader.load();
}
private URL getStyleSheet() {
return this.getClass().getResource("/ch/ge/ve/offlineadmin/styles/offlineadmin.css");
}
private static ResourceBundle getBundle() {
return ResourceBundle.getBundle("ch.ge.ve.offlineadmin.bundles.offlineadmin-messages");
}
private InputStream getLog4jProperties() throws IOException {
return OfflineAdminApp.class.getClassLoader().getResourceAsStream(PROPERTIES_LOG4J);
}
}