content: /* 
   * Copyright (C) 2015 Adrien Guille <adrien.guille@univ-lyon2.fr>
   *
   * 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 3 of the License, or
   * (at your option) 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 main.java.fr.ericlab.sondy.core.ui;
  
  import java.nio.file.Paths;
  import main.java.fr.ericlab.sondy.core.app.Main;
  import main.java.fr.ericlab.sondy.core.sources.DataSources;
  import main.java.fr.ericlab.sondy.core.utils.UIUtils;
  import javafx.beans.value.ObservableValue;
  import javafx.collections.FXCollections;
  import javafx.collections.ObservableList;
  import javafx.event.ActionEvent;
  import javafx.geometry.Insets;
  import javafx.geometry.Orientation;
  import javafx.geometry.Pos;
  import javafx.scene.control.Button;
  import javafx.scene.control.ChoiceBox;
  import javafx.scene.control.Label;
  import javafx.scene.control.ListView;
  import javafx.scene.control.Separator;
  import javafx.scene.control.TextArea;
  import javafx.scene.control.TextField;
  import javafx.scene.layout.GridPane;
  import javafx.scene.layout.HBox;
  import javafx.scene.layout.VBox;
  import javafx.scene.shape.Rectangle;
  import javafx.scene.text.Text;
  
  /**
   *
   *   @author Adrien GUILLE, ERIC Lab, University of Lyon 2
   *   @email adrien.guille@univ-lyon2.fr
   */
  public class DataCollectionUI {
      public GridPane grid;
      
      // Available sources
      // - list
      ListView<String> sourceListView;
      DataSources availableSources;
      
      // Create a source
      ChoiceBox sourceTypeList;
      TextField newSourceIdentifierField;
      TextArea configurationTextArea;
      
      public DataCollectionUI(){
          grid = new GridPane();
          grid.setPadding(new Insets(5, 5, 5, 5));
          
          // Adding separators
          grid.add(new Text("Available sources"),0,0);
          grid.add(new Separator(),0,1);
          grid.add(new Text("Create a source"),0,3);
          grid.add(new Separator(),0,4);
          grid.add(new Text("Collect data from the selected source"),0,6);
          grid.add(new Separator(),0,7);
          
          availableSourcesUI();
          newSourceUI();
          collectDataUI();
      }
      
      public final void availableSourcesUI(){
          availableSources = new DataSources();
          availableSources.update();
          sourceListView = new ListView<>();
          sourceListView.setOrientation(Orientation.HORIZONTAL);
          sourceListView.setItems(availableSources.list);
          sourceListView.getSelectionModel().selectedItemProperty().addListener((ObservableValue<? extends String> ov, String old_val, String new_val) -> {
              
          });
          UIUtils.setSize(sourceListView,Main.columnWidthLEFT,64);
          Label sourceDescriptionLabel = new Label("https://dev.twitter.com/overview/api");
          sourceDescriptionLabel.setId("smalltext");
          UIUtils.setSize(sourceDescriptionLabel,Main.columnWidthLEFT,24);
          VBox availableSourcesLEFT = new VBox();
          availableSourcesLEFT.getChildren().addAll(sourceListView,new Rectangle(0,3),sourceDescriptionLabel);
          
          HBox availableSourcesBOTH = new HBox(5);
          availableSourcesBOTH.getChildren().addAll(availableSourcesLEFT,new Rectangle(Main.columnWidthRIGHT,0));
          grid.add(availableSourcesBOTH,0,2);
      }
      
      public final void newSourceUI(){
          GridPane gridLEFT = new GridPane();
          // Labels
          Label sourceIdentifierLabel = new Label("Source ID");
          UIUtils.setSize(sourceIdentifierLabel, Main.columnWidthLEFT/2, 24);
          Label sourceTypeLabel = new Label("Source type");
          UIUtils.setSize(sourceTypeLabel, Main.columnWidthLEFT/2, 24);
          Label sourceConfigLabel = new Label("Source configuration");
          sourceConfigLabel.setAlignment(Pos.CENTER_LEFT);
          UIUtils.setSize(sourceConfigLabel, Main.columnWidthLEFT/2, 150);
          
          gridLEFT.add(sourceTypeLabel,0,0);
          gridLEFT.add(new Rectangle(0,3),0,1);
          gridLEFT.add(sourceIdentifierLabel,0,2);
          gridLEFT.add(new Rectangle(0,3),0,3);
          gridLEFT.add(sourceConfigLabel,0,4);
          
          // Values
          sourceTypeList = new ChoiceBox();
          ObservableList<String> list = FXCollections.observableArrayList();
          list.add("Twitter");
          sourceTypeList.setItems(list);
          UIUtils.setSize(sourceTypeList,Main.columnWidthLEFT/2, 24);
          newSourceIdentifierField = new TextField();
          newSourceIdentifierField.setPromptText("unique identifier");
          UIUtils.setSize(newSourceIdentifierField,Main.columnWidthLEFT/2, 24);
          configurationTextArea = new TextArea();
          configurationTextArea.setText("# This is a configuration file for Twitter\n" +
  "# It is formatted as a Java properties file\n" +
  "# i.e. a property (key = value) per line \n" +
  "OAuthConsumerKey = w9ixmKqezBWtyughn4y7w\n" +
  "OAuthConsumerSecret = mQ7L6cfSRPRAdUoiIOSWRYaHBeU5yBTRPGgc8fFdY\n" +
  "OAuthAccessToken = 2371904670-XAnOV6XquVDuWzXwwhAvKiZ9T1DI9ziM3r7Cz3s\n" +
  "OAuthAccessTokenSecret = wRwJhSq1m7zZeQYeTgivVSZ6H7acsv0KNiznF3StoH4TU");
          UIUtils.setSize(configurationTextArea, Main.columnWidthLEFT/2, 150);
          
          gridLEFT.add(sourceTypeList,1,0);
          gridLEFT.add(newSourceIdentifierField,1,2);
          gridLEFT.add(configurationTextArea,1,4);
          HBox importDatasetBOTH = new HBox(5);
          importDatasetBOTH.getChildren().addAll(gridLEFT,createNewSourceButton());
          grid.add(importDatasetBOTH,0,5);
      }
      
      final public void collectDataUI(){
          GridPane gridLEFT = new GridPane();
          Label queryLabel = new Label("Query");
          UIUtils.setSize(queryLabel,Main.columnWidthLEFT/2, 24);
          TextField queryField = new TextField();
          queryField.setPromptText("formatted query");
          UIUtils.setSize(queryField,Main.columnWidthLEFT/2, 24);
          Label durationLabel = new Label("Duration");
          UIUtils.setSize(durationLabel,Main.columnWidthLEFT/2, 24);
          TextField durationField = new TextField();
          durationField.setPromptText("duration in days (e.g. 2)");
          UIUtils.setSize(durationField,Main.columnWidthLEFT/2, 24);
          Label datasetIDLabel = new Label("Dataset ID");
          UIUtils.setSize(datasetIDLabel,Main.columnWidthLEFT/2, 24);
          TextField datasetIDField = new TextField();
          datasetIDField.setPromptText("unique identifier");
          UIUtils.setSize(datasetIDField,Main.columnWidthLEFT/2, 24);
          
          gridLEFT.add(queryLabel,0,0);
          gridLEFT.add(queryField,1,0);
          gridLEFT.add(new Rectangle(0,3),0,1);
          gridLEFT.add(durationLabel,0,2);
          gridLEFT.add(durationField,1,2);
          gridLEFT.add(new Rectangle(0,3),0,3);
          gridLEFT.add(datasetIDLabel,0,4);
          gridLEFT.add(datasetIDField,1,4);
          
          Button button = new Button("Collect");
          UIUtils.setSize(button,Main.columnWidthRIGHT, 24);
          button.setAlignment(Pos.CENTER);
          VBox buttonBox = new VBox();
          buttonBox.setAlignment(Pos.CENTER);
          buttonBox.getChildren().add(button);
          
          HBox collectDataBOTH = new HBox(5);
          collectDataBOTH.getChildren().addAll(gridLEFT,buttonBox);
          grid.add(collectDataBOTH,0,8);
      }
      
      public final VBox createNewSourceButton(){
          VBox buttonBox = new VBox();
          buttonBox.setAlignment(Pos.CENTER);
          Button newSourceButton = new Button("Import");
          UIUtils.setSize(newSourceButton,Main.columnWidthRIGHT,24);
          newSourceButton.setOnAction((ActionEvent event) -> {
              int i = 0;
          });
          buttonBox.getChildren().addAll(newSourceButton);
          return buttonBox;
      }
  
  }
  