package com.onaro.sanscreen.client.view.actions.analyzeviolation; import com.onaro.sanscreen.client.view.actions.Messages; import com.onaro.sanscreen.client.view.selection.SelectedObject; import com.onaro.sanscreen.plugins.analyze.AnalyzeResult; import com.onaro.sanscreen.plugins.analyze.validate.ValidateTest; import com.onaro.sanscreen.types.ViolationType; import com.onaro.util.jfc.SortedTable; import layout.TableLayout; import javax.swing.*; import javax.swing.event.TableModelListener; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; import java.awt.*; import java.text.MessageFormat; import java.util.List; import java.util.ResourceBundle; public class AnalyzeTestsView extends JPanel { private static final long serialVersionUID = 1L; /** * the descrption of the violation for example * "Violation Between Host X and Storage Y lun 5" */ private JTextArea violationDescription; /** * The Violation Type Approve not exist */ private JTextArea violationTypeText; /** * The Violation summery */ private JTable analysisTable; /** * the resource bnundle for the class */ private ResourceBundle resources; /** * The types of the validateTests table column */ private final static Class[] columnClass = new Class[]{String.class, Boolean.class, ValidateTest.class}; public AnalyzeTestsView(ResourceBundle resources, AnalyzeResult analyzeResult) { this.resources = resources; double[][] layout = new double[][]{ {// Columns 2, // Column 0 - spacer TableLayout.FILL, // Column 1 2, // Column 2 - spacer }, {// Rows TableLayout.PREFERRED, // Row 0 - Violeation type 20, // Row 1 - Spacer TableLayout.PREFERRED, // Row 2 - Label for violeation details 10, // Row 3 - Spacer TableLayout.PREFERRED, // Row 4 - Violeation details 20, // Row 5 - Spacer TableLayout.PREFERRED, // Row 6 - Label for violeation analysisTable 10, // Row 7 - Spacer TableLayout.PREFERRED, // Row 8 - Violeation analysisTable } }; setLayout(new TableLayout(layout)); add(violationTypeText = initTextArea("violationTypeText"), "1, 0"); //$NON-NLS-1$ //$NON-NLS-2$ JLabel descLabel = new JLabel(resources.getString("views.analyze.tests.description.label")); //$NON-NLS-1$ add(descLabel, "1, 2"); //$NON-NLS-1$ add(violationDescription = initTextArea("violationDescription"), "1, 4"); //$NON-NLS-1$ //$NON-NLS-2$ JLabel analysisLabel = new JLabel(resources.getString("views.analyze.tests.table.label")); //$NON-NLS-1$ add(analysisLabel, "1, 6"); //$NON-NLS-1$ add(analysisTable = createAnalysisTable(), "1, 8"); //$NON-NLS-1$ setBackground(UIManager.getColor("HeaderView.background")); //$NON-NLS-1$ violationDescription.setForeground(UIManager.getColor("HeaderView.foreground")); //$NON-NLS-1$ descLabel.setForeground(UIManager.getColor("HeaderView.foreground")); //$NON-NLS-1$ descLabel.setFont(UIManager.getFont("HeaderView.subtitle.font")); //$NON-NLS-1$ analysisLabel.setForeground(UIManager.getColor("HeaderView.foreground")); //$NON-NLS-1$ analysisLabel.setFont(UIManager.getFont("HeaderView.subtitle.font")); //$NON-NLS-1$ violationTypeText.setForeground(UIManager.getColor("HeaderView.foreground")); //$NON-NLS-1$ violationTypeText.setFont(UIManager.getFont("HeaderView.title.font")); //$NON-NLS-1$ setAnalyzeResult(analyzeResult); } private JTable createAnalysisTable() { JTable table = new SortedTable() { private static final long serialVersionUID = 1L; public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { Component rendererComp = super.prepareRenderer(renderer, row, column); rendererComp.setForeground(((AnalyzeTestModel) getEncapsulatedTableModel()).getForeground(getRowInEncapsulatedModel(row))); return rendererComp; } }; table.setOpaque(true); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setBorder(BorderFactory.createLineBorder(table.getGridColor())); table.setName("analysisTable"); //$NON-NLS-1$ return table; } private JTextArea initTextArea(String name) { JTextArea textArea = new JTextArea(); textArea.setName(name); textArea.setEditable(false); textArea.setLineWrap(true); textArea.setWrapStyleWord(true); textArea.setOpaque(false); return textArea; } public void setAnalyzeResult(AnalyzeResult analyzeResult) { setDescription(analyzeResult); setViolationTypeText(analyzeResult.getViolationType()); final List validateTests = analyzeResult.getDistinctValidateTests(); analysisTable.setModel(new AnalyzeTestModel(validateTests)); analysisTable.getColumnModel().getColumn(0).setMaxWidth(32); analysisTable.getColumnModel().getColumn(0).setMinWidth(32); analysisTable.getColumnModel().getColumn(0).setWidth(32); analysisTable.getColumnModel().getColumn(1).setMinWidth(16); analysisTable.getColumnModel().getColumn(1).setMaxWidth(16); analysisTable.getColumnModel().getColumn(1).setWidth(16); } private void setViolationTypeText(ViolationType violationType) { violationTypeText.setText(resources.getString("views.analyze.summary.violationtype." + violationType + ".message")); //$NON-NLS-1$ //$NON-NLS-2$ } private void setDescription(AnalyzeResult analyzeResult) { String sVolumeNumber = Messages.INSTANCE.getAnalyzeTestsViewAllVolumesText(); if (analyzeResult.getVolume() != null) sVolumeNumber = analyzeResult.getVolume().getName(); String format = resources.getString("views.analyze.summary.description." + analyzeResult.getViolationType() + ".format"); //$NON-NLS-1$ //$NON-NLS-2$ Object[] arg = new Object[]{SelectedObject.translateObjectType(analyzeResult.getHost().getObjectType()), analyzeResult.getHost().getAlias(), sVolumeNumber, SelectedObject.translateObjectType(analyzeResult.getStorage().getObjectType()), analyzeResult.getStorage().getAlias()}; String description = MessageFormat.format(format, arg); violationDescription.setText(description); } private class AnalyzeTestModel implements TableModel { private List validateTests; private String[] testDescription; public AnalyzeTestModel(List validateTests) { this.validateTests = validateTests; testDescription = new String[validateTests.size()]; } public Class getColumnClass(int columnIndex) { return columnClass[columnIndex]; } public int getColumnCount() { return 3; } public String getColumnName(int columnIndex) { return null; } public int getRowCount() { return validateTests.size(); } public Object getValueAt(int rowIndex, int columnIndex) { if (rowIndex >= validateTests.size()) return null; ValidateTest validateTest = validateTests.get(rowIndex); if (columnIndex == 0) // row index return String.valueOf(rowIndex); if (columnIndex == 1) // test result return Boolean.valueOf(validateTest.isPass()); else if (columnIndex == 2) { // test description if (testDescription[rowIndex] == null) testDescription[rowIndex] = validateTest.getDescription(resources, Messages.INSTANCE.getAnalyzeTestsViewTestText()); return testDescription[rowIndex]; } assert false : "Fail get value for column Index " + columnIndex; //$NON-NLS-1$ return null; } public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public void addTableModelListener(TableModelListener l) { } public void removeTableModelListener(TableModelListener l) { } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } public Color getForeground(int row) { if (row >= validateTests.size()) return null; ValidateTest validateTest = validateTests.get(row); if (validateTest.isPass()) return null; return Color.RED; } } }