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();
}
}
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;
}
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);
});
}
Aggregations