/** * * Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); You may not * use this file except in compliance with the License. You may obtain a copy of * the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.speedment.tool.core.internal.controller; import com.speedment.common.injector.annotation.Inject; import com.speedment.common.logger.Logger; import com.speedment.common.logger.LoggerManager; import com.speedment.runtime.core.component.InfoComponent; import com.speedment.runtime.core.component.ProjectComponent; import com.speedment.runtime.core.internal.util.Statistics; import com.speedment.tool.core.component.UserInterfaceComponent; import com.speedment.tool.core.component.VersionComponent; import com.speedment.tool.core.internal.util.InjectionLoader; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.SplitPane; import javafx.scene.layout.VBox; import java.net.URL; import java.util.ResourceBundle; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import static com.speedment.runtime.core.internal.util.Statistics.Event.GUI_PROJECT_LOADED; import static javafx.application.Platform.runLater; /** * * @author Emil Forslund */ public final class SceneController implements Initializable { private final static Logger LOGGER = LoggerManager.getLogger(SceneController.class); private @Inject UserInterfaceComponent ui; private @Inject InfoComponent info; private @Inject InjectionLoader loader; private @Inject VersionComponent version; private @Inject ProjectComponent projects; private @FXML VBox top; private @FXML SplitPane horizontal; private @FXML SplitPane vertical; @Override public void initialize(URL location, ResourceBundle resources) { runLater(() -> { top.getChildren().add(loader.load("Menubar")); top.getChildren().add(loader.load("Toolbar")); horizontal.getItems().add(0, loader.load("ProjectTree")); vertical.getItems().add(loader.load("Workspace")); vertical.getItems().add(loader.load("Output")); horizontal.setDividerPositions(0.2, 0.7); vertical.setDividerPositions(0.7, 0.3); Statistics.report(info, projects, GUI_PROJECT_LOADED); CompletableFuture.runAsync(() -> { try { version.latestVersion() .thenAcceptAsync(release -> runLater(() -> { final int compare = release.compareTo(info.getImplementationVersion()); if (compare == 0) { ui.showNotification( "Your version of " + info.getTitle() + " is up to date." ); } else if (compare > 0) { ui.showNotification( "A new version " + release + " of " + info.getTitle() + " is available." ); } else { ui.showNotification( "Your version " + info.getImplementationVersion() + " of " + info.getTitle() + " is newer than the released " + release + "." ); } })).get(3, TimeUnit.SECONDS); } catch (final InterruptedException | ExecutionException ex) { LOGGER.debug(ex, "Error loading last released version."); } catch (final TimeoutException ex) { LOGGER.debug(ex, "Request for latest released version timed out."); } }); }); } }