/* * Copyright (C) 2014 GG-Net GmbH - Oliver Günther * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU 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 General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package eu.ggnet.dwoss.assembly.remote; import java.awt.EventQueue; import java.awt.Toolkit; import java.io.IOException; import java.net.*; import java.util.Objects; import javax.validation.ConstraintViolationException; import javafx.application.Application; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.stage.Stage; import eu.ggnet.dwoss.assembly.remote.provides.RemoteServer; import eu.ggnet.dwoss.assembly.remote.select.RemoteMandatorSelectorController; import eu.ggnet.dwoss.assembly.remote.select.RemoteMode; import eu.ggnet.dwoss.common.exception.*; import eu.ggnet.dwoss.mandator.MandatorSupporter; import eu.ggnet.dwoss.mandator.api.value.Mandator; import eu.ggnet.dwoss.report.entity.ReportLine; import eu.ggnet.dwoss.report.returns.Summary; import eu.ggnet.dwoss.util.MetawidgetConfig; import eu.ggnet.dwoss.util.UserInfoException; import eu.ggnet.saft.core.*; import eu.ggnet.saft.core.UiAlert.Type; import eu.ggnet.saft.runtime.SwingClient; import static eu.ggnet.saft.core.Client.lookup; import static eu.ggnet.saft.core.UiAlert.Type.ERROR; /** * JavaFx entry Point. * <p/> * @author oliver.guenther */ public class RunClientFx extends Application { private SwingClient swingClient; public static void main(String[] args) { System.out.println("Starting JavaFx Remote Client"); launch(args); } @Override public void start(Stage primaryStage) throws Exception { System.out.println("Starting RemoteClient"); Platform.setImplicitExit(false); Toolkit.getDefaultToolkit().getSystemEventQueue().push(new UnhandledExceptionCatcher()); MetawidgetConfig.enhancedMetawidget(ReportLine.class, Mandator.class, Summary.class); Client.enableCache(MandatorSupporter.class); // Default Mode: GG-Net Productive if ( (getParameters().getRaw().isEmpty() || (getParameters().getNamed().containsKey("autologout") && getParameters().getNamed().size() == 1)) && !Objects.equals(System.getProperty("select"), "true") ) { startRemoteApplication(RemoteMode.GG_NET_PRODUCTIVE.getUrl()); return; } // If Parameters contain key --url, use parameter and move forward if ( getParameters().getNamed().containsKey("url") ) { startRemoteApplication(getParameters().getNamed().get("url")); return; } // If Parameters contain keys --mandator and --mode and the approriated Values can be mapped to a Mode, use the url and move forward if ( getParameters().getNamed().containsKey("mandator") && getParameters().getNamed().containsKey("mode") && RemoteMode.find(getParameters().getNamed().get("mandator"), getParameters().getNamed().get("mode")) != null ) { startRemoteApplication(RemoteMode.find(getParameters().getNamed().get("mandator"), getParameters().getNamed().get("mode")).getUrl()); return; } // Otherwise show all paramters, telling, that these are not useful and to use usage. if ( !getParameters().getRaw().contains("--select") && !Objects.equals(System.getProperty("select"), "true") ) { Alert .title("Fehlerhafte Paramter") .message("Es wurden folgende fehlerhaften Parameter gefunden:") .nl(getParameters().getRaw().toString()) .nl("Für die korrekte Benutzung Usage anschauen") .show(Type.WARNING); } // If Parameters are empty, silently move to Selector Dialog. FXMLLoader loader = RemoteMandatorSelectorController.newAutoLoader(); Pane pane = loader.getRoot(); final RemoteMandatorSelectorController controller = loader.getController(); controller.setStage(primaryStage); primaryStage.setScene(new Scene(pane)); primaryStage.setTitle("Host Selector"); primaryStage.showingProperty().not().and(controller.okProperty()).addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> ov, Boolean oldValue, Boolean newValue) { startRemoteApplication(controller.getUrl()); } }); primaryStage.show(); } @Override public void init() throws Exception { super.init(); System.out.println("JavaFx Init called"); } @Override public void stop() throws Exception { super.stop(); System.out.println("JavaFx Stop called"); } private void startRemoteApplication(String url) { System.out.println("Starting with " + url); final URL provider; try { provider = new URL(url); } catch (MalformedURLException ex) { throw new RuntimeException(ex); } if ( !isReachable(provider.getHost()) ) { Alert .title("Fehler") .message("Verbindung zum Server " + provider.getHost() + " nicht möglich. Abbruch.\nBitte noch einmal versuchen und die Technik informieren.") .show(ERROR); return; } // Setting the URL for Remote Connections. RemoteServer.URL = url; EventQueue.invokeLater(() -> { swingClient = new SwingClient() { @Override protected void close() { Platform.exit(); System.exit(0); // Again, not perfect. } }; swingClient.init(); swingClient.show( "(Remote," + provider.getHost() + ":" + provider.getPort() + ") - Mandant:" + lookup(MandatorSupporter.class).loadMandator().getCompany().getName(), getParameters()); }); UiCore.overwriteFinalExceptionConsumer(new DwFinalExceptionConsumer()); UiCore.registerExceptionConsumer(UserInfoException.class, new UserInfoExceptionConsumer()); UiCore.registerExceptionConsumer(ConstraintViolationException.class, new ConstraintViolationConsumer()); } private boolean isReachable(String host) { try { if ( InetAddress.getByName(host).isReachable(5000) ) return true; } catch (IOException ex) { // TODO: Log me } return false; } }