/*
* Software Name : ATK
*
* Copyright (C) 2007 - 2012 France Télécom
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* ------------------------------------------------------------------
* File Name : JatkCheckListTable.java
*
* Created : 28/05/2007
* Author(s) : Aurore PENAULT
*/
package com.orange.atk.atkUI.guiScript;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Iterator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.DefaultCellEditor;
import javax.swing.DropMode;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.ListSelectionModel;
import javax.swing.ToolTipManager;
import javax.swing.TransferHandler;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import org.apache.log4j.Logger;
import com.orange.atk.atkUI.anaScript.JatkCampaign;
import com.orange.atk.atkUI.anaScript.JatkStep;
import com.orange.atk.atkUI.corecli.Campaign;
import com.orange.atk.atkUI.corecli.Configuration;
import com.orange.atk.atkUI.corecli.Step;
import com.orange.atk.atkUI.corecli.Step.Verdict;
import com.orange.atk.atkUI.corecli.StepAnalysisResult;
import com.orange.atk.atkUI.corecli.utils.StringUtilities;
import com.orange.atk.atkUI.coregui.CheckListTable;
import com.orange.atk.atkUI.coregui.CheckListTableModel;
import com.orange.atk.atkUI.coregui.CoreGUIPlugin;
import com.orange.atk.atkUI.coregui.JATKcomboBoxListener;
import com.orange.atk.atkUI.coregui.actions.MatosAction;
import com.orange.atk.atkUI.coregui.tasks.LoadCheckListTask;
import com.orange.atk.atkUI.guiScript.actions.JatkGUIAction;
import com.orange.atk.phone.PhoneInterface;
import com.orange.atk.phone.detection.AutomaticPhoneDetection;
/**
*
* @author Aurore PENAULT
* @since JDK5.0
*/
public class JatkCheckListTable extends CheckListTable {
private static final int TOOLTIP_DISMISS_AFTER = 10000; // 10sec
/**
*
*/
private static final long serialVersionUID = 1L;
// First columns defined in CheckListTable
static final int COLUMN_COMMENTS = COLUMN_VERDICT + 1;
static final int COLUMN_SCREENSHOT = COLUMN_COMMENTS + 1;
private static final int NUMBER_OF_COLUMN = COLUMN_SCREENSHOT;
private Object[] longValues = {"1000", "ALongWordForAFlashFile.swf", "Config file", "*",
"Passed***", "A long comment", "Analyse"};
private boolean completeView = false;
// -- Table management --
private TableColumn screenShotsColumn;
private TableColumn commentsColumn;
/**
* Builds and initialize a new CheckList Table for Flash content.
*
*/
@SuppressWarnings("serial")
public JatkCheckListTable() {
super();
campaign = new JatkCampaign();
ToolTipManager.sharedInstance().setDismissDelay(TOOLTIP_DISMISS_AFTER);
model = new FlashCheckListTableModel();
model.setLongValues(longValues);
table = new JTable(model) {
public boolean getScrollableTracksViewportHeight() {
if (getParent() instanceof JViewport) {
return (((JViewport) getParent()).getHeight() > getPreferredSize().height);
}
return false;
}
};
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
// On met en place le D&D sur la JTable
table.setDropMode(DropMode.INSERT_ROWS);
table.setDragEnabled(true);
table.setTransferHandler(new MyTransfertHandler());
table.setPreferredScrollableViewportSize(new Dimension(500, 200));
tablePane = new JScrollPane(table);
model.addColumn("#");
model.addColumn("Test FILE");
model.addColumn("Monitoring Config");
model.addColumn("M");
model.addColumn("Verdict");
model.addColumn("Comments");
model.addColumn("ScreenShots Comparison");
constructTable();
// Set up column sizes.
model.initColumnSizes(model, table, NUMBER_OF_COLUMN);
setRenderer();
table.setRowHeight(25);
// table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
ListSelectionModel rowSM = table.getSelectionModel();
rowSM.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
CoreGUIPlugin.mainFrame.updateButtons();
}
});
givePopupMenuToTable(table);
this.setLayout(new BorderLayout());
this.add(BorderLayout.CENTER, tablePane);
this.setBorder(BorderFactory.createEmptyBorder(20, 10, 10, 10));
}
/**
* Associates a popup menu to a table.
*
* @param table
* the target table
*/
private void givePopupMenuToTable(JTable table) {
JPopupMenu popUp = createTablePopUp();
table.addMouseListener(new JatkMouseListener(popUp, this));
}
/**
* Creates the popup menu.
*
* @return the popup menu
*/
private JPopupMenu createTablePopUp() {
JPopupMenu popup = new JPopupMenu();
popup.add(JatkGUIAction.ANALYSESELECTEDTASKS.getAsMenuItem("Launch selection"));
popup.add(MatosAction.VIEWANALYZER.getAsMenuItem("Analyzer"));
popup.add(MatosAction.VIEWAROREPORT.getAsMenuItem("ARO report"));
popup.add(MatosAction.VIEWREPORT.getAsMenuItem("Open latest report"));
popup.add(JatkGUIAction.SETSCREENSHOTREFERENCEDIR
.getAsMenuItem("Set Reference Screenshots"));
popup.addSeparator();
popup.add(MatosAction.COPY.getAsMenuItem("Copy"));
popup.add(MatosAction.PASTE.getAsMenuItem("Paste under"));
popup.add(MatosAction.REMOVE.getAsMenuItem("Remove"));
popup.addSeparator();
// popup.add(MatosAction.CONFIRMVERDICT.getAsMenuItem("Confirm the verdict"));
// popup.add(MatosAction.MODIFYVERDICT.getAsMenuItem("Modify the verdict"));
popup.addSeparator();
popup.add(MatosAction.PROPERTIES.getAsMenuItem("Properties..."));
return popup;
}
/**
* Associates a renderer to this table.
*/
protected void setRenderer() {
nbStepColumn = table.getColumnModel().getColumn(COLUMN_NBROW);
GeneralRenderer nbStepRenderer = new GeneralRenderer();
nbStepColumn.setMinWidth(30);
nbStepColumn.setMaxWidth(70);
nbStepColumn.setCellRenderer(nbStepRenderer);
flashfileColumn = table.getColumnModel().getColumn(COLUMN_TESTNAME);
GeneralRenderer flashRenderer = new GeneralRenderer();
flashfileColumn.setCellRenderer(flashRenderer);
phoneconfigColumn = table.getColumnModel().getColumn(COLUMN_PHONECONFIG);
phoneconfigColumn.setCellEditor(new DefaultCellEditor(comboBoxPhoneConfig));
JATKcomboBoxListener comboBoxListener = new JATKcomboBoxListener(comboBoxPhoneConfig, this);
comboBoxPhoneConfig.addActionListener(comboBoxListener);
comboBoxPhoneConfig.addMouseListener(comboBoxListener);
modifiedColumn = table.getColumnModel().getColumn(COLUMN_MODIFIED);
modifiedColumn.setMinWidth(30);
modifiedColumn.setMaxWidth(50);
GeneralRenderer modifiedRenderer = new GeneralRenderer();
modifiedColumn.setCellRenderer(modifiedRenderer);
verdictColumn = table.getColumnModel().getColumn(COLUMN_VERDICT);
GeneralRenderer verdictRenderer = new GeneralRenderer();
verdictColumn.setCellRenderer(verdictRenderer);
commentsColumn = table.getColumnModel().getColumn(COLUMN_COMMENTS);
GeneralRenderer commentsRenderer = new GeneralRenderer();
commentsColumn.setCellRenderer(commentsRenderer);
screenShotsColumn = table.getColumnModel().getColumn(COLUMN_SCREENSHOT);
GeneralRenderer screenShotsRenderer = new GeneralRenderer();
screenShotsColumn.setCellRenderer(screenShotsRenderer);
}
public JComboBox getComboBoxPhoneConfig() {
return comboBoxPhoneConfig;
}
/**
* Implémentation De transfertHandler correspondant à la JTable.
*
* @author
*
*/
static class MyTransfertHandler extends TransferHandler {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public int getSourceActions(JComponent c) {
// TODO Auto-generated method stub
return TransferHandler.MOVE;
}
private static final String URI_LIST_MIME_TYPE = "text/uri-list;class=java.lang.String";
@Override
protected Transferable createTransferable(JComponent c) {
// on récupère la donnée qui nous intéresse (c'est a dire
// l'emplacement de la ligne que l'on veut bouger)
// Puis on l'enveloppe dans un Objet héritant de transferable. (une
// StringSelection en l'occurence)
JTable t = (JTable) c;
StringSelection s = new StringSelection(String.valueOf(t.getSelectedRow()));
return s;
}
public boolean canImport(TransferHandler.TransferSupport info) {
// pour ne gérer que le drop et pas le paste
// if (!info.isDrop()) {
// return false;
// }
if (Campaign.isExecute()) {
return false;
}
// On ne supporte que les string et les file en entree
if (!((info.isDataFlavorSupported(DataFlavor.stringFlavor)) || (info
.isDataFlavorSupported(DataFlavor.javaFileListFlavor)))) {
return false;
}
// On recherche l'emplacement du drop
JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation();
// On ne supporte que les emplacements de drop valides
return dl.getDropPoint() != null;
}
public boolean importData(TransferHandler.TransferSupport info) {
// dans le cas ou l'on ne pourrait supporter l'import
if (!canImport(info)) {
return false;
}
Transferable transferable = info.getTransferable();
DataFlavor uriListFlavor = null;
try {
uriListFlavor = new DataFlavor(URI_LIST_MIME_TYPE);
} catch (ClassNotFoundException e) {
Logger.getLogger(this.getClass()).error(e);
}
try {
Vector<File> dd_flashPathVect = new Vector<File>();
// 1. get back files
if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { // windows's
// way
List<File> list = (List<File>) transferable
.getTransferData(DataFlavor.javaFileListFlavor);
Iterator<File> it = list.iterator();
while (it.hasNext()) {
File f = it.next();
String extension = ".tst";
if (f.getAbsolutePath().endsWith(extension)) {
dd_flashPathVect.add(new File(f.getAbsolutePath()));
}
}
} else if (transferable.isDataFlavorSupported(uriListFlavor)) {
String s = (String) transferable.getTransferData(uriListFlavor);
String[] uris = s.split(System.getProperty("line.separator"));
for (int i = 0; i < uris.length; i++) {
if (uris[i].trim().length() > 0) {
File f = new File(new URI(uris[i].trim()));
String extension = ".tst";
if (f.exists() && f.getAbsolutePath().endsWith(extension)) {
dd_flashPathVect.add(new File(f.getAbsolutePath()));
}
}
}
} else {
// On récupère l'emplacement du Drop
JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation();
// On récupère la ligne de destinatop du drop
int dstRow = dl.getRow();
// on récupère l'objet de transfert
Transferable trans = info.getTransferable();
// On récupère la donnée utile depuis l'objet de
// transfert (l'emplacement d'origine de la ligne à
// bouger)
try {
trans.getTransferData(DataFlavor.stringFlavor);
} catch (UnsupportedFlavorException e) {
Logger.getLogger(this.getClass()).error(e);
return false;
} catch (IOException e) {
Logger.getLogger(this.getClass()).error(e);
return false;
}
// on effectue les modifications sur la JTable
JTable table = (JTable) info.getComponent();
FlashCheckListTableModel m = (FlashCheckListTableModel) table.getModel();
if (dstRow < 0) {
dstRow = 0;
}
if (dstRow > m.getRowCount() - 1) {
dstRow = m.getRowCount() - 1;
}
SortedSet<Integer> campaignIndexRemovedRows = new TreeSet<Integer>();
int[] temp = table.getSelectedRows();
for (int i = 0; i < temp.length; i++) {
campaignIndexRemovedRows.add(temp[i]);
}
m.moveRow(campaignIndexRemovedRows, dstRow);
return true;
}
JTable.DropLocation dl = (JTable.DropLocation) info.getDropLocation();
// On récupère la ligne de destinatop du drop
dl.getRow();
// 2. add droped files into the check list
if (dd_flashPathVect.size() > 0) {
Campaign tmpCamp = new Campaign();
Iterator<File> itSWF = dd_flashPathVect.iterator();
while (itSWF.hasNext()) {
File swfFile = itSWF.next();
String swfPath = swfFile.getAbsolutePath();
JatkStep flashStep = new JatkStep(swfPath, swfFile);
tmpCamp.add(flashStep);
}
new LoadCheckListTask(CoreGUIPlugin.mainFrame.statusBar, tmpCamp, -1, false,
tmpCamp.size());
return true;
}
} catch (UnsupportedFlavorException e) {
Logger.getLogger(this.getClass()).error(e);
} catch (IOException e) {
Logger.getLogger(this.getClass()).error(e);
} catch (URISyntaxException e) {
Logger.getLogger(this.getClass()).error(e);
}
return false;
}
}
/**
* The renderer for this check-list table.
*/
public class GeneralRenderer extends JLabel implements TableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
private ImageIcon[] suitImages;
/**
* Creates the renderer.
*
*/
public GeneralRenderer() {
setOpaque(true);
suitImages = new ImageIcon[5];
java.net.URL passedURL = CoreGUIPlugin.getIconURL("tango/apply.png");
java.net.URL failedURL = CoreGUIPlugin.getIconURL("tango/messagebox_warning.png");
java.net.URL skippedURL = CoreGUIPlugin.getIconURL("tango/cache.png");
suitImages[0] = new ImageIcon(passedURL, Step.verdictAsString.get(Verdict.PASSED));
suitImages[1] = new ImageIcon(failedURL, Step.verdictAsString.get(Verdict.FAILED));
suitImages[2] = new ImageIcon(skippedURL, Step.verdictAsString.get(Verdict.SKIPPED));
suitImages[3] = new ImageIcon(failedURL, Step.verdictAsString.get(Verdict.INITFAILED));
suitImages[4] = new ImageIcon(failedURL, Step.verdictAsString.get(Verdict.TESTFAILED));
}
/**
* Gets the renderer for each cell of the table.
*/
public Component getTableCellRendererComponent(JTable table, Object color,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
this.setBackground(table.getSelectionBackground());
} else {
if (column == COLUMN_TESTNAME) {
this.setBackground(new Color(253, 245, 230));
} else {
this.setBackground(table.getBackground());
}
}
try {
this.setText((String) model.getValueAt(row, column));
int numRow = Integer.valueOf((String) model.getValueAt(row, COLUMN_NBROW)) - 1;
if (column == COLUMN_TESTNAME) {
this.setToolTipText((String) toolTipFlashFile.get(numRow));
}
if (column == COLUMN_MODIFIED) {
this.setToolTipText((String) toolTipModified.get(numRow));
this.setHorizontalAlignment(JLabel.CENTER);
}
if (column == COLUMN_VERDICT) {
this.setToolTipText((String) toolTipReport.get(numRow));
Verdict verdict = Verdict.NONE;
Verdict userVerdict = Verdict.NONE;
if (numRow < campaign.size()) {
verdict = ((Step) campaign.get(numRow)).getVerdict();
userVerdict = ((Step) campaign.get(numRow)).getUserVerdict();
}
if (userVerdict != Verdict.NONE) {
if (userVerdict == Verdict.PASSED) {
this.setIcon(suitImages[0]);
} else if (userVerdict == Verdict.FAILED) {
this.setIcon(suitImages[1]);
} else if (userVerdict == Verdict.SKIPPED) {
this.setIcon(suitImages[2]);
}
} else {
if (verdict == Verdict.PASSED) {
this.setIcon(suitImages[0]);
} else if (verdict == Verdict.FAILED) {
this.setIcon(suitImages[1]);
} else if (verdict == Verdict.SKIPPED) {
this.setIcon(suitImages[2]);
} else if (verdict == Verdict.NONE) {
this.setIcon(null);
} else {
this.setIcon(null);
}
}
if (userVerdict == verdict && verdict != Verdict.NONE) {
this.setBackground(new Color(224, 238, 224));
} else if (userVerdict != verdict && userVerdict != Verdict.NONE) {
this.setBackground(new Color(238, 213, 210));
}
if (verdict == Verdict.SKIPPED) {
this.setBackground(new Color(255, 250, 205));
}
}
if (column == COLUMN_COMMENTS) {
this.setToolTipText((String) model.getValueAt(row, column));
table.getCellEditor(row, column).addCellEditorListener(
new CellEditorListener() {
public void editingCanceled(ChangeEvent e) {
}
public void editingStopped(ChangeEvent e) {
int row = JatkCheckListTable.this.table.getSelectedRow();
Step c = (Step) campaign.get(row);
c.setUserComment((String) model
.getValueAt(row, COLUMN_COMMENTS));
}
});
}
if (column == COLUMN_SCREENSHOT) {
this.setToolTipText((String) toolTipReport.get(numRow));
Verdict screenshotVerdict = Verdict.NONE;
Verdict verdict = Verdict.NONE;
if (numRow < campaign.size()) {
screenshotVerdict = ((Step) campaign.get(numRow)).getScreenshotVerdict();
verdict = ((Step) campaign.get(numRow)).getVerdict();
}
if (screenshotVerdict != Verdict.NONE) {
if (screenshotVerdict == Verdict.PASSED) {
this.setIcon(suitImages[0]);
} else if (screenshotVerdict == Verdict.FAILED) {
this.setIcon(suitImages[1]);
} else if (screenshotVerdict == Verdict.SKIPPED) {
this.setIcon(suitImages[2]);
}
} else {
this.setIcon(new ImageIcon(CoreGUIPlugin
.getIconURL("tango/camera_icon.png"),
"Launch ScreenShot Comparison"));
}
if (verdict == Verdict.SKIPPED) {
this.setBackground(new Color(255, 250, 205));
}
}
if (completeView) {
if (column == COLUMN_COMMENTS) {
this.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, Color.BLACK));
}
}
return this;
} catch (ArrayIndexOutOfBoundsException ae) {
// throwed when table is modified (cleared,...) and repainted at
// same time...
// when numRow becomes > nb row in table
Logger.getLogger(this.getClass()).error("error", ae);
} catch (NumberFormatException nfe) {
// case numRow retriving get a null (see overwritten method
// MyTableModel.getValueAt(..))
Logger.getLogger(this.getClass()).error("error", nfe);
}
return null;
}
}
/*
* (non-Javadoc)
*
* @see
* com.orange.atk.atkUI.coregui.CheckListTable#addRow(com.orange.atk.atkUI
* .corecli.Step, int, boolean, boolean)
*/
@Override
public void addRow(Step step, int rowNumberInGUI, boolean selectIt, boolean checkPreviousResults) {
if (!(step instanceof JatkStep)) {
// Out.log.println("addRow(..): Warning, trying to add a non FlashStep into FlashCheckListTable... step skipped.");
return;
}
JatkStep flashStep = (JatkStep) step;
String flashURI = flashStep.getFlashFilePath();
String flashName = "";
if (flashURI.endsWith("tst")) {
flashName = StringUtilities.guessName(flashURI, "tst");
} else {// .sis
flashName = StringUtilities.guessName(flashURI, "xml");
}
String numRowInNumbers = null;
Vector<String> rowData = new Vector<String>();
if (rowNumberInGUI == -1) {
rowNumberInGUI = model.getRowCount();
}
if (model.getRowCount() == 0)
rowNumberInGUI = table.getRowCount();
numRowInNumbers = Integer.valueOf(rowNumberInGUI + 1).toString();
int numRowInCampaign = campaign.size();
rowData.add(numRowInNumbers);// rowNumber
rowData.add(flashName);
toolTipFlashFile.add(numRowInCampaign, flashURI);
if (checkPreviousResults) {
// Configuration column
if (null != flashStep.getXmlfilepath()) {
File configfile = new File(flashStep.getXmlfilepath());
rowData.add(configfile.getName());
} else {
PhoneInterface phone = AutomaticPhoneDetection.getInstance().getDevice();
String defaultConfigFileName = Configuration.getInstance().getDefaultMonitoringConfig()
.get(phone.getClass().getName());
if (defaultConfigFileName != null) {
rowData.add(defaultConfigFileName);
File file = new File(Configuration.getMonitoringConfigDir()+File.separator
+ defaultConfigFileName);
flashStep.setXmlfilepath(file.toString());
} else
rowData.add(NOT_SELECTED);
}
rowData.add(""); // Modified column
toolTipModified.add(numRowInCampaign, "");
rowData.add(""); // Verdict column
rowData.add(""); // Comments column
toolTipReport.add(numRowInCampaign, "");
}
model.insertRow(rowNumberInGUI, rowData);
campaign.add(numRowInCampaign, flashStep);
if (selectIt) {
selectARow(rowNumberInGUI);
}
}
/*
* (non-Javadoc)
*
* @see com.orange.atk.atkUI.coregui.CheckListTable#clear()
*/
@Override
public void clear() {
if (table.getRowCount() > 0) { // / if needed ...
campaign = new JatkCampaign();
model = new FlashCheckListTableModel();
model.setLongValues(longValues);
table.removeAll();
table.setModel(model);
model.addColumn("#");
model.addColumn("Test FILE");
model.addColumn("Monitoring Config");
model.addColumn("M");
model.addColumn("Verdict");
model.addColumn("Comments");
model.addColumn("Analyser");
// Set up column sizes.
model.initColumnSizes(model, table, NUMBER_OF_COLUMN);
}
}
/*
* (non-Javadoc)
*
* @see
* com.orange.atk.atkUI.coregui.CheckListTable#updateAllAfterRemoving(java
* .util.Vector)
*/
@Override
public void updateAllAfterRemoving(Vector<Integer> campRemovedRows) {
if (table.getRowCount() == 0) {
CoreGUIPlugin.mainFrame.setCheckListFileName(null);
campaign = new JatkCampaign();
toolTipFlashFile.removeAllElements();
toolTipModified.removeAllElements();
toolTipReport.removeAllElements();
} else {
updateTableAfterRemoving(campRemovedRows);
updateCampaign(campRemovedRows);
updateVector(toolTipFlashFile, campRemovedRows);
updateVector(toolTipModified, campRemovedRows);
updateVector(toolTipReport, campRemovedRows);
}
model.fireTableDataChanged();
CoreGUIPlugin.mainFrame.updateButtons();
}
/*
* (non-Javadoc)
*
* @see
* com.orange.atk.atkUI.coregui.CheckListTable#updateStep(com.orange.atk
* .atkUI.corecli.Step)
*/
@Override
public void updateStep(Step step) {
Step flashStep = (Step) step;
int indexInCampaign = getCampaign().indexOf(step);
int indexInTable = getIndexInTable(indexInCampaign);
centerRow(indexInTable);
Verdict userVerdict = flashStep.getUserVerdict();
if (userVerdict != Verdict.NONE) {
if (userVerdict == Verdict.PASSED || userVerdict == Verdict.FAILED) {
model.setValueAt(Step.verdictAsString.get(userVerdict), indexInTable,
COLUMN_VERDICT);
String repPath = flashStep.getOutFilePath();
toolTipReport.set(indexInCampaign, repPath);
} else { // verdict is 'skipped'
if (flashStep.getSkippedMessage() != null
&& flashStep.getSkippedMessage().length() != 0) {
model.setValueAt(
Step.verdictAsString.get(userVerdict) + ": "
+ flashStep.getSkippedMessage(), indexInTable, COLUMN_VERDICT);
toolTipReport.set(indexInCampaign, flashStep.getSkippedMessage());
} else {
model.setValueAt(Step.verdictAsString.get(userVerdict), indexInTable,
COLUMN_VERDICT);
}
}
} else {
Verdict verdict = flashStep.getVerdict();
if (verdict == Verdict.PASSED || verdict == Verdict.FAILED) {
model.setValueAt(Step.verdictAsString.get(verdict), indexInTable, COLUMN_VERDICT);
String repPath = flashStep.getOutFilePath();
toolTipReport.set(indexInCampaign, repPath);
} else if (verdict == Verdict.NONE) {
model.setValueAt(Step.verdictAsString.get(verdict), indexInTable,
COLUMN_VERDICT);
} else { // verdict is 'Skipped'
if (flashStep.getSkippedMessage() != null
&& flashStep.getSkippedMessage().length() != 0) {
model.setValueAt(
Step.verdictAsString.get(verdict) + ": "
+ flashStep.getSkippedMessage(), indexInTable,
COLUMN_VERDICT);
toolTipReport.set(indexInCampaign, flashStep.getSkippedMessage());
} else {
model.setValueAt(Step.verdictAsString.get(verdict), indexInTable,
COLUMN_VERDICT);
}
}
}
StepAnalysisResult sar = flashStep.getLastAnalysisResult();
String toolTip = "";
if (sar != null) {
toolTip = sar.toHTML(flashStep);
boolean modified = toolTip.indexOf("red") > 0;
model.setValueAt(modified ? "M" : "", indexInTable, COLUMN_MODIFIED);
toolTipModified.set(indexInCampaign, toolTip);
}
}
/**
* The model for this table for.
*/
private class FlashCheckListTableModel extends CheckListTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int row, int col) {
if (col == COLUMN_COMMENTS || col == COLUMN_PHONECONFIG) {
return true;
}
return false;
}
@SuppressWarnings("unchecked")
public void moveRow(SortedSet<Integer> campaignIndexRemovedRows, int rowIndexDst) {
Iterator<Integer> it = campaignIndexRemovedRows.iterator();
Vector addvect = new Vector();
int index = 0;
while (it.hasNext()) {
int rowIndexSrc = it.next();
Vector r = (Vector) dataVector.get(rowIndexSrc + index);
addvect.add(r);
model.removeRow(rowIndexSrc + index);
index--;
}
// add
if (rowIndexDst < campaignIndexRemovedRows.first()) {
for (int i = 0; i < addvect.size(); i++) {
Vector r = (Vector) addvect.get(i);
model.insertRow(rowIndexDst + i, r);
}
} else {
for (int i = 0; i < addvect.size(); i++) {
Vector r = (Vector) addvect.get(i);
model.insertRow(rowIndexDst - campaignIndexRemovedRows.size() + 1 + i, r);
}
// dataVector.addAll(rowIndexDst-campaignIndexRemovedRows.size()+1,addvect);
}
// update campaign
campaign.movesample(campaignIndexRemovedRows, rowIndexDst);
// order IHM
reorderrow();
}
public void reorderrow() {
for (int i = 0; i < dataVector.size(); i++) {
model.setValueAt(String.valueOf(i + 1), i, COLUMN_NBROW);
}
}
}
/*
* (non-Javadoc)
*
* @see com.orange.atk.atkUI.coregui.CheckListTable#isRowModified(int)
*/
@Override
public boolean isRowModified(int row) {
String m = (String) model.getValueAt(row, COLUMN_MODIFIED);
return !m.equals("");
}
public Vector<String> getToolTipFlashFile() {
return toolTipFlashFile;
}
public void setToolTipFlashFile(Vector<String> toolTipFlashFile) {
this.toolTipFlashFile = toolTipFlashFile;
}
/*
* (non-Javadoc)
*
* @see com.orange.atk.atkUI.coregui.CheckListTable#getNumColumnVerdict()
*/
@Override
public int getNumColumnVerdict() {
return COLUMN_VERDICT;
}
/*
* (non-Javadoc)
*
* @see com.orange.atk.atkUI.coregui.CheckListTable#getValueAt(int)
*/
public String getValueAt(int numRow) {
return (String) model.getValueAt(numRow, COLUMN_NBROW);
}
private boolean enabledUserAction = true;
/*
* (non-Javadoc)
*
* @see
* com.orange.atk.atkUI.coregui.CheckListTable#enableUserActions(boolean)
*/
@Override
public void enableUserActions(boolean b) {
enabledUserAction = b;
table.setEnabled(b);
tablePane.setEnabled(b);
}
public boolean isEnableUserActions() {
return enabledUserAction;
}
}