Search in sources :

Example 1 with Saft

use of eu.ggnet.saft.core.Saft in project dwoss by gg-net.

the class DwOssApplication method start.

/**
 * Starting the Deutsche Warenwirtschaft Open Source application.
 * The startup happens through the following steps:
 * <ol>
 * <li>Parameter validation via <a href="https://jcommander.org/">JCommander</a>. The required and optional parametes are defined here
 * {@link ConnectionParameter}.</li>
 * <li>Setting the LAF for Swing components via {@link LafMenuManager#loadAndSetUserLaf() }</li>
 * <li>Displaying a placeholder main pane and the blocking login screen.
 * <ul>
 * <li>The login screen has no authentification system on visibility but the user can already type in his username and password.</li>
 * <li>The guardian is set later and only then an authentification will happen, even if the user has pressed return before.</li>
 * <li>A red/green circle in the ui displays the status of the guardian (red meaning not yet set).</li>
 * </ul>
 * </li>
 * <li>Initialize the client backend, remote connections, saft core, and preparing the main view by wrapping the javafx pane in a swing frame.
 * <ul>
 * <li>{@link #initSeContainer() }</li>
 * <li>{@link #initGlobalExceptionHandling() }</li>
 * <li>{@link #initRemoteConnection(eu.ggnet.dwoss.assembly.client.support.ConnectionParameter) }</li>
 * <li>{@link #initMainPane() }</li>
 * <li>{@link #startSaftInitMainFrameAndWrapMainPane(javax.swing.JFrame, javafx.scene.layout.Pane, eu.ggnet.dwoss.assembly.client.support.ConnectionParameter)
 * }</li>
 * </ul>
 * </li>
 * <li>Activating the authentification in the login screen by calling {@link LoginScreenController#setAndActivateGuardian(eu.ggnet.saft.experimental.auth.Guardian)
 * with the remote guardian</li>
 * <li>Start the polling of server progress {@link MonitorManager#startPolling() }</li>
 * <li>Initialize the session timeout and global keys for manual logout and relocation of windows. Ctrl+Shift+L for manual logout and Ctrl+Shift+R for
 * relocation of all windows</li>
 * </ol>
 *
 * @param primaryStage primaryStage of application.
 * @throws Exception all possible exeptions.
 */
