diff --git a/jsystem-archetypes/jsystem-so-archetype/pom.xml b/jsystem-archetypes/jsystem-so-archetype/pom.xml
index 2326e0f8..4e81ae07 100644
--- a/jsystem-archetypes/jsystem-so-archetype/pom.xml
+++ b/jsystem-archetypes/jsystem-so-archetype/pom.xml
@@ -6,7 +6,7 @@
org.jsystemtest.archetypes
jsystem-archetypes
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
..
diff --git a/jsystem-archetypes/jsystem-tests-archetype/pom.xml b/jsystem-archetypes/jsystem-tests-archetype/pom.xml
index c587ed0b..9779ca59 100644
--- a/jsystem-archetypes/jsystem-tests-archetype/pom.xml
+++ b/jsystem-archetypes/jsystem-tests-archetype/pom.xml
@@ -6,7 +6,7 @@
org.jsystemtest.archetypes
jsystem-archetypes
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
..
diff --git a/jsystem-archetypes/pom.xml b/jsystem-archetypes/pom.xml
index 47658cf4..5ffe39a9 100644
--- a/jsystem-archetypes/pom.xml
+++ b/jsystem-archetypes/pom.xml
@@ -7,11 +7,11 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
jsystem-so-archetype
diff --git a/jsystem-assembly/jsystem-runner/pom.xml b/jsystem-assembly/jsystem-runner/pom.xml
index 1b8ef878..0c7eb3b1 100644
--- a/jsystem-assembly/jsystem-runner/pom.xml
+++ b/jsystem-assembly/jsystem-runner/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
jsystem-runner
diff --git a/jsystem-core-projects/jsystem-launcher/pom.xml b/jsystem-core-projects/jsystem-launcher/pom.xml
index cc32d0f1..fdf5755f 100644
--- a/jsystem-core-projects/jsystem-launcher/pom.xml
+++ b/jsystem-core-projects/jsystem-launcher/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
jsystem-launcher
diff --git a/jsystem-core-projects/jsystemAgent/pom.xml b/jsystem-core-projects/jsystemAgent/pom.xml
index 1d0d2a11..128ac236 100644
--- a/jsystem-core-projects/jsystemAgent/pom.xml
+++ b/jsystem-core-projects/jsystemAgent/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
jsystemAgent
diff --git a/jsystem-core-projects/jsystemAgent/src/main/java/jsystem/runner/agent/clients/AgentClientListenersManager.java b/jsystem-core-projects/jsystemAgent/src/main/java/jsystem/runner/agent/clients/AgentClientListenersManager.java
index 7ba77d93..9a1badb2 100644
--- a/jsystem-core-projects/jsystemAgent/src/main/java/jsystem/runner/agent/clients/AgentClientListenersManager.java
+++ b/jsystem-core-projects/jsystemAgent/src/main/java/jsystem/runner/agent/clients/AgentClientListenersManager.java
@@ -16,6 +16,7 @@
import javax.management.NotificationListener;
import jsystem.framework.fixture.Fixture;
+import jsystem.framework.report.DefaultReporterImpl.ReportLevel;
import jsystem.framework.report.JSystemListeners;
import jsystem.framework.report.ReportElement;
import jsystem.framework.report.Reporter;
@@ -448,4 +449,65 @@ public void flushReporters() {
}
+
+ @Override
+ public void jira(String title, String jiraId) {
+ report(title + EnumBadge.JIRA.setText(jiraId).get());
+ }
+
+ @Override
+ public void info(String title, String info) {
+ report(title + EnumBadge.INFO.setText(info).get());
+ }
+
+ @Override
+ public void info(String title) {
+ report(title + EnumBadge.INFO.setText(EnumBadge.INFO.name().toLowerCase()).get());
+ }
+
+ @Override
+ public void workaround(String title) {
+ report(title + EnumBadge.WORKAROUND.get());
+ }
+
+ @Override
+ public void debug(String title) {
+ report(title + EnumBadge.DEBUG.get());
+ }
+
+ @Override
+ public void bug(String title) {
+ report(title + EnumBadge.BUG.get());
+ }
+
+ @Override
+ public void result(String title, int status) {
+ report(title + EnumBadge.RESULT.get(), status);
+ }
+
+ @Override
+ public void result(String title) {
+ result(title, Reporter.PASS);
+ }
+
+ @Override
+ public void result(String title, boolean status) {
+ result(title, status ? Reporter.PASS : Reporter.FAIL);
+ }
+
+ @Override
+ public void result(String title, ReportAttribute reportAttribute) {
+ report(title + EnumBadge.RESULT.get(), reportAttribute);
+ }
+
+ @Override
+ public ReportLevel reportLevel(String level) {
+ return (ReportLevel) invokeMethod("reportLevel", new Object[]{level},new Class[]{String.class});
+ }
+
+ @Override
+ public ReportLevel reportLevel(String level, EnumBadge badge) {
+ return (ReportLevel) invokeMethod("reportLevel", new Object[]{level,badge},new Class[]{String.class,EnumBadge.class});
+ }
+
}
diff --git a/jsystem-core-projects/jsystemAnt/pom.xml b/jsystem-core-projects/jsystemAnt/pom.xml
index a67a0993..bd7e2ec8 100644
--- a/jsystem-core-projects/jsystemAnt/pom.xml
+++ b/jsystem-core-projects/jsystemAnt/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
jsystemAnt
diff --git a/jsystem-core-projects/jsystemApp/pom.xml b/jsystem-core-projects/jsystemApp/pom.xml
index ec10f5a2..db59e387 100644
--- a/jsystem-core-projects/jsystemApp/pom.xml
+++ b/jsystem-core-projects/jsystemApp/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
jsystemApp
@@ -26,7 +26,10 @@
org.swinglabs
swingx
-
+
+ com.opencsv
+ opencsv
+
diff --git a/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvObjectArrayParameterProvider.java b/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvObjectArrayParameterProvider.java
new file mode 100644
index 00000000..68f5bd21
--- /dev/null
+++ b/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvObjectArrayParameterProvider.java
@@ -0,0 +1,103 @@
+package jsystem.extensions.paramproviders;
+
+import java.awt.Component;
+import java.awt.Dialog.ModalityType;
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Properties;
+
+import jsystem.framework.TestBeanClass;
+import jsystem.framework.scenario.Parameter;
+import jsystem.framework.scenario.RunnerTest;
+import jsystem.framework.scenario.Scenario;
+import jsystem.framework.scenario.UseDefaultDataModel;
+import jsystem.treeui.utilities.ParameterProviderListener;
+import jsystem.utils.beans.BeanElement;
+import jsystem.utils.beans.BeanUtils;
+
+public class CsvObjectArrayParameterProvider extends ObjectArrayParameterProvider {
+ private List listenersList = new ArrayList();
+
+ @Override
+ public synchronized Object showUI(Component parent, Scenario currentScenario, RunnerTest rtest, Class> classType,
+ Object object, Parameter parameter) throws Exception {
+ if (!classType.isArray()) {
+ throw new RuntimeException("ObjectArrayParameter must be of array type! current type is : " + classType);
+ }
+ ArrayList beanElements = BeanUtils.getBeans(classType.getComponentType(), true, true,
+ BeanUtils.getBasicTypes());
+
+ ArrayList> multiMap = new ArrayList>();
+
+ if (object != null) {
+ Object[] array = null;
+ try {
+ array = (Object[]) object;
+ } catch (ClassCastException e) {
+ throw new RuntimeException("ObjectArrayParameter got wrong parameter! expected array type, got: "
+ + object.getClass() + ", with value: " + object);
+ }
+
+ for (int i = 0; i < array.length; i++) {
+ Properties oProperties = BeanUtils.objectToProperties(array[i], beanElements);
+ multiMap.add(propertiesToMapBeanOrder(oProperties, beanElements));
+ }
+ }
+ // the user can specified using TestBeanClass annotation
+ // new data model class.
+ TestBeanClass tbc = classType.getComponentType().getAnnotation(TestBeanClass.class);
+ BeanCellEditorModel beanCellEditorModel = null;
+ if (tbc != null) {
+ // create the new data model
+ Class> modelClass = tbc.model();
+ if (!modelClass.equals(UseDefaultDataModel.class)) {
+ Constructor> cons = modelClass.getConstructor(beanElements.getClass(), multiMap.getClass());
+ if (cons != null) {
+ Object dataModel = cons.newInstance(beanElements, multiMap);
+ if (dataModel instanceof BeanCellEditorModel) {
+ beanCellEditorModel = (BeanCellEditorModel) dataModel;
+ }
+ }
+ }
+ }
+ CsvPropertiesDialog dialog = new CsvPropertiesDialog(multiMap, "Bean properties", beanElements,
+ propertiesToMapBeanOrder(
+ BeanUtils.objectToProperties(classType.getComponentType().newInstance(), beanElements),
+ beanElements), beanCellEditorModel, parameter.isEditable());
+ dialog.setModalityType(ModalityType.APPLICATION_MODAL);
+ dialog.setListeners(listenersList);
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ int screenHeight = screenSize.height;
+ int screenWidth = screenSize.width;
+
+ dialog.setBounds(new Rectangle(0, screenHeight / 10, screenWidth, screenHeight * 3 / 4));
+
+ if (dialog.showAndWaitForApprove()) {
+ Object[] array = (Object[]) Array.newInstance(classType.getComponentType(), multiMap.size());
+ for (int i = 0; i < array.length; i++) {
+ array[i] = BeanUtils.propertiesToObject(classType.getComponentType(), multiMap.get(i));
+ }
+ return array;
+ }
+ return object;
+ }
+
+ private static LinkedHashMap propertiesToMapBeanOrder(Properties properties,
+ ArrayList elements) {
+ LinkedHashMap map = new LinkedHashMap();
+ for (BeanElement be : elements) {
+ String value = properties.getProperty(be.getName());
+ if (value != null) {
+ map.put(be.getName(), value);
+ }
+ }
+ return map;
+ }
+
+}
diff --git a/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvPropertiesDialog.java b/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvPropertiesDialog.java
new file mode 100644
index 00000000..fc51e178
--- /dev/null
+++ b/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvPropertiesDialog.java
@@ -0,0 +1,457 @@
+package jsystem.extensions.paramproviders;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import javax.swing.AbstractAction;
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.WindowConstants;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import javax.swing.filechooser.FileNameExtensionFilter;
+import javax.swing.table.JTableHeader;
+
+import com.opencsv.CSVParser;
+import com.opencsv.CSVParserBuilder;
+import com.opencsv.CSVReader;
+import com.opencsv.CSVReaderBuilder;
+import com.opencsv.CSVWriter;
+
+import jsystem.treeui.images.ImageCenter;
+import jsystem.treeui.utilities.GenericCellEditor;
+import jsystem.treeui.utilities.ParameterProviderListener;
+import jsystem.treeui.utilities.TableCellListener;
+import jsystem.utils.ResourcesUtils;
+import jsystem.utils.SwingUtils;
+import jsystem.utils.beans.BeanElement;
+
+public class CsvPropertiesDialog extends JDialog implements ActionListener, ListSelectionListener {
+
+ private static final long serialVersionUID = 1417293276325153499L;
+
+ enum EnumDelimiter {
+
+ COMMA(','),
+ SEMICOLON(';'),
+ TAB('\t'),
+ VERTICAL_LINE('|')
+ ;
+
+ EnumDelimiter(char delimiter) {
+ this.delimiter = delimiter;
+ }
+
+ char delimiter;
+
+ }
+
+
+ private JTable table;
+
+ private JButton duplicateButton;
+
+ private JButton addButton;
+
+ private JButton removeButton;
+
+ private JButton upButton;
+
+ private JButton downButton;
+
+ private JButton okButton;
+
+ private JButton cancelButton;
+
+ private JButton importButton;
+
+ private JButton exportButton;
+
+ private boolean approved = false;
+
+ private ArrayList> mapValues;
+
+ private int currentSelectedRow = -1;
+
+ private BeanCellEditorModel model;
+
+ private boolean isEnabled = true;
+
+ private LinkedHashMap referanceMap;
+
+ private GenericCellEditor gce;
+
+ private EnumDelimiter selectedDelimiter = EnumDelimiter.COMMA;
+
+ private List listenersList = new ArrayList();
+
+ public CsvPropertiesDialog(ArrayList> mapValues, String title,
+ ArrayList beanElements, LinkedHashMap referanceMap, BeanCellEditorModel model,
+ boolean isEditable) {
+ this.mapValues = mapValues;
+ this.referanceMap = referanceMap;
+ this.model = model;
+ if (this.model == null) {
+ this.model = new BeanCellEditorModel(beanElements, mapValues);
+ }
+ this.isEnabled = isEditable;
+ initComponents();
+ }
+
+ private void initComponents() {
+ table = new JTable();
+ table.getSelectionModel().addListSelectionListener(this);
+ setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ setName("Form");
+ table.setModel(model);
+ table.setName("Table");
+
+ gce = new GenericCellEditor(model);
+
+ for (int i = 0; i < table.getColumnCount(); i++) {
+ table.getColumnModel().getColumn(i).setCellEditor(gce);
+ }
+
+ table.setRowHeight(20);
+
+ getContentPane().add(
+ SwingUtils.getJScrollPaneWithWaterMark(
+ ImageCenter.getInstance().getAwtImage(ImageCenter.ICON_TEST_TREE_BG), table),
+ BorderLayout.CENTER);
+
+ JPanel okCancelPanel = SwingUtils.getJPannelWithBgImage(
+ ImageCenter.getInstance().getImage(ImageCenter.ICON_SCEANRIO_TOOLBAR_BG), 0);
+
+ okCancelPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
+
+ duplicateButton = new JButton("Duplicate");
+ duplicateButton.addActionListener(this);
+ duplicateButton.setEnabled(isEnabled);
+ okCancelPanel.add(duplicateButton);
+
+ addButton = new JButton("Add...");
+ addButton.addActionListener(this);
+ addButton.setEnabled(isEnabled);
+ okCancelPanel.add(addButton);
+
+ removeButton = new JButton("Remove");
+ removeButton.setEnabled(isEnabled);
+ removeButton.addActionListener(this);
+ okCancelPanel.add(removeButton);
+
+ upButton = new JButton("Up");
+ upButton.setEnabled(isEnabled);
+ upButton.addActionListener(this);
+ okCancelPanel.add(upButton);
+
+ downButton = new JButton("Down");
+ downButton.setEnabled(isEnabled);
+ downButton.addActionListener(this);
+ okCancelPanel.add(downButton);
+
+ okButton = new JButton("OK");
+ okButton.addActionListener(this);
+ okCancelPanel.add(okButton);
+
+ cancelButton = new JButton("Cancel");
+ cancelButton.addActionListener(this);
+ okCancelPanel.add(cancelButton);
+
+ importButton = new JButton("import...");
+ importButton.addActionListener(this);
+ okCancelPanel.add(importButton);
+
+ exportButton = new JButton("export...");
+ exportButton.addActionListener(this);
+ okCancelPanel.add(exportButton);
+
+ getContentPane().add(okCancelPanel, BorderLayout.SOUTH);
+
+ table.setSelectionBackground(Color.LIGHT_GRAY);
+ table.setSelectionForeground(Color.BLACK);
+
+ table.setBackground(new Color(0xf6, 0xf6, 0xf6));
+ JTableHeader treeTableHeader = table.getTableHeader();
+ treeTableHeader.setBackground(new Color(0xe1, 0xe4, 0xe6));
+ table.setEnabled(isEnabled);
+ selectFirstRow();
+ pack();
+
+ new TableCellListener(table, new AbstractAction() {
+ private static final long serialVersionUID = 1L;
+
+ public void actionPerformed(ActionEvent e) {
+ broadcastAction(e);
+ }
+ });
+ }
+
+ private void selectFirstRow() {
+ if (table.getRowCount() > 0) {
+ table.getSelectionModel().setSelectionInterval(0, 0);
+ currentSelectedRow = 0;
+ }
+ }
+
+ private void selectRow(int row) {
+ if (table.getRowCount() >= row && row >= 0) {
+ table.getSelectionModel().setSelectionInterval(row, row);
+ currentSelectedRow = row;
+ }
+ }
+
+ private void selectLastRow() {
+ int lastRowIndex = table.getRowCount() - 1;
+ if (lastRowIndex >= 0) {
+ table.getSelectionModel().setSelectionInterval(lastRowIndex, lastRowIndex);
+ currentSelectedRow = lastRowIndex;
+ }
+ }
+
+ public boolean showAndWaitForApprove() throws InterruptedException {
+ setVisible(true);
+ return approved;
+ }
+
+ /**
+ * Boradcast to all the listeners that event occured.
+ *
+ * @param e
+ */
+ private void broadcastAction(ActionEvent e) {
+ for (ParameterProviderListener listener : listenersList) {
+ listener.actionPerformed(this, e);
+ }
+
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ broadcastAction(e);
+ gce.stopCellEditing();
+ if (okButton.equals(e.getSource())) {
+ approved = true;
+ dispose();
+ } else if (cancelButton.equals(e.getSource())) {
+ approved = false;
+ dispose();
+ } else if (removeButton.equals(e.getSource())) {
+ if (currentSelectedRow != -1) {
+ mapValues.remove(currentSelectedRow);
+ model.fireTableRowsDeleted(currentSelectedRow, currentSelectedRow);
+ selectFirstRow();
+ }
+ } else if (duplicateButton.equals(e.getSource())) {
+ if (currentSelectedRow != -1) {
+ mapValues.add(new LinkedHashMap(mapValues.get(currentSelectedRow)));
+ int lastRowIndex = mapValues.size() - 1;
+ model.fireTableRowsInserted(lastRowIndex, lastRowIndex);
+ selectLastRow();
+ }
+ } else if (addButton.equals(e.getSource())) {
+ mapValues.add(new LinkedHashMap(referanceMap));
+ int lastRowIndex = mapValues.size() - 1;
+ model.fireTableRowsInserted(lastRowIndex, lastRowIndex);
+ selectLastRow();
+ } else if (upButton.equals(e.getSource())) {
+ mapValues.add(currentSelectedRow - 1, mapValues.remove(currentSelectedRow));
+ int previosSelection = currentSelectedRow;
+ selectRow(previosSelection - 1);
+ } else if (downButton.equals(e.getSource())) {
+ mapValues.add(currentSelectedRow + 1, mapValues.remove(currentSelectedRow));
+ int previosSelection = currentSelectedRow;
+ selectRow(previosSelection + 1);
+ } else if (importButton.equals(e.getSource())) {
+ JFileChooser chooser = new JFileChooser();
+ chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+ chooser.setDialogTitle("Select a CSV file to open");
+ chooser.setAcceptAllFileFilterUsed(false);
+ chooser.addChoosableFileFilter(new FileNameExtensionFilter("CSV File", "csv"));
+ try {
+ chooser.setCurrentDirectory(new File(ResourcesUtils.retrieveFileFromResourcesFolder("")));
+ } catch (Exception e2) {
+ e2.printStackTrace();
+ }
+
+ int option = chooser.showOpenDialog(this);
+ if (option == JFileChooser.APPROVE_OPTION) {
+ //select delimiter
+ JComboBox list = new JComboBox<>(EnumDelimiter.values());
+ CsvSelectDialog dialog = new CsvSelectDialog("Please select required delimiter: ", list);
+ dialog.setOnOk(s -> selectedDelimiter = (EnumDelimiter) dialog.getSelectedItem());
+ dialog.show();
+
+ mapValues.clear();
+ if (table.getRowCount() > 0) {
+ model.fireTableRowsDeleted(0, table.getRowCount() - 1);
+ }
+ File file = chooser.getSelectedFile();
+
+ try {
+
+ FileReader filereader = new FileReader(file);
+ CSVParser parser = new CSVParserBuilder().withSeparator(selectedDelimiter.delimiter).build();
+
+ CSVReader csvReader = new CSVReaderBuilder(filereader)
+ .withCSVParser(parser)
+ .withSkipLines(0)
+ .build();
+ List allData = csvReader.readAll();
+
+ List headers = Arrays.asList(allData.get(0));
+ boolean skip = true;
+ for (String[] row : allData) {
+ if (skip) {
+ skip = false;
+ continue;
+ }
+ LinkedHashMap lineMap = new LinkedHashMap<>(referanceMap);
+ int index = 0;
+ for (String cell : row) {
+ if (headers.size() > index) {
+ lineMap.put(headers.get(index++).replace("", ""), cell);
+ }
+ }
+ mapValues.add(lineMap);
+ }
+
+ csvReader.close();
+ filereader.close();
+ }
+ catch (Exception e1) {
+ e1.printStackTrace();
+ }
+ model.fireTableRowsInserted(0, mapValues.size() - 1);
+ selectLastRow();
+ }
+ } else if (exportButton.equals(e.getSource())) {
+ JFileChooser chooser = new JFileChooser();
+ chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+ chooser.setDialogTitle("Specify a file to save");
+ chooser.setAcceptAllFileFilterUsed(false);
+ chooser.addChoosableFileFilter(new FileNameExtensionFilter("CSV File", "csv"));
+ try {
+ chooser.setCurrentDirectory(new File(ResourcesUtils.retrieveFileFromResourcesFolder("")));
+ } catch (Exception e2) {
+ e2.printStackTrace();
+ }
+
+ int option = chooser.showSaveDialog(this);
+ if (option == JFileChooser.APPROVE_OPTION) {
+ //select delimiter
+ JComboBox list = new JComboBox<>(EnumDelimiter.values());
+ CsvSelectDialog dialog = new CsvSelectDialog("Please select required delimiter: ", list);
+ dialog.setOnOk(s -> selectedDelimiter = (EnumDelimiter) dialog.getSelectedItem());
+ dialog.show();
+
+ File file = chooser.getSelectedFile();
+ String filePath = file.getAbsolutePath();
+ if (!filePath.endsWith(".csv")) {
+ file = new File(filePath + ".csv");
+ }
+
+ try {
+ FileWriter outputfile = new FileWriter(file);
+
+ CSVWriter writer = new CSVWriter(outputfile, selectedDelimiter.delimiter,
+ CSVWriter.NO_QUOTE_CHARACTER,
+ '\\', // Set backslash ('\') as the escape character
+ CSVWriter.DEFAULT_LINE_END);
+
+ List data = new ArrayList();
+
+ List headersList = new ArrayList<>();
+ for (int i=0; i < model.getColumnCount(); i++) {
+ headersList.add(model.getColumnName(i));
+ }
+
+ data.add(headersList.toArray(new String[headersList.size()]));
+ for (int row=0; row < model.getRowCount(); row++) {
+ List rowList = new ArrayList<>();
+ for (int col = 0; col < model.getColumnCount(); col++) {
+ rowList.add((String) model.getValueAt(row, col));
+ }
+ data.add(rowList.toArray(new String[rowList.size()]));
+ }
+
+ writer.writeAll(data);
+ writer.close();
+ outputfile.close();
+ JFrame frame = new JFrame();
+ JOptionPane.showMessageDialog(frame,"Operation Successful.");
+ } catch (IOException e1) {
+ e1.printStackTrace();
+ JFrame frame = new JFrame();
+ JOptionPane.showMessageDialog(frame, "Operation Error. Check the console for more information...","Alert",JOptionPane.WARNING_MESSAGE);
+ }
+
+ }
+ }
+ }
+
+ @Override
+ public void valueChanged(ListSelectionEvent e) {
+ for (ParameterProviderListener listener : listenersList) {
+ listener.actionPerformed(this, e);
+ }
+ if (e != null) {
+ ListSelectionModel lsm = (ListSelectionModel) e.getSource();
+ currentSelectedRow = lsm.getLeadSelectionIndex();
+ }
+ updateButtonStatus();
+ }
+
+ public void addListener(ParameterProviderListener listener) {
+ if (null == listenersList) {
+ listenersList = new ArrayList();
+ }
+ listenersList.add(listener);
+ }
+
+ private void updateButtonStatus() {
+ if (currentSelectedRow == -1) {
+ removeButton.setEnabled(false);
+ } else {
+ removeButton.setEnabled(isEnabled);
+ }
+ if (currentSelectedRow == 0 || currentSelectedRow == -1) {
+ upButton.setEnabled(false);
+ } else {
+ upButton.setEnabled(isEnabled);
+ }
+ if (currentSelectedRow >= (mapValues.size() - 1) || currentSelectedRow == -1) {
+ downButton.setEnabled(false);
+ } else {
+ downButton.setEnabled(isEnabled);
+ }
+ }
+
+ public void setListeners(List listenersList) {
+ this.listenersList = listenersList;
+
+ }
+
+ public JTable getTable() {
+ return table;
+ }
+
+}
+
diff --git a/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvSelectDialog.java b/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvSelectDialog.java
new file mode 100644
index 00000000..693cfb9f
--- /dev/null
+++ b/jsystem-core-projects/jsystemApp/src/main/java/jsystem/extensions/paramproviders/CsvSelectDialog.java
@@ -0,0 +1,77 @@
+package jsystem.extensions.paramproviders;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+public class CsvSelectDialog {
+ private JComboBox> list;
+ private JLabel label;
+ private JOptionPane optionPane;
+ private JButton okButton, cancelButton;
+ private ActionListener okEvent, cancelEvent;
+ private JDialog dialog;
+
+ public CsvSelectDialog(String message, JComboBox> listToDisplay){
+ list = listToDisplay;
+ label = new JLabel(message);
+ createAndDisplayOptionPane();
+ }
+
+ public CsvSelectDialog(String title, String message, JComboBox> listToDisplay){
+ this(message, listToDisplay);
+ dialog.setTitle(title);
+ }
+
+ private void createAndDisplayOptionPane(){
+ setupButtons();
+ JPanel pane = layoutComponents();
+ optionPane = new JOptionPane(pane);
+ optionPane.setOptions(new Object[]{okButton, cancelButton});
+ dialog = optionPane.createDialog("Select option");
+ }
+
+ private void setupButtons(){
+ okButton = new JButton("Ok");
+ okButton.addActionListener(e -> handleOkButtonClick(e));
+
+ cancelButton = new JButton("Cancel");
+ cancelButton.addActionListener(e -> handleCancelButtonClick(e));
+ }
+
+ private JPanel layoutComponents(){
+ JPanel panel = new JPanel(new BorderLayout(5,5));
+ panel.add(label, BorderLayout.NORTH);
+ panel.add(list, BorderLayout.CENTER);
+ return panel;
+ }
+
+ public void setOnOk(ActionListener event){ okEvent = event; }
+
+ public void setOnClose(ActionListener event){
+ cancelEvent = event;
+ }
+
+ private void handleOkButtonClick(ActionEvent e){
+ if(okEvent != null){ okEvent.actionPerformed(e); }
+ hide();
+ }
+
+ private void handleCancelButtonClick(ActionEvent e){
+ if(cancelEvent != null){ cancelEvent.actionPerformed(e);}
+ hide();
+ }
+
+ public void show(){ dialog.setVisible(true); }
+
+ private void hide(){ dialog.setVisible(false); }
+
+ public Object getSelectedItem(){ return list.getSelectedItem(); }
+}
diff --git a/jsystem-core-projects/jsystemCommon/pom.xml b/jsystem-core-projects/jsystemCommon/pom.xml
index 8dcc9b67..4fb82cfa 100644
--- a/jsystem-core-projects/jsystemCommon/pom.xml
+++ b/jsystem-core-projects/jsystemCommon/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
jsystemCommon
diff --git a/jsystem-core-projects/jsystemCommon/src/main/java/jsystem/utils/ResourcesUtils.java b/jsystem-core-projects/jsystemCommon/src/main/java/jsystem/utils/ResourcesUtils.java
new file mode 100644
index 00000000..f7409960
--- /dev/null
+++ b/jsystem-core-projects/jsystemCommon/src/main/java/jsystem/utils/ResourcesUtils.java
@@ -0,0 +1,73 @@
+package jsystem.utils;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.Properties;
+
+import jsystem.framework.report.ListenerstManager;
+import jsystem.framework.report.Reporter;
+
+public class ResourcesUtils {
+
+ private static Reporter report = ListenerstManager.getInstance();
+
+ private ResourcesUtils() {
+ throw new AssertionError();
+ }
+
+ public static String retrieveFileFromResourcesFolder(String filePath) throws Exception {
+ String fileAsString = findResourcesFolder() + "\\" + filePath;
+ return fileAsString;
+ }
+
+ public static String retrieveFileFromClassesFolder(String filePath) throws Exception {
+ String fileAsString = findClassesFolder() + "\\" + filePath;
+ return fileAsString;
+ }
+
+ private static String findClassesFolder() throws Exception {
+ Properties jsystemPropertiesFile = loadJsystemPropertiesFile();
+ String testsSrc = jsystemPropertiesFile.getProperty("tests.dir");
+ // String testResourcesFolder = testsSrc.replace("java", "resources");
+ return testsSrc;
+ }
+
+ private static String findResourcesFolder() throws Exception {
+ Properties jsystemPropertiesFile = loadJsystemPropertiesFile();
+ String testsSrc = jsystemPropertiesFile.getProperty("tests.src");
+ String testResourcesFolder = testsSrc.replace("java", "resources");
+ return testResourcesFolder;
+ }
+
+ private static Properties loadJsystemPropertiesFile() throws Exception {
+ return loadPropertiesFile("jsystem.properties");
+ }
+
+ public static Properties loadRemoteDifidoPropertiesFile() throws Exception {
+ return loadPropertiesFile("remoteDifido.properties");
+ }
+
+ private static Properties loadPropertiesFile(String propertiesFile) throws Exception {
+ String str = report.getCurrentTestFolder();
+ if (str.contains("tests")) {// for runner
+ str = str + "\\..\\..\\..\\..\\";
+ } else {// for eclipse
+ str = str + "\\..\\..\\..\\";
+ }
+
+ Properties p = new Properties();
+ try (InputStream inputStream = new FileInputStream(str + propertiesFile)) {
+ p.load(inputStream);
+ }
+ return p;
+ }
+
+ public static Properties loadPropertiesFromFileInResources(String propertiesFile) throws Exception {
+ Properties p = new Properties();
+ try (InputStream inputStream = new FileInputStream(retrieveFileFromResourcesFolder(propertiesFile))) {
+ p.load(inputStream);
+ }
+ return p;
+ }
+
+}
diff --git a/jsystem-core-projects/jsystemCore/pom.xml b/jsystem-core-projects/jsystemCore/pom.xml
index 04e6d5f4..a329799b 100644
--- a/jsystem-core-projects/jsystemCore/pom.xml
+++ b/jsystem-core-projects/jsystemCore/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
jsystemCore
diff --git a/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/DefaultReporterImpl.java b/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/DefaultReporterImpl.java
index 23ff9ba8..b93ac8b1 100644
--- a/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/DefaultReporterImpl.java
+++ b/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/DefaultReporterImpl.java
@@ -264,5 +264,93 @@ protected void updateCurrentTest(Test test){
}
}
+
+ @Override
+ public void jira(String title, String jiraId) {
+ report(title + EnumBadge.JIRA.setText(jiraId).get());
+ }
+
+ @Override
+ public void info(String title, String info) {
+ report(title + EnumBadge.INFO.setText(info).get());
+ }
+
+ @Override
+ public void info(String title) {
+ report(title + EnumBadge.INFO.setText(EnumBadge.INFO.name().toLowerCase()).get());
+ }
+
+ @Override
+ public void workaround(String title) {
+ report(title + EnumBadge.WORKAROUND.get());
+ }
+
+ @Override
+ public void debug(String title) {
+ report(title + EnumBadge.DEBUG.get());
+ }
+
+ @Override
+ public void bug(String title) {
+ report(title + EnumBadge.BUG.get());
+ }
+
+ @Override
+ public void result(String title, int status) {
+ report(title + EnumBadge.RESULT.get(), status);
+ }
+
+ @Override
+ public void result(String title) {
+ result(title, Reporter.PASS);
+ }
+
+ @Override
+ public void result(String title, boolean status) {
+ result(title, status ? Reporter.PASS : Reporter.FAIL);
+ }
+
+ @Override
+ public void result(String title, ReportAttribute reportAttribute) {
+ report(title + EnumBadge.RESULT.get(), reportAttribute);
+ }
+
+ @Override
+ public ReportLevel reportLevel(String level) {
+ return new ReportLevel(level);
+ }
+
+ @Override
+ public ReportLevel reportLevel(String level, EnumBadge badge) {
+ return new ReportLevel(level, badge);
+ }
+
+ public class ReportLevel implements AutoCloseable {
+
+ public ReportLevel(String levelTitle) {
+ try {
+ startLevel(levelTitle);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public ReportLevel(String levelTitle, EnumBadge badge) {
+ try {
+ startLevel(levelTitle + badge.get());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void close() {
+ try {
+ stopLevel();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
}
diff --git a/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/Reporter.java b/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/Reporter.java
index 6ab99cbb..9a23f9de 100644
--- a/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/Reporter.java
+++ b/jsystem-core-projects/jsystemCore/src/main/java/jsystem/framework/report/Reporter.java
@@ -6,6 +6,7 @@
import java.io.IOException;
import java.util.List;
+import jsystem.framework.report.DefaultReporterImpl.ReportLevel;
import jsystem.framework.system.SystemObjectImpl;
import junit.framework.SystemTestCase;
@@ -23,6 +24,42 @@
*/
public interface Reporter extends InteractiveReporter{
+ public enum EnumBadge {
+ RESULT("badge-dark", "#result"),
+ DEBUG("badge-secondary", "#debug"),
+ JIRA("badge-primary", ""), // text will be converted to link
+ INFO("badge-info", "#info"),
+ BUG("badge-danger", "#bug"),
+ WORKAROUND("badge-warning", "#workaround"),;
+ // LIGHT("badge-light", ""),
+ // SUCCESS("badge-success", ""),
+ ;
+
+ private String keyword;
+ public String text;
+
+ EnumBadge(String keyword, String text) {
+ this.keyword = keyword;
+ this.text = text;
+ }
+
+ /**
+ * In the case of a Jira Badge, the text will be converted to the link
+ * @param text
+ * @return
+ */
+ public EnumBadge setText(String text) {
+ this.text = text;
+ return this;
+ }
+
+ public String get() {
+ return keyword + "" + text + "";
+ }
+
+ }
+
+
public enum EnumReportLevel{
CurrentPlace(0),
MainFrame(1);
@@ -524,4 +561,30 @@ public void report(String title, String message, int status, boolean bold,
* @param attribute - Can hold one of the following values: BOLD, LINK, HTML, STEP
*/
public void report(String title, String message, int status, ReportAttribute attribute);
+
+
+ //***** Badge Methods *****//
+ public void jira(String title, String jiraId);
+
+ public void info(String title, String info);
+
+ public void info(String title);
+
+ public void workaround(String title);
+
+ public void debug(String title);
+
+ public void bug(String title);
+
+ public void result(String title, int status);
+
+ public void result(String title);
+
+ public void result(String title, boolean status);
+
+ public void result(String title, ReportAttribute reportAttribute);
+
+ public ReportLevel reportLevel(String level);
+
+ public ReportLevel reportLevel(String level, EnumBadge badge);
}
diff --git a/jsystem-core-projects/pom.xml b/jsystem-core-projects/pom.xml
index a19530a3..4a9c317e 100644
--- a/jsystem-core-projects/pom.xml
+++ b/jsystem-core-projects/pom.xml
@@ -4,13 +4,13 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../jsystem-parent
jsystem-core-projects
pom
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
jsystem-launcher
diff --git a/jsystem-core-system-objects/FileTransfer-so/pom.xml b/jsystem-core-system-objects/FileTransfer-so/pom.xml
index a83e028d..64c3573a 100644
--- a/jsystem-core-system-objects/FileTransfer-so/pom.xml
+++ b/jsystem-core-system-objects/FileTransfer-so/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest.systemobjects
jsystem-core-system-objects
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
..
FileTransfer
diff --git a/jsystem-core-system-objects/FileTransfer-tests/pom.xml b/jsystem-core-system-objects/FileTransfer-tests/pom.xml
index 467e5045..09b299dc 100644
--- a/jsystem-core-system-objects/FileTransfer-tests/pom.xml
+++ b/jsystem-core-system-objects/FileTransfer-tests/pom.xml
@@ -6,7 +6,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
diff --git a/jsystem-core-system-objects/cli-so/pom.xml b/jsystem-core-system-objects/cli-so/pom.xml
index d1003332..66b46211 100644
--- a/jsystem-core-system-objects/cli-so/pom.xml
+++ b/jsystem-core-system-objects/cli-so/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest.systemobjects
jsystem-core-system-objects
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
..
cli
diff --git a/jsystem-core-system-objects/cli-so/src/main/java/systemobject/terminal/SSH.java b/jsystem-core-system-objects/cli-so/src/main/java/systemobject/terminal/SSH.java
index 7cfcd094..4fd33430 100644
--- a/jsystem-core-system-objects/cli-so/src/main/java/systemobject/terminal/SSH.java
+++ b/jsystem-core-system-objects/cli-so/src/main/java/systemobject/terminal/SSH.java
@@ -34,6 +34,8 @@ public class SSH extends Terminal {
protected int destinationPort = -1;
protected boolean xtermTerminal = true;
+
+ protected boolean connected = false;
/**
* Is enabled the sudo terminal
@@ -140,6 +142,7 @@ public void connect() throws IOException {
in = sess.getStdout();
out = sess.getStdin();
+ connected = true;
}
@Override
@@ -156,11 +159,12 @@ public void disconnect() {
if (conn != null) {
conn.close();
}
+ connected = false;
}
@Override
public boolean isConnected() {
- return true;
+ return connected;
}
@Override
diff --git a/jsystem-core-system-objects/cli-tests/pom.xml b/jsystem-core-system-objects/cli-tests/pom.xml
index cdd31f47..e8bc604f 100644
--- a/jsystem-core-system-objects/cli-tests/pom.xml
+++ b/jsystem-core-system-objects/cli-tests/pom.xml
@@ -6,14 +6,14 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
org.jsystemtest
jsystemApp
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
diff --git a/jsystem-core-system-objects/embeddedCatalina-so/pom.xml b/jsystem-core-system-objects/embeddedCatalina-so/pom.xml
index e89e5d74..a1e18660 100644
--- a/jsystem-core-system-objects/embeddedCatalina-so/pom.xml
+++ b/jsystem-core-system-objects/embeddedCatalina-so/pom.xml
@@ -4,7 +4,7 @@
org.jsystemtest.systemobjects
jsystem-core-system-objects
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
..
embeddedCatalina
diff --git a/jsystem-core-system-objects/embeddedCatalina-tests/pom.xml b/jsystem-core-system-objects/embeddedCatalina-tests/pom.xml
index c10c5b85..1b716d9f 100644
--- a/jsystem-core-system-objects/embeddedCatalina-tests/pom.xml
+++ b/jsystem-core-system-objects/embeddedCatalina-tests/pom.xml
@@ -5,7 +5,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
diff --git a/jsystem-core-system-objects/pom.xml b/jsystem-core-system-objects/pom.xml
index 3fb8c7f6..185e58b8 100644
--- a/jsystem-core-system-objects/pom.xml
+++ b/jsystem-core-system-objects/pom.xml
@@ -4,14 +4,14 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../jsystem-parent
jsystem-core-system-objects
org.jsystemtest.systemobjects
pom
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
cli-so
diff --git a/jsystem-miscellaneous/jsystem-maven-plugin/pom.xml b/jsystem-miscellaneous/jsystem-maven-plugin/pom.xml
index 08146a6e..16c0cfe4 100644
--- a/jsystem-miscellaneous/jsystem-maven-plugin/pom.xml
+++ b/jsystem-miscellaneous/jsystem-maven-plugin/pom.xml
@@ -8,7 +8,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
diff --git a/jsystem-miscellaneous/jsystem-services-so/pom.xml b/jsystem-miscellaneous/jsystem-services-so/pom.xml
index f4493a48..3988a5fa 100644
--- a/jsystem-miscellaneous/jsystem-services-so/pom.xml
+++ b/jsystem-miscellaneous/jsystem-services-so/pom.xml
@@ -5,7 +5,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
diff --git a/jsystem-miscellaneous/jsystem-services-tests/pom.xml b/jsystem-miscellaneous/jsystem-services-tests/pom.xml
index f808fdd0..77ca9b8f 100644
--- a/jsystem-miscellaneous/jsystem-services-tests/pom.xml
+++ b/jsystem-miscellaneous/jsystem-services-tests/pom.xml
@@ -5,7 +5,7 @@
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
../../jsystem-parent
@@ -68,7 +68,7 @@
org.jsystemtest
jsystem-services-tests
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
runtime
diff --git a/jsystem-parent/pom.xml b/jsystem-parent/pom.xml
index 2461463c..d169c4fc 100644
--- a/jsystem-parent/pom.xml
+++ b/jsystem-parent/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.jsystemtest
jsystem-parent
- 6.1.12-SNAPSHOT
+ 6.1.13-SNAPSHOT
pom
jsystem-parent
@@ -134,7 +134,7 @@
ch.ethz.ganymed
ganymed-ssh2
- build210
+ 262
javax.comm
@@ -209,6 +209,11 @@
xml-apis
1.4.01
+
+ com.opencsv
+ opencsv
+ 4.1
+