public MasterGUI(Stage stage) { parentStage = stage; // JsonHelpExtractor ujextractor = new JsonHelpExtractor(); // HashMap<String,String> dataSetTab_tooltipHelp = // ujextractor.extractToolTipFile("TestJson.json"); // HashMap<String, ExtensiveHelp> dataSetTab_extensiveHelp = // ujextractor.extractExtensiveHelpFile("DataSetExtensiveHelp.json"); // final HelpDataStore dataSetTab_HelpStore = new // HelpDataStore("DataSetTab",dataSetTab_tooltipHelp,dataSetTab_extensiveHelp); // ujextractor.writeExtensiveHelpFile("C:\\Users\\user\\Desktop\\ExtensiveSectionTest.json"); experiment = new Experiment(); tabPane = new TabPane(); final Tab tab1 = new DataSetTab(parentStage, experiment); tab1.setText("Dataset"); final Tab tab2 = new PreprocessingTab(parentStage, experiment); tab2.setText("Preprocessing"); final Tab tab3 = new FeatureSelectionTab(parentStage, experiment); tab3.setText("Feature Selection"); final Tab tab4 = new AlgorithmTab(parentStage, experiment); tab4.setText("Preference Learning Methods"); tabPane.tabClosingPolicyProperty().set(TabPane.TabClosingPolicy.UNAVAILABLE); tabPane.getTabs().addAll(tab1, tab2, tab3, tab4); BorderPane bottomPane = new BorderPane(); final Button btnBack = new Button(); btnBack.setPrefSize(200, 20); btnBack.setVisible(false); Label lblBackBtn = new Label("BACK"); ImageView imgViewBkBtn = new ImageView(new Image(DataSetTab.class.getResourceAsStream("bkButton.png"))); BorderPane backBtnInnerBPane = new BorderPane(); backBtnInnerBPane.setLeft(imgViewBkBtn); backBtnInnerBPane.setCenter(lblBackBtn); btnBack.setGraphic(backBtnInnerBPane); btnBack.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { if (tabPane.getSelectionModel().getSelectedIndex() > 0) { tabPane .selectionModelProperty() .get() .select(tabPane.selectionModelProperty().get().getSelectedIndex() - 1); } } }); final Button btnNext = new Button(); btnNext.setPrefSize(200, 20); Label lblNextBtn = new Label("NEXT"); ImageView imgViewNextBtn = new ImageView(new Image(DataSetTab.class.getResourceAsStream("nxtButton.png"))); BorderPane nextBtnInnerBPane = new BorderPane(); nextBtnInnerBPane.setCenter(lblNextBtn); nextBtnInnerBPane.setRight(imgViewNextBtn); btnNext.setGraphic(nextBtnInnerBPane); btnNext.disableProperty().bind(this.experiment.isReadyToUseDataSetProperty().not()); tabPane.selectionModelProperty(); btnNext.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { if (!tab4.selectedProperty().get()) { tabPane .selectionModelProperty() .get() .select(tabPane.selectionModelProperty().get().getSelectedIndex() + 1); } else if (tab4.selectedProperty().get()) { // Perform safety checks. boolean allClear = true; int numOfIgnoredFeatures = 0; boolean[] tmpIgArr = experiment.ignoredFeaturesProperty().get(); for (int i = 0; i < tmpIgArr.length; i++) { if (tmpIgArr[i]) { numOfIgnoredFeatures++; } } if (numOfIgnoredFeatures == experiment.dataSetProperty().get().getNumberOfFeatures()) { // You must include at least one feature. ModalPopup notification = new ModalPopup(); notification.show( new Label("ERROR: You must include at least one feature from the dataset."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } else if (experiment.featureSelectionProperty().get() != null) { if (experiment.featureSelectionProperty().get() instanceof NBest) { NBest castNBest = (NBest) experiment.featureSelectionProperty().get(); int numOfUserIncludedFeatures = (experiment.dataSetProperty().get().getNumberOfFeatures() - numOfIgnoredFeatures); if (castNBest.getN() > numOfUserIncludedFeatures) { // N val should always be less than or equal to the number of user included // features. ModalPopup notification = new ModalPopup(); notification.show( new Label( "ERROR: N-Best N value cannot be greater than the number of included features. \n Current N Value = " + castNBest.getN() + " \n Current Num of Included Features = " + numOfUserIncludedFeatures), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 600, false); allClear = false; } } if (experiment.algorithmForFeatureSelectionProperty().get() == null) { // You cannot select a feature selection type without stating an algorithm. ModalPopup notification = new ModalPopup(); notification.show( new Label( "ERROR: You must state an algorithm to work with " + experiment.featureSelectionProperty().get().getFSelName() + "."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } } if (experiment.algorithmForFeatureSelectionProperty().get() != null) { if (experiment.algorithmForFeatureSelectionProperty().get() instanceof PLNeuroEvolution) { PLNeuroEvolution castPLNE = (PLNeuroEvolution) experiment.algorithmForFeatureSelectionProperty().get(); PLNeuroEvolutionConfigurator neConfig = castPLNE.getConfigurator(); GeneticAlgorithmConfigurator gaConfig = neConfig.getGeneticAlgorithmConfigurator(); if (gaConfig.getNumberOfParents() > gaConfig.getPopulationSize()) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "GA ERROR: The number of parents is greater than the GA population size."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } if (gaConfig.getElitSize() > gaConfig.getPopulationSize()) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "GA ERROR: The elitism size is greater than the GA population size."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } } if (experiment.algorithmProperty().get() instanceof PLRankSvm) { PLRankSvm castPLRS = (PLRankSvm) experiment.algorithmProperty().get(); PLRankSvmConfigurator svmConfig = castPLRS.getConfigurator(); if ((svmConfig.gammaRequired()) && (svmConfig.getGamma() == 0)) { ModalPopup notification = new ModalPopup(); notification.show( new Label("SVM ERROR: Gamma cannot be set to 0."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } if (svmConfig.degreeRequired()) { try { Integer.parseInt(svmConfig.getDegreeTextboxContents()); } catch (Exception NumberFormatException) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "SVM ERROR: Invalid Degree value \\" + svmConfig.getDegreeTextboxContents() + "\\" + "."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } } if (svmConfig.betaRequired()) { try { Integer.parseInt(svmConfig.getBetaTextboxContents()); } catch (Exception NumberFormatException) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "SVM ERROR: Invalid Beta value \\" + svmConfig.getBetaTextboxContents() + "\\" + "."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } } } } if (experiment.algorithmProperty().get() instanceof PLNeuroEvolution) { PLNeuroEvolution castPLNE = (PLNeuroEvolution) experiment.algorithmProperty().get(); PLNeuroEvolutionConfigurator neConfig = castPLNE.getConfigurator(); GeneticAlgorithmConfigurator gaConfig = neConfig.getGeneticAlgorithmConfigurator(); int numParents = gaConfig.getNumberOfParents(); int popSize = gaConfig.getPopulationSize(); if (numParents > popSize) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "GA ERROR: The number of parents is greater than the GA population size."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } if (gaConfig.getElitSize() > gaConfig.getPopulationSize()) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "GA ERROR: The elitism size is greater than the GA population size."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } } if (experiment.algorithmProperty().get() instanceof PLRankSvm) { PLRankSvm castPLRS = (PLRankSvm) experiment.algorithmProperty().get(); PLRankSvmConfigurator svmConfig = castPLRS.getConfigurator(); if ((svmConfig.gammaRequired()) && (svmConfig.getGamma() == 0)) { ModalPopup notification = new ModalPopup(); notification.show( new Label("SVM ERROR: Gamma cannot be set to 0."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } if (svmConfig.degreeRequired()) { try { Integer.parseInt(svmConfig.getDegreeTextboxContents()); } catch (Exception NumberFormatException) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "SVM ERROR: Invalid Degree value \\" + svmConfig.getDegreeTextboxContents() + "\\" + "."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } } if (svmConfig.betaRequired()) { try { Integer.parseInt(svmConfig.getBetaTextboxContents()); } catch (Exception NumberFormatException) { ModalPopup notification = new ModalPopup(); notification.show( new Label( "SVM ERROR: Invalid Beta value \\" + svmConfig.getBetaTextboxContents() + "\\" + "."), parentStage.getScene().getRoot(), null, new Button("OK"), 200, 550, false); allClear = false; } } } if (allClear) { Execution e = new Execution(experiment); e.show(parentStage); } } } }); tab4.selectedProperty() .addListener( new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { if (t1) { Label lblNextBtn = new Label("RUN EXPERIMENT"); ImageView imgViewNextBtn = new ImageView( new Image( DataSetTab.class.getResourceAsStream("runExperimentButton.png"))); BorderPane nextBtnInnerBPane = new BorderPane(); nextBtnInnerBPane.setCenter(lblNextBtn); nextBtnInnerBPane.setRight(imgViewNextBtn); btnNext.setGraphic(nextBtnInnerBPane); } else { Label lblNextBtn = new Label("NEXT"); ImageView imgViewNextBtn = new ImageView( new Image(DataSetTab.class.getResourceAsStream("nxtButton.png"))); BorderPane nextBtnInnerBPane = new BorderPane(); nextBtnInnerBPane.setCenter(lblNextBtn); nextBtnInnerBPane.setRight(imgViewNextBtn); btnNext.setGraphic(nextBtnInnerBPane); } } }); tab1.selectedProperty() .addListener( new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { if (t1) { btnBack.setVisible(false); btnNext.setVisible(true); } else { btnBack.setVisible(true); } } }); Button helpButton = new Button(); helpButton.setVisible(true); helpButton.setGraphic( new ImageView(new Image(DataSetTab.class.getResourceAsStream("helpButton.png")))); helpButton.setOnAction( new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { if (tab1.selectedProperty().get()) { Tab1Help h = new Tab1Help(); h.show(parentStage.getScene().getRoot(), null); } else if (tab2.selectedProperty().get()) { Tab2Help h = new Tab2Help(); h.show(parentStage.getScene().getRoot(), null); } else if (tab3.selectedProperty().get()) { Tab3Help h = new Tab3Help(); h.show(parentStage.getScene().getRoot(), null); } else if (tab4.selectedProperty().get()) { Tab4Help h = new Tab4Help(); h.show(parentStage.getScene().getRoot(), null); } } }); /*helpButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { if (tab1.selectedProperty().get()) { ArrayList<String> itemsToInclude = new ArrayList<String>(); itemsToInclude.add("Loading a dataset"); itemsToInclude.add("Button: Import Object File"); itemsToInclude.add("Button: Import Ranking File"); String reqHTML = dataSetTab_HelpStore.constructHtml(itemsToInclude); HelpPopup hPopup = new HelpPopup(reqHTML); hPopup.show(parentStage.getScene().getRoot(), null); //Tab1Help h = new Tab1Help(); //h.show(parentStage.getScene().getRoot(), null); } if (tab2.selectedProperty().get()) { Tab2Help h = new Tab2Help(); h.show(parentStage.getScene().getRoot(), null); } } });*/ // helpButton.visibleProperty().bind(tab1.selectedProperty().or(tab2.selectedProperty())); HBox navBtnBox = new HBox(10); navBtnBox.getChildren().addAll(btnBack, btnNext); bottomPane.setPadding(new Insets(10, 10, 10, 10)); bottomPane.setStyle("-fx-background-color: #336699;"); bottomPane.setLeft(helpButton); bottomPane.setRight(navBtnBox); this.setCenter(tabPane); this.setBottom(bottomPane); disableTabs(new ArrayList<Integer>(Arrays.asList(1, 2, 3))); }
private void createDetailPane() { detailPane = new TabPane(); javaScriptConsoleTab = new JavaScriptConsoleTab(webEngine); addErrorListener(javaScriptConsoleTab::handleError); addAlertListener(javaScriptConsoleTab::handleAlert); crossSiteScriptingTrackerTab = new CrossSiteScriptingTrackerTab(webEngine); addAlertListener(crossSiteScriptingTrackerTab::handleAlert); pageResourcesTab = new PageResourcesTab(webEngine); Tab javaScriptEditorTab = new Tab("BurpScript IDE"); javaScriptEditorTab .selectedProperty() .addListener( (observable, oldValue, newValue) -> { if (newValue) masterDetailPane.setDividerPositions(0.5); }); JavaScriptEditor javaScriptEditor = new JavaScriptEditor(webEngine, controller, false); javaScriptEditor.setJavaScriptConsoleTab(javaScriptConsoleTab); javaScriptEditorTab.setContent(javaScriptEditor); Tab trafficBrowserTab = new Tab("Network"); trafficBrowser = new TrafficBrowser(); trafficBrowserTab.setContent(trafficBrowser); Debugger debugger = webEngine.impl_getDebugger(); debugger.setEnabled(true); debugger.sendMessage("{\"id\": 1, \"method\":\"Network.enable\"}"); debugger.setMessageCallback( new Callback<String, Void>() { ConcurrentHashMap<String, Traffic> trafficState = new ConcurrentHashMap<>(); @Override public Void call(String param) { JsonParser parser = new JsonParser(); JsonObject object = parser.parse(param).getAsJsonObject(); String method = object.get("method").getAsString(); JsonObject params = object.getAsJsonObject("params"); JsonObject request = params.getAsJsonObject("request"); JsonObject response = params.getAsJsonObject("response"); String requestId = params.get("requestId").getAsString(); Instant timeStamp; JsonElement epochObject = params.get("timestamp"); if (epochObject != null) { double epoch = epochObject.getAsDouble(); timeStamp = Instant.ofEpochSecond( (long) Math.floor(epoch), (long) (epoch * 1000000000 % 1000000000)); } else { timeStamp = Instant.now(); } Traffic traffic = null; switch (method) { case "Network.requestWillBeSent": URL url = null; String urlString = request.get("url").getAsString(); try { url = new URL(urlString); } catch (MalformedURLException e) { // e.printStackTrace(); } trafficState.put( requestId, new Traffic( (url == null) ? urlString : url.getFile(), timeStamp, (url == null) ? "" : url.getHost(), request.get("method").getAsString(), params.get("documentURL").getAsString())); break; case "Network.responseReceived": traffic = trafficState.get(requestId); JsonObject headers = response.getAsJsonObject("headers"); JsonElement contentType = headers.get("Content-Type"); JsonElement contentLength = headers.get("Content-Length"); traffic.setType((contentType == null) ? "" : contentType.getAsString()); JsonElement requestLine = headers.get(""); if (requestLine != null) { String[] requestLineParts = requestLine.getAsString().split(" ", 3); traffic.setStatusCode(new Integer(requestLineParts[1])); traffic.setStatusText(requestLineParts[2]); traffic.setSize((contentLength == null) ? "0" : contentLength.getAsString()); } else { traffic.setStatusCode(200); traffic.setStatusText("OK"); traffic.setSize("0"); } break; case "Network.loadingFinished": traffic = trafficState.get(requestId); traffic.setEndTime(timeStamp); trafficBrowser.getTraffic().add(traffic); trafficState.remove(requestId); if (traffic.getEndTime().isAfter(trafficBrowser.getEndTime())) { trafficBrowser.setEndTime(traffic.getEndTime()); } } return null; } }); detailPane .getTabs() .addAll( javaScriptConsoleTab, crossSiteScriptingTrackerTab, pageResourcesTab, trafficBrowserTab, javaScriptEditorTab // new ImagesTab(webEngine) ); detailPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE); }