package org.broad.igv.mupit;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import org.broad.igv.prefs.IGVPreferences;
import org.broad.igv.prefs.PreferenceEditorFX;
import org.broad.igv.prefs.PreferencesManager;
import org.broad.igv.util.BrowserLauncher;
import org.broad.igv.util.HttpUtils;
import javax.swing.*;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by jrobinso on 2/17/17.
* <p>
* Static methods for interacting with the "Cravat" webservice
* <p>
* http://www.cravat.us/CRAVAT/rest/service/query?mutation=chr22_30421786_+_A_T
*/
public class Cravat {
public static void main(String[] args) throws IOException {
test();
}
static Color lightGray = new Color(0.9, 0.9, 0.9, 0.5);
static void test() throws IOException {
String jsonString = HttpUtils.getInstance().getContentsAsJSON(
new URL("http://www.cravat.us/CRAVAT/rest/service/query?mutation=chr22_30421786_+_A_T"));
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(jsonString).getAsJsonObject();
openCravatView(obj);
}
static void openCravatView(JsonObject jsonObject) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Cravat");
final JFXPanel fxPanel = new JFXPanel();
frame.add(fxPanel);
frame.setSize(800, 800);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Platform.runLater(() -> initFX(fxPanel, jsonObject));
});
}
private static void initFX(JFXPanel fxPanel, JsonObject jsonObject) {
GridPane gridPane = new GridPane();
gridPane.setHgap(5);
gridPane.setVgap(5);
ScrollPane scrollPane = new ScrollPane(gridPane);
Scene scene = new Scene(scrollPane);
int row = 1;
for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().getAsString();
final Label keyLabel = new Label(key);
Node valueLabel;
if("dbSNP".equals(key)) {
String link = "https://www.ncbi.nlm.nih.gov/projects/SNP/snp_ref.cgi?searchType=adhoc_search&type=rs&rs=" + value;
valueLabel = new Hyperlink(value);
((Hyperlink) valueLabel).setOnAction(event -> {
try {
BrowserLauncher.openURL(link);
} catch (IOException e) {
e.printStackTrace();
}
});
}
else{
valueLabel = new Label(value);
}
StackPane keyPane = new StackPane(keyLabel);
keyPane.setAlignment(Pos.CENTER_LEFT);
StackPane valuePane = new StackPane(valueLabel);
valuePane.setAlignment(Pos.CENTER_LEFT);
if(row % 2 == 0) {
keyPane.setStyle("-fx-background-color: #FFFFFF;");
valuePane.setStyle("-fx-background-color: #FFFFFF;");
}
gridPane.add(keyPane, 1, row);
gridPane.add(valuePane, 2, row);
row++;
}
fxPanel.setScene(scene);
}
}