use of org.monarchinitiative.loinc2hpo.model.Model in project loinc2hpo by monarch-initiative.
the class AnnotateTabController method initialize.
@FXML
private void initialize() {
if (model != null) {
// weird line. model is set by main controller; this line never runs
setModel(model);
// currentAnnotationController.setModel(model); //let current annotation stage have access to model
}
// currentAnnotationController.setModel(model); //let current annotation stage have access to model
suggestHPOButton.setTooltip(new Tooltip("Suggest new HPO terms"));
filterButton.setTooltip(new Tooltip("Filter Loinc by providing a Loinc list in txt file"));
addCodedAnnotationButton.setTooltip(new Tooltip("Add current annotation"));
flagForAnnotation.setTooltip(new Tooltip("Check if you are not confident"));
clearButton.setTooltip(new Tooltip("Clear all textfields"));
allAnnotationsButton.setTooltip(new Tooltip("Display annotations for currently selected Loinc code"));
initLOINCtableButton.setTooltip(new Tooltip("Initialize Loinc Core Table. Download it first."));
IntializeHPOmodelbutton.setTooltip(new Tooltip("Load hp.owl as a RDF model for query"));
searchForLOINCIdButton.setTooltip(new Tooltip("Search Loinc with a Loinc code or name"));
modeButton.setTooltip(new Tooltip("Switch between basic and advanced annotation mode"));
autoQueryButton.setTooltip(new Tooltip("Find candidate HPO terms with automatically generated keys"));
manualQueryButton.setTooltip(new Tooltip("Find candidate HPO terms with manually typed keys"));
hpoListView.setCellFactory(new Callback<ListView<HPO_Class_Found>, ListCell<HPO_Class_Found>>() {
@Override
public ListCell<HPO_Class_Found> call(ListView<HPO_Class_Found> param) {
return new ListCell<HPO_Class_Found>() {
@Override
public void updateItem(HPO_Class_Found hpo, boolean empty) {
super.updateItem(hpo, empty);
if (hpo != null) {
setText(hpo.toString());
Tooltip tooltip = new Tooltip(hpo.getDefinition());
tooltip.setPrefWidth(300);
tooltip.setWrapText(true);
setTooltip(tooltip);
} else {
setText(null);
}
}
};
}
});
treeView.setCellFactory(new Callback<TreeView<HPO_TreeView>, TreeCell<HPO_TreeView>>() {
@Override
public TreeCell<HPO_TreeView> call(TreeView<HPO_TreeView> param) {
return new TreeCell<HPO_TreeView>() {
@Override
public void updateItem(HPO_TreeView hpo, boolean empty) {
super.updateItem(hpo, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
if (hpo != null && hpo.hpo_class_found == null) {
setText("root");
}
if (hpo != null && hpo.hpo_class_found != null) {
setText(hpo.toString());
if (hpo.hpo_class_found.getDefinition() != null) {
Tooltip tooltip = new Tooltip(hpo.hpo_class_found.getDefinition());
tooltip.setPrefWidth(300);
tooltip.setWrapText(true);
setTooltip(tooltip);
}
}
}
}
};
}
});
// if user creates a new Loinc group, add two menuitems for it, and specify the actions when those menuitems are
// clicked
userCreatedLoincLists.addListener(new ListChangeListener<String>() {
@Override
public void onChanged(Change<? extends String> c) {
while (c.next()) {
if (c.wasAdded()) {
logger.trace(c + " was added");
c.getAddedSubList().stream().filter(p -> !model.getUserCreatedLoincLists().containsKey(p)).forEach(p -> {
model.addUserCreatedLoincList(p, new LinkedHashSet<>());
MenuItem newListMenuItem = new MenuItem(p);
userCreatedLoincListsButton.getItems().add(newListMenuItem);
newListMenuItem.setOnAction((event -> {
logger.trace("action detected");
if (loincTableView.getSelectionModel().getSelectedItem() != null) {
LoincId loincId = loincTableView.getSelectionModel().getSelectedItem().getLOINC_Number();
if (model.getUserCreatedLoincLists().get(p).contains(loincId)) {
model.getUserCreatedLoincLists().get(p).remove(loincId);
logger.trace(String.format("LOINC: %s removed from %s", loincId, p));
} else {
model.getUserCreatedLoincLists().get(p).add(loincId);
logger.trace(String.format("LOINC: %s added to %s", loincId, p));
}
changeColorLoincTableView();
model.setSessionChanged(true);
}
}));
MenuItem newExportMenuItem = new MenuItem(p);
exportLoincListButton.getItems().add(newExportMenuItem);
newExportMenuItem.setOnAction((event -> {
logger.trace("action detected");
if (loincTableView.getSelectionModel().getSelectedItem() != null) {
Set<LoincId> loincIds = model.getUserCreatedLoincLists().get(p);
if (loincIds.isEmpty()) {
return;
}
FileChooser chooser = new FileChooser();
chooser.setTitle("Save Loinc List: ");
chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("TSV files (*.txt)", "*.txt"));
chooser.setInitialFileName(p);
File f = chooser.showSaveDialog(null);
String filepath;
if (f == null) {
return;
} else {
filepath = f.getAbsolutePath();
}
StringBuilder builder = new StringBuilder();
loincIds.forEach(l -> {
builder.append(l);
builder.append("\n");
});
WriteToFile.writeToFile(builder.toString().trim(), filepath);
}
}));
MenuItem newImportMenuItem = new MenuItem(p);
importLoincGroupButton.getItems().add(newImportMenuItem);
newImportMenuItem.setOnAction((event) -> {
logger.trace("user wants to import " + p);
FileChooser chooser = new FileChooser();
chooser.setTitle("Select file to import from");
File f = chooser.showOpenDialog(null);
if (f == null) {
return;
}
List<String> malformed = new ArrayList<>();
List<String> notFound = new ArrayList<>();
try {
LoincOfInterest loincSet = new LoincOfInterest(f.getAbsolutePath());
Set<String> loincIds = loincSet.getLoincOfInterest();
loincIds.forEach(l -> {
LoincId loincId = null;
try {
loincId = new LoincId(l);
} catch (MalformedLoincCodeException e) {
malformed.add(l);
}
if (model.getLoincEntryMap().containsKey(loincId)) {
model.getUserCreatedLoincLists().get(p).add(loincId);
} else {
notFound.add(l);
}
changeColorLoincTableView();
});
} catch (FileNotFoundException e) {
logger.error("File not found. Should never happen");
}
if (!malformed.isEmpty() || !notFound.isEmpty()) {
String malformedString = String.join("\n", malformed);
String notFoundString = String.join("\n", notFound);
PopUps.showInfoMessage(String.format("Malformed Loinc: %d\n%s\nNot Found: %d\n%s", malformed.size(), malformedString, notFound.size(), notFoundString), "Error during importing");
}
});
});
} else {
logger.error("This should never happen");
}
}
}
});
initadvancedAnnotationTable();
}
use of org.monarchinitiative.loinc2hpo.model.Model in project loinc2hpo by monarch-initiative.
the class MainController method initialize.
@FXML
private void initialize() {
Platform.runLater(() -> {
annotateTabButton.setDisable(true);
Loinc2HPOAnnotationsTabButton.setDisable(true);
Loinc2HpoConversionTabButton.setDisable(true);
});
configurationComplete.addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (newValue.booleanValue()) {
Platform.runLater(() -> {
annotateTabButton.setDisable(false);
Loinc2HPOAnnotationsTabButton.setDisable(false);
Loinc2HpoConversionTabButton.setDisable(false);
});
}
}
});
this.model = new Model();
// read in settings from file
File settings = getPathToSettingsFileAndEnsurePathExists();
model.setPathToSettingsFile(settings.getAbsolutePath());
if (settings.exists()) {
model.inputSettings(settings.getAbsolutePath());
configurationComplete.setValue(isConfigurationCompleted());
}
// set it to the default path. user can still change it
if (model.getPathToAutoSavedFolder() == null) {
model.setPathToAutoSavedFolder(Loinc2HpoPlatform.getLOINC2HPODir() + File.separator + "Data");
File folder = new File(model.getPathToAutoSavedFolder());
boolean created = false;
if (!folder.exists()) {
created = folder.mkdir();
}
if (created) {
model.writeSettings();
}
configurationComplete.set(isConfigurationCompleted());
}
if (setupTabController == null) {
logger.error("setupTabController is null");
return;
}
setupTabController.setModel(model);
if (annotateTabController == null) {
logger.error("annotate Controller is null");
return;
}
annotateTabController.setModel(model);
if (loinc2HpoAnnotationsTabController == null) {
logger.error("loinc2HpoAnnotationsTabController is null");
return;
}
if (loinc2HPOConversionTabController == null) {
logger.error("loinc2HPOConversionTabController is null");
return;
}
currentAnnotationController.setModel(model);
if (model == null) {
logger.error("main controller model is null");
return;
}
loinc2HpoAnnotationsTabController.setModel(model);
loinc2HPOConversionTabController.setModel(model);
if (Loinc2HpoPlatform.isMacintosh()) {
loincmenubar.useSystemMenuBarProperty().set(true);
}
// control how menu items should be shown
importAnnotationButton.setDisable(true);
exportMenu.setDisable(true);
tabPane.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Tab>() {
@Override
public void changed(ObservableValue<? extends Tab> observable, Tab oldValue, Tab newValue) {
if (newValue.equals(Loinc2HPOAnnotationsTabButton)) {
importAnnotationButton.setDisable(false);
exportMenu.setDisable(false);
clearMenu.setDisable(false);
} else {
importAnnotationButton.setDisable(true);
exportMenu.setDisable(true);
clearMenu.setDisable(true);
}
}
});
if (configurationComplete.get()) {
annotateTabController.defaultStartUp();
defaultStartup();
if (model.getPathToLastSession() != null) {
openSession(model.getPathToLastSession());
}
}
// @TODO: to decide whether to remove the following menuitems
importLoincCategory.setVisible(false);
exportLoincCategory.setVisible(false);
saveAnnotationsMenuItem.setVisible(false);
saveAnnotationsAsMenuItem.setVisible(false);
appendAnnotationsToMenuItem.setVisible(false);
clearMenu.setVisible(false);
}
use of org.monarchinitiative.loinc2hpo.model.Model in project loinc2hpo by monarch-initiative.
the class CurrentAnnotationController method populateTables.
private void populateTables() {
if (model == null) {
logger.error("model is null.");
return;
}
this.currentAnnotation = model.getCurrentAnnotation();
LoincEntry currentLoincEntry = model.getLoincEntryMap().get(currentAnnotation.getLoincId());
annotationTitle.setText(String.format("Annotations for Loinc: %s[%s]", currentLoincEntry.getLOINC_Number(), currentLoincEntry.getLongName()));
internalCodeAnnotations.clear();
currentAnnotation.getCandidateHpoTerms().entrySet().stream().filter(p -> p.getKey().getSystem().equals(Loinc2HPOCodedValue.CODESYSTEM)).map(p -> new Annotation(p.getKey(), p.getValue())).forEach(internalCodeAnnotations::add);
externalCodeAnnotations.clear();
currentAnnotation.getCandidateHpoTerms().entrySet().stream().filter(p -> !p.getKey().getSystem().equals(Loinc2HPOCodedValue.CODESYSTEM)).map(p -> new Annotation(p.getKey(), p.getValue())).forEach(externalCodeAnnotations::add);
interpretationCodeAnnotations.clear();
for (Map.Entry<Code, Code> entry : CodeSystemConvertor.getCodeConversionMap().entrySet()) {
logger.debug("key: " + entry.getKey() + "\nvalue: " + entry.getValue());
HpoTermId4LoincTest result = currentAnnotation.loincInterpretationToHPO(entry.getValue());
logger.debug("result is null? " + (result == null));
if (result != null) {
Annotation annotation = new Annotation(entry.getKey(), result);
interpretationCodeAnnotations.add(annotation);
logger.debug("interpretationCodeAnnotations size: " + interpretationCodeAnnotations.size());
}
}
logger.debug("internalTableview is null: " + (internalTableview == null));
logger.debug("internalCodeAnnotations is null: " + (internalTableview == null));
logger.debug("internal annotation size: " + internalCodeAnnotations.size());
internalCodeAnnotations.forEach(logger::info);
logger.trace("exit initInternalTableview()");
}
Aggregations