adding TestON
diff --git a/TestON/TAI/src/tai_ofa/OFATestCaseSelection.java b/TestON/TAI/src/tai_ofa/OFATestCaseSelection.java
new file mode 100644
index 0000000..d7824d0
--- /dev/null
+++ b/TestON/TAI/src/tai_ofa/OFATestCaseSelection.java
@@ -0,0 +1,429 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package tai_ofa;
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javafx.application.Application;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.geometry.Insets;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.cell.PropertyValueFactory;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.StackPane;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+
+/**
+ *
+ * @author Raghav Kashyap (raghavkashyap@paxterrasolutions.com)
+	
+ *   TestON 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
+ *   (at your option) any later version.
+
+ *   TestON 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 TestON.  If not, see <http://www.gnu.org/licenses/>.
+
+ */
+public class OFATestCaseSelection extends Application {
+
+    String driverFile;
+    String paramFileName;
+    String pythonFile;
+    TAILocale label = new TAILocale(Locale.ENGLISH);
+
+    OFATestCaseSelection(String fileName, String paramsFileName) {
+        driverFile = label.hierarchyTestON + "/tests/" + fileName + "/" + fileName + ".ospk";
+        pythonFile = label.hierarchyTestON + "/tests/" + fileName + "/" + fileName + ".py";
+        paramFileName = label.hierarchyTestON + "/tests/" + fileName + "/" + fileName + ".params";
+    }
+    ObservableList<TestCaseSelectionTable> data;
+    ObservableList<String> testSelected;
+    TableView<TestCaseSelectionTable> deviceTable;
+    TableColumn selectCaseColumn;
+    TableColumn testCaseIdColumn;
+    TableColumn testCaseNameColumn;
+    TreeMap<String, String> testCaseIdAndName = new TreeMap<String, String>();
+    String caseId, caseName;
+    GridPane testCaseSelectionGrid = new GridPane();
+    TreeMap<String, String> stepHash = new TreeMap<String, String>();
+    TableColumn stepId, stepName;
+    TableView<TestSelectStepTable> stepTable;
+    ObservableList<TestSelectStepTable> stepData;
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) {
+        launch(args);
+    }
+
+    @Override
+    public void start(final Stage primaryStage) {
+        primaryStage.setTitle("TestCase Selection");
+        primaryStage.setResizable(false);
+        testSelected = FXCollections.observableArrayList();
+        stepData = FXCollections.observableArrayList();
+
+        testCaseSelectionGrid.setPadding(new Insets(0, 0, 0, 15));
+        testCaseSelectionGrid.setVgap(10);
+        testCaseSelectionGrid.setHgap(20);
+        final CheckBox selectTestCase = new CheckBox();
+        Label testCaseId = new Label("");
+        Label testCaseName = new Label("");
+
+        stepTable = new TableView<TestSelectStepTable>();
+        deviceTable = new TableView<TestCaseSelectionTable>();
+        data = FXCollections.observableArrayList(new TestCaseSelectionTable(selectTestCase, testCaseId, testCaseName));
+        deviceTable.setMinWidth(430);
+        deviceTable.setMaxHeight(300);
+        testCaseIdColumn = new TableColumn();
+
+        testCaseIdColumn.setCellValueFactory(new PropertyValueFactory<TestCaseSelectionTable, CheckBox>("testCaseCheckBox"));
+        testCaseIdColumn.setMinWidth(90);
+        testCaseIdColumn.setResizable(false);
+        selectCaseColumn = new TableColumn("TestCase Id");
+        selectCaseColumn.setSortable(true);
+        selectCaseColumn.setCellValueFactory(new PropertyValueFactory<TestCaseSelectionTable, Label>("testCaseId"));
+        selectCaseColumn.setMinWidth(130);
+        selectCaseColumn.setResizable(false);
+        testCaseNameColumn = new TableColumn("TestCase Name");
+        testCaseNameColumn.setCellValueFactory(new PropertyValueFactory<TestCaseSelectionTable, Label>("testCaseName"));
+        testCaseNameColumn.setMinWidth(130);
+        testCaseNameColumn.setResizable(false);
+        deviceTable.setItems(data);
+        deviceTable.getColumns().addAll(testCaseIdColumn, selectCaseColumn, testCaseNameColumn);
+        stepTable.setMinWidth(620);
+        stepTable.setMaxHeight(330);
+
+        stepId = new TableColumn("ID");
+        stepId.setCellValueFactory(new PropertyValueFactory<TestSelectStepTable, Label>("testStepId"));
+        stepId.setMinWidth(10);
+        stepId.setResizable(true);
+
+        stepName = new TableColumn("Name");
+        stepName.setCellValueFactory(new PropertyValueFactory<TestSelectStepTable, Label>("testStepName"));
+        stepName.setMinWidth(400);
+        stepName.setResizable(true);
+
+
+        stepTable.getColumns().addAll(stepId, stepName);
+        stepTable.setItems(stepData);
+        driverFunctionName();
+
+        Iterator driverFileIterator = testCaseIdAndName.entrySet().iterator();
+        while (driverFileIterator.hasNext()) {
+            Map.Entry testCaseDetail = (Map.Entry) driverFileIterator.next();
+            final CheckBox selectcase = new CheckBox();
+            final Label id = new Label((String) testCaseDetail.getKey());
+            Label name = new Label((String) testCaseDetail.getValue());
+            selectTestCase.selectedProperty().addListener(new ChangeListener<Boolean>() {
+                @Override
+                public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean arg2) {
+                    selectcase.setSelected(true);
+                    if (selectTestCase.isSelected() == false) {
+                        selectcase.setSelected(false);
+                    }
+                }
+            });
+
+            selectcase.selectedProperty().addListener(new ChangeListener<Boolean>() {
+                @Override
+                public void changed(ObservableValue<? extends Boolean> arg0, Boolean arg1, Boolean arg2) {
+                    if (selectcase.isSelected() == true) {
+                        stepData.clear();
+                        for (int i = 0; i < deviceTable.getItems().size(); i++) {
+                            if (deviceTable.getItems().get(i).testCaseId.getText().equals(id.getText())) {
+                                deviceTable.getSelectionModel().select(i);
+                                Pattern caseNumberPattern = Pattern.compile("CASE\\s*(\\d+)");
+                                Matcher caseNumberMatcher = caseNumberPattern.matcher(deviceTable.getItems().get(i).testCaseId.getText());
+                                String caseNumber = "";
+                                if (caseNumberMatcher.find()) {
+                                    caseNumber = caseNumberMatcher.group(1);
+                                }
+
+                                getTestSteps(caseNumber);
+                                testSelected.add(caseNumber);
+
+                                Iterator entries = stepHash.entrySet().iterator();
+                                while (entries.hasNext()) {
+                                    Map.Entry entry = (Map.Entry) entries.next();
+                                    String key = (String) entry.getKey();
+                                    String value = (String) entry.getValue();
+                                    stepData.add(new TestSelectStepTable(new Label(key), new Label(value)));
+                                }
+
+                                stepTable.setItems(stepData);
+                                stepTable.setVisible(true);
+                                try {
+                                    testCaseSelectionGrid.add(new Text("Test Steps :"), 0, 3);
+                                    testCaseSelectionGrid.add(stepTable, 0, 4);
+                                } catch (Exception e) {
+                                }
+                            }
+                        }
+                    }
+
+                    if (deviceTable.getSelectionModel().getSelectedItem().getTestCaseCheckBox().isSelected() == true) {
+                    }
+                }
+            });
+
+            data.add(new TestCaseSelectionTable(selectcase, id, name));
+            testCaseIdColumn.setCellValueFactory(new PropertyValueFactory<TestCaseSelectionTable, CheckBox>("testCaseCheckBox"));
+            testCaseIdColumn.setMinWidth(50);
+            testCaseIdColumn.setResizable(false);
+
+            selectCaseColumn.setCellValueFactory(new PropertyValueFactory<TestCaseSelectionTable, Label>("testCaseId"));
+            selectCaseColumn.setMinWidth(100);
+            selectCaseColumn.setResizable(false);
+
+            testCaseNameColumn.setCellValueFactory(new PropertyValueFactory<TestCaseSelectionTable, Label>("testCaseName"));
+            testCaseNameColumn.setMinWidth(292);
+            testCaseNameColumn.setResizable(false);
+            deviceTable.setItems(data);
+        }
+
+        testCaseSelectionGrid.add(deviceTable, 0, 1);
+
+        HBox optionButton = new HBox(5);
+        optionButton.setPadding(new Insets(0, 0, 0, 0));
+
+        Button startTest = new Button("Save");
+
+        startTest.setOnAction(new EventHandler<ActionEvent>() {
+            @Override
+            public void handle(ActionEvent t) {
+                for (int i = 0; i < deviceTable.getItems().size(); i++) {
+
+                    if (deviceTable.getItems().get(i).testCaseIdCheck.isSelected()) {
+                        deviceTable.getSelectionModel().select(i);
+                    }
+
+                    if (deviceTable.getSelectionModel().getSelectedItem().getTestCaseCheckBox().isSelected() == true) {
+                    }
+                }
+
+                StringBuilder testcases = new StringBuilder();
+                for (String s : testSelected) {
+                    testcases.append(s).append(',');
+                }
+                primaryStage.close();
+            }
+        });
+
+        Button modifyParams = new Button("Modify Params");
+        Button cancelButton = new Button("Cancel");
+        optionButton.getChildren().addAll(new Label("                                    "), startTest, modifyParams, cancelButton);
+        testCaseSelectionGrid.add(optionButton, 0, 5);
+
+        StackPane root = new StackPane();
+        root.getChildren().add(testCaseSelectionGrid);
+        primaryStage.setScene(new Scene(root, 650, 400));
+        primaryStage.show();
+    }
+
+    public void driverFunctionName() {
+        try {
+            FileInputStream fstream = new FileInputStream(driverFile);
+            ArrayList<String> driverFunctionName = new ArrayList<String>();
+            DataInputStream in = new DataInputStream(fstream);
+            BufferedReader br = new BufferedReader(new InputStreamReader(in));
+            String strLine;
+            while ((strLine = br.readLine()) != null) {
+                Pattern casePattern = Pattern.compile("^CASE\\s+(\\d+)");
+                Matcher match = casePattern.matcher(strLine);
+                while (match.find()) {
+                    driverFunctionName.add(match.group());
+                    caseId = match.group();
+                    strLine = br.readLine();
+                    casePattern = Pattern.compile("NAME\\s+(\\\"+(.*)\\\")");
+                    match = casePattern.matcher(strLine);
+                    if (match.find()) {
+                        caseName = match.group(2);
+                    }
+                    testCaseIdAndName.put(caseId, caseName);
+                }
+            }
+        } catch (Exception e) {
+        }
+    }
+
+    public void getParamsUpdate(String testcases) {
+        try {
+            File file = new File(paramFileName);
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String line = "", oldtext = "";
+            while ((line = reader.readLine()) != null) {
+                oldtext += line + "\r\n";
+            }
+            reader.close();
+            String newtext = oldtext.replaceAll("<testcases>\\s*(\\d+)</testcases>", "<testcases>" + testcases + "</testcases>");
+            FileWriter writer = new FileWriter(paramFileName);
+            writer.write(newtext);
+            writer.close();
+        } catch (IOException ioe) {
+            ioe.printStackTrace();
+        }
+    }
+
+    public TreeMap getCaseIdAndName() {
+        return testCaseIdAndName;
+    }
+
+    public void getTestSteps(String caseNumber) {
+        OFAFileOperations fileOperation = new OFAFileOperations();
+        int stepCount = 0;
+        String stepCounter = "";
+        BufferedReader input = null;
+        ArrayList<String> contents = new ArrayList<String>();
+        File scriptName = new File(driverFile);
+        if (scriptName.exists()) {
+            try {
+                //use buffering, reading one line at a time
+                //FileReader always assumes default encoding is OK!
+                try {
+                    input = new BufferedReader(new FileReader(scriptName));
+                } catch (Exception e) {
+                }
+
+                try {
+                    String line = null; //not declared within while loop
+                    while ((line = input.readLine()) != null) {
+                        contents.add(line);
+                    }
+                } finally {
+                    try {
+                        input.close();
+                    } catch (Exception e) {
+                    }
+                }
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+
+            for (int i = 0; i < contents.size(); i++) {
+                Pattern casePattern = Pattern.compile("\\s*CASE\\s*(\\d+)\\s*");
+                Matcher caseMatcher = casePattern.matcher(contents.get(i));
+                if (caseMatcher.find()) {
+                    if (caseMatcher.group(1).equals(caseNumber)) {
+                        i++;
+                        Pattern casePatterns = Pattern.compile("\\s*CASE\\s*(\\d+)\\s*");
+                        Matcher caseMatchers = casePatterns.matcher(contents.get(i));
+                        while (!caseMatchers.find() && i < contents.size()) {
+                            Pattern casesPatterns = Pattern.compile("\\s*CASE\\s*(\\d+)\\s*");
+                            Matcher casesMatchers = casesPatterns.matcher(contents.get(i));
+                            if (casesMatchers.find()) {
+                                break;
+                            } else {
+                                Pattern stepPattern = Pattern.compile("\\s*STEP\\s+\"\\s*(.*)\\s*\"\\s*");
+                                Matcher stepMatcher = stepPattern.matcher(contents.get(i));
+                                try {
+                                    if (stepMatcher.find()) {
+                                        stepCount++;
+                                        stepCounter = caseNumber + "." + String.valueOf(stepCount);
+                                        stepHash.put(stepCounter, stepMatcher.group(1));
+                                    }
+                                } catch (Exception e) {
+                                    break;
+                                }
+                                i++;
+                            }
+                        }
+                        i--;
+                    }
+                }
+            }
+        } else {
+            try {
+                //use buffering, reading one line at a time
+                //FileReader always assumes default encoding is OK!
+                try {
+                    input = new BufferedReader(new FileReader(pythonFile));
+                } catch (Exception e) {
+                }
+
+                try {
+                    String line = null; //not declared within while loop
+                    while ((line = input.readLine()) != null) {
+                        contents.add(line);
+                    }
+                } finally {
+                    try {
+                        input.close();
+                    } catch (Exception e) {
+                    }
+                }
+            } catch (IOException ex) {
+                ex.printStackTrace();
+            }
+
+            for (int i = 0; i < contents.size(); i++) {
+                Pattern casePattern = Pattern.compile("\\s*def\\s+CASE(\\d+)\\s*\\(\\s*(.*)\\s*\\)\\s*:\\s*");
+                Matcher caseMatcher = casePattern.matcher(contents.get(i));
+                if (caseMatcher.find()) {
+                    if (caseMatcher.group(1).equals(caseNumber)) {
+                        i++;
+                        Pattern casePatterns = Pattern.compile("\\s*def\\s+CASE(\\d+)\\s*\\(\\s*(.*)\\s*\\)\\s*:\\s*");
+                        Matcher caseMatchers = casePatterns.matcher(contents.get(i));
+                        while (!caseMatchers.find() && i < contents.size()) {
+                            Pattern casesPatterns = Pattern.compile("\\s*def\\s+CASE(\\d+)\\s*\\(\\s*(.*)\\s*\\)\\s*:\\s*");
+                            Matcher casesMatchers = casesPatterns.matcher(contents.get(i));
+                            if (casesMatchers.find()) {
+                                break;
+                            } else {
+                                Pattern stepPattern = Pattern.compile("\\s*main.step\\(\\s*\"\\s*(.*)\\s*\"\\s*\\)\\s*");
+                                Matcher stepMatcher = stepPattern.matcher(contents.get(i));
+                                try {
+                                    if (stepMatcher.find()) {
+                                        stepCount++;
+                                        stepCounter = caseNumber + "." + String.valueOf(stepCount);
+                                        stepHash.put(stepCounter, stepMatcher.group(1));
+                                    }
+                                } catch (Exception e) {
+                                    break;
+                                }
+                                i++;
+                            }
+                        }
+                        i--;
+                    }
+                }
+            }
+        }
+    }
+}