@Override
public void start(Stage primaryStage) throws Exception {
    try {
        // Parameter discovery is done here, cause a error will be shown via Ui.
        ConnectionParameter cp = new ConnectionParameter();
        JCommander.newBuilder().addObject(cp).programName(DwOssMain.class.getName()).build().parse(getParameters().getRaw().toArray(new String[] {}));
        L.debug("start() parameters discovered: {}", cp);
        LafMenuManager.loadAndSetUserLaf();
        createAndShowMainPane(primaryStage);
        // Creating the Swing MainFrame as long as we are in the Swing mode.
        JFrame mainFrame = new JFrame();
        LoginScreenController firstLoginScreen = createAndShowFirstLoginScreen(primaryStage, mainFrame);
        CompletableFuture.runAsync(() -> {
            container = initSeContainer();
            instance = container.getBeanManager().createInstance();
            saft = instance.select(Saft.class).get();
            UiCore.initGlobal(saft);
        }).thenRun(() -> initGlobalExceptionHandling()).thenRun(() -> initRemoteConnection(cp)).thenApply(v -> initMainPane()).thenAcceptAsync(mainView -> startSaftInitMainFrameAndWrapMainPane(mainFrame, mainView, cp), java.awt.EventQueue::invokeLater).thenRunAsync(() -> firstLoginScreen.setAndActivateGuardian(Dl.local().lookup(Guardian.class))).thenRun(() -> initOnceViews()).thenRun(() -> instance.select(MonitorManager.class).get().startPolling()).thenRun(() -> initSessionTimeoutAndManualLogoutKeys()).thenRun(() -> initRelocationKeys()).handle((v, ex) -> {
            new DwFinalExceptionConsumer(null).accept(Optional.empty(), ex);
            return null;
        });
    } catch (ParameterException e) {
        // Sout is here correct.
        System.out.println(e.getMessage());
        System.out.println();
        e.getJCommander().usage();
        Alert a = new Alert(javafx.scene.control.Alert.AlertType.ERROR);
        a.setTitle("Fehler beim Start");
        a.setHeaderText("Fehler bei Start.");
        a.setContentText("Es ist ein Fehler beim Start aufgetreten. Bitte Console und/oder Logs prüfen.");
        a.show();
    }
}
Also used : EventHandler(javafx.event.EventHandler) Scene(javafx.scene.Scene) UserInfoException(eu.ggnet.dwoss.core.common.UserInfoException) ParameterException(com.beust.jcommander.ParameterException) LoggerFactory(org.slf4j.LoggerFactory) CompletableFuture(java.util.concurrent.CompletableFuture) StackPane(javafx.scene.layout.StackPane) eu.ggnet.dwoss.assembly.client.support(eu.ggnet.dwoss.assembly.client.support) JFXPanel(javafx.embed.swing.JFXPanel) DossierFilterView(eu.ggnet.dwoss.redtapext.ui.dbs.DossierFilterView) Application(javafx.application.Application) Parent(javafx.scene.Parent) RedTapeView(eu.ggnet.dwoss.redtapext.ui.cao.RedTapeView) FXMLLoader(javafx.fxml.FXMLLoader) MonitorManager(eu.ggnet.dwoss.assembly.client.support.monitor.MonitorManager) ImageIcon(javax.swing.ImageIcon) Dl(eu.ggnet.dwoss.core.widget.Dl) eu.ggnet.dwoss.assembly.client.support.exception(eu.ggnet.dwoss.assembly.client.support.exception) JFrame(javax.swing.JFrame) Instance(javax.enterprise.inject.Instance) Pane(javafx.scene.layout.Pane) Alert(javafx.scene.control.Alert) Modality(javafx.stage.Modality) Label(javafx.scene.control.Label) javafx.scene.input(javafx.scene.input) Logger(org.slf4j.Logger) SeContainerInitializer(javax.enterprise.inject.se.SeContainerInitializer) RemoteLookup(eu.ggnet.dwoss.core.widget.dl.RemoteLookup) CachedMandators(eu.ggnet.dwoss.mandator.spi.CachedMandators) eu.ggnet.dwoss.assembly.client.support.login(eu.ggnet.dwoss.assembly.client.support.login) Swing(eu.ggnet.saft.core.impl.Swing) JCommander(com.beust.jcommander.JCommander) IOException(java.io.IOException) WindowAdapter(java.awt.event.WindowAdapter) SearchCask(eu.ggnet.dwoss.search.ui.SearchCask) WindowEvent(java.awt.event.WindowEvent) StandardCharsets(java.nio.charset.StandardCharsets) EventType(javafx.event.EventType) Platform(javafx.application.Platform) Saft(eu.ggnet.saft.core.Saft) ConstraintViolationException(javax.validation.ConstraintViolationException) Stage(javafx.stage.Stage) Guardian(eu.ggnet.dwoss.core.widget.auth.Guardian) UiCore(eu.ggnet.saft.core.UiCore) SeContainer(javax.enterprise.inject.se.SeContainer) Optional(java.util.Optional) RawReportView(eu.ggnet.dwoss.report.ui.RawReportView) JFrame(javax.swing.JFrame) Guardian(eu.ggnet.dwoss.core.widget.auth.Guardian) ParameterException(com.beust.jcommander.ParameterException) Alert(javafx.scene.control.Alert)

Example 2 with Saft

use of eu.ggnet.saft.core.Saft in project dwoss by gg-net.

the class DwOssApplication method createAndShowFirstLoginScreen.

/**
 * Creates and shows the LoginScreen in a very special first mode.
 * In this phase, no cdi or saft is available. So the login screen is
 * created with native fx calls. It is application modal, blocking the supplied
 * owner.
 * <ul>
 * <li>On a successful authentication, it will close the itself and the owner stage and show the supplied mainFrame.</li>
 * <li>On a cancel close, the hole application will be shutdown.</li>
 * </ul>
 * After the creation of the controller, no connection to any authentication system has happend.
 * A call to {@link LoginScreenController#setAndActivateGuardian(eu.ggnet.saft.experimental.auth.Guardian) } is needed later.
 *
 * @param owner     the owner of the dialog, normaly the main pane.
 * @param mainFrame a swing frame to be displayed.
 * @return the created and visible controller of the screen.
 */
