package com.noticeditorteam.noticeditor.controller;
import com.noticeditorteam.noticeditor.io.importers.HtmlImportMode;
import com.noticeditorteam.noticeditor.io.importers.ImportCallback;
import com.noticeditorteam.noticeditor.io.importers.WebImporter;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebView;
/**
* @author aNNiMON
*/
public class WebImportController implements Initializable {
@FXML
private VBox modesBox;
@FXML
private WebView pagePreview;
@FXML
private TextField urlField;
private WebImporter importer;
private HtmlImportMode importMode;
private ImportCallback<String, Exception> importCallback;
@Override
public void initialize(URL location, ResourceBundle resources) {
importer = new WebImporter();
importMode = HtmlImportMode.ORIGINAL;
ObservableList<Node> nodes = modesBox.getChildren();
nodes.clear();
final ToggleGroup modesGroup = new ToggleGroup();
for (HtmlImportMode value : HtmlImportMode.values()) {
RadioButton radio = new RadioButton(resources.getString(value.getName()));
if (value == importMode)
radio.setSelected(true);
radio.setOnAction(e -> onModeChanged(value));
radio.setToggleGroup(modesGroup);
nodes.add(radio);
}
pagePreview.getEngine().loadContent(resources.getString("preview"), "text/html");
}
public void setImportCallback(ImportCallback<String, Exception> importCallback) {
this.importCallback = importCallback;
}
private void onModeChanged(HtmlImportMode mode) {
importMode = mode;
handlePreview(null);
}
@FXML
private void handlePreview(ActionEvent event) {
if (!isUrlValid())
return;
importer.importFrom(urlField.getText(), importMode, (html, ex) -> {
if (html != null) {
pagePreview.getEngine().loadContent(html, "text/html");
}
});
}
@FXML
private void handleImport(ActionEvent event) {
if (!isUrlValid())
return;
importer.importFrom(urlField.getText(), importMode, importCallback);
}
private boolean isUrlValid() {
final String url = urlField.getText();
return !url.isEmpty();
}
}