package colloid; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.Properties; import java.util.ResourceBundle; import java.util.logging.FileHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import colloid.http.Peer; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.fxml.JavaFXBuilderFactory; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextField; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Pane; import javafx.stage.Stage; public class App extends Application { Properties props; public static Logger logger; private Stage stage; private final double MINIMUM_WINDOW_WIDTH = 390.0; private final double MINIMUM_WINDOW_HEIGHT = 500.0; @Override public void start(Stage primaryStage) { System.setProperty("net.jxta.logging.Logging", "FINEST"); System.setProperty("net.jxta.level", "FINEST"); System.setProperty("java.util.logging.config.file", "logging.properties"); loadParams(); stage = primaryStage; //stage.setScene(createScene()); showMain(); primaryStage.show(); } public Scene createScene() { loadParams(); stage = new Stage(); showMain(); stage.getScene().getStylesheets().add("uicontrol/greeg-theme/win7glass.css"); return stage.getScene(); } public static void main(String[] args) { //SwingMain.main(args); launch(args); } @Override public void stop() throws Exception { RecountApp.getInstance().stop(); Peer.getInstance().stop(); stage.close(); } public void loadParams() { Properties props = new Properties(); InputStream inputStream = null; try { File file = new File("app.properties"); inputStream = new FileInputStream(file); } catch (Exception e) { inputStream = null; } try { if (inputStream == null) { inputStream = getClass().getResourceAsStream("app.properties"); } props.load(inputStream); } catch (Exception e) { e.printStackTrace(); } this.props = props; } public void saveParams() { try { if (props == null) { props = new Properties(); } File file = new File("app.properties"); OutputStream out = new FileOutputStream(file); props.store(out, "Colloid app properties"); } catch (Exception e) { e.printStackTrace(); } } public class AppResource extends ResourceBundle { HashMap<String, Object> resource = new HashMap<String, Object>(); @Override protected Object handleGetObject(String key) { return resource.get(key); } @Override public Enumeration<String> getKeys() { return (Enumeration<String>) resource.keySet(); } public void set(String key, Object value) { resource.put(key, value); } public App getApp() { return (App) resource.get("app"); } } public class PageLoader { FXMLLoader loader; AnchorPane page; AppResource resource; public PageLoader(String fxml) { try { this.loadPage(fxml); } catch (IOException e) { e.printStackTrace(); } } private AnchorPane loadPage(String fxml) throws IOException { resource = new AppResource(); resource.set("app", App.this); loader = new FXMLLoader(); InputStream in = App.class.getResourceAsStream(fxml); loader.setBuilderFactory(new JavaFXBuilderFactory()); loader.setLocation(App.class.getResource(fxml)); loader.setResources(resource); try { page = (AnchorPane) loader.load(in); } finally { in.close(); } return page; } public FXMLLoader getLoader() { return loader; } public AnchorPane getPage() { return page; } } private Initializable replaceSceneContent(String fxml, Scene scene) throws Exception { PageLoader pageLoader = new PageLoader(fxml); if (scene == null) { scene = new Scene(pageLoader.page); scene.getStylesheets().add("uicontrol/greeg-theme/win7glass.css"); stage.setScene(scene); } stage.getScene().setRoot(pageLoader.page); stage.sizeToScene(); return (Initializable) pageLoader.loader.getController(); } private Initializable replaceSceneContent(String fxml) throws Exception { return replaceSceneContent(fxml, null); } public void showMain() { stage.setTitle("Colloid"); stage.setMinWidth(MINIMUM_WINDOW_WIDTH); stage.setMinHeight(MINIMUM_WINDOW_HEIGHT); stage.setResizable(true); try { MainController controller = (MainController) replaceSceneContent("main.fxml"); controller.init(this); } catch (Exception ex) { Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex); } } public PopupTextLogController showPopupTextLog() { PopupTextLogController controller = null; try { PageLoader pageloader = new PageLoader("popupTextLog.fxml"); Scene scene = new Scene(pageloader.page); scene.getStylesheets().add("uicontrol/greeg-theme/win7glass.css"); pageloader.resource.set("scene", scene); controller = (PopupTextLogController) pageloader.loader.getController(); } catch (Exception ex) { ex.printStackTrace(); getLogger().log(Level.SEVERE, null, ex); } return controller; } public void showDotTimer() { try { PageLoader pageloader = new PageLoader("dot.fxml"); Scene scene = new Scene(pageloader.page); scene.getStylesheets().add("uicontrol/greeg-theme/win7glass.css"); pageloader.resource.set("scene", scene); DotController controller = (DotController) pageloader.loader.getController(); } catch (Exception ex) { ex.printStackTrace(); getLogger().log(Level.SEVERE, null, ex); } } public Stage getStage() { return stage; } public Properties getProps() { if (props == null) { loadParams(); } return props; } public void setProps(Properties props) { this.props = props; } public static Logger getLogger() { if (logger == null) { Handler handler = null; try { handler = new FileHandler("app.log", true); } catch (SecurityException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } logger = Logger.getLogger("app"); logger.addHandler(handler); } return logger; } }