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 +