List of usage examples for javafx.scene.control Button setOnAction
public final void setOnAction(EventHandler<ActionEvent> value)
From source file:patientmanagerv1.HomeController.java
public void enableBackdoorModifications() { final Stage dialog = new Stage(); dialog.initModality(Modality.APPLICATION_MODAL); final TextField textField = new TextField(); Button submit = new Button(); Button cancel = new Button(); final Label label = new Label(); cancel.setText("Cancel"); cancel.setAlignment(Pos.CENTER);//from w w w. j av a 2 s .c om submit.setText("Submit"); submit.setAlignment(Pos.BOTTOM_RIGHT); final VBox dialogVbox = new VBox(20); dialogVbox.getChildren().add(new Text( "Only the physician can open this document for modification. Please Enter the master password: ")); dialogVbox.getChildren().add(textField); dialogVbox.getChildren().add(submit); dialogVbox.getChildren().add(cancel); dialogVbox.getChildren().add(label); Scene dialogScene = new Scene(dialogVbox, 300, 200); dialog.setScene(dialogScene); dialog.setTitle("Security/Physician Authentication"); dialog.show(); submit.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent anEvent) { String password = textField.getText(); if (password.equalsIgnoreCase("protooncogene")) { dialog.close(); sign.setVisible(true); saveButton.setDisable(false); signature.setText("This document has been digitally signed by David Zhvikov MD"); signature.setVisible(false); signature2.setVisible(false); //update the "signed" status document here, checked the "signed" status in the initialize() method and enable/disable the buttons and message accordingly onLoad...when the signed document is first created, it should be set to false (f) by default try { File signedStatus = new File(installationPath + "/userdata/" + firstName.toLowerCase() + lastName.toLowerCase() + dob + "/EvaluationForm/signed.txt"); FileWriter writ = new FileWriter(signedStatus, false); //it is set to false so that it (the current patient) will be overwritten every time BufferedWriter bw = new BufferedWriter(writ); writ.append("false"); bw.close(); writ.close(); } catch (IOException e) { } ap.setDisable(false); //System.out.println(engaged.isSelected()); } else if (password.equalsIgnoreCase("siberianplatypus")) { dialog.close(); sign.setVisible(true); assistantsign.setVisible(true); assistantsign.setDisable(false); saveButton.setDisable(false); //signature.setText("This document has been digitally signed by David Zhvikov MD"); assistantsignature.setVisible(false); signature.setVisible(false); signature2.setVisible(false); //update the "signed" status document here, checked the "signed" status in the initialize() method and enable/disable the buttons and message accordingly onLoad...when the signed document is first created, it should be set to false (f) by default try { File signedStatus = new File(installationPath + "/userdata/" + firstName.toLowerCase() + lastName.toLowerCase() + dob + "/EvaluationForm/signed.txt"); FileWriter writ = new FileWriter(signedStatus, false); //it is set to false so that it (the current patient) will be overwritten every time BufferedWriter bw = new BufferedWriter(writ); writ.append("false"); bw.close(); writ.close(); } catch (IOException e) { } try { File signedStatus = new File(installationPath + "/userdata/" + firstName.toLowerCase() + lastName.toLowerCase() + dob + "/EvaluationForm/assistantsigned.txt"); FileWriter writ = new FileWriter(signedStatus, false); //it is set to false so that it (the current patient) will be overwritten every time BufferedWriter bw = new BufferedWriter(writ); writ.append("false"); bw.close(); writ.close(); } catch (IOException e) { } ap.setDisable(false); //System.out.println(engaged.isSelected()); } else { label.setText("The password you entered is incorrect. Please try again."); } //adds files to file tracker } }); cancel.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent anEvent) { dialog.close(); //close the window here } }); }
From source file:editeurpanovisu.EditeurPanovisu.java
/** * * @param strLstPano//from w w w . j a va 2s .c o m * @param iNumPano * @return */ public static Pane paneAffichageHS(String strLstPano, int iNumPano) { Pane paneHotSpots = new Pane(); paneHotSpots.setTranslateY(10); paneHotSpots.setTranslateX(10); VBox vbHotspots = new VBox(5); paneHotSpots.getChildren().add(vbHotspots); Label lblPoint; int io; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getNombreHotspots(); io++) { Label lblSep = new Label(" "); Label lblSep1 = new Label(" "); VBox vbPanneauHS = new VBox(); double deplacement = 0; vbPanneauHS.setLayoutX(deplacement); Pane paneHsPanoramique = new Pane(vbPanneauHS); paneHsPanoramique.setPrefHeight(300); paneHsPanoramique.setMinHeight(300); paneHsPanoramique.setMaxHeight(300); int iNum1 = io; Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#point" + iNum1); if (c1 != null) { if (c1.getFill() == Color.RED) { c1.setFill(Color.YELLOW); c1.setStroke(Color.RED); } else { c1.setFill(Color.RED); c1.setStroke(Color.YELLOW); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsPanoramique.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsPanoramique.setOnMouseExited((e) -> { timBouge.pause(); Circle c1 = (Circle) panePanoramique.lookup("#point" + iNum1); if (c1 != null) { c1.setFill(Color.YELLOW); c1.setStroke(Color.RED); } }); paneHsPanoramique .setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsPanoramique.setId("HS" + io); lblPoint = new Label("Point #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.setTranslateX(-deplacement); lblPoint.getStyleClass().add("titreOutil"); Separator sepHotspots = new Separator(Orientation.HORIZONTAL); sepHotspots.setTranslateX(-deplacement); sepHotspots.setPrefWidth(321); sepHotspots.setTranslateX(2); paneHsPanoramique.setPrefWidth(325); vbPanneauHS.getChildren().addAll(lblPoint, sepHotspots); if (strLstPano != null) { Label lblLien = new Label(rbLocalisation.getString("main.panoramiqueDestination")); lblLien.setTranslateX(10); ComboBox cbDestPano = new ComboBox(); String[] strListe = strLstPano.split(";"); cbDestPano.getItems().addAll(Arrays.asList(strListe)); int iNum11 = getPanoramiquesProjet()[iNumPano].getHotspot(io).getNumeroPano(); cbDestPano.setTranslateX(10); cbDestPano.setId("cbpano" + io); cbDestPano.getSelectionModel().select(iNum11); cbDestPano.getSelectionModel().selectedIndexProperty().addListener((ov, t, t1) -> { valideHS(); if (dejaCharge) { dejaCharge = false; retireAffichageHotSpots(); Pane affHS1 = paneAffichageHS(strListePano(), iNumPano); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); } }); if (iNum11 != -1) { int iNumPan = iNum11; ImageView ivAfficheVignettePano = new ImageView( getPanoramiquesProjet()[iNum11].getImgPanoRect()); ivAfficheVignettePano.setPreserveRatio(true); ivAfficheVignettePano.setFitWidth(300); ivAfficheVignettePano.setLayoutY(10); ivAfficheVignettePano.setCursor(Cursor.HAND); ivAfficheVignettePano.setOnMouseClicked((e) -> { affichePanoChoisit(iNumPan); }); AnchorPane apVisuVignettePano = new AnchorPane(ivAfficheVignettePano); apVisuVignettePano.setPrefHeight(170); apVisuVignettePano.setTranslateX(10); vbPanneauHS.getChildren().addAll(lblLien, cbDestPano, apVisuVignettePano, lblSep); } else { vbPanneauHS.getChildren().addAll(lblLien, cbDestPano, lblSep); } } Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspot(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspot(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtHS" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHS.getChildren().addAll(lblTexteHS, tfTexteHS, lblSep1); vbHotspots.getChildren().addAll(paneHsPanoramique, lblSep); } int iNbHS = io; int iTaillePane = io * 325; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getNombreHotspotImage(); io++) { Label lblSep = new Label(" "); Label lblSep1 = new Label(" "); VBox vbPanneauHsImage = new VBox(); Pane paneHsImage = new Pane(vbPanneauHsImage); int iNum = io; Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#img" + iNum); if (c1 != null) { if (c1.getFill() == Color.BLUE) { c1.setFill(Color.YELLOW); c1.setStroke(Color.BLUE); } else { c1.setFill(Color.BLUE); c1.setStroke(Color.YELLOW); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsImage.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsImage.setOnMouseExited((e) -> { Circle c1 = (Circle) panePanoramique.lookup("#img" + iNum); if (c1 != null) { c1.setFill(Color.BLUE); c1.setStroke(Color.YELLOW); } timBouge.pause(); }); paneHsImage.setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsImage.setId("HSImg" + io); lblPoint = new Label("Image #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.getStyleClass().add("titreOutil"); Separator sepHS = new Separator(Orientation.HORIZONTAL); sepHS.setPrefWidth(321); sepHS.setTranslateX(2); paneHsImage.setPrefWidth(325); vbPanneauHsImage.getChildren().addAll(lblPoint, sepHS); Label lblLien = new Label(rbLocalisation.getString("main.imageChoisie")); lblLien.setTranslateX(10); String strF1XML = getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrLienImg(); Image imgChoisie = new Image( "file:" + getStrRepertTemp() + File.separator + "images" + File.separator + strF1XML); ImageView ivChoisie = new ImageView(imgChoisie); ivChoisie.setTranslateX(100); ivChoisie.setFitWidth(100); ivChoisie.setFitHeight(imgChoisie.getHeight() / imgChoisie.getWidth() * 100); vbPanneauHsImage.getChildren().addAll(lblLien, ivChoisie, lblSep); Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtHSImage" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHsImage.getChildren().addAll(lblTexteHS, tfTexteHS, lblSep1); Label lblCoulFond = new Label(rbLocalisation.getString("diapo.couleurFond")); lblCoulFond.setTranslateX(10); Label lblOpacite = new Label(rbLocalisation.getString("diapo.opacite")); lblOpacite.setTranslateX(10); if (getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrCouleurFond().equals("")) { getPanoramiquesProjet()[iNumPano].getHotspotImage(io).setStrCouleurFond( "#" + getGestionnaireInterface().getCouleurFondTheme().toString().substring(2, 8)); } ColorPicker cpCouleurFond = new ColorPicker( Color.valueOf(getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrCouleurFond())); if (getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getOpacite() == -1) { getPanoramiquesProjet()[iNumPano].getHotspotImage(io) .setOpacite(getGestionnaireInterface().getOpaciteTheme()); } cpCouleurFond.setTranslateX(100); int i = io; cpCouleurFond.valueProperty().addListener((ov, av, nv) -> { if (getiNombrePanoramiques() != 0) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); } getPanoramiquesProjet()[iNumPano].getHotspotImage(i) .setStrCouleurFond("#" + cpCouleurFond.getValue().toString().substring(2, 8)); }); Slider slOpacite = new Slider(0, 1, getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getOpacite()); slOpacite.valueProperty().addListener((ov, av, nv) -> { if (getiNombrePanoramiques() != 0) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); } getPanoramiquesProjet()[iNumPano].getHotspotImage(i).setOpacite(slOpacite.getValue()); }); slOpacite.setTranslateX(100); slOpacite.setPrefWidth(130); slOpacite.setMinWidth(130); slOpacite.setMaxWidth(130); vbPanneauHsImage.getChildren().addAll(lblCoulFond, cpCouleurFond, lblOpacite, slOpacite); vbHotspots.getChildren().addAll(paneHsImage, lblSep); iTaillePane += 225 + ivChoisie.getFitHeight(); paneHsImage.setPrefHeight(200 + ivChoisie.getFitHeight()); paneHsImage.setMinHeight(200 + ivChoisie.getFitHeight()); paneHsImage.setMaxHeight(200 + ivChoisie.getFitHeight()); } iNbHS += io; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getNombreHotspotHTML(); io++) { Label lblSep = new Label(" "); int iNum = io; VBox vbPanneauHS = new VBox(); Pane paneHsHtml = new Pane(vbPanneauHS); Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#html" + iNum); if (c1 != null) { if (c1.getFill() == Color.DARKGREEN) { c1.setFill(Color.YELLOWGREEN); c1.setStroke(Color.DARKGREEN); } else { c1.setFill(Color.DARKGREEN); c1.setStroke(Color.YELLOWGREEN); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsHtml.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsHtml.setOnMouseExited((e) -> { timBouge.pause(); Circle c1 = (Circle) panePanoramique.lookup("#html" + iNum); if (c1 != null) { c1.setFill(Color.DARKGREEN); c1.setStroke(Color.YELLOWGREEN); } }); paneHsHtml.setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsHtml.setId("HSHTML" + io); lblPoint = new Label("Hotspot HTML #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.getStyleClass().add("titreOutil"); Separator sepHS = new Separator(Orientation.HORIZONTAL); sepHS.setPrefWidth(321); sepHS.setTranslateX(2); paneHsHtml.setPrefWidth(325); Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspotHTML(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspotHTML(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtHSHTML" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHS.getChildren().addAll(lblPoint, sepHS, lblTexteHS, tfTexteHS); Button btnEditeHSHTML = new Button(rbLocalisation.getString("main.editeHTML")); btnEditeHSHTML.setPrefWidth(80); btnEditeHSHTML.setTranslateX(paneHsHtml.getPrefWidth() - btnEditeHSHTML.getPrefWidth() - 10); vbPanneauHS.getChildren().addAll(btnEditeHSHTML); btnEditeHSHTML.setOnAction((e) -> { EditeurHTML editHTML = new EditeurHTML(); HotspotHTML HS = getPanoramiquesProjet()[iNumPano].getHotspotHTML(iNum); editHTML.setHsHTML(HS); Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iHauteur = (int) tailleEcran.getHeight() - 100; int iLargeur = (int) tailleEcran.getWidth() - 100; editHTML.affiche(iLargeur, iHauteur); editHTML.addPropertyChangeListener("bValide", (ev) -> { if (ev.getNewValue().toString().equals("true")) { getPanoramiquesProjet()[iNumPano].setHotspotHTML(editHTML.getHsHTML(), iNum); dejaCharge = false; retireAffichageHotSpots(); Pane affHS1 = paneAffichageHS(strListePano(), iNumPano); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); } }); }); vbHotspots.getChildren().addAll(paneHsHtml, lblSep); paneHsHtml.setPrefHeight(120); paneHsHtml.setMinHeight(120); paneHsHtml.setMaxHeight(120); iTaillePane += 145; } iNbHS += io; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getiNombreHotspotDiapo(); io++) { Label lblSep = new Label(" "); int iNum = io; VBox vbPanneauHS = new VBox(); Pane paneHsDiapo = new Pane(vbPanneauHS); Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#dia" + iNum); if (c1 != null) { if (c1.getFill() == Color.TURQUOISE) { c1.setFill(Color.ORANGE); c1.setStroke(Color.TURQUOISE); } else { c1.setFill(Color.TURQUOISE); c1.setStroke(Color.ORANGE); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsDiapo.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsDiapo.setOnMouseExited((e) -> { timBouge.pause(); Circle c1 = (Circle) panePanoramique.lookup("#html" + iNum); if (c1 != null) { c1.setFill(Color.TURQUOISE); c1.setStroke(Color.ORANGE); } }); paneHsDiapo.setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsDiapo.setId("DIAPO" + io); lblPoint = new Label("Hotspot Diaporama #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.getStyleClass().add("titreOutil"); Separator sepHS = new Separator(Orientation.HORIZONTAL); sepHS.setPrefWidth(321); sepHS.setTranslateX(2); paneHsDiapo.setPrefWidth(325); Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspotDiapo(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspotDiapo(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtDIA" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHS.getChildren().addAll(lblPoint, sepHS, lblTexteHS, tfTexteHS); ComboBox cbListeDiapo = new ComboBox(); for (int i = 0; i < getiNombreDiapo(); i++) { cbListeDiapo.getItems().add(diaporamas[i].getStrNomDiaporama()); } cbListeDiapo.getSelectionModel() .select(getPanoramiquesProjet()[iNumPano].getHotspotDiapo(io).getiNumDiapo()); int iii = io; cbListeDiapo.getSelectionModel().selectedIndexProperty().addListener((ov, av, nv) -> { getPanoramiquesProjet()[iNumPano].getHotspotDiapo(iii).setiNumDiapo((int) nv); }); cbListeDiapo.setTranslateX(60); vbPanneauHS.getChildren().addAll(cbListeDiapo); //Ajouter Liste Diaporamas vbHotspots.getChildren().addAll(paneHsDiapo, lblSep); paneHsDiapo.setPrefHeight(120); paneHsDiapo.setMinHeight(120); paneHsDiapo.setMaxHeight(120); iTaillePane += 145; } valideHS(); iNbHS += io; dejaCharge = true; paneHotSpots.setPrefHeight(iTaillePane); paneHotSpots.setMinHeight(iTaillePane); paneHotSpots.setMaxHeight(iTaillePane); paneHotSpots.setId("labels"); apVisuHS.setPrefHeight(paneHotSpots.getPrefHeight()); apVisuHS.setMinHeight(paneHotSpots.getPrefHeight()); apVisuHS.setMaxHeight(paneHotSpots.getPrefHeight()); vbVisuHotspots.setPrefHeight(paneHotSpots.getPrefHeight()); vbVisuHotspots.setMinHeight(paneHotSpots.getPrefHeight()); vbVisuHotspots.setMaxHeight(paneHotSpots.getPrefHeight()); return paneHotSpots; }
From source file:patientmanagerv1.HomeController.java
@Override public void initialize(URL url, ResourceBundle rb) { //start with the forum and the common questions page, add-on the profile page and private messaging features //passLoaded = false; //sets the current Patient try {//from www . j av a 2s. co m String entireFileText = new Scanner(new File(installationPath + "/currentpatient.txt")) .useDelimiter("//A").next(); String[] nameArray = entireFileText.split(","); firstName = nameArray[0].toLowerCase(); lastName = nameArray[1].toLowerCase(); dob = nameArray[2]; } catch (Exception e) { } //checks the signed status try { FileReader reader = new FileReader( installationPath + "/userdata/" + firstName + lastName + dob + "/EvaluationForm/signed.txt"); //+ "/userdata/" + get.currentPatientFirstName + get.currentPatientLastName + "/EvaluationForm/first.txt"); BufferedReader br = new BufferedReader(reader); String signedStatus = br.readLine(); br.close(); reader.close(); if (signedStatus.equalsIgnoreCase("true")) { dccSigned = true; } else { dccSigned = false; } FileReader reader2 = new FileReader(installationPath + "/userdata/" + firstName + lastName + dob + "/EvaluationForm/assistantsigned.txt"); //+ "/userdata/" + get.currentPatientFirstName + get.currentPatientLastName + "/EvaluationForm/first.txt"); BufferedReader br2 = new BufferedReader(reader2); String assistantSigned = br2.readLine(); br2.close(); reader2.close(); if (assistantSigned.equalsIgnoreCase("true")) { partnerSigned = true; } else { partnerSigned = false; } /*saveButton.setDisable(false); sign.setVisible(true); sign.setDisable(true); signature.setVisible(false);*/ if (signedStatus.equalsIgnoreCase("false") && (assistantSigned.equalsIgnoreCase("false"))) { saveButton.setDisable(false); sign.setVisible(true); sign.setDisable(false); assistantsign.setVisible(true); assistantsign.setDisable(false); assistantsignature.setVisible(false); signature.setVisible(false); signature2.setVisible(false); ap.setDisable(false); } else if (signedStatus.equalsIgnoreCase("true") && (assistantSigned.equalsIgnoreCase("false"))) { saveButton.setDisable(true); sign.setVisible(false); assistantsign.setVisible(true); assistantsign.setDisable(false); assistantsignature.setVisible(false); signature.setVisible(true); signature2.setVisible(true); signature.setText("This document has been digitally signed by David Zhvikov MD"); ap.setDisable(true); } else if (signedStatus.equalsIgnoreCase("false") && (assistantSigned.equalsIgnoreCase("true"))) { saveButton.setDisable(true); sign.setVisible(true); assistantsign.setVisible(false); assistantsign.setDisable(true); assistantsignature.setVisible(true); signature.setVisible(false); signature2.setVisible(false); signature.setText("This document has been digitally signed by David Zhvikov MD"); ap.setDisable(true); } else { saveButton.setDisable(true); sign.setVisible(false); assistantsign.setVisible(false); assistantsign.setDisable(true); assistantsignature.setVisible(true); signature.setVisible(true); signature2.setVisible(true); signature.setText("This document has been digitally signed by David Zhvikov MD"); ap.setDisable(true); } } catch (Exception e) { } //loads the ListView try { FileReader r2 = new FileReader( installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressReports.txt"); BufferedReader b2 = new BufferedReader(r2); String s; ArrayList progressNotes = new ArrayList(); while ((s = b2.readLine()) != null) { //System.out.println(s); progressNotes.add(s); } b2.close(); r2.close(); //Adds the Progress Notes to the ListView ObservableList<String> items = FXCollections.observableArrayList("Single", "Double"); items.clear(); for (int counter = 0; counter < progressNotes.size(); counter++) { items.add(progressNotes.get(counter).toString()); } listOfProgressReports.setItems(items); //String[] ethnicityArray = ethnicity.split(","); } catch (Exception e) { //System.out.println("file not found"); } //initializes the evaluation form [with the new patient's name] for the current patient fillName(); fillDOB(); fillAge(loaded); fillGender(); fillMaritalStatus(); fillEthnicity(); fillReferredBy(); fillReasonForReferral(); fillSourceOfInformation(); fillReliabilityOfInformation(); fillHistoryOfPresentIllness(); fillSignsSymptoms(); fillCurrentMedications(); fillPastPsychiatricHistory(); fillPastHistoryOf(); fillHistoryOfMedicationTrialsInThePast(); fillSubstanceUseHistory(); fillDeniesHistoryOf(); fillSocialHistory(); fillParentsSiblingsChildren(); fillFamilyHistoryOfMentalIllness(); fillEducation(); fillEmployment(); fillLegalHistory(); fillPastMedicalHistory(); fillAllergies(); fillAppearance(); fillEyeContact(); fillAttitude(); fillMotorActivity(); fillAffect(); fillMood(); fillSpeech(); fillThoughtProcess(); fillThoughtContent(); fillPerception(); fillSuicidality(); fillHomicidality(); fillOrientation(); fillShortTermMemory(); fillLongTermMemory(); fillGeneralFundOfKnowledge(); fillIntellect(); fillAbstraction(); fillJudgementAndInsight(); fillClinicalNotes(); fillTreatmentPlan(); fillSideEffects(); fillLabs(); fillEnd(); fillSignatureZone(); // currentPatientFirstName = get.currentPatientFirstName; // currentPatientLastName = get.currentPatientLastName; //sets the current patient /*try { String entireFileText = new Scanner(new File(installationPath + "/Patients.txt")).useDelimiter("//A").next(); String[] arrayOfNames = entireFileText.split(";"); System.out.println("Patient Name: " + arrayOfNames[arrayOfNames.length - 1]); String nameWithComma = arrayOfNames[arrayOfNames.length - 1]; String[] nameArray = nameWithComma.split(","); firstName = nameArray[0].toLowerCase(); lastName = nameArray[1].toLowerCase(); } catch(Exception e) {}*/ /*ArrayList progressNotes = new ArrayList(); for(int i = 0; i < listOfProgressReports.getItems().size(); i++) { progressNotes.add(listOfProgressReports.getItems().get(i)); }*/ //broken and betrayed //of the ecsts's you've shown me. //...for me, italicsmaster, she put emphasis/lingered on the word. "M" menu.getMenus().removeAll(); Menu file = new Menu("File"); Menu edit = new Menu("Edit"); Menu view = new Menu("View"); Menu help = new Menu("About"); Menu speech = new Menu("Speech Options"); MenuItem save = new MenuItem("Save"); MenuItem print = new MenuItem("Print"); MenuItem printWithSettings = new MenuItem("Print With Settings"); MenuItem export = new MenuItem("Export to"); MenuItem logout = new MenuItem("Return to Patient Selection"); MenuItem deleteThisPatient = new MenuItem("Delete This Patient"); MenuItem exit = new MenuItem("Exit"); MenuItem undo = new MenuItem("Undo (ctrl+z)"); MenuItem redo = new MenuItem("Redo (ctrl+y)"); MenuItem selectAll = new MenuItem("Select All (ctrl+A)"); MenuItem cut = new MenuItem("Cut (ctrl+x)"); MenuItem copy = new MenuItem("Copy (ctrl+c)"); MenuItem paste = new MenuItem("Paste (ctrl+v)"); MenuItem enableBackdoorModifications = new MenuItem("Enable Modification of this Evaluation Post-Signing"); Menu submenu1 = new Menu("Create"); Menu submenu2 = new Menu("Load"); Menu submenu3 = new Menu("New"); MenuItem createProgressReport = new MenuItem("Progress Report"); MenuItem loadProgressReport = new MenuItem("Progress Report"); MenuItem deleteProgressReport = new MenuItem("Delete selected progress report"); submenu1.getItems().add(submenu3); submenu3.getItems().add(createProgressReport); submenu2.getItems().add(loadProgressReport); MenuItem howToUse = new MenuItem("How to use patient manager"); MenuItem versionInfo = new MenuItem("About Patient Manager/Version Info"); /*MenuItem read = new MenuItem("Read to me"); MenuItem launch = new MenuItem("Launch Dictation");*/ //read to me menu, dictation menu- select a document to read aloud, read this passage aloud, launch windows in-built dictation, download brainac dictation online Menu read = new Menu("Read to me"); Menu launch = new Menu("Dictation"); Menu readPassageOrFormStartStop = new Menu("Read this passage/read this form"); MenuItem startReading1 = new MenuItem("Start"); MenuItem stopReading1 = new MenuItem("Stop"); MenuItem startReading2 = new MenuItem("Start"); MenuItem stopReading2 = new MenuItem("Stop"); Menu readUploadedDocument = new Menu("Select a document to read"); MenuItem launchWindowsDictation = new MenuItem("Launch Windows' Built-In Dictation"); MenuItem launchBrainacDictation = new MenuItem("Download Brainac Dictation"); startReading1.setDisable(true); stopReading1.setDisable(true); startReading2.setDisable(true); stopReading2.setDisable(true); readPassageOrFormStartStop.getItems().add(startReading1); readPassageOrFormStartStop.getItems().add(stopReading1); readUploadedDocument.getItems().add(startReading2); readUploadedDocument.getItems().add(stopReading2); readPassageOrFormStartStop.setDisable(true); readUploadedDocument.setDisable(true); launchBrainacDictation.setDisable(true); read.getItems().add(readPassageOrFormStartStop); read.getItems().add(readUploadedDocument); launch.getItems().add(launchWindowsDictation); launch.getItems().add(launchBrainacDictation); file.getItems().add(save); file.getItems().add(print); file.getItems().add(printWithSettings); file.getItems().add(export); file.getItems().add(logout); file.getItems().add(deleteThisPatient); file.getItems().add(exit); edit.getItems().add(undo); edit.getItems().add(redo); edit.getItems().add(selectAll); edit.getItems().add(cut); edit.getItems().add(copy); edit.getItems().add(paste); edit.getItems().add(enableBackdoorModifications); view.getItems().add(submenu1); view.getItems().add(submenu2); view.getItems().add(deleteProgressReport); help.getItems().add(howToUse); help.getItems().add(versionInfo); speech.getItems().add(read); speech.getItems().add(launch); menu.prefWidthProperty().bind(masterPane.widthProperty()); //menu.setStyle("-fx-padding: 0 20 0 20;"); //menu.getMenus().addAll(file, edit, view, help, speech); menu.getMenus().add(file); menu.getMenus().add(edit); menu.getMenus().add(view); menu.getMenus().add(speech); menu.getMenus().add(help); undo.setDisable(true); redo.setDisable(true); cut.setDisable(true); copy.setDisable(true); paste.setDisable(true); selectAll.setDisable(true); deleteThisPatient.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { int result = JOptionPane.showConfirmDialog(null, "Are you sure you want to delete this patient?", "Warning", JOptionPane.OK_CANCEL_OPTION); if (result == 2) { } if (result == 0) { int result2 = JOptionPane.showConfirmDialog(null, "Are you ABSOLUTELY sure you want to delete this patient?", "Warning", JOptionPane.OK_CANCEL_OPTION); if (result2 == 2) { } if (result2 == 0) { String patientToDelete = firstName + "," + lastName + "," + dob; //listOfProgressReports.getSelectionModel().getSelectedItem().toString(); // String currRepNoColons = currRep.replace(":", ""); // currRepNoColons = currRepNoColons.trim(); //1) removes the report from the list in the file try { FileReader r2 = new FileReader(installationPath + "/patients.txt"); BufferedReader b2 = new BufferedReader(r2); String s = b2.readLine(); String[] patients = s.split(";"); //String[] ssArray = ss.split(","); /*for(int i = 0; i < patients.size(); i++) { }*/ /*while((s = b2.readLine()) != null) { //System.out.println(s); if(!s.equalsIgnoreCase(patientToDelete)) {patients.add(s);} }*/ b2.close(); r2.close(); File fff = new File(installationPath + "/patients.txt"); FileWriter ddd = new FileWriter(fff, false); BufferedWriter bw = new BufferedWriter(ddd); ddd.append(""); bw.close(); ddd.close(); for (int i = 0; i < patients.length; i++) { File openProgressReportsList = new File(installationPath + "/patients.txt"); FileWriter fw = new FileWriter(openProgressReportsList, true); BufferedWriter bufferedwriter = new BufferedWriter(fw); if (!(patients[i].equalsIgnoreCase(patientToDelete))) { fw.append(patients[i].toLowerCase() + ";"); } bufferedwriter.close(); fw.close(); } } catch (Exception ex) { } /*try{ FileReader reader = new FileReader(installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressReports.txt"); BufferedReader br = new BufferedReader(reader); String fileContents = br.readLine(); br.close(); reader.close(); fileContents = fileContents.replace(currRep, ""); //System.out.println("fc:" + fileContents); //writes the new contents to the file: //writes the new report to the list File openProgressReportsList = new File(installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressReports.txt"); FileWriter fw = new FileWriter(openProgressReportsList, false); BufferedWriter bufferedwriter = new BufferedWriter(fw); fw.append(fileContents); bufferedwriter.close(); fw.close(); } catch(Exception e) { }*/ //2) Deletes the folder for that progress report try { File directory = new File(installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressNotes"); File[] subdirs = directory.listFiles((FileFilter) DirectoryFileFilter.DIRECTORY); for (File dir : subdirs) { File deleteThis = new File(installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressNotes/" + dir.getName()); //System.out.println("Directory: " + dir.getName()); File[] filez = deleteThis.listFiles(); for (int i = 0; i < filez.length; i++) { filez[i].delete(); } //the wedding nightmare: red, red, dark purple-brown; big-ol red wrap/red jacket deleteThis.delete(); } File path3 = new File(installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressNotes"); File[] files3 = path3.listFiles(); for (int i = 0; i < files3.length; i++) { files3[i].delete(); } //the wedding nightmare: red, red, dark purple-brown; big-ol red wrap/red jacket path3.delete(); File path2 = new File(installationPath + "/userdata/" + firstName + lastName + dob + "/EvaluationForm"); File[] files2 = path2.listFiles(); for (int i = 0; i < files2.length; i++) { files2[i].delete(); } //the wedding nightmare: red, red, dark purple-brown; big-ol red wrap/red jacket path2.delete(); File path = new File(installationPath + "/userdata/" + firstName + lastName + dob); File[] files = path.listFiles(); for (int i = 0; i < files.length; i++) { files[i].delete(); } //the wedding nightmare: red, red, dark purple-brown; big-ol red wrap/red jacket path.delete(); //deleteDirectory(installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressNotes/" + currRepNoColons); //Files.delete(installationPath + "/userdata/" + firstName + lastName + dob + "/ProgressNotes/" + currRepNoColons); //PUT A MESSAGE SAYING "DELETED" HERE JOptionPane.showMessageDialog(null, "Deleted!"); toPatientSelectionNoDialog.fire(); } catch (Exception exception) { } } } } }); save.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { save(); } }); versionInfo.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { JOptionPane.showMessageDialog(null, "Patient Manager Version 5.0.6 \n Compatible with: Windows 7"); } }); howToUse.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { JOptionPane.showMessageDialog(null, "Help: \n\n\n Print- sends the document to the default printer. Requires no passwords. \n\n Print with Settings- opens the evaluation or progress report in word so that the document can be printed using word's built-in dialog. Because the word document will be open to modification, 'print with settings' requires the physician's password. \n\n Export to- save an evaluation or progress note to the location of your choice, rather than to the default location. Requires the physician/admin's password. \n\n Enable Backdoor Modifications- allows the physician or physician's assistant(s) to reopen the forms for modification post-signing. If the physician's password is used, only his signature will become undone. If the physician's assistant(s)' password is used, both the physician's signature (if relevant) and the assitant's signature will become undone (since the physician will need to review the new modifications before re-signing his approval). \n\n Create/Load/Delete a progress note- the create & load functions are accessible directly from the interface. Deletion can only be accessed from the drop-down menu. Select a progress report prior to clicking 'load' or 'delete' \n\n Speech Options- most speech options are still a WIP, HOWEVER, you can click 'launch windows 7 native dictation' from either the interface OR the menu bar, in order to quickly access Windows' built-in dictation capabilities. \n\n Version info can be found in 'About' in the 'Help' drop-down menu on the main menu bar."); } }); launchWindowsDictation.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { launchSpeechRecognition(); } }); exit.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { int result = JOptionPane.showConfirmDialog(null, "Do you want to save any unsaved changes before exiting?", "Save changes?", JOptionPane.YES_NO_CANCEL_OPTION); if (result == 0) { saveEval(); //some idiocy goes here /*try { Audio audio = Audio.getInstance(); InputStream sound = audio.getAudio("Have a nice day!", Language.ENGLISH); audio.play(sound); } catch(Exception excep) {System.out.println(excep);}*/ System.exit(0); } if (result == 1) { //some idiocy goes here /*try { Audio audio = Audio.getInstance(); InputStream sound = audio.getAudio("Have a nice day!", Language.ENGLISH); audio.play(sound); } catch(Exception excep) {System.out.println(excep);}*/ System.exit(0); } if (result == 2) { } } }); enableBackdoorModifications.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { enableBackdoorModifications(); } }); deleteProgressReport.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { deleteProgressReport(); } }); //<MenuItem fx:id="loadProgressReport" onAction="#loadProgressReport" /> loadProgressReport.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { load.fire(); } }); createProgressReport.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { createPN.fire(); } }); //read to me menu, dictation menu- select a document to read aloud, read this passage aloud, launch windows in-built dictation, download brainac dictation online export.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { final Stage dialog = new Stage(); dialog.initModality(Modality.APPLICATION_MODAL); final TextField textField = new TextField(); Button submit = new Button(); Button cancel = new Button(); final Label label = new Label(); cancel.setText("Cancel"); cancel.setAlignment(Pos.CENTER); submit.setText("Submit"); submit.setAlignment(Pos.BOTTOM_RIGHT); final VBox dialogVbox = new VBox(20); dialogVbox.getChildren().add(new Text("Enter the master password: ")); dialogVbox.getChildren().add(textField); dialogVbox.getChildren().add(submit); dialogVbox.getChildren().add(cancel); dialogVbox.getChildren().add(label); Scene dialogScene = new Scene(dialogVbox, 300, 200); dialog.setScene(dialogScene); dialog.setTitle("Security/Physician Authentication"); dialog.show(); submit.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent anEvent) { String password = textField.getText(); if (password.equalsIgnoreCase("protooncogene")) { dialog.close(); export(); } else { label.setText("The password you entered is incorrect. Please try again."); } } }); cancel.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent anEvent) { dialog.close(); //close the window here } }); } }); print.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { print(); } }); printWithSettings.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { printAdv(); } }); logout.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { toPatientSelection.fire(); } }); ///"sometime during s-y lol." }
From source file:editeurpanovisu.EditeurPanovisu.java
/** * * @param stPrimaryStage//from ww w . ja va2 s. co m * @param iLargeur * @param iHauteur * @throws Exception Exceptions */ private static void creeEnvironnement(Stage stPrimaryStage, int iLargeur, int iHauteur) throws Exception { popUp = new PopUpDialogController(); stPrimaryStage.setMaximized(true); stPrimaryStage.setMinWidth(1280); stPrimaryStage.setMinHeight(720); iHauteurInterface = iHauteur; iLargeurInterface = iLargeur; /** * Cration des lments constitutifs de l'cran */ vbRacine = new VBox(); AnchorPane panePrincipale = new AnchorPane(vbRacine); setScnPrincipale(new Scene(panePrincipale, iLargeur, iHauteur, Color.rgb(221, 221, 221))); if (!fileRepertConfig.exists()) { fileRepertConfig.mkdirs(); setLocale(new Locale("fr", "FR")); File f = new File("css/clair.css"); getScnPrincipale().getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/")); setStrRepertoireProjet(getStrRepertAppli()); } else { lisFichierConfig(); } creeMenu(vbRacine); tpEnvironnement = new TabPane(); tpEnvironnement.setMinHeight(iHauteur - 60); tpEnvironnement.setMaxHeight(iHauteur - 60); tpEnvironnement.setMinWidth(iLargeur); tpEnvironnement.setMaxWidth(iLargeur); Pane paneBarreStatus = new Pane(); paneBarreStatus.setPrefSize(iLargeur + 20, 30); paneBarreStatus.setTranslateY(25); paneBarreStatus.setStyle("-fx-background-color:#c00;-fx-border-color:#aaa"); tabVisite = new Tab(); Pane paneVisualiseur; Pane panePlan; setTabInterface(new Tab()); setTabPlan(new Tab()); getGestionnaireInterface().creeInterface(iLargeur, iHauteur - 78); paneVisualiseur = getGestionnaireInterface().paneTabInterface; getGestionnairePlan().creeInterface(iLargeur, iHauteur - 78); panePlan = getGestionnairePlan().getPaneInterface(); getTabInterface().setContent(paneVisualiseur); getTabPlan().setContent(panePlan); HBox hbEnvironnement = new HBox(); TextField tfTitrePano; TextField tfTitreVisite; tpEnvironnement.getTabs().addAll(tabVisite, getTabInterface(), getTabPlan()); tpEnvironnement.setSide(Side.TOP); tpEnvironnement.getSelectionModel().selectedItemProperty() .addListener((ObservableValue<? extends Tab> ov, Tab t, Tab t1) -> { if (getGestionnaireInterface().navigateurCarteOL == null && isbInternet()) { getGestionnaireInterface().navigateurCarteOL = new NavigateurOpenLayersSeul(); getGestionnaireInterface().apNavigateurCarte = getGestionnaireInterface().navigateurCarteOL .afficheNavigateurOpenLayer(); } getGestionnaireInterface().rafraichit(); }); tabInterface.disableProperty().addListener((ov, av, nv) -> { if (!nv && getGestionnaireInterface().navigateurCarteOL == null && isbInternet()) { getGestionnaireInterface().navigateurCarteOL = new NavigateurOpenLayersSeul(); getGestionnaireInterface().navigateurCarteOL.setBingApiKey(getStrBingAPIKey()); getGestionnaireInterface().apNavigateurCarte = getGestionnaireInterface().navigateurCarteOL .afficheNavigateurOpenLayer(); } }); tabVisite.setText(rbLocalisation.getString("main.creationVisite")); tabVisite.setClosable(false); getTabInterface().setText(rbLocalisation.getString("main.creationInterface")); getTabInterface().setClosable(false); getTabPlan().setText(rbLocalisation.getString("main.tabPlan")); getTabPlan().setClosable(false); getTabPlan().setDisable(true); if (isbInternet()) { getTabInterface().setDisable(true); } tabVisite.setContent(hbEnvironnement); double largeur; String strLabelStyle = "-fx-color : white;-fx-background-color : #fff;-fx-padding : 5px; -fx-border : 1px solid #777;-fx-width : 100px;-fx-margin : 5px; "; vbRacine.setStyle("-fx-font-size : 9pt;-fx-font-family: Arial;"); vbRacine.setTranslateY(15); spPanneauOutils = new ScrollPane(); spPanneauOutils.setId("panOutils"); vbOutils = new VBox(-5); vbOutils.setPrefWidth(largeurOutils - 20); setVbChoixPanoramique(new VBox()); getVbChoixPanoramique().setId("choixPanoramique"); double largeurOutil = vbOutils.getPrefWidth(); apPanovisu = new AnchorPane(); apPanovisu.setPrefHeight(50); apPanovisu.setMinHeight(50); apPanovisu.setMaxHeight(50); apPanovisu.setMaxWidth(380); apPanovisu.setPrefWidth(380); apPanovisu.setMinWidth(380); apPanovisu.setLayoutX(iLargeur - 380); if (isMac()) { apPanovisu.setLayoutY(0); } else { apPanovisu.setLayoutY(45); } apPanovisu.setStyle("-fx-background-color : derive(-fx-base,20%);"); ImageView ivPanoVisu = new ImageView(new Image( "file:" + getStrRepertAppli() + File.separator + "images/panovisu.png", 48, 48, true, true)); ivPanoVisu.setLayoutX(40); ivPanoVisu.setLayoutY(1); Label lblPanoVisu = new Label("panoVisu Vers. : " + strNumVersion); lblPanoVisu.setStyle( "-fx-font-weight : bold;-fx-font-family : Verdana,Arial,sans-serif;-fx-font-size : 1.2em;"); lblPanoVisu.setLayoutX(108); lblPanoVisu.setLayoutY(5); Label lblPanoVisu2 = new Label("Laurent LANG (2014-2015)"); lblPanoVisu2.setLayoutX(108); lblPanoVisu2.setLayoutY(35); lblPanoVisu2.setStyle("-fx-font-family : Verdana,Arial,sans-serif;-fx-font-size : 0.8em;"); apPanovisu.getChildren().addAll(ivPanoVisu, lblPanoVisu, lblPanoVisu2); panePrincipale.getChildren().add(apPanovisu); panePrincipale.getChildren().add(apWebview); apWebview.setVisible(false); apWebview.setStyle("-fx-background-color : #333;"); apWebview.setPrefSize(iLargeur - 75, iHauteur - 80); apWebview.setMinSize(iLargeur - 75, iHauteur - 80); apWebview.setMaxSize(iLargeur - 75, iHauteur - 80); apWebview.setTranslateX(25); apWebview.setTranslateY(5); /* Paramtres de la visite */ apParametresVisite = new AnchorPane(); apParametresVisite.setLayoutY(40); Label lblTitreVisite = new Label(rbLocalisation.getString("main.titreVisite")); lblTitreVisite.setStyle("-fx-font-size : 10pt;-fx-font-weight : bold;"); lblTitreVisite.setLayoutX(10); lblTitreVisite.setLayoutY(5); tfTitreVisite = new TextField(); tfTitreVisite.setId("titreVisite"); tfTitreVisite.setPrefSize(200, 25); tfTitreVisite.setMaxSize(250, 25); tfTitreVisite.setLayoutX(60); tfTitreVisite.setLayoutY(25); cbIntroPetitePlanete = new CheckBox(rbLocalisation.getString("main.introPetitePlanete")); cbIntroPetitePlanete.setSelected(false); cbIntroPetitePlanete.setLayoutX(10); cbIntroPetitePlanete.setLayoutY(60); Label lblChoixPanoramiqueEntree = new Label(rbLocalisation.getString("main.panoEntree")); lblChoixPanoramiqueEntree.setStyle("-fx-font-size : 1em;"); lblChoixPanoramiqueEntree.setLayoutX(10); lblChoixPanoramiqueEntree.setLayoutY(90); lblChoixPanoramiqueEntree.setMaxWidth(largeurOutils - 40); lblChoixPanoramiqueEntree.setPrefHeight(35); lblChoixPanoramiqueEntree.setWrapText(true); apParametresVisite.setPrefHeight(120); apParametresVisite.getChildren().addAll(lblTitreVisite, tfTitreVisite, cbIntroPetitePlanete, lblChoixPanoramiqueEntree); PaneOutil poParametresVisite = new PaneOutil(rbLocalisation.getString("main.parametresVisite"), apParametresVisite, largeurOutil); setApPVIS(new AnchorPane(poParametresVisite.getApPaneOutil())); poParametresVisite.setbValide(isbIntroPetitePlanete()); AnchorPane apAutoRotation = new AnchorPane(); apAutoRotation.setPrefHeight(270); apAutoRotation.setLayoutY(40); PaneOutil poAutoRotation = new PaneOutil(rbLocalisation.getString("main.autoTourRotation"), apAutoRotation, largeurOutil); setApAR(new AnchorPane(poAutoRotation.getApPaneOutil())); poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre()); cbAutoRotationDemarrage = new CheckBox(rbLocalisation.getString("main.autoRotationDemarrage")); cbAutoRotationDemarrage.setSelected(false); cbAutoRotationDemarrage.setLayoutX(10); cbAutoRotationDemarrage.setLayoutY(10); Label lblVitesse = new Label(rbLocalisation.getString("main.autoRotationVitesse")); lblVitesse.setLayoutX(10); lblVitesse.setLayoutY(40); cbAutoRotationVitesse = new ComboBox(); cbAutoRotationVitesse.getItems().add(0, "10 " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getItems().add(1, "20 " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getItems().add(2, "30 " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getItems().add(3, "Autre n " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getSelectionModel().select(2); cbAutoRotationVitesse.setLayoutX(30); cbAutoRotationVitesse.setLayoutY(70); cbAutoRotationVitesse.setMaxWidth(170); bdfAutoRotationVitesse = new BigDecimalField(new BigDecimal(40)); bdfAutoRotationVitesse.setDisable(true); bdfAutoRotationVitesse.setLayoutX(210); bdfAutoRotationVitesse.setLayoutY(70); bdfAutoRotationVitesse.setMaxWidth(70); lblVitesse.disableProperty().bind(cbAutoRotationDemarrage.selectedProperty().not()); cbAutoRotationVitesse.disableProperty().bind(cbAutoRotationDemarrage.selectedProperty().not()); Label lblUnites = new Label(rbLocalisation.getString("main.parTour")); lblUnites.setLayoutX(290); lblUnites.setLayoutY(75); Separator spAutotour = new Separator(Orientation.HORIZONTAL); spAutotour.setLayoutX(0); spAutotour.setLayoutY(100); spAutotour.setMinWidth(380); cbAutoTourDemarrage = new CheckBox(rbLocalisation.getString("main.autoTour")); cbAutoTourDemarrage.setSelected(false); cbAutoTourDemarrage.setLayoutX(10); cbAutoTourDemarrage.setLayoutY(120); Label lblDemarrageAutoTour = new Label(rbLocalisation.getString("main.autoTourDemarrage")); lblDemarrageAutoTour.setLayoutX(10); lblDemarrageAutoTour.setLayoutY(150); bdfAutoTourDemarrage = new BigDecimalField(new BigDecimal(1)); bdfAutoTourDemarrage.setLayoutX(240); bdfAutoTourDemarrage.setLayoutY(180); bdfAutoTourDemarrage.setMaxWidth(70); Label lblVitesseAutoTour = new Label(rbLocalisation.getString("main.autoTourChange")); lblVitesseAutoTour.setLayoutX(10); lblVitesseAutoTour.setLayoutY(210); cbAutoTourType = new ComboBox(); cbAutoTourType.getItems().add(rbLocalisation.getString("main.nTours")); cbAutoTourType.getItems().add(rbLocalisation.getString("main.nSecondes")); cbAutoTourType.getSelectionModel().select(1); cbAutoTourType.setLayoutX(30); cbAutoTourType.setLayoutY(240); cbAutoTourType.setMaxWidth(140); bdfAutoTourLimite = new BigDecimalField(new BigDecimal(1)); bdfAutoTourLimite.setLayoutX(240); bdfAutoTourLimite.setLayoutY(240); bdfAutoTourLimite.setMaxWidth(70); Label lblN = new Label("n="); lblN.setLayoutX(210); lblN.setLayoutY(245); cbAutoTourType.disableProperty().bind(cbAutoTourDemarrage.selectedProperty().not()); bdfAutoTourLimite.disableProperty().bind(cbAutoTourDemarrage.selectedProperty().not()); cbAutoRotationVitesse.getSelectionModel().selectedIndexProperty().addListener((ov, av, nv) -> { if (cbAutoRotationVitesse.getSelectionModel().getSelectedIndex() == 3) { bdfAutoRotationVitesse.setDisable(false); setiAutoRotationVitesse(bdfAutoRotationVitesse.getNumber().toBigInteger().intValue()); } else { bdfAutoRotationVitesse.setDisable(true); setiAutoRotationVitesse(10 * (cbAutoRotationVitesse.getSelectionModel().getSelectedIndex() + 1)); } }); cbIntroPetitePlanete.selectedProperty().addListener((ov, av, nv) -> { setbIntroPetitePlanete(nv); poParametresVisite.setbValide(isbIntroPetitePlanete()); }); cbAutoRotationDemarrage.selectedProperty().addListener((ov, av, nv) -> { setbAutoRotationDemarre(nv); poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre()); }); bdfAutoRotationVitesse.numberProperty().addListener((ov, av, nv) -> { setiAutoRotationVitesse(nv.toBigInteger().intValue()); }); cbAutoTourType.getSelectionModel().selectedIndexProperty().addListener((ov, av, nv) -> { if (cbAutoTourType.getSelectionModel().getSelectedIndex() == 0) { setStrAutoTourType("tours"); } else { setStrAutoTourType("secondes"); } }); cbAutoTourDemarrage.selectedProperty().addListener((ov, av, nv) -> { setbAutoTourDemarre(nv); poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre()); getGestionnaireInterface().getApBtnVA().setDisable(!nv); }); bdfAutoTourLimite.numberProperty().addListener((ov, av, nv) -> { setiAutoTourLimite(nv.toBigInteger().intValue()); }); bdfAutoTourDemarrage.numberProperty().addListener((ov, av, nv) -> { setiAutoTourDemarrage(nv.toBigInteger().intValue()); }); apAutoRotation.getChildren().addAll(cbAutoRotationDemarrage, lblVitesse, cbAutoRotationVitesse, bdfAutoRotationVitesse, lblUnites, spAutotour, cbAutoTourDemarrage, lblDemarrageAutoTour, bdfAutoTourDemarrage, lblVitesseAutoTour, cbAutoTourType, lblN, bdfAutoTourLimite); AnchorPane apParametresPano = new AnchorPane(); apParametresPano.setPrefHeight(340); apParametresPano.setLayoutY(40); ImageView ivSupprPanoramique = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/suppr.png", 48, 48, true, true)); ImageView ivModifPanoramique = new ImageView(new Image( "file:" + getStrRepertAppli() + File.separator + "images/modifie.png", 48, 48, true, true)); Button btnSupprimePano = new Button(rbLocalisation.getString("main.supprimePanoCourant"), ivSupprPanoramique); btnSupprimePano.setLayoutX(190); btnSupprimePano.setLayoutY(70); btnSupprimePano.setPrefSize(160, 60); btnSupprimePano.setMinSize(160, 60); btnSupprimePano.setMaxSize(160, 60); btnSupprimePano.setWrapText(true); btnSupprimePano.setOnAction((e) -> { retirePanoCourant(); }); Button btnModifiePano = new Button(rbLocalisation.getString("main.modifiePanoCourant"), ivModifPanoramique); btnModifiePano.setLayoutX(20); btnModifiePano.setLayoutY(70); btnModifiePano.setPrefSize(160, 60); btnModifiePano.setMinSize(160, 60); btnModifiePano.setMaxSize(160, 60); btnModifiePano.setWrapText(true); btnModifiePano.setOnAction((e) -> { String strRepertPano = getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().substring(0, getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().lastIndexOf(File.separator)); FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter extFilterImage = new FileChooser.ExtensionFilter( "Fichiers Image (JPG,BMP,TIFF)", "*.jpg", "*.bmp", "*.tif"); FileChooser.ExtensionFilter extFilterJpeg = new FileChooser.ExtensionFilter("Fichiers JPEG (*.jpg)", "*.jpg"); FileChooser.ExtensionFilter extFilterBmp = new FileChooser.ExtensionFilter("Fichiers BMP (*.bmp)", "*.bmp"); FileChooser.ExtensionFilter extFilterTiff = new FileChooser.ExtensionFilter("Fichiers TIFF (*.tif)", "*.tif"); File fileRepert = new File(strRepertPano + File.separator); fileChooser.setInitialDirectory(fileRepert); fileChooser.getExtensionFilters().addAll(extFilterJpeg, extFilterTiff, extFilterBmp, extFilterImage); File filePano = fileChooser.showOpenDialog(null); if (filePano != null) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strFilePano = filePano.getAbsolutePath(); String strExtension = strFilePano.substring(strFilePano.length() - 3, strFilePano.length()); Image imgPano = null; if ("tif".equals(strExtension)) { try { imgPano = ReadWriteImage.readTiff(strFilePano); } catch (IOException | ImageReadException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + strFilePano); } if (imgPano != null) { if (imgPano.getWidth() == imgPano.getHeight()) { try { rechargePanoramiqueProjet(strFilePano, Panoramique.CUBE); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { try { rechargePanoramiqueProjet(strFilePano, Panoramique.SPHERE); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } affichePanoChoisit(getiPanoActuel()); if (apListePanoTriable != null) { apParametresVisite.getChildren().remove(apListePanoTriable); } ordPano.rafraichitListe(); ordPano.ajouteNouveauxPanos(); apListePanoTriable = ordPano.getApListePanoramiques(); apListePanoTriable.setMaxHeight(apListePanoTriable.getPrefHeight()); apListePanoTriable.setMinHeight(apListePanoTriable.getPrefHeight()); apListePanoTriable.setVisible(true); apParametresVisite.getChildren().remove(apListePanoTriable); apParametresVisite.getChildren().add(apListePanoTriable); apListePanoTriable.setLayoutX(40); apListePanoTriable.setLayoutY(130); apParametresVisite.setPrefHeight(120 + apListePanoTriable.getPrefHeight() + 20); if (apParametresVisite.isVisible()) { apParametresVisite.setMinHeight(120 + apListePanoTriable.getPrefHeight() + 20); apParametresVisite.setMaxHeight(120 + apListePanoTriable.getPrefHeight() + 20); } rafraichitListePano(); } } }); Label lblTitrePano = new Label(rbLocalisation.getString("main.titrePano")); lblTitrePano.setStyle("-fx-font-size : 1em;"); lblTitrePano.setPadding(new Insets(5, 5, 5, 0)); lblTitrePano.setLayoutX(10); lblTitrePano.setLayoutY(10); tfTitrePano = new TextField(); tfTitrePano.setId("txttitrepano"); tfTitrePano.setPrefSize(220, 25); tfTitrePano.setMaxSize(250, 25); tfTitrePano.setLayoutX(60); tfTitrePano.setLayoutY(40); tfTitrePano.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { clickBtnValidePano(); }); slMinLat = new Slider(-90, -45, -90); slMinLat.setDisable(true); slMaxLat = new Slider(45, 90, 90); slMaxLat.setDisable(true); cbMinLat = new CheckBox(rbLocalisation.getString("main.blocageNadir")); cbMaxLat = new CheckBox(rbLocalisation.getString("main.blocageZenith")); slMinFov = new Slider(5, 70, 12); slMaxFov = new Slider(5, 70, 70); Label lblMinFov = new Label("min. hFOV : 12"); Label lblMaxFov = new Label("max. hFOV : 70"); slMinLat.disableProperty().bind(cbMinLat.selectedProperty().not()); slMaxLat.disableProperty().bind(cbMaxLat.selectedProperty().not()); slMinLat.setLayoutX(10); slMinLat.setLayoutY(160); cbMinLat.setLayoutX(190); cbMinLat.setLayoutY(160); slMaxLat.setLayoutX(10); slMaxLat.setLayoutY(190); cbMaxLat.setLayoutX(190); cbMaxLat.setLayoutY(190); slMinFov.setLayoutX(10); slMinFov.setLayoutY(220); lblMinFov.setLayoutX(190); lblMinFov.setLayoutY(220); slMaxFov.setLayoutX(10); slMaxFov.setLayoutY(250); lblMaxFov.setLayoutX(190); lblMaxFov.setLayoutY(250); Button btnBlocage = new Button(rbLocalisation.getString("main.blocage")); btnBlocage.setLayoutX(190); btnBlocage.setLayoutY(300); ligNadir = new Line(); ligNadir.setVisible(false); ligNadir.setStroke(Color.YELLOW); ligNadir.setStrokeWidth(2); ligZenith = new Line(); ligZenith.setVisible(false); ligZenith.setStroke(Color.YELLOW); ligZenith.setStrokeWidth(2); ligNadir.visibleProperty().bind(cbMinLat.selectedProperty()); ligZenith.visibleProperty().bind(cbMaxLat.selectedProperty()); slMinFov.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); getPanoramiquesProjet()[iPanoActuel].setFovMin((double) newValue); double val1 = Math.round((double) newValue * 10) / 10; lblMinFov.setText("min. FOV : " + val1 + ""); slMaxFov.setMin(val1); navigateurPanoramique.setMinFov(val1); if (navigateurPanoramique.getFov() < val1) { navigateurPanoramique.setFov(val1); } if (navigateurPanoramique.getChoixFov() < val1) { navigateurPanoramique.setChoixFov(val1); } }); slMaxFov.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); getPanoramiquesProjet()[iPanoActuel].setFovMax((double) newValue); double val1 = Math.round((double) newValue * 10) / 10; lblMaxFov.setText("max. FOV : " + val1 + ""); slMinFov.setMax(val1); navigateurPanoramique.setMaxFov(val1); if (navigateurPanoramique.getFov() > val1) { navigateurPanoramique.setFov(val1); } if (navigateurPanoramique.getChoixFov() > val1) { navigateurPanoramique.setChoixFov(val1); } }); slMinLat.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) newValue) * largeurImage1 / 360.0d; ligNadir.setStartX(X11); ligNadir.setStartY(Y1); ligNadir.setEndX(X11 + largeurImage1); ligNadir.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setMinLat((double) newValue); }); slMaxLat.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) newValue) * largeurImage1 / 360.0d; ligZenith.setStartX(X11); ligZenith.setStartY(Y1); ligZenith.setEndX(X11 + largeurImage1); ligZenith.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setMaxLat((double) newValue); }); cbMinLat.selectedProperty().addListener((ov, av, nv) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) slMinLat.getValue()) * largeurImage1 / 360.0d; ligNadir.setStartX(X11); ligNadir.setStartY(Y1); ligNadir.setEndX(X11 + largeurImage1); ligNadir.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setbMinLat(nv); }); cbMaxLat.selectedProperty().addListener((ov, av, nv) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) (double) slMaxLat.getValue()) * largeurImage1 / 360.0d; ligZenith.setStartX(X11); ligZenith.setStartY(Y1); ligZenith.setEndX(X11 + largeurImage1); ligZenith.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setbMaxLat(nv); }); btnBlocage.setOnAction((e) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); for (int i = 0; i < iNombrePanoramiques; i++) { getPanoramiquesProjet()[i].setbMaxLat(getPanoramiquesProjet()[iPanoActuel].isbMaxLat()); getPanoramiquesProjet()[i].setbMinLat(getPanoramiquesProjet()[iPanoActuel].isbMinLat()); getPanoramiquesProjet()[i].setMaxLat(getPanoramiquesProjet()[iPanoActuel].getMaxLat()); getPanoramiquesProjet()[i].setMinLat(getPanoramiquesProjet()[iPanoActuel].getMinLat()); getPanoramiquesProjet()[i].setFovMax(getPanoramiquesProjet()[iPanoActuel].getFovMax()); getPanoramiquesProjet()[i].setFovMin(getPanoramiquesProjet()[iPanoActuel].getFovMin()); } }); apParametresPano.getChildren().addAll(btnModifiePano, btnSupprimePano, lblTitrePano, tfTitrePano, slMaxLat, cbMaxLat, slMinLat, cbMinLat, slMinFov, lblMinFov, slMaxFov, lblMaxFov, btnBlocage); setApPPAN(new AnchorPane( new PaneOutil(true, rbLocalisation.getString("main.parametresPano"), apParametresPano, largeurOutil) .getApPaneOutil())); setApGEO(new AnchorPane()); apOpenLayers = new AnchorPane(); apOpenLayers.setVisible(false); if (isbInternet()) { navigateurOpenLayers = new NavigateurOpenLayers(); navigateurOpenLayers.setBingApiKey(getStrBingAPIKey()); tfLongitude = new TextField(); tfLatitude = new TextField(); apOpenLayers = navigateurOpenLayers.afficheNavigateurOpenLayer(tfLongitude, tfLatitude, true); apOpenLayers.setPrefSize(800, 600); Button btnGeolocalise = new Button(rbLocalisation.getString("main.geolocalisation")); btnGeolocalise.setLayoutX(10); btnGeolocalise.setLayoutY(25); btnGeolocalise.setPrefWidth(120); btnGeolocalise.setOnAction((e) -> { navigateurOpenLayers.retireMarqueur(0); if (navigateurOpenLayers.getBingApiKey().equals("")) { navigateurOpenLayers.afficheCartesOpenlayer(); } else { navigateurOpenLayers.valideBingApiKey(navigateurOpenLayers.getBingApiKey()); } if (panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation() != null) { navigateurOpenLayers.allerCoordonnees( panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation(), 17); navigateurOpenLayers .setMarqueur(panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation()); String strFichierPano = getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier() .substring( getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier() .lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().length()) .split("\\.")[0]; String strHTML = "<span style='font-family : Verdana,Arial,sans-serif;font-weight:bold;font-size : 12px;'>" + getPanoramiquesProjet()[getiPanoActuel()].getStrTitrePanoramique() + "</span><br/>" + "<span style='font-family : Verdana,Arial,sans-serif;bold;font-size : 10px;'>" + strFichierPano + "</span>"; strHTML = strHTML.replace("\\", "/"); navigateurOpenLayers.ajouteMarqueur(0, panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation(), strHTML); } apOpenLayers.setVisible(true); }); tfLatitude.setLayoutX(140); tfLatitude.setLayoutY(10); tfLongitude.setLayoutX(140); tfLongitude.setLayoutY(40); apOpenLayers.setLayoutX(200); apOpenLayers.setLayoutY(150); apOpenLayers.setVisible(false); AnchorPane apGeolocalise = new AnchorPane(); apGeolocalise.setPrefHeight(75); apGeolocalise.getChildren().addAll(btnGeolocalise, tfLatitude, tfLongitude); apGeolocalise.setLayoutX(10); apGeolocalise.setLayoutY(40); setPoGeolocalisation( new PaneOutil(rbLocalisation.getString("main.geolocalisation"), apGeolocalise, largeurOutil)); setApGEO(new AnchorPane(getPoGeolocalisation().getApPaneOutil())); apOpenLayers.setLayoutX((iLargeur - apOpenLayers.getPrefWidth()) / 2); apOpenLayers.setLayoutY((iHauteur - apOpenLayers.getPrefHeight()) / 2); apOpenLayers.visibleProperty().addListener((ov, av, nv) -> { mbarPrincipal.setDisable(nv); hbBarreBouton.setDisable(nv); tpEnvironnement.setDisable(nv); }); } apVisuPanoramique.setLayoutY(40); apVisuPanoramique.setPrefWidth(340); apVisuPanoramique.setPrefHeight(295); setApVISU(new AnchorPane( new PaneOutil(true, rbLocalisation.getString("main.visualisation"), apVisuPanoramique, largeurOutil) .getApPaneOutil())); vbVisuHotspots = new VBox(); apVisuHS = new AnchorPane(vbVisuHotspots); apVisuHS.setLayoutY(40); apHS1 = new PaneOutil(true, "Hotspots", apVisuHS, largeurOutil); setApHS(new AnchorPane(apHS1.getApPaneOutil())); getVbChoixPanoramique().getChildren().addAll(getApPVIS(), getApAR(), getApPPAN(), getApGEO(), getApVISU(), getApHS()); getVbChoixPanoramique().setSpacing(-5); vbOutils.getChildren().addAll(getVbChoixPanoramique()); getVbChoixPanoramique().setVisible(false); /* Cration du panneau d'info du panoramique */ spVuePanoramique = new ScrollPane(); hbCoordonnees = new HBox(); panePanoramique = new Pane(); apPanneauPrincipal = new AnchorPane(); lblLong = new Label(""); lblLat = new Label(""); ivImagePanoramique = new ImageView(); stPrimaryStage.setScene(getScnPrincipale()); /** * */ spVuePanoramique.setPrefSize(iLargeur - largeurOutils - 20, iHauteur - 110); spVuePanoramique.setMaxSize(iLargeur - largeurOutils - 20, iHauteur - 110); spVuePanoramique.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spVuePanoramique.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spVuePanoramique.setTranslateY(5); /** * */ AnchorPane apPanneauOutils = new AnchorPane(); apPanneauOutils.getChildren().addAll(spPanneauOutils); apPanneauOutils.setTranslateY(3); apPanneauOutils.setTranslateX(20); spPanneauOutils.setContent(vbOutils); spPanneauOutils.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); spPanneauOutils.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spPanneauOutils.setPrefSize(largeurOutils, iHauteur - 112); spPanneauOutils.setMaxWidth(largeurOutils); spPanneauOutils.setMaxHeight(iHauteur - 112); spPanneauOutils.setLayoutY(0); spPanneauOutils.setLayoutX(0); /** * */ panePanoramique.setCursor(Cursor.CROSSHAIR); vbOutils.setPrefWidth(largeurOutils - 20); vbOutils.minHeight(iHauteur - 110); vbOutils.setLayoutX(3); lblLong.setPrefSize(100, 15); lblLat.setPrefSize(100, 15); lblLat.setTranslateX(50); apPanneauPrincipal.setPrefSize(iLargeur - largeurOutils - 20, iHauteur - 110); apListeImagesPanoramiques = new AnchorPane(); apListeImagesPanoramiques.setPrefWidth(iLargeurVignettes + 40); apListeImagesPanoramiques.setMinWidth(iLargeurVignettes + 40); apListeImagesPanoramiques.setMaxWidth(iLargeurVignettes + 40); apListeImagesPanoramiques.setPrefHeight(iHauteur - 140); apListeImagesPanoramiques.setLayoutX(-iLargeurVignettes - 30); apListeImagesPanoramiques.setLayoutY(0); apListeImagesPanoramiques.setStyle("-fx-background-color :rgba(0,0,0,0);"); apListeImagesPanoramiques.setOnMouseEntered((e) -> { apListeImagesPanoramiques.setLayoutX(0); }); apListeImagesPanoramiques.setOnMouseExited((e) -> { apListeImagesPanoramiques.setLayoutX(-iLargeurVignettes - 30); }); Label lblVignettes = new Label(rbLocalisation.getString("main.vignettes")); lblVignettes.setPrefSize(70, 20); lblVignettes.setTextAlignment(TextAlignment.CENTER); lblVignettes.setStyle("-fx-background-color:-fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-border-width: 1px;"); lblVignettes.setTranslateX(-lblVignettes.getPrefWidth() / 2 + lblVignettes.getPrefHeight() / 2); lblVignettes.setTranslateY(lblVignettes.getPrefWidth() / 2 - lblVignettes.getPrefHeight() / 2); lblVignettes.setRotate(270); lblVignettes.setLayoutX(iLargeurVignettes + 30); apVignettesPano = new AnchorPane(); apVignettesPano.setPrefWidth(iLargeurVignettes + 10); apVignettesPano.setMinHeight(iHauteur - 140); apVignettesPano.setStyle("-fx-background-color:-fx-base;"); rectVignettePano = new Rectangle(0, 0, iLargeurVignettes, iLargeurVignettes / 2.d); rectVignettePano.setLayoutX(5); rectVignettePano.setLayoutY(10); rectVignettePano.setFill(Color.web("#fff", 0.5)); rectVignettePano.setStroke(Color.WHITE); rectVignettePano.setStrokeWidth(2.0); rectVignettePano.setVisible(false); apVignettesPano.getChildren().add(rectVignettePano); ScrollPane spListeImagesPanoramiques = new ScrollPane(apVignettesPano); spListeImagesPanoramiques.setPrefWidth(iLargeurVignettes + 30); spListeImagesPanoramiques.setPrefHeight(iHauteur - 130); spListeImagesPanoramiques.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); spListeImagesPanoramiques .setStyle("-fx-background-color:-fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.2) , 8, 0.0 , 0 , 8 );" + "-fx-border-width: 1px;"); apListeImagesPanoramiques.getChildren().addAll(spListeImagesPanoramiques, lblVignettes); ivImagePanoramique.setCache(true); largeur = largeurMax - 60; ivImagePanoramique.setFitWidth(largeur); ivImagePanoramique.setFitHeight(largeur / 2.0d); ivImagePanoramique.setLayoutX((largeurMax - largeur) / 2.d); panePanoramique.getChildren().add(ivImagePanoramique); panePanoramique.setPrefSize(ivImagePanoramique.getFitWidth(), ivImagePanoramique.getFitHeight()); panePanoramique.setMaxSize(ivImagePanoramique.getFitWidth(), ivImagePanoramique.getFitHeight()); panePanoramique.setLayoutY(20); lblLong.setTranslateX(50); lblLat.setTranslateX(80); hbCoordonnees.getChildren().setAll(lblLong, lblLat); spVuePanoramique.setContent(apPanneauPrincipal); hbEnvironnement.getChildren().setAll(spVuePanoramique, apPanneauOutils); apEnvironnement = new AnchorPane(); setApAttends(new AnchorPane()); getApAttends().setPrefHeight(250); getApAttends().setPrefWidth(600); getApAttends().setMaxWidth(600); getApAttends().setStyle("-fx-background-color : -fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.5) , 8, 0.0 , 0 , 8 );" + "-fx-border-width: 1px;"); getApAttends().setLayoutX((iLargeur - getApAttends().getPrefWidth()) / 2.d); getApAttends().setLayoutY((iHauteur - getApAttends().getPrefHeight()) / 2.d - 55); pbarAvanceChargement = new ProgressBar(); pbarAvanceChargement.setPrefSize(400, 30); pbarAvanceChargement.setLayoutX((getApAttends().getPrefWidth() - pbarAvanceChargement.getPrefWidth()) / 2); pbarAvanceChargement.setLayoutY(70); Label lblAttends = new Label(rbLocalisation.getString("main.attendsChargement")); lblAttends.setMinWidth(600); lblAttends.setAlignment(Pos.CENTER); lblAttends.setStyle("-fx-background-color : #777;"); lblAttends.setTextFill(Color.WHITE); lblAttends.setLayoutY(5); lblAttends.setFont(Font.font(14)); lblCharge = new Label(); lblCharge.setMinWidth(600); lblCharge.setLayoutY(150); lblCharge.setAlignment(Pos.CENTER); lblNiveaux = new Label(); lblNiveaux.setMinWidth(600); lblNiveaux.setLayoutY(180); lblNiveaux.setAlignment(Pos.CENTER); getApAttends().getChildren().addAll(lblAttends, pbarAvanceChargement, lblCharge, lblNiveaux); getApAttends().setVisible(false); apEnvironnement.getChildren().addAll(tpEnvironnement, getApAttends()); if (isMac()) { apEnvironnement.setTranslateY(-30); } vbRacine.getChildren().addAll(apEnvironnement); apPanneauPrincipal.getChildren().setAll(hbCoordonnees, panePanoramique); stPrimaryStage.show(); popUp.affichePopup(); lblDragDrop = new Label(rbLocalisation.getString("main.dragDrop")); lblDragDrop.setMinHeight(spVuePanoramique.getPrefHeight()); lblDragDrop.setMaxHeight(spVuePanoramique.getPrefHeight()); lblDragDrop.setMinWidth(spVuePanoramique.getPrefWidth()); lblDragDrop.setMaxWidth(spVuePanoramique.getPrefWidth()); lblDragDrop.setAlignment(Pos.CENTER); lblDragDrop.setTextFill(Color.web("#c9c7c7")); lblDragDrop.setTextAlignment(TextAlignment.CENTER); lblDragDrop.setWrapText(true); lblDragDrop.setStyle("-fx-font-size:72px"); lblDragDrop.setTranslateY(-100); apLoupe.setLayoutX(35); apLoupe.setLayoutY(35); apLoupe.setVisible(false); apPanneauPrincipal.getChildren().addAll(lblDragDrop, spAfficheLegende(), apLoupe, apListeImagesPanoramiques); apCreationBarre = new AnchorPane(); apCreationBarre.setVisible(false); apCreationDiaporama = new AnchorPane(); apCreationDiaporama.setVisible(false); apEnvironnement.getChildren().addAll(apCreationBarre, apCreationDiaporama, apOpenLayers); }
From source file:org.simmi.GeneSetHead.java
License:asdf
private void showGeneTable( /*final Map<String, Gene> genemap, final List<Gene> genelist, final List<Function> funclist, final List<Set<String>> iclusterlist, final List<Set<String>> uclusterlist, final Map<Set<String>, ShareNum> specset,*/ final Map<Set<String>, ClusterInfo> clustInfoMap, final Button jb, final TableView<Gene> genetable, final TableView<Function> upper, final TableView<GeneGroup> lower, final ToolBar toolbar, final ToolBar btoolbar, final Container comp, final JApplet applet, final ComboBox<String> selcomblocal) throws IOException { //JSplitPane splitpane = new JSplitPane(); //splitpane.setOrientation(JSplitPane.VERTICAL_SPLIT); //splitpane.setDividerLocation(400); //JScrollPane scrollpane = new JScrollPane(); /*table = new JTable() { public String getToolTipText(MouseEvent me) { Point p = me.getPoint();/*from w w w .j a v a 2 s. c o m*/ int r = rowAtPoint(p); int c = columnAtPoint(p); if (r >= 0 && r < super.getRowCount()) { Object ret = super.getValueAt(r, c); if (ret != null) { return ret.toString(); // super.getToolTipText( me ); } } return ""; } };*/ //table.setDragEnabled(true); try { final DataFlavor df = new DataFlavor("text/plain;charset=utf-8"); // System.err.println( df.getHumanPresentableName() + " " + // df.getPrimaryType() + " " + df.getSubType() + " " + // df.getMimeType() ); // DataFlavor df1 = DataFlavor.getTextPlainUnicodeFlavor(); // System.err.println( df.getHumanPresentableName() + " " + // df.getPrimaryType() + " " + df.getSubType() + " " + // df.getMimeType() ); TransferHandler th = new TransferHandler() { /** * */ private static final long serialVersionUID = 1L; public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } public boolean canImport(TransferHandler.TransferSupport support) { return true; } protected Transferable createTransferable(JComponent c) { return new Transferable() { @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { Map<String, List<Tegeval>> contigs = new HashMap<>(); StringBuilder ret = new StringBuilder(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; if (!contigs.containsKey(tv.getContshort())) { List<Tegeval> ltv = new ArrayList<>(); ltv.add(tv); contigs.put(tv.getContshort().getName(), ltv); } else { List<Tegeval> ltv = contigs.get(tv.getContshort()); ltv.add(tv); } /* * ret.append( ">" + tv.cont + " " + * tv.teg + " " + tv.eval + "\n" ); * if( tv.dna != null ) { for( int i * = 0; i < tv.dna.length(); i+=70 ) * { ret.append(tv.dna.substring( i, * Math.min(i+70,tv.dna.length()) * )+"\n"); } } */ } for (String cont : contigs.keySet()) { List<Tegeval> tv = contigs.get(cont); String dna = tv.get(0).getSequence(); ret.append(">" + cont + "\n"); // + " " + tv.teg // + " " + // tv.eval + // "\n" ); if (dna != null) { for (int i = 0; i < dna.length(); i += 70) { ret.append(dna.substring(i, Math.min(i + 70, dna.length())) + "\n"); } } } for (String cont : contigs.keySet()) { List<Tegeval> ltv = contigs.get(cont); ret.append(">" + cont + "\n"); // + " " + tv.teg // + " " + // tv.eval + // "\n" ); for (Tegeval tv : ltv) { ret.append("erm\t#0000ff\t" + tv.start + "\t" + tv.stop + "\n"); } } return new ByteArrayInputStream(ret.toString().getBytes()); } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { df }; } @Override public boolean isDataFlavorSupported(DataFlavor arg0) { if (arg0.equals(df)) { return true; } return false; } }; } public boolean importData(TransferHandler.TransferSupport support) { Object obj = null; System.err.println(support.getDataFlavors().length); int b = Arrays.binarySearch(support.getDataFlavors(), DataFlavor.javaFileListFlavor, (o1, o2) -> o1 == o2 ? 1 : 0); try { obj = support.getTransferable().getTransferData(DataFlavor.imageFlavor); } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { if (obj != null && obj instanceof File[]) { // File[] ff = (File[])obj; // wbStuff( ff[0].getCanonicalPath() ); } else if (obj instanceof Image) { } else { obj = support.getTransferable().getTransferData(DataFlavor.stringFlavor); System.err.println(obj); URL url = null; try { url = new URL((String) obj); Image image = ImageIO.read(url); } catch (Exception e) { e.printStackTrace(); } } } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return true; } }; //table.setTransferHandler(th); } catch (ClassNotFoundException e2) { e2.printStackTrace(); } final Color darkgreen = new Color(0, 128, 0); final Color darkred = new Color(128, 0, 0); final Color darkblue = new Color(0, 0, 128); final Color darkmag = new Color(128, 0, 128); /*table.setDefaultRenderer(Teg.class, new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component label = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if( value == null ) { label.setBackground(Color.white); } else { cellRender(); } return label; } });*/ //table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); //table.setAutoCreateRowSorter(true); //scrollpane.setViewportView(table); Set<String> current = null; Set<String> currentko = null; InputStream is = GeneSet.class.getResourceAsStream("/kegg_pathways"); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = br.readLine(); while (line != null) { if (line.startsWith(">")) { current = new HashSet<>(); currentko = new HashSet<>(); geneset.pathwaymap.put(line.substring(1), current); geneset.pathwaykomap.put(line.substring(1), currentko); } else if (!line.startsWith("K")) { if (current != null) { String str = line.split("[\t ]+")[0]; current.add(str); } } else { if (currentko != null) { String str = line.split("[\t ]+")[0]; currentko.add(str); } } line = br.readLine(); } br.close(); //FileReader fr = new FileReader("/vg454flx/ko2go.txt"); /*is = GeneSet.class.getResourceAsStream("/ko2go.txt"); InputStreamReader isr = new InputStreamReader( is ); br = new BufferedReader( isr ); line = br.readLine(); while (line != null) { String[] split = line.split(" = "); String[] subsplit = split[1].split(" "); Set<String> gos = new HashSet<String>(); for( String go : subsplit ) { gos.add( go ); } ko2go.put( split[0], gos ); line = br.readLine(); } br.close();*/ final TextField textfield = new TextField(); //JComponent topcomp = new JComponent() {}; //topcomp.setLayout(new BorderLayout()); //topcomp.add(scrollpane); textfield.setPrefSize(350, 25); final RadioButton search = new RadioButton("Search"); final RadioButton filter = new RadioButton("Filter"); ToggleGroup bgsf = new ToggleGroup(); search.setToggleGroup(bgsf); filter.setToggleGroup(bgsf); //ButtonGroup bgsf = new ButtonGroup(); //bgsf.add( search ); //bgsf.add( filter ); filter.setSelected(true); //ToolBar topcombo = new ToolBar(); // topcombo. // topcombo.setLayout( new FlowLayout() ); specombo = new ComboBox<>(); combo = new ComboBox<>(); specombo.getItems().add("Select blast species"); combo.getItems().add("Select pathway"); btoolbar.getItems().add(combo); btoolbar.getItems().add(specombo); //topcomp.add(topcombo, BorderLayout.SOUTH); //JComponent ttopcom = new JComponent() {}; //ttopcom.setLayout(new FlowLayout()); /* frame.setVisible( true ); } }; AbstractAction sharenumaction = new AbstractAction("Update share numbers") { @Override public void actionPerformed(ActionEvent e) { Set<String> specs = getSelspec(GeneSetHead.this, specList, null); updateShareNum(specs); } }; AbstractAction importgenesymbolaction = new AbstractAction("Import gene symbols") { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) { try { Map<String,String> env = new HashMap<String,String>(); env.put("create", "true"); Path path = zipfile.toPath(); String uristr = "jar:" + path.toUri(); geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")* ); geneset.zipfilesystem = FileSystems.newFileSystem( geneset.zipuri, env ); Path nf = geneset.zipfilesystem.getPath("/smap_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE); InputStream is = new GZIPInputStream( new FileInputStream( fc.getSelectedFile() ) ); uni2symbol(new InputStreamReader(is), bw, unimap); bw.close(); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); geneset.zipfilesystem.close(); } catch (IOException e1) { e1.printStackTrace(); } } } }; AbstractAction importidmappingaction = new AbstractAction("Id mapping") { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) { try { Map<String,String> env = new HashMap<String,String>(); env.put("create", "true"); Path path = zipfile.toPath(); String uristr = "jar:" + path.toUri(); geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")/ ); geneset.zipfilesystem = FileSystems.newFileSystem( geneset.zipuri, env ); Path nf = geneset.zipfilesystem.getPath("/idmapping_short.dat"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE); InputStream is = new GZIPInputStream( new FileInputStream( fc.getSelectedFile() ) ); if( unimap != null ) unimap.clear(); unimap = idMapping(new InputStreamReader(is), bw, 2, 0, refmap, genmap, gimap); bw.close(); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); geneset.zipfilesystem.close(); } catch (IOException e1) { e1.printStackTrace(); } } } }; final JCheckBoxMenuItem checkbox = new JCheckBoxMenuItem(); checkbox.setAction(new AbstractAction("Sort by location") { @Override public void actionPerformed(ActionEvent e) { Tegeval.locsort = checkbox.isSelected(); } }); AbstractAction saveselAction = new AbstractAction("Save selection") { @Override public void actionPerformed(ActionEvent e) { int[] rr = table.getSelectedRows(); if( rr.length > 0 ) { String val = Integer.toString( table.convertRowIndexToModel(rr[0]) ); for( int i = 1; i < rr.length; i++ ) { val += ","+table.convertRowIndexToModel(rr[i]); } String selname = JOptionPane.showInputDialog("Selection name"); if( comp instanceof Applet ) { try { ((GeneSet)comp).saveSel( selname, val); } catch (Exception e1) { e1.printStackTrace(); } } } } }; JMenuBar menubar = new JMenuBar(); JMenu menu = new JMenu("Functions"); menu.add( importidmappingaction ); menu.add( functionmappingaction ); menu.add( importgenesymbolaction ); menu.add( fetchaction ); menu.add( blast2action ); menu.add( sharenumaction ); menu.addSeparator(); menu.add( checkbox ); menu.add( saveselAction ); menu.addSeparator(); menu.add( genomestataction ); menu.add( selectsharingaction ); menu.add( shuffletreeaction ); menu.add( presabsaction ); menu.add( freqdistaction ); menu.add( gcpaction ); menu.add( matrixaction ); menu.add( pancoreaction ); menu.add( blastaction ); menu.add( koexportaction ); menu.add( genomesizeaction ); menu.add( gcaction ); menu.add( gcskewaction ); menu.add( mltreemapaction ); menu.add( sevenaction ); menu.add( cogaction ); menu.add( genexyplotaction ); menu.add( compareplotaction ); menu.add( syntenygradientaction ); menu.add( codregaction ); menu.add( fetchcoreaction ); menu.add( loadcontiggraphaction ); menu.add( selectflankingaction ); menu.add( showflankingaction ); menu.add( showcontigsaction ); menu.add( showunresolved ); menu.add( genephyl ); menubar.add( menu ); ttopcom.add( menubar ); JMenu view = new JMenu("View"); menubar.add( view ); gb = new JRadioButtonMenuItem( new AbstractAction("Genes") { @Override public void actionPerformed(ActionEvent e) { table.setModel( defaultModel ); } }); view.add( gb ); ggb = new JRadioButtonMenuItem( new AbstractAction("Gene groups") { @Override public void actionPerformed(ActionEvent e) { table.setModel( groupModel ); } }); ButtonGroup bg = new ButtonGroup(); bg.add( gb ); bg.add( ggb ); ggb.setSelected( true ); view.add( ggb );*/ //ttopcom.add( shuffletreebutton ); //ttopcom.add( presabsbutton ); //ttopcom.add(freqdistbutton); //ttopcom.add(matrixbutton); toolbar.getItems().add(textfield); toolbar.getItems().add(search); toolbar.getItems().add(filter); toolbar.getItems().add(label); selcomblocal.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { String key = newValue; if (((GeneSetHead) comp).selectionMap.containsKey(key)) { Set<Integer> val = ((GeneSetHead) comp).selectionMap.get(key); if (val != null) { table.getSelectionModel().clearSelection(); for (int i : val) { //int r = table.convertRowIndexToView(i); table.getSelectionModel().select(i); } } else { System.err.println("null " + key); } } else { System.err.println("no " + key); } }); toolbar.getItems().add(selcomblocal); /*syncolorcomb.addItemListener( new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { String spec = (String)syncolorcomb.getSelectedItem(); //if( spec.length() > 0 ) } });*/ toolbar.getItems().add(searchcolcomb); toolbar.getItems().add(syncolorcomb); //topcomp.add(ttopcom, BorderLayout.NORTH); table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); table.getSelectionModel().selectedItemProperty().addListener(e -> { label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size()); }); gtable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); gtable.getSelectionModel().selectedItemProperty().addListener(e -> { label.setText(gtable.getItems().size() + "/" + gtable.getSelectionModel().getSelectedItems().size()); }); /*JButton but = new JButton(new AbstractAction("Gene sorter") { @Override public void actionPerformed(ActionEvent e) { try { GeneSorter.mynd(genelist, table, "t.scotoductusSA01", contigs); } catch (IOException e1) { e1.printStackTrace(); } } });*/ final TextField ftextfield = new TextField(); btoolbar.getItems().add(ftextfield); ComboBox<String> scombo = new ComboBox(); scombo.getItems().add("5S/8S"); scombo.getItems().add("16S/18S"); scombo.getItems().add("23S/28S"); scombo.getSelectionModel().selectedItemProperty().addListener(e -> { String name = e.toString().split("/")[0]; InputStream iss = GeneSet.class.getResourceAsStream("/all" + name + ".fsa"); InputStreamReader isr = new InputStreamReader(iss); BufferedReader brr = new BufferedReader(isr); JTextArea textarea = new JTextArea(); JScrollPane scrollpane = new JScrollPane(textarea); try { String ln = brr.readLine(); while (ln != null) { textarea.append(ln + "\n"); ln = brr.readLine(); } } catch (IOException e1) { e1.printStackTrace(); } JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true); }); btoolbar.getItems().add(scombo); Button swsearch = new Button("SW Search"); swsearch.setOnAction(e -> { JComponent c = new JComponent() { }; final JProgressBar pb = new JProgressBar(); final JTextArea textarea = new JTextArea(); JButton searchbut = new JButton(new AbstractAction("Blast") { @Override public void actionPerformed(ActionEvent e) { final String fasta = textarea.getText(); final SmithWater sw = new SmithWater(); final InputStream is = GeneSet.class.getResourceAsStream("/allthermus.aa"); new Thread() { public void run() { try { sw.fasta_align(new StringReader(fasta), new InputStreamReader(is), pb); List<SmithWater.ALN> alns = sw.getAlignments(); SmithWater.ALN first = null; int count = 0; String result = ""; Set<String> regnames = new HashSet<String>(); for (SmithWater.ALN aln : alns) { if (first == null) { first = aln; } else if (aln.getScore() < 3.0f * (first.getScore() / 4.0f)) break; result += aln.toString(); regnames.add(aln.getShortDestName()); if (++count == 10) break; } textarea.setText(result); for (Gene g : geneset.genelist) { boolean found = false; Tegeval tv = g.tegeval; if (regnames.contains(tv.name)) { found = true; break; } if (found) { gtable.getSelectionModel().select(g); break; } } } catch (IOException e) { e.printStackTrace(); } } }.start(); } }); c.setLayout(new BorderLayout()); JScrollPane scrollpane = new JScrollPane(textarea); c.add(scrollpane); c.add(pb, BorderLayout.NORTH); c.add(searchbut, BorderLayout.SOUTH); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(c); frame.setSize(400, 300); frame.setVisible(true); }); btoolbar.getItems().add(swsearch); btoolbar.getItems().add(jb); TableColumn<GeneGroup, String> namedesccol = new TableColumn("Desc"); namedesccol.setCellValueFactory(new PropertyValueFactory<>("name")); table.getColumns().add(namedesccol); TableColumn<GeneGroup, String> origincol = new TableColumn("Origin"); origincol.setCellValueFactory(new PropertyValueFactory<>("origin")); table.getColumns().add(origincol); TableColumn<GeneGroup, String> geneidcol = new TableColumn("Genid"); geneidcol.setCellValueFactory(new PropertyValueFactory<>("genid")); table.getColumns().add(geneidcol); TableColumn<GeneGroup, String> refidcol = new TableColumn("Refid"); refidcol.setCellValueFactory(new PropertyValueFactory<>("refid")); table.getColumns().add(refidcol); TableColumn<GeneGroup, String> unidcol = new TableColumn("Unid"); unidcol.setCellValueFactory(new PropertyValueFactory<>("unid")); table.getColumns().add(unidcol); TableColumn<GeneGroup, String> keggidcol = new TableColumn("Keggid"); keggidcol.setCellValueFactory(new PropertyValueFactory<>("keggid")); table.getColumns().add(keggidcol); TableColumn<GeneGroup, String> keggpathcol = new TableColumn("Kegg pathway"); keggpathcol.setCellValueFactory(new PropertyValueFactory<>("keggPathway")); table.getColumns().add(keggpathcol); TableColumn<GeneGroup, String> kocol = new TableColumn("KO"); kocol.setCellValueFactory(new PropertyValueFactory<>("ko")); table.getColumns().add(kocol); TableColumn<GeneGroup, String> ksymbcol = new TableColumn("Ksymbol"); ksymbcol.setCellValueFactory(new PropertyValueFactory<>("ksymbol")); table.getColumns().add(ksymbcol); TableColumn<GeneGroup, String> symbcol = new TableColumn("Symbol"); symbcol.setCellValueFactory(new PropertyValueFactory<>("symbol")); table.getColumns().add(symbcol); TableColumn<GeneGroup, String> konamecol = new TableColumn("KO name"); konamecol.setCellValueFactory(new PropertyValueFactory<>("koname")); table.getColumns().add(konamecol); TableColumn<GeneGroup, String> pbidcol = new TableColumn("Pbid"); pbidcol.setCellValueFactory(new PropertyValueFactory<>("pbid")); table.getColumns().add(pbidcol); TableColumn<GeneGroup, String> eccol = new TableColumn("Ec"); eccol.setCellValueFactory(new PropertyValueFactory<>("ec")); table.getColumns().add(eccol); TableColumn<GeneGroup, String> cognamecol = new TableColumn("Cog name"); cognamecol.setCellValueFactory(new PropertyValueFactory<>("cogname")); table.getColumns().add(cognamecol); TableColumn<GeneGroup, String> cogcol = new TableColumn("Cog"); cogcol.setCellValueFactory(new PropertyValueFactory<>("cog")); table.getColumns().add(cogcol); TableColumn<GeneGroup, String> cogannocol = new TableColumn("Cog annotation"); cogannocol.setCellValueFactory(new PropertyValueFactory<>("coganno")); table.getColumns().add(cogannocol); TableColumn<GeneGroup, String> cogsymbcol = new TableColumn("Cog symbol"); cogsymbcol.setCellValueFactory(new PropertyValueFactory<>("cogsymbol")); table.getColumns().add(cogsymbcol); TableColumn<GeneGroup, String> cazycol = new TableColumn("Cazy"); cazycol.setCellValueFactory(new PropertyValueFactory<>("cazy")); table.getColumns().add(cazycol); TableColumn<GeneGroup, String> prescol = new TableColumn("Present in"); prescol.setCellValueFactory(new PropertyValueFactory<>("presentin")); table.getColumns().add(prescol); TableColumn<GeneGroup, Integer> groupindcol = new TableColumn("Group index"); groupindcol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupIndex")); table.getColumns().add(groupindcol); TableColumn<GeneGroup, Integer> groupcovcol = new TableColumn("Group coverage"); groupcovcol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupCoverage")); table.getColumns().add(groupcovcol); TableColumn<GeneGroup, Integer> groupsizecol = new TableColumn("Group size"); groupsizecol.setCellValueFactory(new PropertyValueFactory<GeneGroup, Integer>("groupGeneCount")); table.getColumns().add(groupsizecol); TableColumn<GeneGroup, String> locprefcol = new TableColumn("Loc pref"); locprefcol.setCellValueFactory(new PropertyValueFactory<>("locpref")); table.getColumns().add(locprefcol); TableColumn<GeneGroup, String> avgcpcol = new TableColumn("Avg GC%"); avgcpcol.setCellValueFactory(new PropertyValueFactory<>("avggcp")); table.getColumns().add(avgcpcol); TableColumn<GeneGroup, String> numloccol = new TableColumn("#Loc"); numloccol.setCellValueFactory(new PropertyValueFactory<>("numloc")); table.getColumns().add(numloccol); TableColumn<GeneGroup, String> numlocgroupcol = new TableColumn("#Loc group"); numlocgroupcol.setCellValueFactory(new PropertyValueFactory<>("numlocgroup")); table.getColumns().add(numlocgroupcol); TableColumn<GeneGroup, ShareNum> sharenumcol = new TableColumn("Sharing number"); sharenumcol.setCellValueFactory(new PropertyValueFactory<>("sharingNumber")); table.getColumns().add(sharenumcol); TableColumn<GeneGroup, String> maxcyccol = new TableColumn("Max cyc"); maxcyccol.setCellValueFactory(new PropertyValueFactory<>("maxCyc")); table.getColumns().add(maxcyccol); TableColumn<Gene, String> gnamedesccol = new TableColumn("Desc"); gnamedesccol.setCellValueFactory(new PropertyValueFactory<>("name")); gtable.getColumns().add(gnamedesccol); TableColumn<Gene, String> gorigincol = new TableColumn("Origin"); gorigincol.setCellValueFactory(new PropertyValueFactory<>("origin")); gtable.getColumns().add(gorigincol); TableColumn<Gene, String> ggeneidcol = new TableColumn("Genid"); ggeneidcol.setCellValueFactory(new PropertyValueFactory<>("genid")); gtable.getColumns().add(ggeneidcol); TableColumn<Gene, String> grefidcol = new TableColumn("Refid"); grefidcol.setCellValueFactory(new PropertyValueFactory<>("refid")); gtable.getColumns().add(grefidcol); TableColumn<Gene, String> gunidcol = new TableColumn("Unid"); gunidcol.setCellValueFactory(new PropertyValueFactory<>("unid")); gtable.getColumns().add(gunidcol); TableColumn<Gene, String> gkeggidcol = new TableColumn("Keggid"); gkeggidcol.setCellValueFactory(new PropertyValueFactory<>("keggid")); gtable.getColumns().add(gkeggidcol); TableColumn<Gene, String> gkeggpathcol = new TableColumn("Kegg pathway"); gkeggpathcol.setCellValueFactory(new PropertyValueFactory<>("keggPathway")); gtable.getColumns().add(gkeggpathcol); TableColumn<Gene, String> gkocol = new TableColumn("KO"); gkocol.setCellValueFactory(new PropertyValueFactory<>("ko")); gtable.getColumns().add(gkocol); TableColumn<Gene, String> gksymbcol = new TableColumn("Ksymbol"); gksymbcol.setCellValueFactory(new PropertyValueFactory<>("ksymbol")); gtable.getColumns().add(gksymbcol); TableColumn<Gene, String> gsymbcol = new TableColumn("Symbol"); gsymbcol.setCellValueFactory(new PropertyValueFactory<>("symbol")); gtable.getColumns().add(gsymbcol); TableColumn<Gene, String> gkonamecol = new TableColumn("KO name"); gkonamecol.setCellValueFactory(new PropertyValueFactory<>("koname")); gtable.getColumns().add(gkonamecol); TableColumn<Gene, String> gpbidcol = new TableColumn("Pbid"); gpbidcol.setCellValueFactory(new PropertyValueFactory<>("pbid")); gtable.getColumns().add(gpbidcol); TableColumn<Gene, String> geccol = new TableColumn("Ec"); geccol.setCellValueFactory(new PropertyValueFactory<>("ec")); gtable.getColumns().add(geccol); TableColumn<Gene, String> gcognamecol = new TableColumn("Cog name"); gcognamecol.setCellValueFactory(new PropertyValueFactory<>("cogname")); gtable.getColumns().add(gcognamecol); TableColumn<Gene, String> gcogcol = new TableColumn("Cog"); gcogcol.setCellValueFactory(new PropertyValueFactory<>("cog")); gtable.getColumns().add(gcogcol); TableColumn<Gene, String> gcogannocol = new TableColumn("Cog annotation"); gcogannocol.setCellValueFactory(new PropertyValueFactory<>("coganno")); gtable.getColumns().add(gcogannocol); TableColumn<Gene, String> gcogsymbcol = new TableColumn("Cog symbol"); gcogsymbcol.setCellValueFactory(new PropertyValueFactory<>("cogsymbol")); gtable.getColumns().add(gcogsymbcol); TableColumn<Gene, String> gcazycol = new TableColumn("Cazy"); gcazycol.setCellValueFactory(new PropertyValueFactory<>("cazy")); gtable.getColumns().add(gcazycol); TableColumn<Gene, String> gprescol = new TableColumn("Present in"); gprescol.setCellValueFactory(new PropertyValueFactory<>("presentin")); gtable.getColumns().add(gprescol); TableColumn<Gene, Integer> ggroupindcol = new TableColumn("Group index"); ggroupindcol.setCellValueFactory(new PropertyValueFactory<>("groupIndex")); gtable.getColumns().add(ggroupindcol); TableColumn<Gene, Integer> ggroupcovcol = new TableColumn("Group coverage"); ggroupcovcol.setCellValueFactory(new PropertyValueFactory<>("groupCoverage")); gtable.getColumns().add(ggroupcovcol); TableColumn<Gene, Integer> ggroupsizecol = new TableColumn("Group size"); ggroupsizecol.setCellValueFactory(new PropertyValueFactory<>("groupGeneCount")); gtable.getColumns().add(ggroupsizecol); TableColumn<Gene, String> glocprefcol = new TableColumn("Loc pref"); glocprefcol.setCellValueFactory(new PropertyValueFactory<>("locpref")); gtable.getColumns().add(glocprefcol); TableColumn<Gene, String> gavgcpcol = new TableColumn("Avg GC%"); gavgcpcol.setCellValueFactory(new PropertyValueFactory<>("avggcp")); gtable.getColumns().add(gavgcpcol); TableColumn<Gene, String> gnumloccol = new TableColumn("#Loc"); gnumloccol.setCellValueFactory(new PropertyValueFactory<>("numloc")); gtable.getColumns().add(gnumloccol); TableColumn<Gene, String> gnumlocgroupcol = new TableColumn("#Loc group"); gnumlocgroupcol.setCellValueFactory(new PropertyValueFactory<>("numlocgroup")); gtable.getColumns().add(gnumlocgroupcol); TableColumn<Gene, ShareNum> gsharenumcol = new TableColumn("Sharing number"); gsharenumcol.setCellValueFactory(new PropertyValueFactory<>("sharingNumber")); gtable.getColumns().add(gsharenumcol); TableColumn<Gene, String> gmaxcyccol = new TableColumn("Max cyc"); gmaxcyccol.setCellValueFactory(new PropertyValueFactory<>("maxCyc")); gtable.getColumns().add(gmaxcyccol); /*if( upper != null ) { SwingUtilities.invokeLater( new Runnable() { public void run() { //upper.setContent( botcomp ); lower.setContent( topcomp ); } }); } else { splitpane.setBottomComponent(botcomp); splitpane.setTopComponent(topcomp); } groupModel = new TableModel() { @Override public int getRowCount() { return geneset.allgenegroups == null ? 0 : geneset.allgenegroups.size(); } @Override public int getColumnCount() { return 32+geneset.specList.size(); } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "Desc"; } else if (columnIndex == 1) { return "Origin"; } else if (columnIndex == 2) { return "Genid"; } else if (columnIndex == 3) { return "Refid"; } else if (columnIndex == 4) { return "Unid"; } else if (columnIndex == 5) { return "Keggid"; } else if (columnIndex == 6) { return "Kegg pathway"; } else if (columnIndex == 7) { return "KO"; } else if (columnIndex == 8) { return "KSymbol"; } else if (columnIndex == 9) { return "Symbol"; } else if (columnIndex == 10) { return "KO name"; } else if (columnIndex == 11) { return "Pdbid"; } else if (columnIndex == 12) { return "EC"; } else if (columnIndex == 13) { return "Cog name"; } else if (columnIndex == 14) { return "Cog"; } else if (columnIndex == 15) { return "Cog annotation"; } else if (columnIndex == 16) { return "Cog symbol"; } else if (columnIndex == 17) { return "Cazy"; } else if (columnIndex == 18) { return "Present in"; } else if (columnIndex == 19) { return "Group index"; } else if (columnIndex == 20) { return "Group coverage"; } else if (columnIndex == 21) { return "Group size"; } else if (columnIndex == 22) { return "Locprev"; } else if (columnIndex == 23) { return "Avg GC%"; } else if (columnIndex == 24) { return "# of locus"; } else if (columnIndex == 25) { return "# of loc in group"; } else if (columnIndex == 26) { return "max length"; } else if (columnIndex == 27) { return "sharing number"; } else if (columnIndex == 28) { return "# Cyc"; } else if (columnIndex == 29) { return "16S Corr"; } else if (columnIndex == 30) { return "SingalP"; } else if (columnIndex == 31) { return "TransM"; } else { String spec = geneset.specList.get( columnIndex - 32 ); if( spec != null ) { if( spec.toLowerCase().contains("thermus") ) { int i = spec.indexOf('_'); return spec.substring(i+1, spec.length()); } else return spec; } return ""; } /* else if (columnIndex == 19) { return "T.tSG0"; } else if (columnIndex == 20) { return "T.tJL18"; } else if (columnIndex == 21) { return "T.tHB8"; } else if (columnIndex == 22) { return "T.tHB27"; } else if (columnIndex == 23) { return "T.scotoSA01"; } else if (columnIndex == 24) { return "T.aqua"; } else if (columnIndex == 25) { return "T.eggert"; } else if (columnIndex == 26) { return "T.island"; } else if (columnIndex == 27) { return "T.antan"; } else if (columnIndex == 28) { return "T.scoto346"; } else if (columnIndex == 29) { return "T.scoto1572"; } else if (columnIndex == 30) { return "T.scoto252"; } else if (columnIndex == 31) { return "T.scoto2101"; } else if (columnIndex == 32) { return "T.scoto2127"; } else if (columnIndex == 33) { return "T.scoto4063"; } else if (columnIndex == 34) { return "T.oshimai"; } else if (columnIndex == 35) { return "T.brockianus"; } else if (columnIndex == 36) { return "T.filiformis"; } else if (columnIndex == 37) { return "T.igniterrae"; } else if (columnIndex == 38) { return "T.kawarayensis"; } else if (columnIndex == 39) { return "T.arciformis"; } else if (columnIndex == 40) { return "T.spCCB"; } else if (columnIndex == 41) { return "T.spRLM"; } else if (columnIndex == 42) { return "T.oshimaiJL2"; } else if (columnIndex == 43) { return "MT.silvianus"; } else if (columnIndex == 44) { return "MT.ruber"; } else if (columnIndex == 45) { return "M.hydro"; } else if (columnIndex == 46) { return "O.profu"; }* //return ""; } @Override public Class<?> getColumnClass(int columnIndex) { if( columnIndex == 19 || columnIndex == 20 || columnIndex == 28 ) return Double.class; else if(columnIndex == 10 || (columnIndex >= 17 && columnIndex <= 28) ) return Integer.class; else if (columnIndex >= 32) return Teg.class; return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { GeneGroup gg = geneset.allgenegroups.get(rowIndex); if (columnIndex == 0) { return gg.getCommonName(); } else if (columnIndex == 1) { return gg.getCommonOrigin(); } else if (columnIndex == 2) { return null;//gene.genid; } else if (columnIndex == 3) { return gg.getCommonRefId(); } else if (columnIndex == 4) { return gg.getCommonUnId(); } else if (columnIndex == 5) { return gg.getKeggid(); } else if (columnIndex == 6) { return gg.getKeggPathway(); } else if (columnIndex == 7) { return gg.getCommonKO(); } else if (columnIndex == 8) { return gg.getCommonKSymbol(); } else if (columnIndex == 9) { return gg.getCommonSymbol(); //ko2name != null ? ko2name.get( gg.getCommonKO() ) : null; } else if (columnIndex == 10) { String ret = geneset.ko2name != null ? geneset.ko2name.get( gg.getCommonKO() ) : null; if( ret == null ) { String symbol = gg.getCommonSymbol(); if( symbol != null ) { if( symbol.length() <= 5 ) ret = symbol; } } return ret; } else if (columnIndex == 11) { return null;//gene.pdbid; } else if (columnIndex == 12) { return gg.getCommonEc(); } else if (columnIndex == 13) { Cog cog = gg.getCommonCog( geneset.cogmap ); if( cog != null ) { if( cog.name == null ) cog.name = geneset.cogidmap.get( cog.id ); return cog.name; } return null; } else if (columnIndex == 14) { Cog cog = gg.getCommonCog( geneset.cogmap ); return cog != null ? cog.id : null; } else if (columnIndex == 15) { Cog cog = gg.getCommonCog( geneset.cogmap ); return cog != null ? cog.annotation : null; } else if (columnIndex == 16) { Cog cog = gg.getCommonCog( geneset.cogmap ); return cog != null ? cog.genesymbol : null; } else if (columnIndex == 17) { return gg.getCommonCazy( geneset.cazymap ); } else if (columnIndex == 18) { return gg.getSpecies().size(); } else if (columnIndex == 19) { return gg.groupIndex; } else if (columnIndex == 20) { return gg.getGroupCoverage(); } else if (columnIndex == 21) { return gg.getGroupGeneCount(); } else if (columnIndex == 22) { return null;//gene.proximityGroupPreservation; } else if (columnIndex == 23) { return gg.getAvgGCPerc(); } else if (columnIndex == 24) { return gg.genes.size(); } else if (columnIndex == 25) { return gg.getGroupCount(); } else if (columnIndex == 26) { return gg.getMaxLength(); } else if (columnIndex == 27) { return geneset.specset.get( gg.getSpecies() ); } else if (columnIndex == 28) { return gg.getMaxCyc(); } else if (columnIndex == 29) { return gg.getGroupCoverage() == 39 && gg.getGroupCount() == 39 ? 0 : -1; } else if (columnIndex == 30) { return gg.getCommonSignalP(); } else if (columnIndex == 31) { return gg.getCommonTransM(); } else { String spec = geneset.specList.get( columnIndex - 32 ); Teginfo ret = geneset.getGroupTes( gg, spec ); return ret; //return null; } //return columnIndex >= 11 ? null : ""; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) {} @Override public void addTableModelListener(TableModelListener l) {} @Override public void removeTableModelListener(TableModelListener l) {} }; defaultModel = new TableModel() { @Override public int getRowCount() { int gs = geneset.genelist.size(); return gs; } @Override public int getColumnCount() { return 26+geneset.specList.size(); } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) { return "Desc"; } else if (columnIndex == 1) { return "Origin"; } else if (columnIndex == 2) { return "Genid"; } else if (columnIndex == 3) { return "Refid"; } else if (columnIndex == 4) { return "Unid"; } else if (columnIndex == 5) { return "Keggid"; } else if (columnIndex == 6) { return "KOid"; } else if (columnIndex == 7) { return "KSymbol"; } else if (columnIndex == 8) { return "Symbol"; } else if (columnIndex == 9) { return "KOname"; } else if (columnIndex == 10) { return "Pdbid"; } else if (columnIndex == 11) { return "ecid"; } else if (columnIndex == 12) { return "COG"; } else if (columnIndex == 13) { return "COG name"; } else if (columnIndex == 14) { return "Present in"; } else if (columnIndex == 15) { return "Group index"; } else if (columnIndex == 16) { return "Group coverage"; } else if (columnIndex == 17) { return "Group size"; } else if (columnIndex == 18) { return "Locprev"; } else if (columnIndex == 19) { return "Avg GC%"; } else if (columnIndex == 20) { return "# of locus"; } else if (columnIndex == 21) { return "# of loc in group"; } else if (columnIndex == 22) { return "max length"; } else if (columnIndex == 23) { return "sharing number"; } else if (columnIndex == 24) { return "# Cyc"; } else if (columnIndex == 25) { return "16S Corr"; } else { return geneset.specList.get( columnIndex - 26 ); } /*else if (columnIndex == 19) { return "T.tSG0"; } else if (columnIndex == 20) { return "T.tJL18"; } else if (columnIndex == 21) { return "T.tHB8"; } else if (columnIndex == 22) { return "T.tHB27"; } else if (columnIndex == 23) { return "T.scotoSA01"; } else if (columnIndex == 24) { return "T.aqua"; } else if (columnIndex == 25) { return "T.eggert"; } else if (columnIndex == 26) { return "T.island"; } else if (columnIndex == 27) { return "T.antan"; } else if (columnIndex == 28) { return "T.scoto346"; } else if (columnIndex == 29) { return "T.scoto1572"; } else if (columnIndex == 30) { return "T.scoto252"; } else if (columnIndex == 31) { return "T.scoto2101"; } else if (columnIndex == 32) { return "T.scoto2127"; } else if (columnIndex == 33) { return "T.scoto4063"; } else if (columnIndex == 34) { return "T.oshimai"; } else if (columnIndex == 35) { return "T.brockianus"; } else if (columnIndex == 36) { return "T.filiformis"; } else if (columnIndex == 37) { return "T.igniterrae"; } else if (columnIndex == 38) { return "T.kawarayensis"; } else if (columnIndex == 39) { return "T.arciformis"; } else if (columnIndex == 40) { return "T.spCCB"; } else if (columnIndex == 41) { return "T.spRLM"; } else if (columnIndex == 42) { return "T.oshimaiJL2"; } else if (columnIndex == 43) { return "MT.silvianus"; } else if (columnIndex == 44) { return "MT.ruber"; } else if (columnIndex == 45) { return "M.hydro"; } else if (columnIndex == 46) { return "O.profu"; }* } @Override public Class<?> getColumnClass(int columnIndex) { if( columnIndex == 16 || columnIndex == 19 || columnIndex == 25 ) return Double.class; else if(columnIndex >= 13 && columnIndex <= 24) return Integer.class; else if (columnIndex >= 26) return Teg.class; return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Gene gene = geneset.genelist.get(rowIndex); if (columnIndex == 0) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gene.getGeneGroup().getCommonName() : null; } else if (columnIndex == 1) { return gene.getSpecies(); } else if (columnIndex == 2) { return gene.genid; } else if (columnIndex == 3) { return gene.refid; } else if (columnIndex == 4) { return gene.uniid; } else if (columnIndex == 5) { return gene.keggid; } else if (columnIndex == 6) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonKO() : null; } else if (columnIndex == 7) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonKSymbol() : null; } else if (columnIndex == 8) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonSymbol() : null; //gene.symbol } else if (columnIndex == 9) { GeneGroup gg = gene.getGeneGroup(); return gg != null ? gg.getCommonKOName( geneset.ko2name ) : null; } else if (columnIndex == 10) { return gene.pdbid; } else if (columnIndex == 11) { return gene.ecid; } else if (columnIndex == 12) { Cog cog = gene.getGeneGroup() != null ? gene.getGeneGroup().getCommonCog( geneset.cogmap ) : null; if( cog != null ) return cog.id; return null; } else if (columnIndex == 13) { Cog cog = gene.getGeneGroup() != null ? gene.getGeneGroup().getCommonCog( geneset.cogmap ) : null; if( cog != null ) return cog.name; return null; } else if (columnIndex == 14) { return gene.getGeneGroup().getSpecies().size(); } else if (columnIndex == 15) { return gene.getGroupIndex(); } else if (columnIndex == 16) { return gene.getGroupCoverage(); } else if (columnIndex == 17) { return gene.getGroupGenCount(); } else if (columnIndex == 18) { return gene.proximityGroupPreservation; } else if (columnIndex == 19) { return gene.getGCPerc(); } else if (columnIndex == 20) { /*int val = 0; for (String str : gene.species.keySet()) { val += gene.species.get(str).tset.size(); }* return 1; } else if (columnIndex == 21) { return gene.getGroupCount(); } else if (columnIndex == 22) { return gene.getMaxLength(); } else if (columnIndex == 23) { GeneGroup gg = gene.getGeneGroup(); if( gg != null && gg.getSpecies() != null ) { return geneset.specset.get( gg.getSpecies() ); } return null; } else if (columnIndex == 24) { gene.getMaxCyc(); } else if (columnIndex == 25) { return gene.getGroupCoverage() == 35 && gene.getGroupCount() == 35 ? gene.corr16s : -1; } else { /*String spec = specList.get( columnIndex-26 ); /*if( spec.contains("timidus") ) { System.err.println(); }* //Teginfo set = gene.species.equals(spec) ? gene.teginfo : null; if( gene.getSpecies().equals( spec ) ) { return gene.tegeval; } else { return gene.getGeneGroup().species.get( spec ); }* return null; } return columnIndex >= 17 ? null : ""; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) {} @Override public void addTableModelListener(TableModelListener l) {} @Override public void removeTableModelListener(TableModelListener l) {} }; table.setModel( groupModel );*/ //table.setModel( defaultModel ); /* * Comparator<Tegeval> wrapMe = new Comparator<Tegeval>() { public int * compare(Tegeval o1, Tegeval o2) { return o1.compareTo(o2); } }; * DefaultRowSorter<TableModel, Integer> rowsorter = * (DefaultRowSorter<TableModel,Integer>)table.getRowSorter(); for( int * i = 10; i < 23; i++ ) { rowsorter.setComparator(i, * NullComparators.atEnd(wrapMe)); } */ /*table.getRowSorter().addRowSorterListener( new RowSorterListener() { @Override public void sorterChanged(RowSorterEvent e) { for (String cstr : geneset.contigmap.keySet()) { Sequence c = geneset.contigmap.get(cstr); //c.count = 0; c.loc = 0.0; } if( table.getModel() == defaultModel ) { for (Gene g : geneset.genelist) { Tegeval tv = g.tegeval; // int first = tv.cont.indexOf('_'); // int sec = tv.cont.indexOf('_',first+1); Sequence cont = tv.getContshort(); // tv.cont.substring(0,sec); if( cont != null && geneset.contigmap.containsKey(cont.getName()) ) { Sequence c = geneset.contigmap.get(cont.getName()); //c.count++; int val = table.convertRowIndexToView(g.index); c.loc += (double) val; } } } for( JSplitPane gsplitpane : splitpaneList ) { gsplitpane.repaint(); } } });*/ ftable = upper; ftable.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); /*ftable = new JTable() { public String getToolTipText(MouseEvent me) { Point p = me.getPoint(); int r = rowAtPoint(p); int c = columnAtPoint(p); if (r >= 0 && r < super.getRowCount()) { Object ret = super.getValueAt(r, c); if (ret != null) { return ret.toString(); // super.getToolTipText( me ); } } return ""; } };*/ ContextMenu fpopup = new ContextMenu(); MenuItem amigo = new MenuItem("Amigo lookup"); amigo.setOnAction(e -> { String go = ftable.getSelectionModel().getSelectedItem().getGo(); try { // GeneSetHead.this.getAppletContext(). Desktop.getDesktop() .browse(new URI("http://amigo.geneontology.org/cgi-bin/amigo/term_details?term=" + go)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(amigo); MenuItem keggl = new MenuItem("KEGG lookup"); keggl.setOnAction(e -> { String kegg = ftable.getSelectionModel().getSelectedItem().getKegg(); try { Desktop.getDesktop().browse(new URI("http://www.genome.jp/dbget-bin/www_bget?rn:" + kegg)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(keggl); MenuItem ecl = new MenuItem("EC lookup"); ecl.setOnAction(e -> { String ec = ftable.getSelectionModel().getSelectedItem().getEc(); try { Desktop.getDesktop().browse(new URI("http://enzyme.expasy.org/EC/" + ec)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(ecl); fpopup.getItems().add(new SeparatorMenuItem()); MenuItem excelreport = new MenuItem("Excel report"); excelreport.setOnAction(e -> { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("enzyme"); int k = 0; for (Function f : ftable.getSelectionModel().getSelectedItems()) { //String ec = (String)ftable.getValueAt(r, 1); //String go = (String)ftable.getValueAt(r, 0); //int i = ftable.getSelectionModel().convertRowIndexToModel(r); //Function f = geneset.funclist.get(i); for (GeneGroup gg : f.getGeneGroups()) { for (String spec : gg.getSpecies()) { Teginfo ti = gg.getGenes(spec); Row row = sheet.createRow(k++); Cell ecell = row.createCell(0); ecell.setCellValue("EC:" + f.getEc()); Cell ncell = row.createCell(1); ncell.setCellValue(f.getName()); Cell spell = row.createCell(2); spell.setCellValue(spec); Cell seqcell = row.createCell(3); seqcell.setCellValue(ti.tset.size()); } /*for( Gene g :gg.genes ) { Row row = sheet.createRow(k++); Cell ecell = row.createCell(0); ecell.setCellValue( "EC:"+f.ec ); Cell ncell = row.createCell(1); ncell.setCellValue( f.name ); Cell spell = row.createCell(2); spell.setCellValue( g.getSpecies() ); Cell seqcell = row.createCell(3); seqcell.setCellValue( g.tegeval.getAlignedSequence().toString() ); }*/ } sheet.createRow(k++); } try { Path tempfile = Files.createTempFile("enzyme", ".xlsx"); OutputStream os = Files.newOutputStream(tempfile); workbook.write(os); os.close(); Desktop.getDesktop().open(tempfile.toFile()); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } }); fpopup.getItems().add(excelreport); ftable.setContextMenu(fpopup); ContextMenu popup = new ContextMenu(); MenuItem splitaction = new MenuItem("Split"); splitaction.setOnAction(e -> { Dialog<Set<GeneGroup>> dialog = new Dialog<>(); dialog.setResizable(true); GridPane grid = new GridPane(); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(20, 20, 10, 10)); TextField len = new TextField(); len.setPromptText("0.5"); TextField id = new TextField(); id.setPromptText("0.5"); grid.add(new Label("%Length:"), 0, 0); grid.add(len, 1, 0); grid.add(new Label("%Identity:"), 0, 1); grid.add(id, 1, 1); final ListView<GeneGroup> list = new ListView<>(); list.setPrefWidth(400); grid.add(list, 0, 2, 2, 1); final GeneGroup gg = table.getSelectionModel().getSelectedItem(); list.setItems(FXCollections.singletonObservableList(gg)); Label groupsize = new Label("" + gg.genes.size()); grid.add(groupsize, 0, 3, 2, 1); len.textProperty().addListener((observable, oldValue, newValue) -> { if (!newValue.equals(oldValue)) { double d = 0; try { d = Double.parseDouble(newValue); } catch (Exception ex) { } if (d > 0) { Set<GeneGroup> ggmap = new HashSet<>(); Map<String, Integer> blosumMap = JavaFasta.getBlosumMap(false); for (Gene gene : gg.genes) { if (ggmap.stream().flatMap(f -> f.genes.stream()).noneMatch(p -> gene == p)) { Set<Gene> ggset = new HashSet<>(); Sequence seq1 = gene.tegeval.getAlignedSequence(); for (Gene cgene : gg.genes) { Sequence seq2 = cgene.tegeval.getAlignedSequence(); int[] tscore = GeneCompare.blosumValue(seq1, seq1, seq2, blosumMap); int sscore = GeneCompare.blosumValue(seq1, seq2, blosumMap); double dval = (double) (sscore - tscore[1]) / (double) (tscore[0] - tscore[1]); if (dval > d) { ggset.add(cgene); } } System.err.println(ggset.size()); Set<GeneGroup> osubgg = ggmap.stream().filter(f -> { Set<Gene> gs = new HashSet<>(ggset); gs.retainAll(f.genes); return gs.size() > 0; }).collect(Collectors.toSet()); GeneGroup subgg; if (osubgg.size() > 0) { Iterator<GeneGroup> git = osubgg.iterator(); subgg = git.next(); while (git.hasNext()) { GeneGroup remgg = git.next(); subgg.addGenes(remgg.genes); ggmap.remove(remgg); } } else { subgg = new GeneGroup(); subgg.setCogMap(gg.getCogMap()); subgg.setKonameMap(gg.getKonameMap()); subgg.setSpecSet(gg.getSpecSet()); ggmap.add(subgg); } subgg.addGenes(ggset); } } Set<GeneGroup> sgg = ggmap.stream().collect(Collectors.toSet()); List<GeneGroup> lgg = new ArrayList(sgg); list.setItems(FXCollections.observableList(lgg)); dialog.setResultConverter(param -> sgg); } } }); dialog.getDialogPane().setContent(grid); dialog.getDialogPane().getButtonTypes().add(ButtonType.OK); dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL); Optional<Set<GeneGroup>> ogg = dialog.showAndWait(); ogg.ifPresent(c -> { geneset.allgenegroups.remove(gg); geneset.allgenegroups.addAll(c); Map<String, String> env = new HashMap<>(); env.put("create", "true"); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { Files.walk(root).filter(f -> f.toString().startsWith("/aligned")) .filter(f -> f.toString().endsWith(".aa")).filter(f -> { String filename = f.getFileName().toString(); return gg.genes.stream().anyMatch(g -> { String fnid = filename.substring(0, filename.length() - 3); return g.name.equals(fnid); }); }).forEach(p -> { try { Files.deleteIfExists(p); } catch (IOException e1) { e1.printStackTrace(); } }); /*for( Gene g : gg.genes ) { if( g.keggpathway != null ) { String sub = g.keggpathway.substring(0,3); Path subf = root.resolve(sub); if( Files.exists(subf) ) { String[] split = g.keggpathway.split(" "); for( String s : split ) { Path pimg = subf.resolve(s+".png"); if( Files.exists(pimg) ) { showKeggPathway( sub, pimg ); } } } } }*/ final Path p = root.resolve("/aligned"); c.stream().forEach(fgg -> { Path np = p.resolve(fgg.genes.iterator().next().getName()); try { Writer w = Files.newBufferedWriter(np); fgg.getFasta(w, false); w.close(); } catch (IOException e1) { e1.printStackTrace(); } }); break; } geneset.zipfilesystem.close(); } catch (Exception ex) { ex.printStackTrace(); } }); }); popup.getItems().add(splitaction); MenuItem joinaction = new MenuItem("Join"); popup.getItems().add(joinaction); popup.getItems().add(new SeparatorMenuItem()); MenuItem showkegg = new MenuItem("Show KEGG pathway"); showkegg.setOnAction(e -> { GeneGroup gg = table.getSelectionModel().getSelectedItem(); Map<String, String> env = new HashMap<>(); env.put("create", "true"); /*String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create( uristr /*.replace("file://", "file:")* ); final List<Path> lbi = new ArrayList<>();*/ boolean shown = false; try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (Gene g : gg.genes) { if (g.keggpathway != null) { String sub = g.keggpathway.substring(0, 3); Path subf = root.resolve(sub); if (Files.exists(subf)) { String[] split = g.keggpathway.split(" "); for (String s : split) { Path pimg = subf.resolve(s + ".png"); if (Files.exists(pimg)) { showKeggPathway(sub, pimg); shown = true; break; } } } } } break; } geneset.zipfilesystem.close(); } catch (Exception ex) { ex.printStackTrace(); } if (!shown) { for (Gene g : gg.genes) { if (g.keggpathway != null) { String[] keggsplit = g.keggpathway.split(";"); Arrays.stream(keggsplit).map(s -> s.split(":")[0]).findFirst().ifPresent(c -> { try { Desktop.getDesktop().browse( URI.create("http://www.genome.jp/dbget-bin/www_bget?map" + c.substring(2))); } catch (IOException e1) { e1.printStackTrace(); } }); } } } }); popup.getItems().add(showkegg); MenuItem plasmid = new MenuItem("Plasmid"); plasmid.setOnAction(e -> { Gene g = gtable.getSelectionModel().getSelectedItem(); Sequence contig = g.tegeval.getContshort(); String contigstr = contig.toString(); contig.plasmid = !geneset.plasmids.contains(contigstr); if (contig.plasmid) geneset.plasmids.add(contigstr); else geneset.plasmids.remove(contigstr); try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); //fs = FileSystems.newFileSystem( uri, env ); //FileSystem fs = FileSystems.newFileSystem(uri, env); ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (String contigname : geneset.plasmids) { baos.write((contigname + "\n").getBytes()); } Path nf = geneset.zipfilesystem.getPath("/plasmids.txt"); long bl = Files.copy(new ByteArrayInputStream(baos.toByteArray()), nf, StandardCopyOption.REPLACE_EXISTING); //System.err.println( "eeerm " + bl ); geneset.zipfilesystem.close(); /*Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.CREATE); for( String phage : phageset ) { writer.write( phage + "\n" ); } writer.close();*/ //writer.write("hello"); } catch (IOException e1) { e1.printStackTrace(); } }); popup.getItems().add(plasmid); MenuItem designate = new MenuItem("Designate"); designate.setOnAction(e -> { SwingUtilities.invokeLater(() -> { JComboBox<String> descombo = new JComboBox<>( geneset.deset.toArray(new String[geneset.deset.size()])); descombo.setEditable(true); JOptionPane.showMessageDialog(GeneSetHead.this, descombo); String val = descombo.getSelectedItem().toString(); geneset.deset.add(val); for (Gene g : gtable.getSelectionModel().getSelectedItems()) { g.tegeval.designation = val; if (g.id != null) { geneset.designations.put(g.id, val); } else { System.err.println(g.refid); } //ta.append( g.tegeval.id + "\n" ); } try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); //fs = FileSystems.newFileSystem( uri, env ); //FileSystem fs = FileSystems.newFileSystem(uri, env); ByteArrayOutputStream baos = new ByteArrayOutputStream(); for (String geneid : geneset.designations.keySet()) { String design = geneset.designations.get(geneid); baos.write((geneid + "\t" + design + "\n").getBytes()); } Path nf = geneset.zipfilesystem.getPath("/designations.txt"); long bl = Files.copy(new ByteArrayInputStream(baos.toByteArray()), nf, StandardCopyOption.REPLACE_EXISTING); //System.err.println( "eeerm " + bl ); geneset.zipfilesystem.close(); /*Writer writer = Files.newBufferedWriter(nf, StandardCharsets.UTF_8, StandardOpenOption.CREATE); for( String phage : phageset ) { writer.write( phage + "\n" ); } writer.close();*/ //writer.write("hello"); } catch (IOException e1) { e1.printStackTrace(); } /*JFrame frame = new JFrame("Ids"); frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE ); frame.setSize(800, 600); JTextArea ta = new JTextArea(); JScrollPane sp = new JScrollPane( ta ); frame.add( sp ); frame.setVisible( true );*/ }); }); popup.getItems().add(designate); MenuItem koname = new MenuItem("KO to name"); koname.setOnAction(e -> { Set<String> koids = new HashSet<>(); for (Gene g : geneset.genelist) { if (g.koid != null && g.koid.length() > 0 && !(geneset.ko2name != null && geneset.ko2name.containsKey(g.koid))) koids.add(g.koid); } try { Map<String, String> ko2name = new HashMap<>(); int cnt = 0; for (String koid : koids) { URL url = new URL("http://www.kegg.jp/dbget-bin/www_bget?ko:" + koid); InputStream is0 = url.openStream(); StringBuilder sb = new StringBuilder(); BufferedReader br0 = new BufferedReader(new InputStreamReader(is0)); String line0 = br0.readLine(); while (line0 != null) { sb.append(line0); line0 = br0.readLine(); } br0.close(); int i = sb.indexOf("<nobr>Name</nobr>"); if (i != -1) { int k = sb.indexOf(":hidden\">"); if (k != -1) { k = sb.indexOf(":hidden\">", k + 9); if (k != -1) { String koname0 = sb.substring(k + 9, sb.indexOf("<br>", k)); ko2name.put(koid, koname0); System.err.println(koid + "\t" + koname0); } } } System.err.println(ko2name.size() + " " + koids.size()); //if( cnt++ > 20 ) break; } FileWriter fw = new FileWriter("~ko2name.txt"); for (String koid : ko2name.keySet()) { fw.write(koid + "\t" + ko2name.get(koid) + "\n"); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } }); popup.getItems().add(koname); popup.getItems().add(new SeparatorMenuItem()); MenuItem genegainloss = new MenuItem("Gene gain/loss"); genegainloss.setOnAction(e -> { Map<Node, List<GeneGroup>> nodeGainMap = new HashMap<>(); Map<Node, List<GeneGroup>> nodeLossMap = new HashMap<>(); /*String treestr = ""; JFileChooser fc = new JFileChooser(); if( fc.showOpenDialog( applet ) == JFileChooser.APPROVE_OPTION ) { File file = fc.getSelectedFile(); try { byte[] bb = Files.readAllBytes( Paths.get(file.toURI()) ); treestr = new String( bb ); } catch (IOException e1) { e1.printStackTrace(); } }*/ Serifier serifier = getConcatenatedSequences(false, true); String tree = serifier.getFastTree(serifier.lseq, geneset.user, false); TreeUtil tu = new TreeUtil(); Node n = tu.parseTreeRecursive(tree, false); TableModel model = new TableModel() { @Override public int getRowCount() { return geneset.getSpecies().size(); } @Override public int getColumnCount() { return 1; } @Override public String getColumnName(int columnIndex) { return null; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return geneset.getSpecies().get(rowIndex); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; JTable table = new JTable(model); table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane scroll = new JScrollPane(table); FlowLayout flowlayout = new FlowLayout(); JComponent c = new JComponent() { }; c.setLayout(flowlayout); c.add(scroll); JOptionPane.showMessageDialog(comp, c); List<String> rootgroup = new ArrayList<>(); int[] rr = table.getSelectedRows(); for (int r : rr) { rootgroup.add((String) table.getValueAt(r, 0)); } //String[] sobj = {"mt.ruber", "mt.silvanus", "o.profundus", "m.hydrothermalis"}; Node newnode = tu.getParent(n, new HashSet<>(rootgroup)); tu.rerootRecur(n, newnode); File f = new File("/home/sigmar/gain_list.txt"); try { PrintStream ps = new PrintStream(f); geneset.assignGain(newnode, nodeGainMap, ps); ps.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } f = new File("/home/sigmar/loss_list.txt"); try { PrintStream ps = new PrintStream(f); geneset.assignLoss(newnode, nodeLossMap, ps); ps.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } }); popup.getItems().add(genegainloss); MenuItem concattree = new MenuItem("Concatenate tree"); concattree.setOnAction(e -> { Serifier serifier = getConcatenatedSequences(false, true); boolean succ = true; if (comp instanceof Applet) { try { JSObject win = JSObject.getWindow((Applet) comp); StringWriter sw = new StringWriter(); serifier.writeFasta(serifier.lseq, sw, null); sw.close(); win.call("fasttree", new Object[] { sw.toString() }); } catch (NoSuchMethodError | Exception e1) { e1.printStackTrace(); succ = false; } } /*if( !succ ) { String tree = serifier.getFastTree(); if( cs.connections().size() > 0 ) { cs.sendToAll( tree ); } else if( Desktop.isDesktopSupported() ) { cs.message = tree; //String uristr = "http://webconnectron.appspot.com/Treedraw.html?tree="+URLEncoder.encode( tree, "UTF-8" ); String uristr = "http://webconnectron.appspot.com/Treedraw.html?ws=127.0.0.1:8887"; try { Desktop.getDesktop().browse( new URI(uristr) ); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } } System.err.println( tree ); }*/ showAlignedSequences(comp, serifier); }); popup.getItems().add(concattree); MenuItem majocons = new MenuItem("Majority rule consensus"); majocons.setOnAction(e -> { Serifier serifier = new Serifier(); Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); if (!isGeneview()) { genegroups.addAll(table.getSelectionModel().getSelectedItems()); } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { genegroups.add(gg.getGeneGroup()); } } TreeUtil treeutil = new TreeUtil(); Map<Set<String>, NodeSet> nmap = new HashMap<Set<String>, NodeSet>(); for (GeneGroup ggroup : genegroups) { //List<Sequence> seqlist = new ArrayList<Sequence>(); for (Tegeval tv : ggroup.getTegevals()) { String spec = tv.getContshort().getSpec(); Sequence seq = tv.getAlignedSequence(); //Sequence seq = new Sequence( spec, null ); //if( seqstr != null && seqstr.length() > 0 ) seq.append( seqstr ); serifier.addSequence(seq); } String tree = serifier.getFastTree(serifier.lseq, geneset.user, false); Node n = treeutil.parseTreeRecursive(tree, false); treeutil.setLoc(0); n.nodeCalcMap(nmap); } Node guidetree = null; /*********************************** Serifier serifier = getConcatenatedSequences(); String tree = serifier.getFastTree(); guidetree = treeutil.parseTreeRecursive( tree, false );*/ Node root = DataTable.majoRuleConsensus(treeutil, nmap, guidetree, false); String tree = root.toString(); if (geneset.cs.connections().size() > 0) { geneset.cs.sendToAll(tree); } else if (Desktop.isDesktopSupported()) { geneset.cs.message = tree; //String uristr = "http://webconnectron.appspot.com/Treedraw.html?tree="+URLEncoder.encode( tree, "UTF-8" ); String uristr = "http://webconnectron.appspot.com/Treedraw.html?ws=127.0.0.1:8887"; try { Desktop.getDesktop().browse(new URI(uristr)); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } } }); popup.getItems().add(majocons); MenuItem addsim = new MenuItem("Add similar"); addsim.setOnAction(e -> { /*int r = table.getSelectedRow(); int c = table.getSelectedColumn(); Object o = table.getValueAt(r, c); if (c >= 18) { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (no != null && !table.isRowSelected(i)) table.addRowSelectionInterval(i, i); } } else { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (o.equals(no) && !table.isRowSelected(i)) table.addRowSelectionInterval(i, i); } }*/ }); popup.getItems().add(addsim); MenuItem selsim = new MenuItem("Select similar"); selsim.setOnAction(e -> { /*int r = table.getSelectedRow(); int c = table.getSelectedColumn(); Object o = table.getValueAt(r, c); table.removeRowSelectionInterval(0, table.getRowCount() - 1); if (c >= 18) { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (no != null) table.addRowSelectionInterval(i, i); } } else { for (int i = 0; i < table.getRowCount(); i++) { Object no = table.getValueAt(i, c); if (o.equals(no)) table.addRowSelectionInterval(i, i); } }*/ }); popup.getItems().add(selsim); MenuItem tabtxt = new MenuItem("Table text"); tabtxt.setOnAction(e -> { /*JTextArea ta = new JTextArea(); ta.setDragEnabled(true); JScrollPane scrollpane = new JScrollPane(ta); StringBuilder sb = new StringBuilder(); int[] rr = table.getSelectedRows(); for (int r : rr) { for (int c = 0; c < table.getColumnCount() - 1; c++) { Object o = table.getValueAt(r, c); if (c > 18) { if (o != null) { String val = o.toString(); int k = val.indexOf(' '); sb.append(val.substring(0, k)); sb.append("\t" + val.substring(k + 1)); } else sb.append("\t"); } else { if (o != null) { sb.append(o.toString()); } } sb.append("\t"); } Object o = table.getValueAt(r, table.getColumnCount() - 1); if (o != null) { String val = o.toString(); int k = val.indexOf(' '); sb.append(val.substring(0, k)); sb.append("\t" + val.substring(k + 1)); } else sb.append("\t"); sb.append("\n"); } ta.setText(sb.toString()); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true);*/ }); popup.getItems().add(tabtxt); popup.getItems().add(new SeparatorMenuItem()); MenuItem ncbil = new MenuItem("NCBI lookup"); ncbil.setOnAction(e -> { /*int r = table.getSelectedRow(); if (r >= 0) { String ref = (String) table.getValueAt(r, 2); try { Desktop.getDesktop().browse(new URI("http://www.ncbi.nlm.nih.gov/gene?term=" + ref)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }*/ }); popup.getItems().add(ncbil); table.setContextMenu(popup); gtable.setContextMenu(popup); TableColumn<Function, String> gocol = new TableColumn("GO"); gocol.setCellValueFactory(new PropertyValueFactory<>("go")); ftable.getColumns().add(gocol); TableColumn<Function, String> ecfcol = new TableColumn("EC"); ecfcol.setCellValueFactory(new PropertyValueFactory<>("ec")); ftable.getColumns().add(ecfcol); TableColumn<Function, String> metacyccol = new TableColumn("MetaCyc"); metacyccol.setCellValueFactory(new PropertyValueFactory<>("metacyc")); ftable.getColumns().add(metacyccol); TableColumn<Function, String> keggcol = new TableColumn("KEGG"); keggcol.setCellValueFactory(new PropertyValueFactory<>("kegg")); ftable.getColumns().add(keggcol); TableColumn<Function, String> funcovcol = new TableColumn("Funciton coverage"); funcovcol.setCellValueFactory(new PropertyValueFactory<>("speciesCount")); ftable.getColumns().add(funcovcol); TableColumn<Function, String> numprotcol = new TableColumn("Number of proteins"); numprotcol.setCellValueFactory(new PropertyValueFactory<>("groupCount")); ftable.getColumns().add(numprotcol); TableColumn<Function, String> namecol = new TableColumn("Name"); namecol.setCellValueFactory(new PropertyValueFactory<>("name")); ftable.getColumns().add(namecol); TableColumn<Function, String> namespacecol = new TableColumn("Namespace"); namespacecol.setCellValueFactory(new PropertyValueFactory<>("namespace")); ftable.getColumns().add(namespacecol); TableColumn<Function, String> desccol = new TableColumn("Desc"); desccol.setCellValueFactory(new PropertyValueFactory<>("desc")); ftable.getColumns().add(desccol); ftable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); //ftable.setAutoCreateRowSorter(true); /*ftablemodel = new TableModel() { @Override public int getRowCount() { return geneset.funclist.size(); } @Override public int getColumnCount() { return 9; } @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) return "GO"; else if (columnIndex == 1) return "EC"; else if (columnIndex == 2) return "MetaCyc"; else if (columnIndex == 3) return "KEGG"; else if (columnIndex == 4) return "Function coverage"; else if (columnIndex == 5) return "Number of proteins"; else if (columnIndex == 6) return "Name"; else if (columnIndex == 7) return "Namespace"; else if (columnIndex == 8) return "Def"; return ""; } @Override public Class<?> getColumnClass(int columnIndex) { if( columnIndex == 4 || columnIndex == 5 ) return Integer.class; return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Function func = geneset.funclist.get(rowIndex); if( columnIndex == 0 ) return func.go; else if( columnIndex == 1 ) return func.ec; else if( columnIndex == 2 ) return func.metacyc; else if( columnIndex == 3 ) return func.kegg; else if( columnIndex == 4 ) return func.getSpeciesCount(); else if( columnIndex == 5 ) return table.getModel() == groupModel ? func.getGroupSize() : func.getGeneCount(); else if( columnIndex == 6 ) return func.name; else if( columnIndex == 7 ) return func.namespace; else if( columnIndex == 8 ) return func.desc; return null; } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; ftable.setModel( ftablemodel ); fscrollpane.setViewportView(ftable);*/ updateFilter(ftable, null); updateFilter(table, label); combo.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { String sel = newValue; filterset.clear(); if (geneset.pathwaymap.containsKey(sel)) { Set<String> enz = geneset.pathwaymap.get(sel); for (Function f : geneset.funclist) { if (f.getEc() != null && enz.contains(f.getEc())) { filterset.add(f.index); } } } updateFilter(ftable, null); }); specombo.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { String sel = newValue; genefilterset.clear(); for (Gene g : geneset.genelist) { Tegeval tv = g.tegeval; if (sel.equals(tv.teg)) { //System.out.println(g.name + " " + sp + " " + sel + " " + tv.eval); genefilterset.add(g.index); } } updateFilter(table, label); }); MenuItem findcon = new MenuItem("Find conserved terms"); findcon.setOnAction(e -> { Set<Integer> res = new HashSet<>(); for (Function f : geneset.funclist) { if (f.getGeneGroups() != null) { Set<String> check = new HashSet<>(); for (GeneGroup g : f.getGeneGroups()) { //Gene g = genemap.get(str); if (g.species != null) { if (check.isEmpty()) check.addAll(g.species.keySet()); else if (!(check.size() == g.species.size() && check.containsAll(g.species.keySet()))) { check.clear(); break; } } } if (!check.isEmpty()) res.add(f.index); } } filterset.clear(); for (int i : res) { filterset.add(i); } updateFilter(ftable, null); }); fpopup.getItems().add(findcon); fpopup.getItems().add(new SeparatorMenuItem()); MenuItem showgen = new MenuItem("Show genes"); showgen.setOnAction(e -> { genefilterset.clear(); Set<GeneGroup> sset = new HashSet<>(); for (Function f : (ObservableList<Function>) ftable.getSelectionModel().getSelectedItems()) { if (!isGeneview()) { sset.addAll(f.getGeneGroups()); /*if( sset != null ) for (GeneGroup gg : sset) { //Gene g = genemap.get(s); genefilterset.add(gg.index); }*/ } else { /*Set<Gene> sset = f.getGeneentries(); for (Gene g : sset) { //Gene g = genemap.get(s); genefilterset.add(g.index); }*/ } } //int[] rows = sset.stream().mapToInt( gg -> sortedData.indexOf(gg) ).toArray(); //table.getSelectionModel().selectIndices(rows[0], rows); filteredData.setPredicate(genegroup -> { return sset.contains(genegroup); }); if (label != null) label.setText( table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size()); }); fpopup.getItems().add(showgen); table.getSelectionModel().selectedItemProperty().addListener(e -> { // table.clearSelection(); tableisselecting = true; if (!ftableisselecting && filterset.isEmpty()) { //ftable.removeRowSelectionInterval(0, ftable.getRowCount() - 1); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { for (Function f : gg.getFunctions()) { try { ftable.getSelectionModel().select(f); //int rf = ftable.convertRowIndexToView(f.index); //if( rf >= 0 && rf < ftable.getRowCount() ) ftable.addRowSelectionInterval(rf, rf); } catch (Exception ex) { ex.printStackTrace(); } } } } else { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { if (g.funcentries != null) { for (Function f : g.funcentries) { //Function f = funcmap.get(go); try { ftable.getSelectionModel().select(f); //int rf = ftable.convertRowIndexToView(f.index); //if( rf >= 0 && rf < ftable.getRowCount() ) ftable.addRowSelectionInterval(rf, rf); } catch (Exception ex) { ex.printStackTrace(); } } } } } } tableisselecting = false; }); ftable.setOnKeyPressed(ke -> { if (ke.getCode() == KeyCode.ESCAPE) { ffilteredData.setPredicate(null); } }); table.setOnKeyPressed(ke -> { if (ke.getCode() == KeyCode.ESCAPE) { GeneGroup selgg = table.getSelectionModel().getSelectedItem(); List<GeneGroup> sel = new ArrayList<>(filteredData); filteredData.setPredicate(null); int[] rows = sel.stream().mapToInt(gg -> sortedData.indexOf(gg)).toArray(); if (rows.length > 0) table.getSelectionModel().selectIndices(rows[0], rows); if (label != null) label.setText( table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size()); table.scrollTo(selgg); //genefilterset.clear(); //updateFilter(table, genefilter, label); //geneset.scrollToSelection( table ); } }); table.setOnMousePressed(e -> { tableisselecting = true; if (!ftableisselecting && e.getClickCount() == 2) { /* * int[] rr = ftable.getSelectedRows(); int minr = * ftable.getRowCount(); int maxr = 0; for( int r : rr ) { * if( r < minr ) minr = r; if( r > maxr ) maxr = r; } * ftable.removeRowSelectionInterval(minr, maxr); */ // ftable.removeRowSelectionInterval(0, filterset.isEmpty() // ? ftable.getRowCount()-1 : filterset.size()-1 ); Set<Function> fset = new HashSet<>(); filterset.clear(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { fset.addAll(gg.getFunctions()); } } else { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { if (g.funcentries != null) { for (Function f : g.funcentries) { //Function f = funcmap.get(go); // ftable.getRowSorter().convertRowIndexToView(index) // int rf = ftable.convertRowIndexToView( // f.index ); filterset.add(f.index); // ftable.addRowSelectionInterval(rf, rf); } } } } ffilteredData.setPredicate(p -> fset.contains(p)); } tableisselecting = false; }); ftable.setOnMousePressed(e -> { ftableisselecting = true; Set<GeneGroup> ggset = new HashSet<>(); if (!tableisselecting && e.getClickCount() == 2) { genefilterset.clear(); for (Function f : (ObservableList<Function>) ftable.getSelectionModel().getSelectedItems()) { if (f.getGeneentries() != null) { if (!isGeneview()) { ggset.addAll(f.getGeneGroups()); } else { for (Gene g : f.getGeneentries()) { //Gene g = genemap.get(ref); // int rf = table.convertRowIndexToView( g.index // ); // table.addRowSelectionInterval(rf, rf); genefilterset.add(g.index); } } } } filteredData.setPredicate(p -> ggset.contains(p)); } ftableisselecting = false; }); ftable.getSelectionModel().selectedItemProperty().addListener(e -> { ftableisselecting = true; if (!tableisselecting && genefilterset.isEmpty()) { table.getSelectionModel().clearSelection(); //table.removeRowSelectionInterval(0, table.getRowCount() - 1); for (Function f : ftable.getSelectionModel().getSelectedItems()) { if (f.getGeneentries() != null) { for (Gene g : f.getGeneentries()) { table.getSelectionModel().select(g.getGeneGroup()); //Gene g = genemap.get(ref); /*int i = g.getGroupIndex(); if( i >= 0 && i <= table.getItems().size() ) { int rf = table.convertRowIndexToView(i); table.addRowSelectionInterval(rf, rf); }*/ } } } } ftableisselecting = false; }); textfield.setOnKeyPressed(e -> { String text = textfield.getText().toLowerCase(); if (e.getCode() == KeyCode.ENTER) { searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable(table, text, searchi, e.isAltDown(), 8, 9, 10, 16) : searchTable(table, text, searchi, e.isAltDown(), 0); } }); textfield.textProperty().addListener((observable, oldValue, newValue) -> { //String text = textfield.getText().toLowerCase(); String lowerCaseFilter = newValue.toLowerCase(); Predicate<GeneGroup> p = genegroup -> { if (newValue == null || newValue.isEmpty()) { return true; } if (searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol")) { if ((genegroup.getCogsymbol() != null && genegroup.getCogsymbol().toLowerCase().contains(lowerCaseFilter)) || (genegroup.getSymbol() != null && genegroup.getSymbol().toLowerCase().contains(lowerCaseFilter)) || (genegroup.getKoname() != null && genegroup.getKoname().toLowerCase().contains(lowerCaseFilter))) { return true; // Filter matches first name. } } else { if (genegroup.getName().toLowerCase().contains(lowerCaseFilter) || genegroup.genes.stream() .anyMatch(gg -> gg.getName().toLowerCase().contains(lowerCaseFilter))) { return true; // Filter matches first name. } /* else if (genegroup.getLastName().toLowerCase().contains(lowerCaseFilter)) { return true; // Filter matches last name. }*/ } return false; // Does not match. }; if (filter.isSelected()) { filteredData.setPredicate(p); if (label != null) label.setText( table.getItems().size() + "/" + table.getSelectionModel().getSelectedIndices().size()); //if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(0, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 ); //else updateFilter(0, text, table, genefilter, genefilterset, label, 0 ); } else { Optional<GeneGroup> ogg = filteredData.stream().filter(p).findFirst(); if (ogg.isPresent()) { GeneGroup gg = ogg.get(); table.getSelectionModel().select(gg); table.scrollTo(gg); } //searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } }); /*textfield.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { String text = textfield.getText().toLowerCase(); if( filter.isSelected() ) { if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(0, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 ); else updateFilter(0, text, table, genefilter, genefilterset, label, 0 ); } else { searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } } public void insertUpdate(DocumentEvent e) { String text = textfield.getText().toLowerCase(); if( filter.isSelected() ) { if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(1, text, table, genefilter, genefilterset, label, 8, 9, 10, 16); else updateFilter(1, text, table, genefilter, genefilterset, label, 0); } else { searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } } public void removeUpdate(DocumentEvent e) { String text = textfield.getText().toLowerCase(); if( filter.isSelected() ) { if( searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ) updateFilter(2, text, table, genefilter, genefilterset, label, 8, 9, 10, 16 ); else updateFilter(2, text, table, genefilter, genefilterset, label, 0); } else { searchi = searchTable( table, text, 0, false, searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? 7 : 0 ); } } });*/ ftextfield.textProperty().addListener(new javafx.beans.value.ChangeListener<String>() { public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { //String text = textfield.getText().toLowerCase(); if (filter.isSelected()) { ffilteredData.setPredicate(function -> { // If filter text is empty, display all persons. if (newValue == null || newValue.isEmpty()) { return true; } // Compare first name and last name of every person with filter text. String lowerCaseFilter = newValue.toLowerCase(); boolean desc = function.getDesc() != null && function.getDesc().toLowerCase().contains(lowerCaseFilter); boolean name = function.getName() != null && function.getName().toLowerCase().contains(lowerCaseFilter); boolean go = function.getGo() != null && function.getGo().toLowerCase().contains(lowerCaseFilter); boolean ec = function.getEc() != null && function.getEc().toLowerCase().contains(lowerCaseFilter); if (desc || name || go || ec) { return true; // Filter matches first name. } /* else if (genegroup.getLastName().toLowerCase().contains(lowerCaseFilter)) { return true; // Filter matches last name. }*/ return false; // Does not match. }); } else { //searchi = searchcolcomb.getSelectionModel().getSelectedItem().equals("Symbol") ? searchTable( table, text, 0, false, 8, 9, 10, 16 ) : searchTable( table, text, 0, false, 0 ); } } }); /*ftextfield.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { updateFilter(0, ftextfield.getText(), ftable, rowfilter, filterset, null, 6); } public void insertUpdate(DocumentEvent e) { updateFilter(1, ftextfield.getText(), ftable, rowfilter, filterset, null, 6); } public void removeUpdate(DocumentEvent e) { updateFilter(2, ftextfield.getText(), ftable, rowfilter, filterset, null, 6); } });*/ MenuItem kegggl = new MenuItem("KEGG gene lookup"); kegggl.setOnAction(e -> { Gene g = gtable.getSelectionModel().getSelectedItem(); try { Desktop.getDesktop().browse(new URI("http://www.genome.jp/dbget-bin/www_bget?" + g.keggid)); } catch (IOException e1) { e1.printStackTrace(); } catch (URISyntaxException e1) { e1.printStackTrace(); } }); popup.getItems().add(kegggl); MenuItem showgenes = new MenuItem("Show genes with same sharing"); showgenes.setOnAction(e -> { genefilterset.clear(); GeneGroup gg = table.getSelectionModel().getSelectedItem(); for (GeneGroup g : geneset.allgenegroups) { if (gg.species != null && g.species != null) { Set<String> ggset = gg.species.keySet(); Set<String> gset = g.species.keySet(); if (gset.size() == ggset.size() && gset.containsAll(ggset)) { genefilterset.add(g.index); } } } updateFilter(table, label); }); popup.getItems().add(showgenes); MenuItem showshared = new MenuItem("Show shared function"); showshared.setOnAction(e -> { filterset.clear(); Set<Function> startfunc = new HashSet<Function>(); if (isGeneview()) { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { if (gg.funcentries != null) { if (startfunc.isEmpty()) { startfunc.addAll(gg.funcentries); } else { startfunc.retainAll(gg.funcentries); } } /*if (startfunc == null) startfunc = new HashSet<Function>(gg.funcentries); else { startfunc.retainAll(gg.funcentries); }*/ } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { Set<Function> fset = gg.getFunctions(); if (startfunc.isEmpty()) { startfunc.addAll(fset); } else { startfunc.retainAll(fset); } } } for (Function f : geneset.funclist) { filterset.add(f.index); } updateFilter(ftable, null); }); popup.getItems().add(showshared); MenuItem showall = new MenuItem("Show all functions"); showall.setOnAction(e -> { filterset.clear(); Set<Function> startfunc = null; if (isGeneview()) { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { if (gg.funcentries != null) { for (Function f : gg.funcentries) { filterset.add(f.index); } } } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { Set<Function> fset = gg.getFunctions(); for (Function f : fset) { filterset.add(f.index); } } } updateFilter(ftable, null); }); popup.getItems().add(showall); popup.getItems().add(new SeparatorMenuItem()); MenuItem showgenegroups = new MenuItem("Show gene groups in proximity"); showgenegroups.setOnAction(e -> { proxi(filteredData, false); updateFilter(table, label); }); popup.getItems().add(showgenegroups); MenuItem selgenegroups = new MenuItem("Select gene groups in proximity"); selgenegroups.setOnAction(e -> { genefilterset.clear(); proxi(filteredData, false); for (int i : genefilterset) { table.getSelectionModel().select(i); } //table.tableChanged( new TableModelEvent( table.getModel() ) ); if (label != null) label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size()); //updateFilter(table, genefilter, label); }); popup.getItems().add(selgenegroups); MenuItem selgenes = new MenuItem("Select genes in proximity"); selgenes.setOnAction(e -> { genefilterset.clear(); proxi(filteredData, true); for (int i : genefilterset) { table.getSelectionModel().select(i); } //table.tableChanged( new TableModelEvent( table.getModel() ) ); if (label != null) label.setText(table.getItems().size() + "/" + table.getSelectionModel().getSelectedItems().size()); //updateFilter(table, genefilter, label); }); popup.getItems().add(selgenes); MenuItem addgene = new MenuItem("Add gene groups in proximity"); addgene.setOnAction(e -> { proxi(filteredData, false); updateFilter(table, label); }); popup.getItems().add(addgene); MenuItem remgene = new MenuItem("Remove gene groups in proximity"); remgene.setOnAction(e -> { ObservableList<Integer> rr = table.getSelectionModel().getSelectedIndices(); if (genefilterset.isEmpty()) { Set<Integer> ii = new HashSet<>(); for (int r : rr) ii.add(r); for (int i = 0; i < geneset.genelist.size(); i++) { if (!ii.contains(i)) genefilterset.add(i); } } proxi(filteredData, false); updateFilter(table, label); }); popup.getItems().add(remgene); popup.getItems().add(new SeparatorMenuItem()); MenuItem showrel = new MenuItem("Show related genes"); showrel.setOnAction(e -> { genefilterset.clear(); relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, false); updateFilter(gtable, label); }); popup.getItems().add(showrel); MenuItem addrel = new MenuItem("Add related genes"); addrel.setOnAction(e -> { relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, false); updateFilter(gtable, label); }); popup.getItems().add(addrel); MenuItem remrel = new MenuItem("Remove related genes"); remrel.setOnAction(e -> { ObservableList<Integer> rr = gtable.getSelectionModel().getSelectedIndices(); if (genefilterset.isEmpty()) { Set<Integer> ii = new HashSet<>(); for (int r : rr) ii.add(r); for (int i = 0; i < geneset.genelist.size(); i++) { if (!ii.contains(i)) genefilterset.add(i); } } relati(gtable, geneset.genelist, genefilterset, geneset.uclusterlist, true); updateFilter(table, label); }); popup.getItems().add(remrel); popup.getItems().add(new SeparatorMenuItem()); MenuItem showcloserel = new MenuItem("Show closely related genes"); showcloserel.setOnAction(e -> { genefilterset.clear(); Set<String> ct = new HashSet<>(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { // genefilterset.add( gg.index ); Tegeval tv = gg.tegeval; for (Set<String> uset : geneset.iclusterlist) { if (uset.contains(tv.name)) { ct.addAll(uset); break; } } } for (Gene g : geneset.genelist) { Tegeval tv = g.tegeval; if (ct.contains(tv.name)) { genefilterset.add(g.index); break; } } updateFilter(table, label); }); popup.getItems().add(showcloserel); MenuItem showdist = new MenuItem("Show distance matrix"); showdist.setOnAction(e -> { JTextArea textarea = new JTextArea(); try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true); JScrollPane scrollpane = new JScrollPane(textarea); Gene gg = gtable.getSelectionModel().getSelectedItem(); if (gg.getSpecies() != null) { for (String s : geneset.corrInd) { if (s.equals(geneset.corrInd.get(0))) textarea.append(s); else textarea.append("\t" + s); } int i = 0; int j = 0; int len = 16; double[] min = new double[len]; double[] max = new double[len]; for (i = 0; i < len; i++) { min[i] = Double.MAX_VALUE; max[i] = 0.0; } double[] corrarr = gg.corrarr; boolean symmetrize = true; if (symmetrize) { for (i = 0; i < len; i++) { for (int k = i + 1; k < len; k++) { corrarr[i * len + k] = (corrarr[k * len + i] + corrarr[i * len + k]) / 2.0; corrarr[k * len + i] = corrarr[i * len + k]; } } } for (i = 0; i < len; i++) { for (int k = 0; k < len; k++) { if (corrarr[i * len + k] < min[i]) min[i] = corrarr[i * len + k]; if (corrarr[i * len + k] > max[i]) max[i] = corrarr[i * len + k]; } /*for (int k = 0; k < len; k++) { corrarr[i * 16 + k] = corrarr[i * 16 + k] - min; }*/ } i = 0; for (double d : corrarr) { double dval = d; if (i % len == 0) textarea.append("\n" + dval); else textarea.append("\t" + dval); i++; } textarea.append("\n"); i = 0; for (double d : corrarr) { double dval = Math.exp((d - min[i / len]) / 20.0 + 1.0) / 100.0; // 0.0 ? // 0.0 : // 100.0/d; if (i % len == 0) textarea.append("\n" + dval); else textarea.append("\t" + dval); i++; } double[] newcorr = Arrays.copyOf(corrarr, corrarr.length); textarea.append("\nD matrix\n"); i = 0; for (double d : corrarr) { double dval = max[i / len] - d; newcorr[i] = dval; if (i % len == 0) textarea.append("\n" + dval); else textarea.append("\t" + dval); i++; } TreeUtil treeutil = new TreeUtil(); treeutil.neighborJoin(newcorr, geneset.corrInd, null, true, true); } /* * int[] rr = table.getSelectedRows(); for( int r : rr ) { int * cr = table.convertRowIndexToModel(r); Gene gg = * genelist.get(cr); if( gg.species != null ) { textarea.append( * gg.name + ":\n" ); for( String sp : gg.species.keySet() ) { * Teginfo stv = gg.species.get( sp ); for( Tegeval tv : * stv.tset ) { textarea.append( ">" + tv.cont + " " + tv.teg + * " " + tv.eval + "\n" ); for( int i = 0; i < tv.seq.length(); * i+=70 ) { int end = Math.min(i+70,tv.seq.length()); * textarea.append( tv.seq.substring(i, end)+"\n" ); //new * String( tv.seq, i, Math.min(i+70,tv.seq.length()) )+"\n"); } * //textarea.append( ">" + tv.cont + " " + tv.teg + " " + * tv.eval + "\n" + tv.seq + "\n" ); } } } } */ JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true); }); /* * final List<String> reglist = new ArrayList<String>(); final * Map<String,Gene> regidx = new TreeMap<String,Gene>(); * * for( Gene g : geneset.genelist ) { if( g.species != null ) { for( String key * : g.species.keySet() ) { Set<Tegeval> stv = g.species.get(key); for( * Tegeval tv : stv ) { regidx.put(tv.cont, g); } } } } * * for( String key : regidx.keySet() ) { reglist.add(key); } * * final JTable contigtable = new JTable(); * contigtable.setAutoCreateRowSorter( true ); contigtable.setModel( new * TableModel() { * * @Override public int getRowCount() { return reglist.size(); } * * @Override public int getColumnCount() { return 1; } * * @Override public String getColumnName(int columnIndex) { return * "Region"; } * * @Override public Class<?> getColumnClass(int columnIndex) { return * String.class; } * * @Override public boolean isCellEditable(int rowIndex, int * columnIndex) { return false; } * * @Override public Object getValueAt(int rowIndex, int columnIndex) { * return reglist.get(rowIndex); } * * @Override public void setValueAt(Object aValue, int rowIndex, int * columnIndex) { // TODO Auto-generated method stub * * } * * @Override public void addTableModelListener(TableModelListener l) { * // TODO Auto-generated method stub * * } * * @Override public void removeTableModelListener(TableModelListener l) * { // TODO Auto-generated method stub * * } }); * * contigtable.getSelectionModel().addListSelectionListener( new * ListSelectionListener() { * * @Override public void valueChanged(ListSelectionEvent e) { * genefilterset.clear(); int[] rr = contigtable.getSelectedRows(); for( * int r : rr ) { String s = (String)contigtable.getValueAt(r, 0); Gene * g = regidx.get( s ); * * genefilterset.add( g.index ); updateFilter(table, genefilter, label); * //int k = table.convertRowIndexToView(g.index); //if( k != -1 * )table.addRowSelectionInterval(k, k); } } }); JScrollPane * contigscroll = new JScrollPane( contigtable ); * * JSplitPane mainsplit = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT ); * mainsplit.setLeftComponent( contigscroll ); * mainsplit.setRightComponent( splitpane ); */ }
From source file:org.simmi.GeneSetHead.java
License:asdf
public void init(final Stage primaryStage, final Container comp, final SplitPane splitpane, final TableView<Gene> genetable, final TableView<Function> upper, final TableView<GeneGroup> lower, final MenuBar menubar, final ToolBar toolbar, final ToolBar btoolbar) { geneset.user = System.getProperty("user.name"); JavaFasta.user = geneset.user;//w w w . j ava2s .c o m this.splitpane = splitpane; this.primaryStage = primaryStage; table = lower; gtable = genetable; //SerifyApplet.user = user; /*try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); }*/ String userhome = System.getProperty("user.home"); boolean windows = false; try { InputStream isk = GeneSet.class.getClassLoader().getResourceAsStream("org/simmi/genesetkey"); //Path gkey = Paths.get( url.toURI() ); InputStream iskp = GeneSet.class.getClassLoader().getResourceAsStream("org/simmi/genesetkey.pub"); //Path gkeypub = Paths.get( url.toURI() ); Path gkeyssh = Paths.get(userhome); //Path gkeyssh = userpath.resolve(".ssh"); if (!Files.exists(gkeyssh)) Files.createDirectory(gkeyssh); Path gkeylocal = gkeyssh.resolve("org/simmi/genesetkey"); Path gkeylocalpub = gkeyssh.resolve("org/simmi/genesetkey.pub"); if (!Files.exists(gkeylocal) && isk != null) { Files.copy(isk, gkeylocal, StandardCopyOption.REPLACE_EXISTING); } if (!Files.exists(gkeylocalpub) && iskp != null) { Files.copy(iskp, gkeylocalpub); } Set<PosixFilePermission> poset = new HashSet<PosixFilePermission>(); poset.add(PosixFilePermission.OWNER_READ); poset.add(PosixFilePermission.OWNER_WRITE); if (Files.exists(gkeylocal)) Files.setPosixFilePermissions(gkeylocal, poset); if (Files.exists(gkeylocalpub)) Files.setPosixFilePermissions(gkeylocalpub, poset); } catch (IOException e1) { e1.printStackTrace(); } catch (UnsupportedOperationException e2) { windows = true; e2.printStackTrace(); } if (windows) { File f = new File(userhome + "\\genesetkey"); f.setExecutable(false, false); f.setWritable(false, false); f.setReadable(false, false); f.setWritable(true, true); f.setReadable(true, true); } this.comp = comp; selcomb = new ComboBox<>(); searchcolcomb = new ComboBox<>(); syncolorcomb = new ComboBox<>(); searchcolcomb.getItems().add("Name"); searchcolcomb.getItems().add("Symbol"); searchcolcomb.getSelectionModel().select(0); setColors(); JMenuBar jmenubar = new JMenuBar(); Menu file = new Menu("File"); MenuItem newitem = new MenuItem("New"); newitem.setOnAction(actionEvent -> newFile()); file.getItems().add(newitem); MenuItem openitem = new MenuItem("Open"); openitem.setOnAction(actionEvent -> { try { importStuff(); } catch (IOException e3) { e3.printStackTrace(); } catch (UnavailableServiceException e3) { e3.printStackTrace(); } }); file.getItems().add(openitem); file.getItems().add(new SeparatorMenuItem()); MenuItem importitem = new MenuItem("Import genomes"); importitem.setOnAction(actionEvent -> fetchGenomes()); file.getItems().add(importitem); MenuItem exportitem = new MenuItem("Export genomes"); exportitem.setOnAction(actionEvent -> exportGenomes(geneset.speccontigMap)); file.getItems().add(exportitem); file.getItems().add(new SeparatorMenuItem()); MenuItem exportproteinitem = new MenuItem("Export protein sequences"); exportproteinitem.setOnAction(actionEvent -> exportProteinSequences(geneset.genelist)); file.getItems().add(exportproteinitem); MenuItem exportgeneitem = new MenuItem("Export gene clusters"); exportgeneitem.setOnAction(actionEvent -> exportGeneClusters(geneset.allgenegroups)); file.getItems().add(exportgeneitem); file.getItems().add(new SeparatorMenuItem()); MenuItem quititem = new MenuItem("Quit"); quititem.setOnAction(actionEvent -> System.exit(0)); file.getItems().add(quititem); Menu edit = new Menu("Edit"); MenuItem clustergenes = new MenuItem("Cluster genes"); clustergenes.setOnAction(actionEvent -> { //fxpanel.setScene( null ); /*Platform.runLater(new Runnable() { @Override public void run() { Label label1 = new Label("Id:"); tb1 = new TextField("0.5"); Label label2 = new Label("Len:"); tb2 = new TextField("0.5"); VBox vbox = new VBox(); HBox hbox1 = new HBox(); hbox1.getChildren().addAll( label1, tb1 ); HBox hbox2 = new HBox(); hbox2.getChildren().addAll( label2, tb2 ); epar = new TextField(); vbox.getChildren().add( epar ); vbox.getChildren().addAll( hbox1, hbox2 ); if( fxs == null ) fxs = new Scene( vbox ); fxs.setRoot( vbox ); fxpanel.setScene( fxs ); } });*/ JPanel panel = new JPanel(); GridBagLayout grid = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); panel.setLayout(grid); /*JLabel label1 = new JLabel("Id:"); JTextField tb1 = new JTextField("0.5"); JLabel label2 = new JLabel("Len:"); JTextField tb2 = new JTextField("0.5"); Dimension d = new Dimension( 300, 30 ); JTextField epar = new JTextField(); epar.setSize( d ); epar.setPreferredSize( d ); c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = 1; c.gridheight = 1; c.gridx = 0; c.gridy = 0; panel.add( label1, c ); c.gridx = 1; c.gridy = 0; panel.add( tb1, c ); c.gridx = 0; c.gridy = 1; panel.add( label2, c ); c.gridx = 1; c.gridy = 1; panel.add( tb2, c ); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; panel.add( epar, c ); JOptionPane.showMessageDialog(comp, new Object[] {panel}, "Clustering parameters", JOptionPane.PLAIN_MESSAGE );*/ /*if( tb1 != null ) { float id = Float.parseFloat( tb1.getText() ); float len = Float.parseFloat( tb2.getText() ); String expar = epar.getText(); tb1 = null; tb2 = null; epar = null;*/ Set<String> species = getSelspec(null, geneset.getSpecies(), null); geneset.clusterGenes(species, false); //} }); MenuItem alignclusters = new MenuItem("Align clusters"); alignclusters.setOnAction(actionEvent -> { try { String OS = System.getProperty("os.name").toLowerCase(); Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); //s.makeBlastCluster(zipfilesystem.getPath("/"), p, 1); Path aldir = geneset.zipfilesystem.getPath("aligned"); final Path aligneddir = Files.exists(aldir) ? aldir : Files.createDirectory(aldir); Runnable run = new Runnable() { @Override public void run() { try { geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } }; NativeRun nrun = new NativeRun(run); //ExecutorService es = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors() ); Object[] cont = new Object[3]; Collection<GeneGroup> ggset; ObservableList<GeneGroup> ogg = table.getSelectionModel().getSelectedItems(); ggset = new HashSet<GeneGroup>(); if (ogg.size() == 0) { for (GeneGroup gg : geneset.allgenegroups) { //GeneGroup gg = allgenegroups.get(table.convertRowIndexToModel(r)); //gg.getCommonTag() if (gg != null && gg.getCommonTag() == null && gg.size() > 1) ggset.add(gg); } } else { for (GeneGroup gg : ogg) { //GeneGroup gg = geneset.allgenegroups.get(table.convertRowIndexToModel(r)); //gg.getCommonTag() if (gg != null && gg.getCommonTag() == null && gg.size() > 1) ggset.add(gg); } } //int i = 0; List commandsList = new ArrayList(); for (GeneGroup gg : ggset) { String fasta = gg.getFasta(true); String[] cmds = new String[] { OS.indexOf("mac") >= 0 ? "/usr/local/bin/mafft" : "/usr/bin/mafft", "-" }; Object[] paths = new Object[] { fasta.getBytes(), aligneddir.resolve(gg.getCommonId() + ".aa"), null }; commandsList.add(paths); commandsList.add(Arrays.asList(cmds)); //if( i++ > 5000 ) break; } nrun.runProcessBuilder("Running mafft", commandsList, cont, true, run, false); } catch (IOException e1) { if (geneset.zipfilesystem != null) { try { geneset.zipfilesystem.close(); } catch (IOException e2) { e2.printStackTrace(); } } e1.printStackTrace(); } }); MenuItem sharenumaction = new MenuItem("Update share numbers"); sharenumaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { Set<String> specs = getSelspec(GeneSetHead.this, geneset.specList, null); geneset.updateShareNum(specs); })); MenuItem importgeneclusteringaction = new MenuItem("Import gene clustering"); importgeneclusteringaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { JPanel panel = new JPanel(); GridBagLayout grid = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); panel.setLayout(grid); JLabel label1 = new JLabel("Id:"); JTextField tb11 = new JTextField("0.5"); JLabel label2 = new JLabel("Len:"); JTextField tb21 = new JTextField("0.5"); Dimension d = new Dimension(300, 30); JTextField epar1 = new JTextField(); epar1.setSize(d); epar1.setPreferredSize(d); c.fill = GridBagConstraints.HORIZONTAL; c.gridwidth = 1; c.gridheight = 1; c.gridx = 0; c.gridy = 0; panel.add(label1, c); c.gridx = 1; c.gridy = 0; panel.add(tb11, c); c.gridx = 0; c.gridy = 1; panel.add(label2, c); c.gridx = 1; c.gridy = 1; panel.add(tb21, c); c.gridx = 0; c.gridy = 2; c.gridwidth = 2; panel.add(epar1, c); JOptionPane.showMessageDialog(comp, new Object[] { panel }, "Clustering parameters", JOptionPane.PLAIN_MESSAGE); float id = Float.parseFloat(tb11.getText()); float len = Float.parseFloat(tb21.getText()); //JFileChooser fc = new JFileChooser(); //if( fc.showOpenDialog( GeneSetHead.this ) == JFileChooser.APPROVE_OPTION ) { Serifier s = new Serifier(); //s.mseq = aas; for (String gk : geneset.refmap.keySet()) { Gene g = geneset.refmap.get(gk); if (g.tegeval.getAlignedSequence() != null) System.err.println(g.tegeval.getAlignedSequence().getName()); s.mseq.put(gk, g.tegeval.getAlignedSequence()); } Map<String, String> idspec = new HashMap<String, String>(); for (String idstr : geneset.refmap.keySet()) { if (idstr.contains(" ")) { System.err.println("coooonnnnnni " + idstr); } Gene gene = geneset.refmap.get(idstr); idspec.put(idstr, gene.getSpecies()); } //Sequences seqs = new Sequences(user, name, type, path, nseq) try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path root = geneset.zipfilesystem.getPath("/"); Path p = geneset.zipfilesystem.getPath("cluster.blastout"); //root.resolve("culster.blastout"); List<Set<String>> cluster = geneset.uclusterlist == null ? new ArrayList<>() : new ArrayList<>(geneset.uclusterlist); s.makeBlastCluster(root, p, 1, id, len, idspec, cluster, geneset.refmap); System.err.println(cluster.get(0)); if (geneset.uclusterlist != null) System.err.println(geneset.uclusterlist.get(0)); geneset.zipfilesystem.close(); } catch (IOException e1) { if (geneset.zipfilesystem != null) { try { geneset.zipfilesystem.close(); } catch (IOException e2) { e2.printStackTrace(); } } e1.printStackTrace(); } })); MenuItem importgenesymbolaction = new MenuItem("Import gene symbols"); importgenesymbolaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path nf = geneset.zipfilesystem.getPath("/smap_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE); File f = fc.getSelectedFile(); InputStream is = new FileInputStream(f); if (f.getName().endsWith(".gz")) is = new GZIPInputStream(is); geneset.uni2symbol(new InputStreamReader(is), bw, geneset.unimap); bw.close(); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); geneset.zipfilesystem.close(); } catch (IOException e1) { e1.printStackTrace(); } } })); MenuItem importcazyaction = new MenuItem("Import Cazy"); importcazyaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { try { BufferedReader rd = Files.newBufferedReader(fc.getSelectedFile().toPath()); geneset.loadcazymap(geneset.cazymap, rd); } catch (IOException e1) { e1.printStackTrace(); } } })); MenuItem gene2refseqaction = new MenuItem("Gene 2 refseq"); gene2refseqaction.setOnAction(actionEvent -> { try { TextField tf = new TextField(); tf.setText("ftp://ftp.ncbi.nlm.nih.gov/gene/DATA/gene2refseq.gz"); Dialog<Path> dialog = new Dialog(); dialog.getDialogPane().setContent(tf); dialog.getDialogPane().getButtonTypes().add(ButtonType.OK); dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL); dialog.setResultConverter(param -> param.getButtonData().isCancelButton() ? null : Paths.get(URI.create(tf.getText()))); Optional<Path> opath = dialog.showAndWait(); if (opath.isPresent()) { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path path = opath.get(); InputStream is = path.toUri().toURL().openStream(); if (path.getFileName().toString().endsWith(".gz")) { is = new GZIPInputStream(is); } Path nf = geneset.zipfilesystem.getPath("/org/simmi/gene2refseq_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); geneset.idMapping(new InputStreamReader(is), bw, 5, 1, geneset.refmap, null, geneset.gimap); bw.close(); } } catch (Exception e) { e.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } }); MenuItem functionmappingaction = new MenuItem("Function mapping"); functionmappingaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { final JTextField tf = new JTextField(); JButton btn = new JButton("File"); JComponent comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); comp2.add(tf); comp2.add(btn, BorderLayout.EAST); tf.setText("http://130.208.252.239/data/sp2go.txt.gz"); final File[] file2 = new File[1]; btn.addActionListener(e -> { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { file2[0] = fc.getSelectedFile(); try { tf.setText(fc.getSelectedFile().toURI().toURL().toString()); } catch (MalformedURLException e1) { e1.printStackTrace(); } } }); try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path nf = geneset.zipfilesystem.getPath("/org/simmi/sp2go_short.txt"); BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); JOptionPane.showMessageDialog(GeneSetHead.this, comp2); final JDialog dialog = new JDialog(); dialog.setTitle("Function mapping"); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setSize(400, 300); comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); final JTextArea ta = new JTextArea(); /*final InputStream fis; if( file[0] != null ) fis = new FileInputStream( file[0] ); else { JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); List<String> commandsList = Arrays.asList( new String[] {"ssh",username+"@"+hostname,"cat",tf.getText()} ); ProcessBuilder pb = new ProcessBuilder( commandsList ); Process p = pb.start(); for( Object commands : commandsList ) { if( commands instanceof List ) { for( Object cmd : (List)commands ) { ta.append(cmd+" "); } ta.append("\n"); } else { ta.append(commands+" "); } } ta.append("\n"); fis = p.getInputStream(); }*/ final JProgressBar pbar = new JProgressBar(); final Thread t = new Thread() { public void run() { try { URL url = new URL(tf.getText()); InputStream fis = url.openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(new GZIPInputStream(fis))); //if( unimap != null ) unimap.clear(); //unimap = idMapping(new InputStreamReader(is), bw, 2, 0, refmap, genmap, gimap); geneset.funcMappingUni(br, geneset.unimap, bw); fis.close(); bw.close(); try { geneset.zipfilesystem.close(); } catch (Exception e2) { e2.printStackTrace(); } ; pbar.setIndeterminate(false); pbar.setEnabled(false); } catch (IOException e) { e.printStackTrace(); } } }; ta.setEditable(false); final JScrollPane sp = new JScrollPane(ta); dialog.add(comp2); comp2.add(pbar, BorderLayout.NORTH); comp2.add(sp, BorderLayout.CENTER); pbar.setIndeterminate(true); t.start(); /*okokdialog.addWindowListener( new WindowListener() { @Override public void windowOpened(WindowEvent e) {} @Override public void windowIconified(WindowEvent e) {} @Override public void windowDeiconified(WindowEvent e) {} @Override public void windowDeactivated(WindowEvent e) {} @Override public void windowClosing(WindowEvent e) {} @Override public void windowClosed(WindowEvent e) { if( pbar.isEnabled() ) { pbar.setIndeterminate( false ); pbar.setEnabled( false ); } } @Override public void windowActivated(WindowEvent e) {} });*/ dialog.setVisible(true); //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); } catch (IOException e1) { e1.printStackTrace(); } })); MenuItem importidmappingaction = new MenuItem("Import idmapping"); importidmappingaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { final JTextField tf = new JTextField(); JButton btn = new JButton("File"); JComponent comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); comp2.add(tf); comp2.add(btn, BorderLayout.EAST); tf.setText( "ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/idmapping/idmapping.dat.gz"); final File[] file2 = new File[1]; btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JFileChooser fc = new JFileChooser(); if (fc.showOpenDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { file2[0] = fc.getSelectedFile(); try { tf.setText(fc.getSelectedFile().toURI().toURL().toString()); } catch (MalformedURLException e1) { e1.printStackTrace(); } } } }); JOptionPane.showMessageDialog(GeneSetHead.this, comp2); //Thread t = new Thread() { // public void run() { try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path nf = geneset.zipfilesystem.getPath("/org/simmi/idmapping_short.dat"); final BufferedWriter bw = Files.newBufferedWriter(nf, StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING); final JDialog dialog = new JDialog(); dialog.setTitle("Id mapping"); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setSize(400, 300); comp2 = new JComponent() { }; comp2.setLayout(new BorderLayout()); final JTextArea ta = new JTextArea(); /*final InputStream fis; if( file[0] != null ) fis = new FileInputStream( file[0] ); else { /*Object[] cont = new Object[3]; Runnable run = new Runnable() { public void run() { try { bw.close(); geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } };* JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); List<String> commandsList = Arrays.asList( new String[] {"ssh",username+"@"+hostname,"cat",tf.getText()} ); ProcessBuilder pb = new ProcessBuilder( commandsList ); Process p = pb.start(); for( Object commands : commandsList ) { if( commands instanceof List ) { for( Object cmd : (List)commands ) { ta.append(cmd+" "); } ta.append("\n"); } else { ta.append(commands+" "); } } ta.append("\n"); fis = p.getInputStream(); }*/ final JProgressBar pbar = new JProgressBar(); final Thread t = new Thread() { public void run() { try { URL url = new URL(tf.getText()); InputStream fis = url.openStream(); InputStream is = new GZIPInputStream(fis); if (geneset.unimap != null) geneset.unimap.clear(); geneset.unimap = geneset.idMapping(new InputStreamReader(is), bw, 2, 0, geneset.refmap, geneset.genmap, geneset.gimap); is.close(); fis.close(); bw.close(); try { geneset.zipfilesystem.close(); } catch (Exception ep) { ep.printStackTrace(); } ; pbar.setIndeterminate(false); pbar.setEnabled(false); } catch (IOException e) { e.printStackTrace(); } } }; ta.setEditable(false); final JScrollPane sp = new JScrollPane(ta); dialog.add(comp2); comp2.add(pbar, BorderLayout.NORTH); comp2.add(sp, BorderLayout.CENTER); pbar.setIndeterminate(true); t.start(); /*System.err.println( "about to run" ); for( Object commands : commandsList ) { if( commands instanceof List ) { for( Object c : (List)commands ) { System.err.print( c+" " ); } System.err.println(); } else { System.err.print( commands+" " ); } } System.err.println();*/ /*okokdialog.addWindowListener( new WindowListener() { @Override public void windowOpened(WindowEvent e) {} @Override public void windowIconified(WindowEvent e) {} @Override public void windowDeiconified(WindowEvent e) {} @Override public void windowDeactivated(WindowEvent e) {} @Override public void windowClosing(WindowEvent e) {} @Override public void windowClosed(WindowEvent e) { if( pbar.isEnabled() ) { /*String result = ta.getText().trim(); if( run != null ) { cont[0] = null; cont[1] = result; cont[2] = new Date( System.currentTimeMillis() ).toString(); run.run(); }* pbar.setIndeterminate( false ); pbar.setEnabled( false ); } } @Override public void windowActivated(WindowEvent e) {} });*/ dialog.setVisible(true); /*NativeRun nrun = new NativeRun(); nrun.runProcessBuilder("Idmapping", Arrays.asList( tf.getText().split(" ") ), run, cont, false); ProcessBuilder pb = new ProcessBuilder( tf.getText().split(" ") ); Process p = pb.start(); fis = p.getInputStream(); }*/ //long bl = Files.copy( new ByteArrayInputStream( baos.toByteArray() ), nf, StandardCopyOption.REPLACE_EXISTING ); } catch (IOException e1) { e1.printStackTrace(); try { geneset.zipfilesystem.close(); } catch (Exception e2) { e2.printStackTrace(); } ; } // } //}; //t.start(); //} })); MenuItem cogblastaction = new MenuItem("Cog blast"); cogblastaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { Set<String> species = getSelspec(null, geneset.getSpecies(), null); if (species != null && species.size() > 0) Platform.runLater(() -> cogBlastDlg(species)); })); MenuItem unresolvedblastaction = new MenuItem("Unresolved blast"); unresolvedblastaction.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { try { Set<String> species = getSelspec(null, geneset.getSpecies(), null); StringWriter sb = new StringWriter(); Path dbPath = Paths.get("/data/nr"); ObservableList<Gene> genes = gtable.getSelectionModel().getSelectedItems(); if (genes.size() > 0) { if (isGeneview()) { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { //int i = table.convertRowIndexToModel(r); //Gene g = geneset.genelist.get(i); Sequence gs = g.tegeval.getProteinSequence(); gs.setName(g.id); gs.writeSequence(sb); } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { //int i = table.convertRowIndexToModel(r); //GeneGroup gg = geneset.allgenegroups.get(i); Gene g = null; for (Gene gene : gg.genes) { g = gene; break; } Sequence gs = g.tegeval.getProteinSequence(); gs.setName(g.id); gs.writeSequence(sb); } } } else { for (Gene g : geneset.genelist) { if (g.getTag() == null || g.getTag().equalsIgnoreCase("gene")) { if (species.contains(g.getSpecies())) { Sequence gs = g.tegeval.getProteinSequence(); gs.setName(g.id); gs.writeSequence(sb); /*sb.append(">" + g.id + "\n"); for (int i = 0; i < gs.length(); i += 70) { sb.append( gs.substring(i, Math.min( i + 70, gs.length() )) + "\n"); }*/ } } } } Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path resPath = geneset.zipfilesystem.getPath("/unresolved.blastout"); NativeRun nrun = new NativeRun(); SerifyApplet.blastpRun(nrun, sb.getBuffer(), dbPath, resPath, "-evalue 0.00001", null, true, geneset.zipfilesystem, geneset.user, primaryStage); } catch (IOException e1) { e1.printStackTrace(); } })); MenuItem importbiosystemsaction = new MenuItem("Import biosystems"); importbiosystemsaction.setOnAction(actionEvent -> { Dialog<Map<String, Set<String>>> dialog = new Dialog(); TextField gene = new TextField(); TextField biosys = new TextField(); gene.setText("ftp://ftp.ncbi.nlm.nih.gov/pub/biosystems/biosystems.20160519/biosystems_gene_all.gz"); biosys.setText("ftp://ftp.ncbi.nlm.nih.gov/pub/biosystems/biosystems.20160519/bsid2info.gz"); VBox duo = new VBox(); duo.getChildren().add(gene); duo.getChildren().add(biosys); dialog.getDialogPane().setContent(duo); dialog.getDialogPane().getButtonTypes().add(ButtonType.OK); dialog.getDialogPane().getButtonTypes().add(ButtonType.CANCEL); dialog.setResultConverter(param -> { if (!param.getButtonData().isCancelButton()) { Map<String, Set<String>> result = null; Set<String> geneidset = geneset.genelist.stream().map(g -> g.genid).collect(Collectors.toSet()); try { InputStream p = new URI(gene.getText()).toURL().openStream(); InputStream b = new URI(biosys.getText()).toURL().openStream(); if (gene.getText().endsWith(".gz")) p = new GZIPInputStream(p); if (biosys.getText().endsWith(".gz")) b = new GZIPInputStream(b); Map<String, List<String[]>> group = new BufferedReader(new InputStreamReader(p)).lines() .map(l -> l.split("\t")).filter(s -> geneidset.contains(s[1])) .collect(Collectors.groupingBy(s -> s[1])); Set<String> bsids = group.entrySet().stream().flatMap(e -> e.getValue().stream()) .map(s -> s[0]).collect(Collectors.toSet()); Map<String, String> bsid2name = new BufferedReader(new InputStreamReader(b)).lines() .map(s -> s.split("\t")).filter(s -> bsids.contains(s[0])) .collect(Collectors.toMap(s -> s[0], s -> s[2] + ":" + s[3])); result = group.entrySet().stream() .collect(Collectors.toMap(s -> s.getKey(), s -> s.getValue().stream() .map(sub -> bsid2name.get(sub[0])).collect(Collectors.toSet()))); } catch (IOException e) { e.printStackTrace(); } catch (URISyntaxException e) { e.printStackTrace(); } //Path p = Paths.get(gene.getText()); //Path b = Paths.get(biosys.getText()); return result; } return null; }); Optional<Map<String, Set<String>>> od = dialog.showAndWait(); if (od.isPresent()) { geneset.biosystemsmap = od.get(); Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); Path resPath = geneset.zipfilesystem.getPath("/biosystems.txt"); BufferedWriter bw = Files.newBufferedWriter(resPath, StandardOpenOption.TRUNCATE_EXISTING); geneset.biosystemsmap.entrySet().stream().forEach(e -> { try { bw.write(e.getKey() + "\t" + e.getValue().stream().collect(Collectors.joining(";")) + "\n"); } catch (IOException e1) { e1.printStackTrace(); } }); bw.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (IOException e) { e.printStackTrace(); } } } }); MenuItem importkeggpathwayaction = new MenuItem("Import kegg pathways"); importkeggpathwayaction.setOnAction(actionEvent -> { Set<String> keggids = new HashSet<>(); for (Gene g : geneset.genelist) { if (g.keggid != null) { int i = g.keggid.indexOf(':'); if (i > 0) { keggids.add(g.keggid.substring(0, i)); } } } System.err.println(keggids); JTextField tf = new JTextField("http://130.208.252.239/organisms/"); JOptionPane.showMessageDialog(null, tf); Map<String, String> env = new HashMap<>(); env.put("create", "true"); Path rootp = null; try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); } catch (Exception ee) { ee.printStackTrace(); } for (Path root : geneset.zipfilesystem.getRootDirectories()) { rootp = root; break; } for (String kegg : keggids) { try { URL url = new URL(tf.getText() + kegg + ".tar.gz"); InputStream is = url.openStream(); GZIPInputStream gz = new GZIPInputStream(is); TarArchiveInputStream tar = new TarArchiveInputStream(gz); TarArchiveEntry tae = (TarArchiveEntry) tar.getNextEntry(); while (tae != null) { geneset.traverseTar(tar, tae, rootp); tae = (TarArchiveEntry) tar.getNextEntry(); } is.close(); } catch (IOException e1) { e1.printStackTrace(); } } try { geneset.zipfilesystem.close(); } catch (Exception ee) { ee.printStackTrace(); } ; }); edit.getItems().add(clustergenes); edit.getItems().add(alignclusters); edit.getItems().add(new SeparatorMenuItem()); edit.getItems().add(sharenumaction); edit.getItems().add(importgeneclusteringaction); edit.getItems().add(importgenesymbolaction); edit.getItems().add(importcazyaction); edit.getItems().add(functionmappingaction); edit.getItems().add(importidmappingaction); edit.getItems().add(gene2refseqaction); edit.getItems().add(importbiosystemsaction); edit.getItems().add(importkeggpathwayaction); edit.getItems().add(new SeparatorMenuItem()); edit.getItems().add(cogblastaction); edit.getItems().add(unresolvedblastaction); Menu view = new Menu("View"); gb = new RadioMenuItem("Genes"); gb.setOnAction(actionEvent -> { splitpane.getItems().remove(table); splitpane.getItems().add(0, gtable); //table.setModel( defaultModel ); }); view.getItems().add(gb); ggb = new RadioMenuItem("Gene groups"); ggb.setOnAction(actionEvent -> { splitpane.getItems().remove(gtable); splitpane.getItems().add(0, table); //table.setModel( groupModel ); }); ToggleGroup bg = new ToggleGroup(); gb.setToggleGroup(bg); ggb.setToggleGroup(bg); //ButtonGroup bg = new ButtonGroup(); //bg.add( gb ); //bg.add( ggb ); ggb.setSelected(true); view.getItems().add(ggb); ActionCollection.addAll(view, geneset.clusterMap, GeneSetHead.this, geneset.speccontigMap, table, comp, geneset.cs); Menu help = new Menu("Help"); MenuItem about = new MenuItem("About"); about.setOnAction(actionEvent -> SwingUtilities .invokeLater(() -> JOptionPane.showMessageDialog(comp, "CompGen 1.0"))); help.getItems().add(about); MenuItem test = new MenuItem("Test"); test.setOnAction(actionEvent -> { /*for( Gene g : geneset.genelist ) { Sequence seq = g.tegeval.getContig(); if( seq == null ) { System.err.println(); } }*/ for (String spec : geneset.speccontigMap.keySet()) { if (spec.contains("RAST")) { List<Sequence> lseq = geneset.speccontigMap.get(spec); for (Sequence seq : lseq) { for (Annotation a : seq.getAnnotations()) { System.err.println(a.getGene().getGeneGroup().species); /*Sequence tseq = a.getContig(); if( tseq == null ) { System.err.println(); }*/ } } } } /*for( GeneGroup gg : allgenegroups ) { if( gg.species.size() > 1 ) { System.err.println( gg.species ); } }*/ }); help.getItems().add(test); help.getItems().add(new SeparatorMenuItem()); MenuItem runserver = new MenuItem("Run server"); runserver.setOnAction(actionEvent -> { SwingUtilities.invokeLater(new Runnable() { public void run() { JSpinner spin = new JSpinner(); JOptionPane.showMessageDialog(GeneSetHead.this, spin, "Port", JOptionPane.QUESTION_MESSAGE); try { geneset.cs = WSServer.startServer(GeneSetHead.this, (Integer) spin.getValue()); } catch (UnknownHostException e1) { e1.printStackTrace(); } } }); }); help.getItems().add(runserver); help.getItems().add(new SeparatorMenuItem()); CheckMenuItem cbmi = new CheckMenuItem("Use geneset user"); help.getItems().add(cbmi); cbmi.setOnAction(actionEvent -> { if (cbmi.isSelected()) { geneset.user = "geneset"; } else geneset.user = System.getProperty("user.name"); JavaFasta.user = geneset.user; if (geneset.currentSerify != null) geneset.currentSerify.user = geneset.user; }); help.getItems().add(new SeparatorMenuItem()); MenuItem helptut = new MenuItem("Help & Tutorial"); helptut.setOnAction(actionEvent -> { try { Desktop.getDesktop().browse(new URI("http://thermusgenes.appspot.com/pancore.html")); } catch (IOException | URISyntaxException e1) { e1.printStackTrace(); } }); help.getItems().add(helptut); Menu sequencemenu = new Menu("Sequence"); MenuItem showgroupseq = new MenuItem("Show group sequences"); showgroupseq.setOnAction(actionEvent -> { //JTextArea textarea = new JTextArea(); //JScrollPane scrollpane = new JScrollPane(textarea); /*try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true);*/ JFrame frame = null; if (geneset.currentSerify == null) { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); frame.setSize(400, 300); Map<String, String> env = new HashMap<String, String>(); //Path path = zipfile.toPath(); String uristr = "jar:" + geneset.zippath.toUri(); geneset.zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); } catch (IOException e1) { e1.printStackTrace(); } SerifyApplet sa = new SerifyApplet(geneset.zipfilesystem); sa.init(frame, null, geneset.user); //frame.add( ) geneset.currentSerify = sa; } /* else frame = (JFrame)currentSerify.cnt;*/ String[] farr = new String[] { "o.profundus", "mt.silvanus", "mt.ruber", "m.hydrothermalis", "t.thermophilus_SG0_5JP17_16", "t.thermophilusJL18", "t.thermophilusHB8", "t.thermophilusHB27", "t.scotoductusSA01", "t.scotoductus4063", "t.scotoductus1572", "t.scotoductus2101", "t.scotoductus2127", "t.scotoductus346", "t.scotoductus252", "t.antranikiani", "t.kawarayensis", "t.brockianus", "t.igniterrae", "t.eggertsoni", "t.RLM", "t.oshimai_JL2", "t.oshimai", "t.filiformis", "t.arciformis", "t.islandicus", "t.aquaticus", "t.spCCB" }; Map<Integer, String> ups = new HashMap<Integer, String>(); Set<Integer> stuck = new HashSet<Integer>(); Map<Integer, List<Tegeval>> ups2 = new HashMap<Integer, List<Tegeval>>(); //int[] rr = table.getSelectedRows(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); if (gg.getSpecies() != null) { if (gg.genid != null && gg.genid.length() > 0) { ups.put(gg.getGroupIndex(), gg.name); stuck.add(gg.getGroupIndex()); } if (!stuck.contains(gg.getGroupIndex())) { if (!ups.containsKey(gg.getGroupIndex()) || !(gg.name.contains("unnamed") || gg.name.contains("hypot"))) ups.put(gg.getGroupIndex(), gg.name); } List<Tegeval> tlist; if (ups2.containsKey(gg.getGroupIndex())) tlist = ups2.get(gg.getGroupIndex()); else { tlist = new ArrayList<Tegeval>(); ups2.put(gg.getGroupIndex(), tlist); } //Set<String> specs = new HashSet<String>(); //textarea.append(gg.name + ":\n"); //for (String sp : gg.species.keySet()) { int count = 0; for (String sp : farr) { //Teginfo stv = gg.species.equals(sp) ? gg.teginfo : null; if (gg.getSpecies().equals(sp)) tlist.add(gg.tegeval); /*for( String key : gg.species.keySet() ) { if( key.contains("JL2") ) { System.err.println( " erm " + key ); } }*/ /*if( stv == null && gg.species.size() == 28 ) { System.err.println( gg.species ); System.err.println( sp ); }*/ //System.err.println( gg.species.keySet() ); /*if( stv == null ) { //System.err.println( sp ); } else { count++; //specs.add( sp ); for (Tegeval tv : stv.tset) { tlist.add( tv ); /*textarea.append(">" + tv.cont + " " + tv.teg + " " + tv.eval + "\n"); if (tv.dna != null) { for (int i = 0; i < tv.dna.length(); i += 70) { textarea.append(tv.dna.gg.speciessubstring(i, Math.min(i + 70, tv.dna.length())) + "\n"); } }* } }*/ } //if( count < gg.species.size() ) { // System.err.println( gg.species ); // System.err.println(); //} //if( specs.size() < 28 ) System.err.println("mu " + specs); } } try { StringWriter sb = new StringWriter(); for (int gi : ups.keySet()) { String name = ups.get(gi); List<Tegeval> tlist = ups2.get(gi); sb.append(name.replace('/', '-') + ":\n"); if (tlist.size() < 28) { for (Tegeval tv : tlist) { System.err.println(tv.name); } System.err.println(); } for (Tegeval tv : tlist) { Sequence ps = tv.getProteinSequence(); ps.setName(tv.name.substring(0, tv.name.indexOf('_'))); ps.writeSequence(sb); /*sb.append(">" + tv.name.substring(0, tv.name.indexOf('_')) + "\n"); for (int i = 0; i < ps.length(); i += 70) { sb.append( ps.substring(i, Math.min(i + 70, tv.getProteinLength() )) + "\n"); }*/ } } geneset.currentSerify.addSequences("uh", new StringReader(sb.toString()), Paths.get("/"), null); } catch (URISyntaxException | IOException e1) { e1.printStackTrace(); } frame.setVisible(true); }); sequencemenu.getItems().add(showgroupseq); MenuItem showgroupdnaseq = new MenuItem("Show group DNA sequences"); showgroupdnaseq.setOnAction(actionEvent -> { final JTextArea textarea = new JTextArea(); JScrollPane scrollpane = new JScrollPane(textarea); try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true); try { final DataFlavor df = new DataFlavor("text/plain;charset=utf-8"); TransferHandler th = new TransferHandler() { /** * */ private static final long serialVersionUID = 1L; public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } public boolean canImport(TransferHandler.TransferSupport support) { return false; } protected Transferable createTransferable(JComponent c) { return new Transferable() { @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { if (arg0.equals(df)) { return new ByteArrayInputStream(textarea.getText().getBytes()); } else { return textarea.getText(); } } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { df, DataFlavor.stringFlavor }; } @Override public boolean isDataFlavorSupported(DataFlavor arg0) { if (arg0.equals(df) || arg0.equals(DataFlavor.stringFlavor)) { return true; } return false; } }; } public boolean importData(TransferHandler.TransferSupport support) { return false; } }; textarea.setTransferHandler(th); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } Map<Integer, String> ups = new HashMap<Integer, String>(); Set<Integer> stuck = new HashSet<Integer>(); Map<Integer, List<Tegeval>> ups2 = new HashMap<Integer, List<Tegeval>>(); //int[] rr = table.getSelectedRows(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); if (gg.getSpecies() != null) { if (gg.genid != null && gg.genid.length() > 0) { ups.put(gg.getGroupIndex(), gg.name); stuck.add(gg.getGroupIndex()); } if (!stuck.contains(gg.getGroupIndex())) { if (!ups.containsKey(gg.getGroupIndex()) || !(gg.name.contains("unnamed") || gg.name.contains("hypot"))) ups.put(gg.getGroupIndex(), gg.name); } List<Tegeval> tlist; if (ups2.containsKey(gg.getGroupIndex())) tlist = ups2.get(gg.getGroupIndex()); else { tlist = new ArrayList<Tegeval>(); ups2.put(gg.getGroupIndex(), tlist); } //textarea.append(gg.name + ":\n"); tlist.add(gg.tegeval); /*textarea.append(">" + tv.cont + " " + tv.teg + " " + tv.eval + "\n"); if (tv.dna != null) { for (int i = 0; i < tv.dna.length(); i += 70) { textarea.append(tv.dna.substring(i, Math.min(i + 70, tv.dna.length())) + "\n"); } }*/ } } for (int gi : ups.keySet()) { String name = ups.get(gi); List<Tegeval> tlist = ups2.get(gi); textarea.append(name.replace('/', '-') + ":\n"); for (Tegeval tv : tlist) { textarea.append(">" + tv.name.substring(0, tv.name.indexOf('_')) + "\n"); for (int i = 0; i < tv.getLength(); i += 70) { textarea.append(tv.getSubstring(i, Math.min(i + 70, tv.getLength())) + "\n"); } } } JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true); }); sequencemenu.getItems().add(showgroupdnaseq); sequencemenu.getItems().add(new SeparatorMenuItem()); MenuItem showallseq = new MenuItem("Show all sequences"); showallseq.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); Map<String, Sequence> contset = new HashMap<String, Sequence>(); //int[] rr = table.getSelectedRows(); for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); Tegeval tv = gg.tegeval; String contig = tv.getContshort().getName(); Sequence seq = tv.getProteinSequence(); seq.setName(contig); serifier.mseq.put(seq.getName(), seq); //Sequence seq = new Sequence( contig, aa, serifier.mseq ); serifier.addSequence(seq); } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(showallseq); MenuItem showseq = new MenuItem("Show sequences"); showseq.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); //int[] rr = table.getSelectedRows(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //GeneGroup gg = geneset.allgenegroups.get(cr); genegroups.add(gg); } } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); genegroups.add(gg.getGeneGroup()); } } Platform.runLater(() -> { Set<String> specs = null; if (table.getItems().size() > 1) specs = getSelspec(comp, geneset.specList, null); showSequences(comp, genegroups, false, specs); }); }); sequencemenu.getItems().add(showseq); MenuItem showseqwgenenames = new MenuItem("Show sequences w/genenames"); showseqwgenenames.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); //int[] rr = table.getSelectedRows(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //GeneGroup gg = geneset.allgenegroups.get(cr); genegroups.add(gg); } } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { //int cr = table.convertRowIndexToModel(r); //Gene gg = geneset.genelist.get(cr); genegroups.add(gg.getGeneGroup()); } } //Set<String> specs = null; //if( rr.length > 1 ) specs = getSelspec(comp, specList, null); showSequences(comp, genegroups, false, null, true); }); sequencemenu.getItems().add(showseqwgenenames); MenuItem showalignseq = new MenuItem("Show aligned sequences"); showalignseq.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); //int[] rr = table.getSelectedRows(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { genegroups.add(gg); } } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { genegroups.add(gg.getGeneGroup()); } } Serifier serifier = new Serifier(); for (GeneGroup ggroup : genegroups) { for (Tegeval tv : ggroup.getTegevals()) { String selspec = tv.getContshort().getSpec();//tv.getContig(); String spec = geneset.nameFix(selspec); /*if( selspec.contains("hermus") ) spec = selspec; else { Matcher m = Pattern.compile("\\d").matcher(selspec); int firstDigitLocation = m.find() ? m.start() : 0; if( firstDigitLocation == 0 ) spec = "Thermus_" + selspec; else spec = "Thermus_" + selspec.substring(0,firstDigitLocation) + "_" + selspec.substring(firstDigitLocation); }*/ Sequence seq = tv.getAlignedSequence(); //System.err.println( "seqlen " + seq.length() ); if (seq != null) { seq.setName(spec); //Sequence seq = new Sequence( contig, seqstr, null ); serifier.addSequence(seq); } else { Sequence sb = tv.getProteinSequence(); sb.setName(spec); //Sequence sseq = new Sequence( spec, sb, serifier.mseq ); serifier.addSequence(sb); } } } showAlignedSequences(comp, serifier); }); sequencemenu.getItems().add(showalignseq); MenuItem splitseq = new MenuItem("Split/Show sequences"); splitseq.setOnAction(actionEvent -> { try { StringBuffer sb = getSelectedASeqs(table, geneset.genelist, GeneSetHead.this, geneset.specList); if (geneset.currentSerify == null) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); frame.setSize(800, 600); SerifyApplet sa = new SerifyApplet(geneset.zipfilesystem); sa.init(frame, null, geneset.user); geneset.currentSerify = sa; frame.setVisible(true); } geneset.currentSerify.addSequences("uh", new StringReader(sb.toString()), Paths.get("/"), null); } catch (URISyntaxException | IOException e1) { e1.printStackTrace(); } //JTextArea textarea = new JTextArea(); //textarea.append( sb.toString() ); /*try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } * * final DataFlavor df = * DataFlavor.getTextPlainUnicodeFlavor();//new * DataFlavor("text/plain;charset=utf-8"); final String charset * = df.getParameter("charset"); final Transferable transferable * = new Transferable() { * * @Override public Object getTransferData(DataFlavor arg0) * throws UnsupportedFlavorException, IOException { String ret = * makeCopyString( detailTable ); return new * ByteArrayInputStream( ret.getBytes( charset ) ); } * * @Override public DataFlavor[] getTransferDataFlavors() { * return new DataFlavor[] { df }; } * * @Override public boolean isDataFlavorSupported(DataFlavor * arg0) { if( arg0.equals(df) ) { return true; } return false; * } }; * * TransferHandler th = new TransferHandler() { private static * final long serialVersionUID = 1L; * * public int getSourceActions(JComponent c) { return * TransferHandler.COPY_OR_MOVE; } * * public boolean canImport(TransferHandler.TransferSupport * support) { return false; } * * protected Transferable createTransferable(JComponent c) { * return transferable; } * * public boolean importData(TransferHandler.TransferSupport * support) { /*try { Object obj = * support.getTransferable().getTransferData( df ); InputStream * is = (InputStream)obj; * * byte[] bb = new byte[2048]; int r = is.read(bb); * * //importFromText( new String(bb,0,r) ); } catch * (UnsupportedFlavorException e) { e.printStackTrace(); } catch * (IOException e) { e.printStackTrace(); }* return false; } }; * textarea.setTransferHandler( th ); * textarea.setDragEnabled(true); JScrollPane scrollpane = new JScrollPane(textarea); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true);*/ }); sequencemenu.getItems().add(splitseq); MenuItem showdnaseq = new MenuItem("Show DNA sequences"); showdnaseq.setOnAction(actionEvent -> { Set<GeneGroup> genegroups = new HashSet<GeneGroup>(); int rr = 0; if (!isGeneview()) { ObservableList<GeneGroup> lgg = table.getSelectionModel().getSelectedItems(); genegroups.addAll(lgg); rr = lgg.size(); } else { for (Gene gg : gtable.getSelectionModel().getSelectedItems()) { genegroups.add(gg.getGeneGroup()); rr++; } } Set<String> specs = null; if (rr > 1) specs = getSelspec(comp, geneset.specList, null); showSequences(comp, genegroups, true, specs); /*StringBuilder sb = getSelectedSeqs( table, genelist ); if( currentSerify == null ) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE ); frame.setSize(800, 600); SerifyApplet sa = new SerifyApplet(); sa.init( frame ); try { sa.addSequences("uh", new StringReader( sb.toString() ), "/"); } catch (URISyntaxException | IOException e1) { e1.printStackTrace(); } frame.setVisible( true ); } JTextArea textarea = new JTextArea(); JScrollPane scrollpane = new JScrollPane(textarea); try { if (clipboardService == null) clipboardService = (ClipboardService) ServiceManager.lookup("javax.jnlp.ClipboardService"); Action action = new CopyAction("Copy", null, "Copy data", new Integer(KeyEvent.VK_CONTROL + KeyEvent.VK_C)); textarea.getActionMap().put("copy", action); grabFocus = true; } catch (Exception ee) { ee.printStackTrace(); System.err.println("Copy services not available. Copy using 'Ctrl-c'."); } textarea.setDragEnabled(true); textarea.append( sb.toString() ); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.add(scrollpane); frame.setSize(400, 300); frame.setVisible(true);*/ }); sequencemenu.getItems().add(showdnaseq); MenuItem expalldna = new MenuItem("Export all DNA sequences"); expalldna.setOnAction(actionEvent -> { JFileChooser jfc = new JFileChooser(); jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); try { Map<Integer, FileWriter> lfw = new HashMap<Integer, FileWriter>(); if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File f = jfc.getSelectedFile(); for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { FileWriter fw = null; if (lfw.containsKey(gg.getGroupIndex())) { fw = lfw.get(gg.getGroupIndex()); } else { fw = new FileWriter(new File(f, "group_" + gg.getGroupIndex() + ".fasta")); lfw.put(gg.getGroupIndex(), fw); } Tegeval tv = gg.tegeval; fw.append(">" + tv.name + " " + tv.teg + " " + tv.eval + "\n"); for (int i = 0; i < tv.getLength(); i += 70) { fw.append(tv.getSubstring(i, Math.min(i + 70, tv.getLength())) + "\n"); } } } for (int gi : lfw.keySet()) { lfw.get(gi).close(); } } catch (IOException e1) { e1.printStackTrace(); } }); sequencemenu.getItems().add(expalldna); MenuItem exprelcont = new MenuItem("Export relevant contigs"); exprelcont.setOnAction(actionEvent -> { JFileChooser jfc = new JFileChooser(); try { Map<Integer, FileWriter> lfw = new HashMap<Integer, FileWriter>(); if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File f = jfc.getSelectedFile(); Set<Sequence> contset = new HashSet<Sequence>(); for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; contset.add(tv.getContshort()); } FileWriter fw = new FileWriter(f); for (Sequence contig : contset) { fw.append(">" + contig + "\n"); if (geneset.contigmap.containsKey(contig)) { StringBuilder dna = geneset.contigmap.get(contig).getStringBuilder(); for (int i = 0; i < dna.length(); i += 70) { fw.append(dna.substring(i, Math.min(i + 70, dna.length())) + "\n"); } } } fw.close(); } for (int gi : lfw.keySet()) { lfw.get(gi).close(); } } catch (IOException e1) { e1.printStackTrace(); } }); sequencemenu.getItems().add(exprelcont); sequencemenu.getItems().add(new SeparatorMenuItem()); MenuItem viewselrange = new MenuItem("View selected range"); viewselrange.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); Set<Sequence> contset = new HashSet<Sequence>(); Set<Tegeval> tvset = new HashSet<>(); if (isGeneview()) { for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; tvset.add(tv); //serifier.addAnnotation( tv ); contset.add(tv.getContshort()); } } else { for (GeneGroup gg : getGeneGroupTable().getSelectionModel().getSelectedItems()) { for (Tegeval tv : gg.getTegevals()) { tv.color = Color.red; tvset.add(tv); Sequence contig = tv.getContshort(); contset.add(contig); //serifier.addAnnotation( tv ); } } } /*Sequence seq; Sequence contig = tv.getContshort(); /*if (contset.containsKey(contig)) { seq = contset.get(contig); } else { if( contigmap.containsKey(contig) ) { StringBuilder dna = contigmap.get(contig).getStringBuilder(); seq = new Sequence(contig.getName(), dna, serifier.mseq); } else seq = new Sequence(contig.getName(), serifier.mseq); contset.put(contig, seq); } Annotation a = new Annotation(contig, contig.getName(), Color.green, serifier.mann); a.setStart(tv.start); a.setStop(tv.stop); a.setOri(tv.ori); a.setGroup(gg.name); a.setType("gene");*/ // seq.addAnnotation( new Annotation( seq, ) ); for (Sequence contig : contset) { int start = Integer.MAX_VALUE; int stop = Integer.MIN_VALUE; for (Tegeval tv : tvset) { if (contig == tv.seq) { start = Math.min(start, tv.start); stop = Math.max(stop, tv.stop); } } int rstart = 0; int rstop = contig.length(); if (contig.annset != null) for (Annotation tv : contig.annset) { if (contig == tv.seq) { if (tv.stop < start && tv.stop > rstart) { rstart = tv.stop; } if (tv.start > stop && tv.start < rstop) { rstop = tv.start; } } } start = rstart; stop = rstop; Sequence newseq = new Sequence(contig.getName(), new StringBuilder(contig.getSubstring(start, stop, 1)), serifier.mseq); /*if( contig.isReverse() ) { newseq.reverse(); newseq.complement(); }*/ serifier.addSequence(newseq); for (Tegeval tv : tvset) { Annotation newann = new Annotation(newseq, tv.start - start, tv.stop - start, tv.ori, tv.name); if (contig == tv.seq) { newseq.addAnnotation(newann); } serifier.addAnnotation(newann); } /*for( Annotation ann : contig.getAnnotations() ) { serifier.addAnnotation( ann ); }*/ /*if (seq.getAnnotations() != null) Collections.sort(seq.getAnnotations());*/ } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(viewselrange); MenuItem viewwhole = new MenuItem("View whole contigs for selection"); viewwhole.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); //Map<Sequence, Sequence> contset = new HashMap<Sequence, Sequence>(); /*int[] rr = table.getSelectedRows(); for (int r : rr) { int cr = table.convertRowIndexToModel(r); Gene gg = geneset.genelist.get(cr); if (gg.species != null) { for (String sp : gg.species.keySet()) { Teginfo stv = gg.species.get(sp); for (Tegeval tv : stv.tset) { Sequence seq; Sequence contig = tv.getContshort(); if (contset.containsKey(contig)) { seq = contset.get(contig); } else { if( GeneSet.contigmap.containsKey(contig) ) { //StringBuilder dna = GeneSet.contigmap.get(contig).seq; StringBuilder dna = contig.getSequence().getStringBuilder(); seq = new Sequence(contig.getName(), dna, serifier.mseq); } else { seq = new Sequence(contig.getName(), serifier.mseq); } contset.put(contig, seq); } /* * Annotation a = jf.new Annotation( seq, * contig, Color.red ); a.setStart( tv.start ); * a.setStop( tv.stop ); a.setOri( tv.ori ); * a.setGroup( gg.name ); a.setType( "gene" ); * jf.addAnnotation( a ); * // seq.addAnnotation( new Annotation( seq, ) ); } } } }*/ Set<Sequence> contigs = new HashSet<Sequence>(); if (isGeneview()) { for (Gene gg : getGeneTable().getSelectionModel().getSelectedItems()) { Tegeval tv = gg.tegeval; tv.color = Color.red; Sequence contig = tv.getContshort(); //contig.offset = -tv.start; contigs.add(contig); } /*Annotation a = new Annotation(contig, contig.getName(), Color.red, serifier.mann); a.setStart(tv.start); a.setStop(tv.stop); a.setOri(tv.ori); a.setGroup(g.name); a.setType("gene");*/ //serifier.addAnnotation( tv ); } else { for (GeneGroup gg : getGeneGroupTable().getSelectionModel().getSelectedItems()) { for (Tegeval tv : gg.getTegevals()) { tv.color = Color.red; Sequence contig = tv.getContshort(); //contig.offset = -tv.start; contigs.add(contig); /*Annotation a = new Annotation(contig, contig.getName(), Color.red, serifier.mann); a.setStart(tv.start); a.setStop(tv.stop); a.setOri(tv.ori); a.setGroup(gg.getCommonName()); a.setType("gene");*/ //serifier.addAnnotation( tv ); } } } //Gene gg = geneset.genelist.get(cr); //for (Gene g : geneset.genelist) { //if (g.species != null) { //for (String sp : g.species.keySet()) { for (Sequence contig : contigs) { for (Annotation ann : contig.getAnnotations()) { serifier.addAnnotation(ann); } serifier.addSequence(contig); serifier.mseq.put(contig.getName(), contig); //if(contig.getAnnotations() != null) // Collections.sort(contig.getAnnotations()); } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(viewwhole); sequencemenu.getItems().add(new SeparatorMenuItem()); MenuItem viewspecseq = new MenuItem("View species sequence"); viewspecseq.setOnAction(actionEvent -> { Set<String> selspec = getSelspec(GeneSetHead.this, geneset.specList); JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); for (String spec : selspec) { List<Sequence> contigs = geneset.speccontigMap.get(spec); for (Sequence contig : contigs) { List<Annotation> lann = contig.getAnnotations(); if (lann != null) for (Annotation ann : lann) { serifier.addAnnotation(ann); } serifier.addSequence(contig); serifier.mseq.put(contig.getName(), contig); } } jf.updateView(); frame.setVisible(true); }); sequencemenu.getItems().add(viewspecseq); Menu windowmenu = new Menu("Tools"); MenuItem seqviewer = new MenuItem("Sequence viewer"); seqviewer.setOnAction(actionEvent -> { JFrame frame = new JFrame(); frame.setSize(800, 600); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Serifier serifier = new Serifier(); JavaFasta jf = new JavaFasta((comp instanceof JApplet) ? (JApplet) comp : null, serifier, geneset.cs); jf.initGui(frame); jf.updateView(); frame.setVisible(true); }); windowmenu.getItems().add(seqviewer); windowmenu.getItems().add(new SeparatorMenuItem()); MenuItem genesorter = new MenuItem("Gene sorter"); genesorter.setOnAction(actionEvent -> { try { //if( gb.isSelected() ) new GeneSorter().mynd( GeneSetHead.this, genelist, table, null, contigmap ); //else new GeneSorter().groupMynd(GeneSetHead.this, geneset.allgenegroups, geneset.specList, geneset.genelist, table, geneset.contigmap, geneset.specset); } catch (IOException e1) { e1.printStackTrace(); } }); windowmenu.getItems().add(genesorter); MenuItem specorderaction = new MenuItem("Order species list"); specorderaction.setOnAction(actionEvent -> { TreeUtil tu = new TreeUtil(); /*corrInd.clear(); for( String spec : specList ) { corrInd.add( nameFix( spec ) ); }*/ Serifier serifier = getConcatenatedSequences(false, false); Map<String, Integer> blosumap = JavaFasta.getBlosumMap(); double[] dmat = new double[serifier.lseq.size() * serifier.lseq.size()]; Sequence.distanceMatrixNumeric(serifier.lseq, dmat, null, false, false, null, blosumap); List<String> ret = new ArrayList<String>(); for (Sequence seqname : serifier.lseq) { ret.add(seqname.getName()); //.replace(' ', '_') ); } //List<String> corrInd = currentjavafasta.getNames(); //Sequence.distanceMatrixNumeric(serifier.lseq, dmat, idxs, bootstrap, cantor, ent, blosum); Node n = tu.neighborJoin(dmat, ret, null, false, false); Comparator<Node> comp2 = (o1, o2) -> { int c1 = o1.countLeaves(); int c2 = o2.countLeaves(); if (c1 > c2) return 1; else if (c1 == c2) return 0; return -1; }; tu.arrange(n, comp2); //corrInd.clear(); List<String> ordInd = n.traverse(); for (String spec : ordInd) { System.err.println(spec); } for (String oldspec : geneset.specList) { if (!ordInd.contains(oldspec)) { ordInd.add(oldspec); } } geneset.specList = ordInd; //TableModel model = table.getModel(); //table.setModel( nullmodel ); //table.setModel( model ); //table.tableChanged( new TableModelEvent( table.getModel() ) ); //table.getColumnModel(). System.err.println(geneset.specList.size()); }); MenuItem matrixaction = new MenuItem("Relation matrix"); matrixaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { JComboBox<String> descombo = new JComboBox<String>( geneset.deset.toArray(new String[geneset.deset.size()])); JCheckBox anicheck = new JCheckBox("ANImatrix"); JCheckBox plasmidcheck = new JCheckBox("Skip plasmids"); descombo.insertItemAt("", 0); descombo.setSelectedIndex(0); JOptionPane.showMessageDialog(GeneSetHead.this, new Object[] { descombo, anicheck, plasmidcheck }); String val = descombo.getSelectedItem().toString(); Collection<GeneGroup> ss = new HashSet<>(); /*int[] rr = table.getSelectedRows(); for( int r : rr ) { ss.add( geneset.allgenegroups.get( table.convertRowIndexToModel(r) ) ); }*/ ss.addAll(table.getSelectionModel().getSelectedItems()); if (ss.isEmpty()) ss = geneset.allgenegroups; Set<String> species = getSelspec(GeneSetHead.this, geneset.specList); bimg = anicheck.isSelected() ? geneset.animatrix(species, geneset.clusterMap, val, ss, plasmidcheck.isSelected()) : geneset.bmatrix(species, geneset.clusterMap, val); JFrame f = new JFrame("Relation matrix"); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setSize(500, 500); /* * { public void paintComponent( Graphics g ) { * super.paintComponent(g); g.drawImage(bimg, 0, 0, this); } }; */ try { final DataFlavor df = new DataFlavor("text/plain;charset=utf-8"); final Transferable transferable = new Transferable() { @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { StringBuilder ret = new StringBuilder(); int i = 0; for (String spc : geneset.specList) { if (++i == geneset.specList.size()) ret.append(spc + "\n"); else ret.append(spc + "\t"); } int where = 0; for (String spc1 : geneset.specList) { int wherex = 0; for (String spc2 : geneset.specList) { int spc1tot = 0; int spc2tot = 0; int totot = 0; int spc1totwocore = 0; int spc2totwocore = 0; int tototwocore = 0; for (Set<String> set : geneset.clusterMap.keySet()) { Set<Map<String, Set<String>>> erm = geneset.clusterMap.get(set); if (set.contains(spc1)) { if (set.size() < geneset.specList.size()) { spc1totwocore += erm.size(); for (Map<String, Set<String>> sm : erm) { Set<String> hset = sm.get(spc1); tototwocore += hset.size(); } if (set.contains(spc2)) { spc2totwocore += erm.size(); } if (spc2totwocore > spc1totwocore) System.err.println( "okoko " + spc1totwocore + " " + spc2totwocore); } spc1tot += erm.size(); for (Map<String, Set<String>> sm : erm) { Set<String> hset = sm.get(spc1); totot += hset.size(); } if (set.contains(spc2)) { spc2tot += erm.size(); } } } if (where == wherex) { if (where == geneset.specList.size() - 1) ret.append(0 + "\n"); else ret.append(0 + "\t"); } else { double hlut = (double) spc2totwocore / (double) spc1totwocore; double sval = hlut; // 1.0/( 1.1-hlut ); double val = Math.pow(50.0, sval - 0.3) - 1.0; double dval = Math.round(100.0 * (val)) / 100.0; if (wherex == geneset.specList.size() - 1) ret.append(dval + "\n"); else ret.append(dval + "\t"); } wherex++; } where++; } return new ByteArrayInputStream(ret.toString().getBytes()); } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { df }; } @Override public boolean isDataFlavorSupported(DataFlavor arg0) { if (arg0.equals(df)) { return true; } return false; } }; final TransferComponent comp2 = new TransferComponent(bimg, transferable); TransferHandler th = new TransferHandler() { private static final long serialVersionUID = 1L; public int getSourceActions(JComponent c) { return TransferHandler.COPY_OR_MOVE; } public boolean canImport(TransferSupport support) { return false; } protected Transferable createTransferable(JComponent c) { return transferable; } public boolean importData(TransferSupport support) { return true; } }; comp2.setTransferHandler(th); comp2.setEnabled(true); JScrollPane fsc = new JScrollPane(comp2); comp2.setPreferredSize(new Dimension(bimg.getWidth(), bimg.getHeight())); JPopupMenu popup = new JPopupMenu(); popup.add(new AbstractAction("Save image") { @Override public void actionPerformed(ActionEvent e) { FileSaveService fss = null; FileContents fileContents = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(baos); ImageIO.write(bimg, "png", baos); baos.close(); try { fss = (FileSaveService) ServiceManager.lookup("javax.jnlp.FileSaveService"); } catch (UnavailableServiceException e1) { fss = null; } if (fss != null) { ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); fileContents = fss.saveFileDialog(null, null, bais, "export.png"); bais.close(); OutputStream os = fileContents.getOutputStream(true); os.write(baos.toByteArray()); os.close(); } else { JFileChooser jfc = new JFileChooser(); if (jfc.showSaveDialog(GeneSetHead.this) == JFileChooser.APPROVE_OPTION) { File f = jfc.getSelectedFile(); FileOutputStream fos = new FileOutputStream(f); fos.write(baos.toByteArray()); fos.close(); Desktop.getDesktop().browse(f.toURI()); } } } catch (IOException e2) { e2.printStackTrace(); } } }); comp2.setComponentPopupMenu(popup); f.add(fsc); f.setVisible(true); } catch (ClassNotFoundException e1) { e1.printStackTrace(); } }); }); MenuItem tniaction = new MenuItem("TNI/ANI"); tniaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { Set<String> species = getSelspec(GeneSetHead.this, geneset.specList); String makeblastdb = "makeblastdb"; String OS = System.getProperty("os.name").toLowerCase(); if (OS.indexOf("mac") != -1) makeblastdb = "/usr/local/bin/makeblastdb"; for (String spec : species) { List<Sequence> lseq = geneset.speccontigMap.get(spec); ProcessBuilder pb = new ProcessBuilder(makeblastdb, "-dbtype", "nucl", "-title", spec, "-out", spec); File dir = new File(System.getProperty("user.home")); /*try { FileWriter w = new FileWriter( new File(dir, spec+".fna") ); for( Sequence seq : lseq ) { seq.writeSequence(w); } w.close(); } catch (IOException e2) { e2.printStackTrace(); }*/ pb.directory(dir); try { Process p = pb.start(); Writer fw = new OutputStreamWriter(p.getOutputStream()); for (Sequence seq : lseq) { seq.writeSequence(fw); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } } int y = 0; double[] matrix = new double[species.size() * species.size()]; for (String dbspec : species) { int x = 0; for (String spec : species) { //if( !spec.equals(dbspec) ) { final List<Sequence> lseq = geneset.speccontigMap.get(spec); String blastn = "blastn"; if (OS.indexOf("mac") != -1) blastn = "/usr/local/bin/blastn"; ProcessBuilder pb = new ProcessBuilder(blastn, "-db", dbspec, "-num_threads", Integer.toString(Runtime.getRuntime().availableProcessors()), "-num_alignments", "1", "-num_descriptions", "1"); //,"-max_hsps","1"); File dir = new File(System.getProperty("user.home")); pb.directory(dir); try { Process p = pb.start(); final BufferedWriter fw = new BufferedWriter( new OutputStreamWriter(p.getOutputStream())); Thread t = new Thread() { public void run() { try { for (Sequence seq : lseq) { seq.writeSplitSequence(fw); //seq.writeSequence(fw); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } } }; t.start(); //Path path = Paths.get("/Users/sigmar/"+spec+"_"+dbspec+".blastout"); //Files.copy(p.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING); int tnum = 0; int tdenum = 0; double avg = 0.0; int count = 0; BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = br.readLine(); while (line != null) { if (line.startsWith(" Identities")) { int i = line.indexOf('('); String sub = line.substring(14, i - 1); String[] split = sub.split("/"); int num = Integer.parseInt(split[0]); int denum = Integer.parseInt(split[1]); avg += (double) num / (double) denum; tnum += num; tdenum += denum; count++; } line = br.readLine(); } br.close(); if (count > 0) avg /= count; double val = (double) tnum / (double) tdenum; matrix[y * species.size() + x] = avg;//val; System.err.println(spec + " on " + dbspec + " " + val); } catch (IOException e1) { e1.printStackTrace(); } //} x++; } y++; } geneset.corrInd.clear(); for (String spec : species) { geneset.corrInd.add(geneset.nameFix(spec)); } final BufferedImage bi = geneset.showRelation(geneset.corrInd, matrix, false); JFrame f = new JFrame("TNI matrix"); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setSize(500, 500); JComponent comp2 = new JComponent() { public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(bi, 0, 0, bi.getWidth(), bi.getHeight(), 0, 0, bi.getWidth(), bi.getHeight(), this); } }; Dimension dim = new Dimension(bi.getWidth(), bi.getHeight()); comp2.setPreferredSize(dim); comp2.setSize(dim); JScrollPane scroll = new JScrollPane(comp2); f.add(scroll); f.setVisible(true); }); }); MenuItem anitreeaction = new MenuItem("ANI tree"); anitreeaction.setOnAction(actionEvent -> { Set<String> species = getSelspec(GeneSetHead.this, geneset.specList); List<String> speclist = new ArrayList<String>(species); Collection<GeneGroup> allgg = new HashSet<GeneGroup>(); allgg.addAll(table.getSelectionModel().getSelectedItems()); if (allgg.isEmpty()) allgg = geneset.allgenegroups; Map<String, Integer> blosumap = JavaFasta.getBlosumMap(); double[] corrarr = new double[speclist.size() * speclist.size()]; int where = 0; for (String spec1 : speclist) { int wherex = 0; String spc1 = geneset.nameFix(spec1); //String spc1 = nameFix( spec1 ); for (String spec2 : speclist) { if (where != wherex) { int totalscore = 0; int totaltscore = 1; for (GeneGroup gg : allgg) { if ( /*gg.getSpecies().size() > 40 &&*/ gg.getSpecies().contains(spec1) && gg.getSpecies().contains(spec2)) { Teginfo ti1 = gg.species.get(spec1); Teginfo ti2 = gg.species.get(spec2); //if( ti1.tset.size() == 1 && ti2.tset.size() == 1 ) { //double bval = 0.0; int score = 0; int tscore = 1; for (Tegeval tv1 : ti1.tset) { for (Tegeval tv2 : ti2.tset) { Sequence seq1 = tv1.getAlignedSequence(); Sequence seq2 = tv2.getAlignedSequence(); if (seq1 != null && seq2 != null) { int mest = 0; int tmest = 0; int startcheck = 0; int start = -1; int stopcheck = 0; int stop = -1; for (int i = 0; i < seq1.length(); i++) { if (seq1.getCharAt(i) != '-') { startcheck |= 1; } if (seq2.getCharAt(i) != '-') { startcheck |= 2; } if (start == -1 && startcheck == 3) { start = i; break; } } for (int i = seq1.length() - 1; i >= 0; i--) { if (seq1.getCharAt(i) != '-') { stopcheck |= 1; } if (seq2.getCharAt(i) != '-') { stopcheck |= 2; } if (stop == -1 && stopcheck == 3) { stop = i + 1; break; } } //count += stop-start; for (int i = start; i < stop; i++) { char lc = seq1.getCharAt(i); char c = Character.toUpperCase(lc); //if( ) String comb = c + "" + c; if (blosumap.containsKey(comb)) tmest += blosumap.get(comb); } for (int i = start; i < stop; i++) { char lc = seq1.getCharAt(i); char c = Character.toUpperCase(lc); char lc2 = seq2.getCharAt(i); char c2 = Character.toUpperCase(lc2); String comb = c + "" + c2; if (blosumap.containsKey(comb)) mest += blosumap.get(comb); } double tani = (double) mest / (double) tmest; if (tani > (double) score / (double) tscore) { score = mest; tscore = tmest; } //ret = (double)score/(double)tscore; //int cval = tscore == 0 ? 0 : Math.min( 192, 512-score*512/tscore ); //return ret; } //if( where == 0 ) d1.add( gg.getCommonName() ); //else d2.add( gg.getCommonName() ); } } totalscore += score; totaltscore += tscore; /*if( bval > 0 ) { ani += bval; count++; }*/ //} } } double ani = (double) (totaltscore - totalscore) / (double) totaltscore; corrarr[where * speclist.size() + wherex] = ani; } wherex++; } where++; } TreeUtil tu = new TreeUtil(); geneset.corrInd.clear(); for (String spec : speclist) { geneset.corrInd.add(geneset.nameFix(spec)); } Node n = tu.neighborJoin(corrarr, geneset.corrInd, null, false, false); System.err.println(n); }); windowmenu.getItems().add(specorderaction); windowmenu.getItems().add(matrixaction); windowmenu.getItems().add(tniaction); windowmenu.getItems().add(anitreeaction); MenuItem neighbourhood = new MenuItem("Neighbourhood"); neighbourhood.setOnAction(actionEvent -> { try { Set<GeneGroup> genset = new HashSet<>(); if (!isGeneview()) { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { genset.add(gg); } } else { for (Gene gene : gtable.getSelectionModel().getSelectedItems()) { genset.add(gene.getGeneGroup()); } } new Neighbour(genset).neighbourMynd(GeneSetHead.this, comp, geneset.genelist, geneset.contigmap); } catch (IOException e1) { e1.printStackTrace(); } }); windowmenu.getItems().add(neighbourhood); MenuItem synteny = new MenuItem("Synteny"); synteny.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { //Set<String> species = speciesFromCluster( clusterMap ); new Synteni().syntenyMynd(GeneSetHead.this, comp, geneset.genelist); }); }); windowmenu.getItems().add(synteny); MenuItem compareplotaction = new MenuItem("Gene atlas"); compareplotaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { try { new GeneCompare().comparePlot(GeneSetHead.this, comp, geneset.genelist, geneset.clusterMap, 8192, 8192); } catch (IOException e1) { e1.printStackTrace(); } }); /*gatest("MAT4726"); final JFrame frame = new JFrame(); frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE ); frame.setSize(800, 600); final JComponent c = new JComponent() { public void paintComponent( Graphics g ) { g.drawImage(bimg, 0, 0, frame); } }; c.setPreferredSize( new Dimension(bimg.getWidth(), bimg.getHeight()) ); JScrollPane scrollpane = new JScrollPane( c ); frame.add( scrollpane ); frame.setVisible( true );*/ }); windowmenu.getItems().add(compareplotaction); MenuItem syntenygradientaction = new MenuItem("Synteny gradient"); syntenygradientaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { Set<String> presel = new HashSet<>(); if (isGeneview()) { for (Gene g : gtable.getSelectionModel().getSelectedItems()) { presel.addAll(g.getGeneGroup().getSpecies()); } } else { for (GeneGroup gg : table.getSelectionModel().getSelectedItems()) { presel.addAll(gg.getSpecies()); } } new SyntGrad().syntGrad(GeneSetHead.this, 4096, 4096, presel); }); }); windowmenu.getItems().add(syntenygradientaction); MenuItem genexyplotaction = new MenuItem("Gene XY plot"); genexyplotaction.setOnAction(actionEvent -> SwingUtilities.invokeLater( () -> new XYPlot().xyPlot(GeneSetHead.this, comp, geneset.genelist, geneset.clusterMap))); windowmenu.getItems().add(genexyplotaction); MenuItem refalignaction = new MenuItem("Reference align"); refalignaction.setOnAction(actionEvent -> { SwingUtilities.invokeLater(() -> { final TableView<Gene> table12 = getGeneTable(); final Collection<String> specset = geneset.getSpecies(); //speciesFromCluster( clusterMap ); final List<String> species = new ArrayList<>(specset); TableModel model = new TableModel() { @Override public int getRowCount() { return species.size(); } @Override public int getColumnCount() { return 1; } @Override public String getColumnName(int columnIndex) { return null; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return geneset.nameFix(species.get(rowIndex)); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; JTable table1 = new JTable(model); JTable table2 = new JTable(model); table1.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION); table2.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane scroll1 = new JScrollPane(table1); JScrollPane scroll2 = new JScrollPane(table2); FlowLayout flowlayout = new FlowLayout(); JComponent c = new JComponent() { }; c.setLayout(flowlayout); c.add(scroll1); c.add(scroll2); JOptionPane.showMessageDialog(comp, c); int r = table1.getSelectedRow(); int i = table1.convertRowIndexToModel(r); String spec = i == -1 ? null : species.get(i); List<Sequence> lcont = geneset.speccontigMap.get(spec); r = table2.getSelectedRow(); i = table2.convertRowIndexToModel(r); String refspec = i == -1 ? null : species.get(i); List<Sequence> lrefcont = geneset.speccontigMap.get(spec); /*ByteArrayOutputStream baos = new ByteArrayOutputStream(); Writer fw = new OutputStreamWriter( baos ); try { List<Sequence> lcont = geneset.speccontigMap.get(spec); for( Sequence seq : lcont ) { seq.writeSequence(fw); } fw.close(); } catch (IOException e1) { e1.printStackTrace(); } String comp = spec; byte[] bb = baos.toByteArray();*/ FlxReader flx = new FlxReader(); Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); //String uristr = "jar:" + geneset.zippath.toUri(); //URI geneset.zipuri = URI.create( uristr /*.replace("file://", "file:")*/ ); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { Path subf = root.resolve(spec + ".grp"); if (Files.exists(subf)) { BufferedReader br = Files.newBufferedReader(subf); Map<String, Map<String, String>> mm = flx.loadContigGraph(br); br.close(); String home = System.getProperty("user.home") + "/"; StringBuilder sb = comp != null ? flx.referenceAssembly(home, spec, refspec, lrefcont, lcont) : null; Sequence cseq = new Sequence(spec + "_chromosome", null); if (sb != null && sb.length() > 0) { br = new BufferedReader(new StringReader(sb.toString())); } else { Path sca = root.resolve(spec + ".csc"); if (!Files.exists(sca)) { sca = root.resolve(spec + ".sca"); } br = Files.newBufferedReader(sca); } //br = new BufferedReader( fr ); flx.connectContigs(br, cseq, false, new FileWriter(home + spec + "_new.fna"), spec); br.close(); } break; } } catch (Exception ex) { ex.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (IOException ie) { ie.printStackTrace(); } ; } }); //flx.start( f.getParentFile().getAbsolutePath()+"/", f.getName(), false, fw, comp, bb); }); windowmenu.getItems().add(refalignaction); windowmenu.getItems().add(new SeparatorMenuItem()); MenuItem runantismash = new MenuItem("Run antismash"); runantismash.setOnAction(actionEvent -> SwingUtilities.invokeLater(new Runnable() { public void run() { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<Object>(); //commands.add(genexyplotaction) for (String spec : selspec) { Path pp = Paths.get(userhome); Path p = pp.resolve(spec + ".gbk"); //BufferedWriter fw = Files.newBufferedWriter( p ); List<Sequence> clist = geneset.speccontigMap.get(spec); Map<String, List<Annotation>> mapan = new HashMap<String, List<Annotation>>(); Serifier serifier = new Serifier(); for (Sequence c : clist) { serifier.addSequence(c); serifier.mseq.put(c.getName(), c); List<Annotation> lann = new ArrayList<Annotation>(); if (c.getAnnotations() != null) for (Annotation ann : c.getAnnotations()) { Tegeval tv = (Tegeval) ann; Gene g = tv.getGene(); GeneGroup gg = g.getGeneGroup(); String name = g.getName(); if (gg != null && name.contains(spec)) { name = gg.getName(); } Annotation anno = new Annotation(c, tv.start, tv.stop, tv.ori, name); anno.id = tv.getGene().getId(); anno.type = "CDS"; String cazy = gg != null ? gg.getCommonCazy(geneset.cazymap) : null; if (cazy != null) anno.addDbRef("CAZY:" + cazy); lann.add(anno); } mapan.put(c.getName(), lann); } Sequences s = new Sequences(null, spec, "nucl", null, clist.size()); //serifier.addSequences(seqs); serifier.writeGenebank(p, false, true, s, mapan); //fw.close(); String apath = p.toAbsolutePath().toString(); if (hostname.equals("localhost")) { String[] cmds = { "run_antismash", apath }; //commands.add( pt ); commands.add(Arrays.asList(cmds)); } else { String aname = p.getFileName().toString(); String adir = aname.substring(0, aname.length() - 4); String cyghome = NativeRun.cygPath(userhome); String[] cmds = { "scp", apath, hostname + ":~", ";", "ssh", hostname, "run_antismash", aname, ";", "scp", "-r", hostname + ":~/" + adir, cyghome };//userhome+"~"}; //commands.add( pt ); commands.add(Arrays.asList(cmds)); } } Runnable run = new Runnable() { @Override public void run() { for (String spec : selspec) { Path p = Paths.get(userhome, spec); Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); final List<Path> lbi = new ArrayList<Path>(); try { geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { Path specdir = root; Files.walkFileTree(p, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { final Path destFile = Paths.get(specdir.toString(), file.toString()); //System.out.printf("Extracting file %s to %s\n", file, destFile); Files.copy(file, destFile, StandardCopyOption.REPLACE_EXISTING); return FileVisitResult.CONTINUE; } @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { String specdirstr = specdir.toString(); String dirstr = dir.toString(); final Path dirToCreate = specdir .resolve(dirstr.substring(userhome.length() + 1)); if (Files.notExists(dirToCreate)) { System.out.printf("Creating directory %s\n", dirToCreate); Files.createDirectory(dirToCreate); } return FileVisitResult.CONTINUE; } }); break; } URI uri = new URI("file://" + userhome + "/" + spec + "/index.html"); Desktop.getDesktop().browse(uri); } catch (Exception ex) { ex.printStackTrace(); } finally { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; } } } }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("antismash", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } } })); windowmenu.getItems().add(runantismash); MenuItem runsignalp = new MenuItem("Run signalP"); runsignalp.setOnAction(actionEvent -> SwingUtilities.invokeLater(new Runnable() { public void run() { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<Object>(); //commands.add(genexyplotaction) try { Map<String, String> env = new HashMap<String, String>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (String spec : selspec) { /*Path specdir = root.resolve(spec+".prodigal.fsa"); if( !Files.exists(specdir) ) { if( spec.startsWith("MAT") ) { specdir = root.resolve(spec+".gbk.aa"); } else specdir = root.resolve("fn_"+spec+"_scaffolds.prodigal.fsa"); }*/ Stream<Gene> genestream = geneset.genelist.stream() .filter(gene -> spec.equals(gene.getSpecies()) && (gene.tegeval.type == null || gene.tegeval.type.length() == 0)); Path sigout = root.resolve(spec + ".signalp"); Path[] pt = new Path[] { null, sigout, null }; if (hostname.equals("localhost")) { String[] cmds = { "signalp", "-t", "gram-", "-" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } else { Path p = Paths.get(spec + ".signalp"); BufferedWriter bw = Files.newBufferedWriter(p, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE); genestream.forEachOrdered(gene -> { try { gene.writeGeneIdFasta(bw); } catch (Exception e1) { e1.printStackTrace(); } }); bw.close(); //Files.copy(specdir, p, StandardCopyOption.REPLACE_EXISTING); String[] cmds = { "scp", spec + ".signalp", hostname + ":~", ";", "ssh", hostname, "signalp", "-t", "gram-", spec + ".signalp" }; //String[] cmds = {"ssh",hostname,"signalp","-t","gram-","-"}; commands.add(pt); commands.add(Arrays.asList(cmds)); } } break; } } catch (Exception ex) { ex.printStackTrace(); } Runnable run = new Runnable() { @Override public void run() { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; } }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("signalp", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } } })); windowmenu.getItems().add(runsignalp); MenuItem runtransm = new MenuItem("Run TransM"); runtransm.setOnAction(actionEvent -> SwingUtilities.invokeLater(new Runnable() { public void run() { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<>(); //commands.add(genexyplotaction) try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (String spec : selspec) { /*Path specdir = root.resolve(spec+".prodigal.fsa"); if( !Files.exists(specdir) ) { if( spec.startsWith("MAT") ) { specdir = root.resolve(spec+".gbk.aa"); } else specdir = root.resolve("fn_"+spec+"_scaffolds.prodigal.fsa"); }*/ Stream<Gene> genestream = geneset.genelist.stream() .filter(gene -> spec.equals(gene.getSpecies()) && (gene.tegeval.type == null || gene.tegeval.type.length() == 0)); ByteArrayOutputStream baos = new ByteArrayOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(baos)); genestream.forEach(gene -> { try { gene.writeGeneIdFasta(bw); } catch (Exception e1) { e1.printStackTrace(); } }); bw.close(); baos.close(); String seqs = baos.toString(); seqs = seqs.replace('*', 'X'); byte[] bb = seqs.getBytes(); Path sigout = root.resolve(spec + ".tm"); Object[] pt = new Object[] { bb, sigout, null }; if (hostname.equals("localhost")) { String[] cmds = { "decodeanhmm", "-f", "/opt/tmhmm-2.0c/lib/TMHMM2.0.options", "-modelfile", "/opt/tmhmm-2.0c/lib/TMHMM2.0.model" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } else { //Path p = Paths.get(spec+".tm"); //Files.copy(specdir, p, StandardCopyOption.REPLACE_EXISTING); String[] cmds = { "ssh", hostname, "decodeanhmm", "-f", "/opt/tmhmm-2.0c/lib/TMHMM2.0.options", "-modelfile", "/opt/tmhmm-2.0c/lib/TMHMM2.0.model" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } } break; } } catch (Exception ex) { ex.printStackTrace(); } Runnable run = () -> { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("transm", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } } })); windowmenu.getItems().add(runtransm); MenuItem runtrnascan = new MenuItem("tRNAscan"); runtrnascan.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> { try { Serifier ser = new Serifier(); Set<String> selspec = getSelspec(null, geneset.getSpecies(), null); JTextField host = new JTextField("localhost"); JOptionPane.showMessageDialog(null, host); String username = System.getProperty("user.name"); String hostname = host.getText(); /*Path[] pt = null; JFileChooser fc = new JFileChooser(); fc.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); if( fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION ) { pt = new Path[3]; pt[2] = fc.getSelectedFile().toPath(); }*/ List<Object> commands = new ArrayList<>(); //commands.add(genexyplotaction) try { Map<String, String> env = new HashMap<>(); env.put("create", "true"); String uristr = "jar:" + geneset.zippath.toUri(); URI zipuri = URI.create(uristr /*.replace("file://", "file:")*/ ); geneset.zipfilesystem = FileSystems.newFileSystem(geneset.zipuri, env); for (Path root : geneset.zipfilesystem.getRootDirectories()) { for (String spec : selspec) { Path specdir = root.resolve(spec + ".fna"); if (!Files.exists(specdir)) { if (spec.startsWith("MAT")) { specdir = root.resolve(spec + ".gbk.fna"); } else specdir = root.resolve("fn_" + spec + "_scaffolds.fastg"); } System.err.println(Files.exists(specdir)); Path sigout = root.resolve("trnas.txt"); if (hostname.equals("localhost1")) { Path[] pt = new Path[] { specdir, sigout, null }; String[] cmds = { "/usr/local/bin/tRNAscan-SE", "-B", "-" }; commands.add(pt); commands.add(Arrays.asList(cmds)); } else { Path[] pt = new Path[] { null, sigout, null }; Path p = Paths.get(spec + ".trnascan"); Files.copy(specdir, p, StandardCopyOption.REPLACE_EXISTING); List<String> lcmd; if (hostname.equals("localhost")) { //String[] cmds = {"/usr/local/bin/trnascan-1.4", spec + ".trnascan"}; String[] cmds = { "/usr/local/bin/tRNAscan-SE", "-B", spec + ".trnascan" }; lcmd = Arrays.asList(cmds); } else { String[] cmds = { "scp", spec + ".trnascan", hostname + ":~", ";", "ssh", hostname, "trnascan-1.4", spec + ".trnascan" }; lcmd = Arrays.asList(cmds); //String[] cmds = {"ssh",hostname,"tRNAscan-SE","-B","-"}; } commands.add(pt); commands.add(lcmd); } } break; } } catch (Exception ex) { ex.printStackTrace(); } Runnable run = () -> { try { geneset.zipfilesystem.close(); } catch (Exception e) { e.printStackTrace(); } ; }; NativeRun nr = new NativeRun(run); nr.runProcessBuilder("tRNAscan", commands, new Object[3], false, run, false); } catch (IOException e1) { e1.printStackTrace(); } })); windowmenu.getItems().add(runtrnascan); Menu select = new Menu("Select"); MenuItem breakpointselAction = new MenuItem("Select breakpoints"); breakpointselAction.setOnAction(actionEvent -> { String spec = syncolorcomb.getSelectionModel().getSelectedItem(); int rr = 0; for (Gene g : geneset.genelist) { if (!spec.equals(g.getSpecies()) && g.getSpecies().contains("eggert")) { Tegeval tv2 = g.tegeval; Annotation n2 = tv2.getNext(); Annotation p2 = tv2.getPrevious(); GeneGroup gg = g.getGeneGroup(); if (gg.getName().contains("rhodane")) { System.err.println(); } Teginfo ti = gg.getGenes(spec); int msimcount = 0; if (ti != null) { for (Tegeval tv1 : ti.tset) { int simcount = 0; Annotation n = tv1.getNext(); Annotation p = tv1.getPrevious(); GeneGroup ggg = tv1.getGene().getGeneGroup(); if (n2 != null) { if (ggg == n2.getGene().getGeneGroup()) { simcount++; } Annotation nn2 = n2.getNext(); if (nn2 != null) { if (ggg == nn2.getGene().getGeneGroup()) { simcount++; } } } if (p2 != null) { if (ggg == p2.getGene().getGeneGroup()) { simcount++; } Annotation pp2 = p2.getPrevious(); if (pp2 != null) { if (ggg == pp2.getGene().getGeneGroup()) { simcount++; } } } if (n != null) { GeneGroup ngg = n.getGene().getGeneGroup(); if (ngg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (ngg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (ngg == p2.getGene().getGeneGroup()) { simcount++; } } Annotation nn = n.getNext(); if (nn != null) { ngg = nn.getGene().getGeneGroup(); if (ngg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (ngg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (ngg == p2.getGene().getGeneGroup()) { simcount++; } } } } if (p != null) { GeneGroup pgg = p.getGene().getGeneGroup(); if (pgg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (pgg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (pgg == p2.getGene().getGeneGroup()) { simcount++; } } Annotation pp = p.getPrevious(); if (pp != null) { pgg = pp.getGene().getGeneGroup(); if (pgg == tv2.getGene().getGeneGroup()) { simcount++; } if (n2 != null) { if (pgg == n2.getGene().getGeneGroup()) { simcount++; } } if (p2 != null) { if (pgg == p2.getGene().getGeneGroup()) { simcount++; } } } } //double rat = GeneCompare.invertedGradientRatio(spec, contigs, -1.0, gg, tv); if (simcount >= msimcount) { //tv = tv1; msimcount = simcount; } //double ratio = GeneCompare.invertedGradientRatio(spec, contigs, -1.0, gg, tv); //GeneCompare.gradientColor(); } if (msimcount < 2) { gtable.getSelectionModel().select(g); } } } rr++; } /*List<Sequence> contigs = geneset.speccontigMap.get( spec ); for( Sequence c : contigs ) { for( Annotation ann : c.annset ) { Tegeval tv = (Tegeval)ann; } }*/ }); MenuItem saveselAction = new MenuItem("Save selection"); saveselAction.setOnAction(actionEvent -> { /*int[] rr = table.getSelectedRows(); if( rr.length > 0 ) { String val = Integer.toString( table.convertRowIndexToModel(rr[0]) ); for( int i = 1; i < rr.length; i++ ) { val += ","+table.convertRowIndexToModel(rr[i]); } String selname = JOptionPane.showInputDialog("Selection name"); if( comp instanceof Applet ) { try { ((GeneSetHead)comp).saveSel( selname, val); } catch (Exception e1) { e1.printStackTrace(); } } }*/ }); select.getItems().add(breakpointselAction); select.getItems().add(saveselAction); select.getItems().add(new SeparatorMenuItem()); MenuItem showall = new MenuItem("Show all"); showall.setOnAction(actionEvent -> { genefilterset.clear(); updateFilter(table, label); }); select.getItems().add(showall); MenuItem croptosel = new MenuItem("Crop to selection"); croptosel.setOnAction(actionEvent -> { Set<GeneGroup> selitems = new HashSet<>(table.getSelectionModel().getSelectedItems()); filteredData.setPredicate(p -> selitems.contains(p)); }); select.getItems().add(croptosel); MenuItem croptoinvsel = new MenuItem("Crop to inverted selection"); croptoinvsel.setOnAction(actionEvent -> { genefilterset.clear(); for (int i = 0; i < table.getItems().size(); i++) { if (!table.getSelectionModel().isSelected(i)) { genefilterset.add(i); } } updateFilter(table, label); }); select.getItems().add(croptoinvsel); MenuItem removesel = new MenuItem("Remove selection"); removesel.setOnAction(actionEvent -> { // genefilterset.clear(); //int[] rr = table.getSelectedRows(); if (genefilterset.isEmpty()) { Set<Integer> ii = new HashSet<Integer>(); for (int r : table.getSelectionModel().getSelectedIndices()) ii.add(r); for (int i = 0; i < geneset.genelist.size(); i++) { if (!ii.contains(i)) genefilterset.add(i); } } else { for (int r : table.getSelectionModel().getSelectedIndices()) { //int mr = table.convertRowIndexToModel(r); genefilterset.remove(r); } } updateFilter(table, label); }); select.getItems().add(removesel); MenuItem invsel = new MenuItem("Invert selection"); invsel.setOnAction(actionEvent -> { ObservableList<GeneGroup> selitems = table.getSelectionModel().getSelectedItems(); List<GeneGroup> newsel = new ArrayList<>(filteredData); newsel.removeAll(selitems); table.getSelectionModel().clearSelection(); newsel.stream().forEach(gg -> table.getSelectionModel().select(gg)); // genefilterset.clear(); //int[] rr = table.getSelectedRows(); /*Set<Integer> iset = new HashSet<>(); for( int r : table.getSelectionModel().getSelectedIndices() ) { iset.add( r ); } table.getSelectionModel().clearSelection(); for (int r = 0; r < table.getItems().size(); r++) { if( !iset.contains(r) ) table.getSelectionModel().select(r); /*if (table.isRowSelected(r)) table.removeRowSelectionInterval(r, r); else table.addRowSelectionInterval(r, r); }*/ }); select.getItems().add(invsel); //select.addSeparator(); select.getItems().add(new SeparatorMenuItem()); MenuItem selsinglemult = new MenuItem("Select single copy genes found in multiple strains"); selsinglemult.setOnAction(actionEvent -> { Set<String> specset = getSelspec(GeneSetHead.this, geneset.specList); for (GeneGroup gg : geneset.allgenegroups) { Set<String> checkspec = new HashSet<String>(gg.species.keySet()); checkspec.retainAll(specset); if (gg.getCommonTag() == null && checkspec.size() > 1 && gg.getTegevals().size() == gg.species.size()) {//gg.getTegevals(checkspec).size() == checkspec.size() ) { table.getSelectionModel().select(gg); //table.setro } } }); select.getItems().add(selsinglemult); MenuItem selsinglemultstrain = new MenuItem( "Select single copy genes in accessory genome of multiple strains"); selsinglemultstrain.setOnAction(actionEvent -> { Set<String> specset = getSelspec(GeneSetHead.this, geneset.specList); for (GeneGroup gg : geneset.allgenegroups) { Set<String> checkspec = new HashSet<String>(gg.species.keySet()); checkspec.retainAll(specset); if (gg.getCommonTag() == null && checkspec.size() > 1 && checkspec.size() < specset.size() && gg.getTegevals().size() == gg.species.size()) {//gg.getTegevals(checkspec).size() == checkspec.size() ) { table.getSelectionModel().select(gg); //table.setro } } }); select.getItems().add(selsinglemultstrain); MenuItem selsinglecopygenes = new MenuItem("Select single copy genes"); selsinglecopygenes.setOnAction(actionEvent -> { Set<String> specset = getSelspec(GeneSetHead.this, geneset.specList); for (GeneGroup gg : geneset.allgenegroups) { if (gg.getTegevals().size() == gg.species.size()) { table.getSelectionModel().select(gg); //table.setro } } }); select.getItems().add(selsinglecopygenes); MenuItem selduplgenes = new MenuItem("Select duplicated genes"); selduplgenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { int cnt = 0; for (String spec : gg.species.keySet()) { Teginfo ti = gg.species.get(spec); if (ti.tset.size() == 2) { List<Tegeval> ta = new ArrayList<Tegeval>(ti.tset); if (ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) cnt++; } } if ((float) cnt / (float) gg.species.size() > 0.7) { table.getSelectionModel().select(gg); } } }); select.getItems().add(selduplgenes); MenuItem seltriplgenes = new MenuItem("Select triplicated genes"); seltriplgenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { int cnt = 0; for (String spec : gg.species.keySet()) { Teginfo ti = gg.species.get(spec); if (ti.tset.size() == 3) { List<Tegeval> ta = new ArrayList<Tegeval>(ti.tset); if ((ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) && (ta.get(1).getNext() == ta.get(2) || ta.get(1).getPrevious() == ta.get(2))) cnt++; } } if ((float) cnt / (float) gg.species.size() > 0.7) { table.getSelectionModel().select(gg); } } }); select.getItems().add(seltriplgenes); MenuItem selplasmidgenes = new MenuItem("Select plasmid genes"); selplasmidgenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { if (gg.isOnAnyPlasmid()) { table.getSelectionModel().select(gg); } /*int cnt = 0; for( String spec : gg.species.keySet() ) { Teginfo ti = gg.species.get( spec ); if( ti.tset.size() == 3 ) { List<Tegeval> ta = new ArrayList<Tegeval>( ti.tset ); if( (ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) && (ta.get(1).getNext() == ta.get(2) || ta.get(1).getPrevious() == ta.get(2))) cnt++; } } if( (float)cnt / (float)gg.species.size() > 0.7 ) { int r = table.convertRowIndexToView(gg.index); table.addRowSelectionInterval(r, r); }*/ } }); select.getItems().add(selplasmidgenes); MenuItem selectphagegenes = new MenuItem("Select phage genes"); selectphagegenes.setOnAction(actionEvent -> { for (GeneGroup gg : geneset.allgenegroups) { if (gg.isInAnyPhage()) { table.getSelectionModel().select(gg); } /*int cnt = 0; for( String spec : gg.species.keySet() ) { Teginfo ti = gg.species.get( spec ); if( ti.tset.size() == 3 ) { List<Tegeval> ta = new ArrayList<Tegeval>( ti.tset ); if( (ta.get(0).getNext() == ta.get(1) || ta.get(0).getPrevious() == ta.get(1)) && (ta.get(1).getNext() == ta.get(2) || ta.get(1).getPrevious() == ta.get(2))) cnt++; } } if( (float)cnt / (float)gg.species.size() > 0.7 ) { int r = table.convertRowIndexToView(gg.index); table.addRowSelectionInterval(r, r); }*/ } }); select.getItems().add(selectphagegenes); select.getItems().add(new SeparatorMenuItem()); MenuItem selectsharingaction = new MenuItem("Select sharing"); selectsharingaction.setOnAction(actionEvent -> { RadioButton panbtn = new RadioButton("Pan"); RadioButton corebtn = new RadioButton("Core"); RadioButton blehbtn = new RadioButton("Only in"); ToggleGroup tg = new ToggleGroup(); panbtn.setToggleGroup(tg); corebtn.setToggleGroup(tg); blehbtn.setToggleGroup(tg); HBox sp = new HBox(); sp.getChildren().add(panbtn); sp.getChildren().add(corebtn); sp.getChildren().add(blehbtn); Scene scene = new Scene(sp); //FlowLayout flowlayout = new FlowLayout(); final JFXPanel c = new JFXPanel(); c.setScene(scene); /*Group root = new Group(); Scene scene = new Scene(root, javafx.scene.paint.Color.ALICEBLUE); root.getChildren().add(panbtn); root.getChildren().add(corebtn); root.getChildren().add(blehbtn); JFXPanel fxpanel = new JFXPanel(); fxpanel.setScene( scene );*/ //bg.add( panbtn ); //bg.add( corebtn ); //bg.add( blehbtn ); corebtn.setSelected(true); //Object[] objs = new Object[] { panbtn, corebtn }; //JOptionPane.showMessageDialog( geneset, objs, "Select id types", JOptionPane.PLAIN_MESSAGE ); SwingUtilities.invokeLater(new Runnable() { public void run() { final List<String> species = geneset.getSpecies(); TableModel model = new TableModel() { @Override public int getRowCount() { return species.size(); } @Override public int getColumnCount() { return 1; } @Override public String getColumnName(int columnIndex) { return null; } @Override public Class<?> getColumnClass(int columnIndex) { return String.class; } @Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return species.get(rowIndex); } @Override public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } @Override public void addTableModelListener(TableModelListener l) { } @Override public void removeTableModelListener(TableModelListener l) { } }; JTable table = new JTable(model); table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JScrollPane scroll = new JScrollPane(table); Object[] objs = new Object[] { scroll, c }; JOptionPane.showMessageDialog(comp, objs); final Set<String> specs = new HashSet<String>(); int[] rr = table.getSelectedRows(); for (int r : rr) { String spec = (String) table.getValueAt(r, 0); specs.add(spec); } Platform.runLater(new Runnable() { public void run() { for (GeneGroup gg : geneset.allgenegroups) { if (blehbtn.isSelected()) { Set<String> ss = new HashSet<String>(gg.species.keySet()); ss.removeAll(specs); if (ss.size() == 0) { GeneSetHead.this.table.getSelectionModel().select(gg); } } else if (gg.species.keySet().containsAll(specs) && (panbtn.isSelected() || specs.size() == gg.species.size())) { GeneSetHead.this.table.getSelectionModel().select(gg); } } } }); } }); }); select.getItems().add(selectsharingaction); MenuItem selectdirtyaction = new MenuItem("Select dirty"); selectdirtyaction.setOnAction(actionEvent -> { if (!isGeneview()) { int i = 0; for (GeneGroup gg : geneset.allgenegroups) { if (gg.containsDirty()) { table.getSelectionModel().select(gg); } i++; } } }); select.getItems().add(selectdirtyaction); MenuItem selectdesignationaction = new MenuItem("Select designation"); selectdesignationaction.setOnAction(actionEvent -> { JComboBox<String> descombo = new JComboBox<String>( geneset.deset.toArray(new String[geneset.deset.size()])); descombo.insertItemAt("", 0); descombo.setSelectedIndex(0); JOptionPane.showMessageDialog(GeneSetHead.this, descombo); String seldes = (String) descombo.getSelectedItem(); if (!isGeneview()) { int i = 0; for (GeneGroup gg : geneset.allgenegroups) { if (gg.genes != null) for (Gene g : gg.genes) { if (seldes.equals(g.tegeval.designation)) { table.getSelectionModel().select(gg); } } i++; } } }); select.getItems().add(selectdesignationaction); MenuItem blastselect = new MenuItem("Blast select"); blastselect.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blast(false))); select.getItems().add(blastselect); MenuItem blastxselect = new MenuItem("Blastx select"); blastxselect.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blast(true))); select.getItems().add(blastxselect); MenuItem blastnselect = new MenuItem("Blastn select"); blastnselect.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blastn(true))); select.getItems().add(blastnselect); MenuItem blastsearch = new MenuItem("Blastn search"); blastsearch.setOnAction(actionEvent -> SwingUtilities.invokeLater(() -> blastn(false))); select.getItems().add(blastsearch); menubar.getMenus().add(file); menubar.getMenus().add(edit); menubar.getMenus().add(view); menubar.getMenus().add(sequencemenu); menubar.getMenus().add(windowmenu); menubar.getMenus().add(select); menubar.getMenus().add(help); if (comp != null) { final Window window = SwingUtilities.windowForComponent(comp); initFSKeyListener(window); if (comp instanceof JFrame || window instanceof JFrame) { JFrame frame = (JFrame) (window == null ? comp : window); if (!frame.isResizable()) frame.setResizable(true); frame.addKeyListener(keylistener); frame.setJMenuBar(jmenubar); } } final Button jb = new Button("Atlas"); jb.setOnAction(event -> { try { URL url = new URL("file:///home/sigmar/workspace/distann/bin/circle.html"); GeneSetHead.this.getAppletContext().showDocument(url, "_blank"); } catch (MalformedURLException e1) { e1.printStackTrace(); } }); try { newSoft(jb, comp, genetable, upper, lower, toolbar, btoolbar, GeneSetHead.this, selcomb); } catch (IOException e) { e.printStackTrace(); } if (comp != null) { if (comp instanceof Applet) try { ((GeneSetHead) comp).saveSel(null, null); } catch (NoSuchMethodError | Exception e1) { e1.printStackTrace(); } //comp.add( cc ); } }