private LoginScreenController createAndShowFirstLoginScreen(Stage owner, JFrame mainFrame) {
    FXMLLoader loader = new FXMLLoader(LoginScreenController.class.getResource("LoginScreenView.fxml"));
    Parent loginView;
    try {
        loginView = loader.load();
    } catch (IOException ex) {
        throw new RuntimeException(ex);
    }
    LoginScreenController loginController = loader.getController();
    Stage loginStage = new Stage();
    loginStage.initModality(Modality.APPLICATION_MODAL);
    loginStage.initOwner(owner);
    loginStage.setScene(new Scene(loginView));
    loginStage.setOnCloseRequest(e -> loginController.closed());
    loginStage.show();
    loginController.accept(new LoginScreenConfiguration.Builder().onSuccess(p -> {
        java.awt.EventQueue.invokeLater(() -> mainFrame.setVisible(true));
        Platform.runLater(() -> {
            loginStage.close();
            owner.close();
        });
        // If saft in JavaFx mode, this is enought
        // Platform.runLater(() -> loginStage.close());
        // Restart the timer. Instance will not be null at that time.
        instance.select(LoggedInTimeoutManager.class).get().startTime();
    }).onCancel(() -> System.exit(0)).build());
    return loginController;
}
Also used : EventHandler(javafx.event.EventHandler) Scene(javafx.scene.Scene) UserInfoException(eu.ggnet.dwoss.core.common.UserInfoException) ParameterException(com.beust.jcommander.ParameterException) LoggerFactory(org.slf4j.LoggerFactory) CompletableFuture(java.util.concurrent.CompletableFuture) StackPane(javafx.scene.layout.StackPane) eu.ggnet.dwoss.assembly.client.support(eu.ggnet.dwoss.assembly.client.support) JFXPanel(javafx.embed.swing.JFXPanel) DossierFilterView(eu.ggnet.dwoss.redtapext.ui.dbs.DossierFilterView) Application(javafx.application.Application) Parent(javafx.scene.Parent) RedTapeView(eu.ggnet.dwoss.redtapext.ui.cao.RedTapeView) FXMLLoader(javafx.fxml.FXMLLoader) MonitorManager(eu.ggnet.dwoss.assembly.client.support.monitor.MonitorManager) ImageIcon(javax.swing.ImageIcon) Dl(eu.ggnet.dwoss.core.widget.Dl) eu.ggnet.dwoss.assembly.client.support.exception(eu.ggnet.dwoss.assembly.client.support.exception) JFrame(javax.swing.JFrame) Instance(javax.enterprise.inject.Instance) Pane(javafx.scene.layout.Pane) Alert(javafx.scene.control.Alert) Modality(javafx.stage.Modality) Label(javafx.scene.control.Label) javafx.scene.input(javafx.scene.input) Logger(org.slf4j.Logger) SeContainerInitializer(javax.enterprise.inject.se.SeContainerInitializer) RemoteLookup(eu.ggnet.dwoss.core.widget.dl.RemoteLookup) CachedMandators(eu.ggnet.dwoss.mandator.spi.CachedMandators) eu.ggnet.dwoss.assembly.client.support.login(eu.ggnet.dwoss.assembly.client.support.login) Swing(eu.ggnet.saft.core.impl.Swing) JCommander(com.beust.jcommander.JCommander) IOException(java.io.IOException) WindowAdapter(java.awt.event.WindowAdapter) SearchCask(eu.ggnet.dwoss.search.ui.SearchCask) WindowEvent(java.awt.event.WindowEvent) StandardCharsets(java.nio.charset.StandardCharsets) EventType(javafx.event.EventType) Platform(javafx.application.Platform) Saft(eu.ggnet.saft.core.Saft) ConstraintViolationException(javax.validation.ConstraintViolationException) Stage(javafx.stage.Stage) Guardian(eu.ggnet.dwoss.core.widget.auth.Guardian) UiCore(eu.ggnet.saft.core.UiCore) SeContainer(javax.enterprise.inject.se.SeContainer) Optional(java.util.Optional) RawReportView(eu.ggnet.dwoss.report.ui.RawReportView) Parent(javafx.scene.Parent) Stage(javafx.stage.Stage) IOException(java.io.IOException) Scene(javafx.scene.Scene) FXMLLoader(javafx.fxml.FXMLLoader)

Example 3 with Saft

use of eu.ggnet.saft.core.Saft in project dwoss by gg-net.

the class CreateSelectionTryout method main.

