/*
* Copyright (c) 2015 University of Illinois Board of Trustees, All rights reserved.
* Developed at GSLIS/ the iSchool, by Dr. Jana Diesner, Amirhossein Aleyasen,
* Chieh-Li Chin, Shubhanshu Mishra, Kiumars Soltani, and Liang Tao.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses>.
*
*/
package context.ui.control.entitynetwork;
import context.app.AppConfig;
import context.ui.control.configuration.ConfigurationController;
import context.ui.misc.CustomGridPane;
import context.ui.misc.PropertiesUtil;
import java.net.URL;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.ResourceBundle;
import java.util.Set;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
/**
* FXML Controller class
*
* @author Amirhossein Aleyasen <aleyase2@illinois.edu>
*/
public class EntityNetworkConfigurationController extends ConfigurationController implements Initializable {
/**
*
*/
public static String path = PropertiesUtil.getFXMLPath(EntityNetworkConfigurationController.class);
@FXML
private Label titleLabel;
@FXML
private ComboBox<String> codebookMethodComboBox;
@FXML
private ComboBox<String> codebookModeComboBox;
// @FXML
// private ComboBox<String> networkTypeComboBox;
@FXML
private ComboBox<String> aggregationComboBox;
@FXML
private TextField distanceTextField;
@FXML
private ComboBox<String> unitOfAnalysisComboBox;
@FXML
private TextField customTagTextField;
@FXML
private VBox gridContainerVBox;
private CheckBox[][] checkboxes;
private List<String> abbr = Arrays.asList("ORG", "PRS", "LOC", "DTE", "TME", "MNY");
private List<String> names = Arrays.asList("Organization", "Person", "Location", "Date", "Time", "Money");
private List<String> labels = Arrays.asList("ORGANIZATION", "PERSON", "LOCATION", "DATE", "TIME", "MONEY");
/**
*
* @param title
*/
@Override
public void setTitle(String title) {
titleLabel.setText(title);
}
/**
*
* @param url
* @param rb
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
final CheckBox[][] checkboxes = new CheckBox[names.size()][names.size()];
this.checkboxes = checkboxes;
gridContainerVBox.getChildren().add(CustomGridPane.addGridPane(names, abbr,checkboxes));
ObservableList<String> codebookMethodOptions
= FXCollections.observableArrayList(
"Normalization",
"Entity Class Encoding"
);
codebookMethodComboBox.getItems().addAll(codebookMethodOptions);
codebookMethodComboBox.getSelectionModel().select(0);
ObservableList<String> codebookModeOptions
= FXCollections.observableArrayList(
"Replace and Insert", //0
"Positive Filter", //1
"Positive Filter with Placeholder" //2
);
codebookModeComboBox.getItems().addAll(codebookModeOptions);
codebookModeComboBox.getSelectionModel().select(2);
// ObservableList<String> networkTypeOptions
// = FXCollections.observableArrayList(
// "One-mode Network",
// "Multi-mode Network"
// );
// networkTypeComboBox.getItems().addAll(networkTypeOptions);
// networkTypeComboBox.getSelectionModel().select(0);
ObservableList<String> aggregationOptions
= FXCollections.observableArrayList(
"Per Document",
"Per Corpus"
);
aggregationComboBox.getItems().addAll(aggregationOptions);
aggregationComboBox.getSelectionModel().select(1);
ObservableList<String> unitOfAnalysisOptions
= FXCollections.observableArrayList(
"Sentence",
"Paragraph",
"Text",
"Custom Tag"
);
unitOfAnalysisComboBox.getItems().addAll(unitOfAnalysisOptions);
unitOfAnalysisComboBox.getSelectionModel().select(0);
distanceTextField.setText(AppConfig.getProperty("task.lexisnexisparse.distance"));
customTagTextField.setVisible(false);
}
/**
*
* @return
*/
public String getCustomTag() {
return customTagTextField.textProperty().get();
}
/**
*
* @return
*/
public int getUnitOfAnalysis() { // 1-sentence 2- paragraph 3-text 4-custom tag
return unitOfAnalysisComboBox.getSelectionModel().getSelectedIndex() + 1;
}
/**
*
* @return
*/
public int getCodebookMode() { // 0- replace and Insert 1- positive filter 2- with placeholder
return codebookModeComboBox.getSelectionModel().getSelectedIndex();
}
/**
*
* @return
*/
public int getCodebookMethod() { // 0 - normalization 1- entity class encoding
return codebookMethodComboBox.getSelectionModel().getSelectedIndex();
}
/**
*
* @return
*/
public int getNetworkType() { // 0 - one-mode 1- multi-mode
// return networkTypeComboBox.getSelectionModel().getSelectedIndex();
return 1;
}
/**
*
* @return
*/
public int getAggregationType() { // 0 - per document 1- per corpus
return aggregationComboBox.getSelectionModel().getSelectedIndex();
}
/**
*
* @return
*/
public int getDistance() {
return Integer.parseInt(distanceTextField.textProperty().get());
}
@FXML
private void handleUnitOfAnalysisComboBox(ActionEvent event) {
if (unitOfAnalysisComboBox.getSelectionModel().getSelectedIndex() == 3) {
customTagTextField.setVisible(true);
customTagTextField.requestFocus();
} else {
customTagTextField.setVisible(false);
}
}
/**
* @return the getFilteredLabels
*/
public Set<String> getFilteredLabels() {
Set<String> filterLabels = new HashSet<String>();
System.out.println("Filter Labels children:");
for(int i = 0; i< labels.size(); i++){
for(int j = 0; j<= i; j++){
//System.out.println("Processing i="+i+",j="+j);
//System.out.printf("CheckBox[%s][%s]=%s\n", labels.get(j), labels.get(i), checkboxes[j][i].isSelected());
if(checkboxes[j][i] != null && checkboxes[j][i].isSelected()){
filterLabels.add(labels.get(i));
filterLabels.add(labels.get(j));
}
}
}
System.out.println(filterLabels);
return filterLabels;
}
}