public static void main(String[] args) throws InterruptedException {
    SeContainerInitializer ci = SeContainerInitializer.newInstance();
    ci.addPackages(CreateSelectionTryout.class);
    ci.addPackages(WidgetProducers.class);
    ci.addPackages(true, StockUpiImpl.class);
    ci.disableDiscovery();
    SeContainer container = ci.initialize();
    Instance<Object> instance = container.getBeanManager().createInstance();
    Saft saft = instance.select(Saft.class).get();
    saft.addOnShutdown(() -> container.close());
    JButton b = new JButton("Press to close");
    b.setPreferredSize(new Dimension(200, 50));
    b.addActionListener(e -> {
        saft.closeWindowOf(b);
    });
    RemoteDl remote = instance.select(RemoteDl.class).get();
    remote.add(StockAgent.class, new StockAgent() {

        @Override
        public <T> List<T> findAll(Class<T> entityClass) {
            if (entityClass.equals(Stock.class))
                return (List<T>) Arrays.asList(new Stock(0, "Rotes Lager"), new Stock(1, "Blaues Lager"));
            return null;
        }

        // <editor-fold defaultstate="collapsed" desc="Unused Methodes">
        @Override
        public StockUnit findStockUnitByUniqueUnitIdEager(Integer uniqueUnitId) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public StockUnit findStockUnitByRefurbishIdEager(String refurbishId) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public List<StockTransaction> findStockTransactionEager(StockTransactionType type, StockTransactionStatusType statusType) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public List<StockTransaction> findStockTransactionEager(StockTransactionType type, StockTransactionStatusType statusType, int start, int amount) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public List<StockUnit> findStockUnitsByRefurbishIdEager(List<String> refurbishIds) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> T persist(T t) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> T merge(T t) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> void delete(T t) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> long count(Class<T> entityClass) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> List<T> findAll(Class<T> entityClass, int start, int amount) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> List<T> findAllEager(Class<T> entityClass) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> List<T> findAllEager(Class<T> entityClass, int start, int amount) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> T findById(Class<T> entityClass, Object id) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> T findById(Class<T> entityClass, Object id, LockModeType lockModeType) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> T findByIdEager(Class<T> entityClass, Object id) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public <T> T findByIdEager(Class<T> entityClass, Object id, LockModeType lockModeType) {
            // To change body of generated methods, choose Tools | Templates.
            throw new UnsupportedOperationException("Not supported yet.");
        }
    });
    JFrame f = UiUtil.startup(() -> b);
    saft.core(Swing.class).initMain(f);
    saft.exec(() -> {
        saft.build().fxml().eval(CreateSelectionController.class).opt().ifPresent(System.out::println);
    });
}
Also used : RemoteDl(eu.ggnet.dwoss.core.widget.dl.RemoteDl) JButton(javax.swing.JButton) JFrame(javax.swing.JFrame) Swing(eu.ggnet.saft.core.impl.Swing) List(java.util.List) Saft(eu.ggnet.saft.core.Saft) SeContainerInitializer(javax.enterprise.inject.se.SeContainerInitializer) Dimension(java.awt.Dimension) StockAgent(eu.ggnet.dwoss.stock.ee.StockAgent) LockModeType(javax.persistence.LockModeType) SeContainer(javax.enterprise.inject.se.SeContainer)

Aggregations

Saft (eu.ggnet.saft.core.Saft)3 Swing (eu.ggnet.saft.core.impl.Swing)3 SeContainer (javax.enterprise.inject.se.SeContainer)3 SeContainerInitializer (javax.enterprise.inject.se.SeContainerInitializer)3 JFrame (javax.swing.JFrame)3 JCommander (com.beust.jcommander.JCommander)2 ParameterException (com.beust.jcommander.ParameterException)2 eu.ggnet.dwoss.assembly.client.support (eu.ggnet.dwoss.assembly.client.support)2 eu.ggnet.dwoss.assembly.client.support.exception (eu.ggnet.dwoss.assembly.client.support.exception)2 eu.ggnet.dwoss.assembly.client.support.login (eu.ggnet.dwoss.assembly.client.support.login)2 MonitorManager (eu.ggnet.dwoss.assembly.client.support.monitor.MonitorManager)2 UserInfoException (eu.ggnet.dwoss.core.common.UserInfoException)2 Dl (eu.ggnet.dwoss.core.widget.Dl)2 Guardian (eu.ggnet.dwoss.core.widget.auth.Guardian)2 RemoteLookup (eu.ggnet.dwoss.core.widget.dl.RemoteLookup)2 CachedMandators (eu.ggnet.dwoss.mandator.spi.CachedMandators)2 RedTapeView (eu.ggnet.dwoss.redtapext.ui.cao.RedTapeView)2 DossierFilterView (eu.ggnet.dwoss.redtapext.ui.dbs.DossierFilterView)2 RawReportView (eu.ggnet.dwoss.report.ui.RawReportView)2 SearchCask (eu.ggnet.dwoss.search.ui.SearchCask)2