001: package org.objectweb.salome_tmf.ihm.main;
002:
003: import java.awt.BorderLayout;
004: import java.awt.Color;
005: import java.awt.Dimension;
006: import java.awt.FlowLayout;
007: import java.awt.Frame;
008: import java.awt.event.ActionEvent;
009: import java.awt.event.ActionListener;
010: import java.text.DateFormat;
011: import java.text.SimpleDateFormat;
012: import java.util.ArrayList;
013: import java.util.Date;
014: import java.util.Enumeration;
015: import java.util.Hashtable;
016: import java.util.Locale;
017: import java.util.Vector;
018:
019: import javax.swing.BorderFactory;
020: import javax.swing.BoxLayout;
021: import javax.swing.JButton;
022: import javax.swing.JComboBox;
023: import javax.swing.JDialog;
024: import javax.swing.JLabel;
025: import javax.swing.JOptionPane;
026: import javax.swing.JPanel;
027: import javax.swing.JScrollPane;
028: import javax.swing.JTable;
029: import javax.swing.ListSelectionModel;
030: import javax.swing.event.ListSelectionEvent;
031: import javax.swing.event.ListSelectionListener;
032:
033: import org.jfree.chart.ChartFactory;
034: import org.jfree.chart.ChartPanel;
035: import org.jfree.chart.JFreeChart;
036: import org.jfree.chart.axis.DateAxis;
037: import org.jfree.chart.axis.ValueAxis;
038: import org.jfree.chart.plot.XYPlot;
039: import org.jfree.chart.renderer.xy.XYItemRenderer;
040: import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
041: import org.jfree.data.time.Second;
042: import org.jfree.data.time.TimeSeries;
043: import org.jfree.data.time.TimeSeriesCollection;
044: import org.jfree.data.time.TimeSeriesDataItem;
045: import org.objectweb.salome_tmf.api.Api;
046: import org.objectweb.salome_tmf.api.Util;
047: import org.objectweb.salome_tmf.api.sql.ISQLConfig;
048: import org.objectweb.salome_tmf.data.Environment;
049: import org.objectweb.salome_tmf.data.Test;
050: import org.objectweb.salome_tmf.ihm.languages.Language;
051: import org.objectweb.salome_tmf.ihm.main.datawrapper.DataModel;
052: import org.objectweb.salome_tmf.ihm.models.MyTableModel;
053: import org.objectweb.salome_tmf.ihm.models.RowTransferHandler;
054: import org.objectweb.salome_tmf.ihm.models.TableSorter;
055: import org.objectweb.salome_tmf.ihm.tools.Tools;
056: import org.objectweb.salome_tmf.plugins.core.BugTracker;
057: import org.objectweb.salome_tmf.plugins.core.ReqManager;
058:
059: public class QsScorePanel extends JPanel implements ActionListener,
060: ListSelectionListener {
061:
062: JButton deleteQsScoreValueButton;
063: JButton calculateQsScoreValueButton;
064: JButton visualizeQsScoreValueButton;
065: JButton refreshQsScoreValueButton;
066:
067: JTable qsScoreTable;
068:
069: TableSorter sorter;
070:
071: ListSelectionModel rowSM;
072:
073: RowTransferHandler transferHandler;
074:
075: MyTableModel qsScoreTableModel;
076:
077: BugTracker mantis;
078:
079: ReqManager reqPlug;
080:
081: AskChooseEnvironment chooseEnvWindow;
082:
083: public QsScorePanel(BugTracker mantis, ReqManager reqPlug) {
084:
085: super ();
086: this .mantis = mantis;
087: this .reqPlug = reqPlug;
088:
089: deleteQsScoreValueButton = new JButton(Language.getInstance()
090: .getText("Supprimer"));
091: calculateQsScoreValueButton = new JButton(Language
092: .getInstance().getText("QsScore_calculation"));
093: visualizeQsScoreValueButton = new JButton(Language
094: .getInstance().getText("QsScore_graph"));
095: refreshQsScoreValueButton = new JButton(Language.getInstance()
096: .getText("Rafraichir"));
097:
098: qsScoreTableModel = new MyTableModel();
099:
100: qsScoreTableModel.addColumnNameAndColumn(Language.getInstance()
101: .getText("Environnement"));
102: qsScoreTableModel.addColumnNameAndColumn(Language.getInstance()
103: .getText("Date"));
104: qsScoreTableModel.addColumnNameAndColumn(Language.getInstance()
105: .getText("valeur")
106: + " QS Score");
107:
108: qsScoreTable = new JTable();
109: transferHandler = new RowTransferHandler();
110:
111: deleteQsScoreValueButton.setEnabled(false);
112: deleteQsScoreValueButton.setToolTipText(Language.getInstance()
113: .getText("Delete_QsScore_Value"));
114: deleteQsScoreValueButton.addActionListener(this );
115: calculateQsScoreValueButton.setToolTipText(Language
116: .getInstance().getText("QsScore_calculation"));
117: calculateQsScoreValueButton.addActionListener(this );
118: visualizeQsScoreValueButton.setToolTipText(Language
119: .getInstance().getText("QsScore_graph"));
120: visualizeQsScoreValueButton.addActionListener(this );
121: refreshQsScoreValueButton.setToolTipText(Language.getInstance()
122: .getText("Rafraichir"));
123: refreshQsScoreValueButton.addActionListener(this );
124:
125: sorter = new TableSorter(qsScoreTableModel);
126: qsScoreTable = new JTable(sorter);
127: sorter.setTableHeader(qsScoreTable.getTableHeader());
128: qsScoreTable.setPreferredScrollableViewportSize(new Dimension(
129: 700, 350));
130: qsScoreTable.setTransferHandler(transferHandler);
131: qsScoreTable
132: .setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
133:
134: JScrollPane pluginsTableScrollPane = new JScrollPane(
135: qsScoreTable);
136: // Gestion des sélection dans la table
137: rowSM = qsScoreTable.getSelectionModel();
138: rowSM.addListSelectionListener(this );
139:
140: createQsScoreTableModel();
141:
142: JPanel buttonsPanel = new JPanel();
143:
144: buttonsPanel.add(calculateQsScoreValueButton);
145: buttonsPanel.add(visualizeQsScoreValueButton);
146: buttonsPanel.add(refreshQsScoreValueButton);
147: buttonsPanel.add(deleteQsScoreValueButton);
148:
149: buttonsPanel.setBorder(BorderFactory.createRaisedBevelBorder());
150:
151: setLayout(new BorderLayout());
152: add(BorderLayout.NORTH, buttonsPanel);
153: add(BorderLayout.CENTER, pluginsTableScrollPane);
154: }
155:
156: public void actionPerformed(ActionEvent arg0) {
157: Object source = arg0.getSource();
158: if (source.equals(deleteQsScoreValueButton)) {
159: deleteQsScoreValuePerformed();
160: } else if (source.equals(calculateQsScoreValueButton)) {
161: calculateQsScoreValuePerformed();
162: } else if (source.equals(visualizeQsScoreValueButton)) {
163: visualizeQsScoreValuePerformed();
164: } else if (source.equals(refreshQsScoreValueButton)) {
165: refreshQsScoreValuePerformed();
166: }
167: }
168:
169: public void valueChanged(ListSelectionEvent arg0) {
170: if (arg0.getSource().equals(qsScoreTable.getSelectionModel())) {
171: if (arg0.getValueIsAdjusting())
172: return;
173: int nbOfSelectedRows = qsScoreTable.getSelectedRowCount();
174: int selectedRow = qsScoreTable.getSelectedRow();
175: if ((selectedRow != -1) && (nbOfSelectedRows != 0)) {
176: deleteQsScoreValueButton.setEnabled(true);
177: } else {
178: deleteQsScoreValueButton.setEnabled(false);
179: }
180: }
181: }
182:
183: void createQsScoreTableModel() {
184: try {
185: Vector qsScoreKeys = new Vector();
186: ISQLConfig pISQLConfig = Api.getISQLObjectFactory()
187: .getISQLConfig();
188: if (pISQLConfig != null) {
189: Hashtable projectConfs = pISQLConfig
190: .getAllProjectConf(DataModel
191: .getCurrentProject().getIdBdd());
192: for (Enumeration e = projectConfs.keys(); e
193: .hasMoreElements();) {
194: String key = (String) e.nextElement();
195: if (key.startsWith(mantis.getBugTrackerName()
196: + "_QsScore")) {
197: qsScoreKeys.add(key);
198: }
199: }
200:
201: if ((qsScoreKeys != null) && (qsScoreKeys.size() != 0)) {
202:
203: for (int i = 0; i < qsScoreKeys.size(); i++) {
204: int idEnv = -1;
205: Object key = qsScoreKeys.elementAt(i);
206: String[] tmp = ((String) key).split("[_]");
207: if (tmp.length == 3) {
208: idEnv = Integer.parseInt(tmp[2]);
209: }
210: Environment env = DataModel.getCurrentProject()
211: .getEnvironmentFromModel(idEnv);
212: String value = (String) projectConfs.get(key);
213: String[] res = value.split("[,]");
214: for (int j = 0; j < res.length; j++) {
215: String qsScoreValues = res[j];
216: String[] qsScores = qsScoreValues
217: .split("[_]");
218: if (qsScores.length == 2) {
219:
220: Float qsScore = new Float(Float
221: .parseFloat(qsScores[1]));
222:
223: ArrayList row = new ArrayList(2);
224: row.add(0, env.getNameFromModel());
225: row.add(1, qsScores[0]);
226: row.add(2, qsScore);
227:
228: qsScoreTableModel.addRow(row);
229: }
230: }
231: }
232: }
233: }
234: } catch (Exception e) {
235: e.printStackTrace();
236: Tools.ihmExceptionView(e);
237: }
238: }
239:
240: public void refreshQsScoreValuePerformed() {
241: qsScoreTableModel.clearTable();
242:
243: try {
244: Vector qsScoreKeys = new Vector();
245: ISQLConfig pISQLConfig = Api.getISQLObjectFactory()
246: .getISQLConfig();
247: if (pISQLConfig != null) {
248: Hashtable projectConfs = pISQLConfig
249: .getAllProjectConf(DataModel
250: .getCurrentProject().getIdBdd());
251: for (Enumeration e = projectConfs.keys(); e
252: .hasMoreElements();) {
253: String key = (String) e.nextElement();
254: if (key.startsWith(mantis.getBugTrackerName()
255: + "_QsScore")) {
256: qsScoreKeys.add(key);
257: }
258: }
259:
260: if ((qsScoreKeys != null) && (qsScoreKeys.size() != 0)) {
261:
262: for (int i = 0; i < qsScoreKeys.size(); i++) {
263: int idEnv = -1;
264: Object key = qsScoreKeys.elementAt(i);
265: String[] tmp = ((String) key).split("[_]");
266: if (tmp.length == 3) {
267: idEnv = Integer.parseInt(tmp[2]);
268: }
269: Environment env = DataModel.getCurrentProject()
270: .getEnvironmentFromModel(idEnv);
271: String value = (String) projectConfs.get(key);
272: String[] res = value.split("[,]");
273: for (int j = 0; j < res.length; j++) {
274: String qsScoreValues = res[j];
275: String[] qsScores = qsScoreValues
276: .split("[_]");
277: if (qsScores.length == 2) {
278:
279: Float qsScore = new Float(Float
280: .parseFloat(qsScores[1]));
281:
282: ArrayList row = new ArrayList(2);
283: row.add(0, env.getNameFromModel());
284: row.add(1, qsScores[0]);
285: row.add(2, qsScore);
286:
287: qsScoreTableModel.addRow(row);
288: }
289: }
290: }
291: }
292: }
293: } catch (Exception e) {
294: e.printStackTrace();
295: Tools.ihmExceptionView(e);
296: }
297: }
298:
299: public void deleteQsScoreValuePerformed() {
300: Object[] options = { Language.getInstance().getText("Oui"),
301: Language.getInstance().getText("Non") };
302: int choice = -1;
303: int[] selectedRows = qsScoreTable.getSelectedRows();
304:
305: choice = JOptionPane
306: .showOptionDialog(
307: QsScorePanel.this ,
308: Language
309: .getInstance()
310: .getText(
311: "Etes_vous_sûr_de_vouloir_supprimer_les_valeurs_QsScore_sélectionnées"),
312: Language.getInstance().getText("Attention_!"),
313: JOptionPane.YES_NO_OPTION,
314: JOptionPane.QUESTION_MESSAGE, null, options,
315: options[1]);
316: if (choice == JOptionPane.YES_OPTION) {
317: for (int i = selectedRows.length - 1; i >= 0; i--) {
318:
319: try {
320: // DB
321: ISQLConfig pISQLConfig = Api.getISQLObjectFactory()
322: .getISQLConfig();
323: if (pISQLConfig != null) {
324: Environment env = DataModel.getCurrentProject()
325: .getEnvironmentFromModel(
326: (String) sorter.getValueAt(
327: selectedRows[i], 0));
328: String key = mantis.getBugTrackerName()
329: + "_QsScore_" + env.getIdBdd();
330: String qsScoreValuesForEnv = pISQLConfig
331: .getProjectConf(key, DataModel
332: .getCurrentProject().getIdBdd());
333: qsScoreValuesForEnv = qsScoreValuesForEnv
334: .replaceFirst((String) sorter
335: .getValueAt(selectedRows[i], 1)
336: + "_"
337: + sorter.getValueAt(
338: selectedRows[i], 2), "");
339: qsScoreValuesForEnv = qsScoreValuesForEnv
340: .replaceFirst(",,", ",");
341:
342: if ((qsScoreValuesForEnv.equals(""))
343: || (qsScoreValuesForEnv.equals(","))) {
344: pISQLConfig.deleteProjectConf(key,
345: DataModel.getCurrentProject()
346: .getIdBdd());
347: } else {
348: pISQLConfig.updateProjectConf(key,
349: qsScoreValuesForEnv, DataModel
350: .getCurrentProject()
351: .getIdBdd());
352: }
353:
354: }
355: // IHM
356: /*qsScoreTableModel.removeData(selectedRows[i]);
357: if (qsScoreTableModel.getRowCount() == 0) {
358: deleteQsScoreValueButton.setEnabled(false);
359: }*/
360: } catch (Exception exception) {
361: exception.printStackTrace();
362: Tools.ihmExceptionView(exception);
363: }
364: }
365:
366: //IHM
367: refreshQsScoreValuePerformed();
368: }
369: }
370:
371: private void visualizeQsScoreValuePerformed() {
372: JDialog dialog = new JDialog(
373: SalomeTMFContext.getInstance().ptrFrame, true);
374: dialog
375: .setTitle(Language.getInstance().getText(
376: "QsScore_graph"));
377: JPanel pnl = new JPanel(new BorderLayout());
378: dialog.setContentPane(pnl);
379: dialog.setSize(600, 400);
380:
381: try {
382: Vector qsScoreKeys = new Vector();
383: ISQLConfig pISQLConfig = Api.getISQLObjectFactory()
384: .getISQLConfig();
385: if (pISQLConfig != null) {
386: Hashtable projectConfs = pISQLConfig
387: .getAllProjectConf(DataModel
388: .getCurrentProject().getIdBdd());
389: for (Enumeration e = projectConfs.keys(); e
390: .hasMoreElements();) {
391: String key = (String) e.nextElement();
392: if (key.startsWith(mantis.getBugTrackerName()
393: + "_QsScore")) {
394: qsScoreKeys.add(key);
395: }
396: }
397:
398: if ((qsScoreKeys != null) && (qsScoreKeys.size() != 0)) {
399:
400: TimeSeriesCollection dataset = new TimeSeriesCollection();
401:
402: for (int i = 0; i < qsScoreKeys.size(); i++) {
403: int idEnv = -1;
404: Object key = qsScoreKeys.elementAt(i);
405: String[] tmp = ((String) key).split("[_]");
406: if (tmp.length == 3) {
407: idEnv = Integer.parseInt(tmp[2]);
408: }
409: Environment env = DataModel.getCurrentProject()
410: .getEnvironmentFromModel(idEnv);
411: TimeSeries ts = new TimeSeries(env
412: .getNameFromModel(), Second.class);
413: String value = (String) projectConfs.get(key);
414: String[] res = value.split("[,]");
415: for (int j = 0; j < res.length; j++) {
416: String qsScoreValues = res[j];
417: String[] qsScores = qsScoreValues
418: .split("[_]");
419: if (qsScores.length == 2) {
420: Locale locale = Locale.getDefault();
421: DateFormat dateFormat = DateFormat
422: .getDateTimeInstance(
423: DateFormat.LONG,
424: DateFormat.LONG, locale);
425: Date date = dateFormat
426: .parse(qsScores[0]);
427:
428: float qsScore = Float
429: .parseFloat(qsScores[1]);
430: ts.add(new TimeSeriesDataItem(
431: new Second(date), qsScore));
432: }
433: }
434: dataset.addSeries(ts);
435: }
436:
437: JFreeChart chart = ChartFactory
438: .createTimeSeriesChart(Language
439: .getInstance().getText(
440: "QsScoregraphTitle"),
441: "Date", "QsScore", dataset, true,
442: true, false);
443: chart.setBackgroundPaint(Color.white);
444: XYPlot plot = (XYPlot) chart.getPlot();
445: plot.setBackgroundPaint(Color.lightGray);
446: plot.setDomainGridlinePaint(Color.white);
447: plot.setRangeGridlinePaint(Color.white);
448: XYItemRenderer r = plot.getRenderer();
449: if (r instanceof XYLineAndShapeRenderer) {
450: XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
451: renderer.setShapesVisible(true);
452: renderer.setShapesFilled(true);
453: }
454: DateAxis axis = (DateAxis) plot.getDomainAxis();
455: axis.setDateFormatOverride(new SimpleDateFormat(
456: "dd/MM/yy"));
457: ValueAxis vAxis = (ValueAxis) plot.getRangeAxis();
458: vAxis.setRange(0, 3);
459: ChartPanel cPanel = new ChartPanel(chart);
460: pnl.add(cPanel);
461:
462: } else {
463: JLabel label = new JLabel(Language.getInstance()
464: .getText("No_QsScore_values_in_DB"));
465: pnl.add(label);
466: }
467:
468: } else {
469: Util.log("[LookAndFeel] WARNING pISQLConfig = "
470: + pISQLConfig);
471: }
472: } catch (Exception e) {
473: e.printStackTrace();
474: Tools.ihmExceptionView(e);
475: }
476:
477: dialog.setVisible(true);
478: }
479:
480: private void calculateQsScoreValuePerformed() {
481: ArrayList environments = DataModel.getCurrentProject()
482: .getEnvironmentListFromModel();
483: chooseEnvWindow = new AskChooseEnvironment();
484: if ((environments == null) && (environments.size() == 0)) {
485: JOptionPane.showMessageDialog(new Frame(), Language
486: .getInstance().getText("QsScore_problem"), Language
487: .getInstance().getText("Information_!"),
488: JOptionPane.INFORMATION_MESSAGE);
489: } else {
490: chooseEnvWindow.show();
491: }
492: }
493:
494: private void calculateQsScore(Environment env) {
495: int choice = -1;
496: Object[] options = { Language.getInstance().getText("Oui"),
497: Language.getInstance().getText("Non") };
498: chooseEnvWindow.dispose();
499: if (env != null) {
500: int[] all_score_risk = new int[8];
501: all_score_risk[0] = getQsScoreRiskForCat(0);
502: all_score_risk[1] = getQsScoreRiskForCat(1);
503: all_score_risk[2] = getQsScoreRiskForCat(2);
504: all_score_risk[3] = getQsScoreRiskForCat(3);
505: all_score_risk[4] = getQsScoreRiskForCat(4);
506: all_score_risk[5] = getQsScoreRiskForCat(5);
507: all_score_risk[6] = getQsScoreRiskForCat(6);
508: all_score_risk[7] = getQsScoreRiskForCat(7);
509:
510: int[] all_score_defect = new int[8];
511: all_score_defect[0] = getQsScoreDefectForCat(0, env);
512: all_score_defect[1] = getQsScoreDefectForCat(1, env);
513: all_score_defect[2] = getQsScoreDefectForCat(2, env);
514: all_score_defect[3] = getQsScoreDefectForCat(3, env);
515: all_score_defect[4] = getQsScoreDefectForCat(4, env);
516: all_score_defect[5] = getQsScoreDefectForCat(5, env);
517: all_score_defect[6] = getQsScoreDefectForCat(6, env);
518: all_score_defect[7] = getQsScoreDefectForCat(7, env);
519:
520: int[] all_score = new int[8];
521:
522: float qsScore = 3;
523: boolean score_null = false;
524: int i = 0;
525: int sum = 0;
526: int nb_score = 0;
527:
528: String message = "";
529:
530: while ((i < 8) && (!score_null)) {
531: int tmp_score = Math.min(all_score_risk[i],
532: all_score_defect[i]);
533: if (tmp_score == 0) {
534: score_null = true;
535: sum = 0;
536: nb_score++;
537: } else if (tmp_score > 0) {
538: sum += tmp_score;
539: nb_score++;
540: }
541: all_score[i] = tmp_score;
542: i++;
543: }
544: float score_tmp = Math
545: .round(((float) sum / (float) nb_score) * 100);
546: qsScore = score_tmp / 100;
547:
548: for (int j = 0; j < 8; j++) {
549: message += "- "
550: + Language.getInstance().getText("Categorie")
551: + " \"" + getReqCatString(j) + "\" : sr="
552: + getQsScoreString(all_score_risk[j]) + ", sa="
553: + getQsScoreString(all_score_defect[j])
554: + ", score=" + getQsScoreString(all_score[j])
555: + "\n";
556: }
557: message += "\n -------> QS Score = " + qsScore + "";
558:
559: choice = JOptionPane.showOptionDialog(new Frame(), message
560: + Language.getInstance().getText(
561: "QsScore_saved_in_DB"), Language
562: .getInstance().getText("Information_!"),
563: JOptionPane.YES_NO_OPTION,
564: JOptionPane.QUESTION_MESSAGE, null, options,
565: options[1]);
566:
567: if (choice == JOptionPane.YES_OPTION) {
568: try {
569: ISQLConfig pISQLConfig = Api.getISQLObjectFactory()
570: .getISQLConfig();
571: if (pISQLConfig != null) {
572: Hashtable projectConfs = pISQLConfig
573: .getAllProjectConf(DataModel
574: .getCurrentProject().getIdBdd());
575: Locale locale = Locale.getDefault();
576: DateFormat dateFormat = DateFormat
577: .getDateTimeInstance(DateFormat.LONG,
578: DateFormat.LONG, locale);
579: Date date = new Date();
580: String myDate = dateFormat.format(date);
581: String key = mantis.getBugTrackerName()
582: + "_QsScore_" + env.getIdBdd();
583:
584: if (projectConfs.containsKey(key)) {
585: pISQLConfig.updateProjectConf(key,
586: (String) projectConfs.get(key)
587: + "," + myDate + "_"
588: + qsScore, DataModel
589: .getCurrentProject()
590: .getIdBdd());
591: } else {
592: pISQLConfig.insertProjectConf(mantis
593: .getBugTrackerName()
594: + "_QsScore_" + env.getIdBdd(),
595: myDate + "_" + qsScore, DataModel
596: .getCurrentProject()
597: .getIdBdd());
598: }
599:
600: // IHM
601: ArrayList row = new ArrayList(2);
602: row.add(0, env.getNameFromModel());
603: row.add(1, myDate);
604: row.add(2, new Float(qsScore));
605:
606: qsScoreTableModel.addRow(row);
607:
608: } else {
609: Util.log("[LookAndFeel] WARNING pISQLConfig = "
610: + pISQLConfig);
611: }
612: } catch (Exception E) {
613: E.printStackTrace();
614: Tools.ihmExceptionView(E);
615: }
616:
617: JOptionPane.showMessageDialog(new Frame(), Language
618: .getInstance().getText(
619: "QsScore_saved_confirmation"), Language
620: .getInstance().getText("Information_!"),
621: JOptionPane.INFORMATION_MESSAGE);
622:
623: }
624: }
625: }
626:
627: private String getQsScoreString(int score) {
628: String res = "N/A";
629: if (score >= 0) {
630: res = "" + score;
631: }
632: return res;
633: }
634:
635: private int getQsScoreRiskCovForCat(int cat) {
636: int res = 0;
637:
638: if (reqPlug.isAllReqCovered(cat, 1000)) {
639: if (reqPlug.isAllReqCovered(cat, 100)) {
640: if (reqPlug.isAllReqCovered(cat, 10)) {
641: res = 3;
642: } else {
643: res = 2;
644: }
645: } else {
646: res = 1;
647: }
648: }
649: return res;
650: }
651:
652: private int getQsScoreRiskExecForCat(int cat) {
653: int res = 0;
654:
655: if (reqPlug.isAllReqCoveredExecuted(cat, 1000)) {
656: if (reqPlug.isAllReqCoveredExecuted(cat, 100)) {
657: if (reqPlug.isAllReqCoveredExecuted(cat, 10)) {
658: res = 3;
659: } else {
660: res = 2;
661: }
662: } else {
663: res = 1;
664: }
665: }
666: return res;
667: }
668:
669: private int getQsScoreRiskForCat(int cat) {
670: int res = 0;
671:
672: if (reqPlug.getNbReqForCat(cat) == 0) {
673: Object[] options = { Language.getInstance().getText("Oui"),
674: Language.getInstance().getText("Non") };
675: int choice = SalomeTMFContext.getInstance().askQuestion(
676: Language.getInstance().getText("No_Req_For_Cat")
677: + " \""
678: + getReqCatString(cat)
679: + "\".\n"
680: + Language.getInstance().getText(
681: "Ask_NA_For_Cat"),
682: Language.getInstance().getText("Attention_!"),
683: JOptionPane.WARNING_MESSAGE, options);
684: if (choice == JOptionPane.NO_OPTION) {
685: res = 0;
686: } else {
687: res = -1;
688: }
689:
690: } else {
691: res = Math.min(getQsScoreRiskCovForCat(cat),
692: getQsScoreRiskExecForCat(cat));
693: }
694:
695: return res;
696: }
697:
698: private int getQsScoreDefectForCat(int cat, Environment env) {
699: int res = 3;
700: if (reqPlug.getNbReqForCat(cat) != 0) {
701: Vector associatedTests = reqPlug
702: .getAssociatedTestsForReqCat(cat);
703: if (associatedTests != null && associatedTests.size() > 0) {
704: int j = 0;
705: while ((j < associatedTests.size()) && res > 0) {
706: int qs_tmp = 3;
707: Test test = (Test) associatedTests.elementAt(j);
708: qs_tmp = mantis.getQsScoreDefectForTest(test, env);
709: if (qs_tmp < res) {
710: res = qs_tmp;
711: }
712: j++;
713: }
714: }
715: }
716:
717: return res;
718: }
719:
720: private String getReqCatString(int index) {
721: String cat = Language.getInstance().getText("Cat_Autre");
722:
723: if (index == 0) {
724: cat = Language.getInstance().getText("Cat_Fonctionnel");
725: } else if (index == 1) {
726: cat = Language.getInstance()
727: .getText("Cat_Interoperabilite");
728: } else if (index == 2) {
729: cat = Language.getInstance().getText("Cat_Charge");
730: } else if (index == 3) {
731: cat = Language.getInstance().getText("Cat_Performance");
732: } else if (index == 4) {
733: cat = Language.getInstance().getText("Cat_Disponibilite");
734: } else if (index == 5) {
735: cat = Language.getInstance().getText("Cat_Securite");
736: } else if (index == 6) {
737: cat = Language.getInstance().getText("Cat_Exploitabilite");
738: } else if (index == 7) {
739: cat = Language.getInstance().getText("Cat_Autre");
740: }
741:
742: return cat;
743: }
744:
745: class AskChooseEnvironment extends JDialog {
746: JPanel panel = new JPanel(new BorderLayout());
747:
748: JComboBox envComboBox = new JComboBox();
749:
750: /** Creates a new instance of AskChooseEnvironment */
751: public AskChooseEnvironment() {
752:
753: super (SalomeTMFContext.getInstance().ptrFrame, true);
754:
755: ArrayList envs = DataModel.getCurrentProject()
756: .getEnvironmentListFromModel();
757: for (int i = 0; i < envs.size(); i++) {
758: Environment currentEnv = (Environment) envs.get(i);
759: envComboBox.addItem(currentEnv.getNameFromModel());
760: }
761:
762: JButton validateButton = new JButton(Language.getInstance()
763: .getText("Valider"));
764: validateButton.setToolTipText(Language.getInstance()
765: .getText("Valider"));
766: validateButton.addActionListener(new ActionListener() {
767: public void actionPerformed(ActionEvent e) {
768: String envString = (String) envComboBox
769: .getSelectedItem();
770: calculateQsScore(DataModel.getCurrentProject()
771: .getEnvironmentFromModel(envString));
772: AskChooseEnvironment.this .dispose();
773: }
774: });
775:
776: JButton cancelButton = new JButton(Language.getInstance()
777: .getText("Annuler"));
778: cancelButton.setToolTipText(Language.getInstance().getText(
779: "Annuler"));
780: cancelButton.addActionListener(new ActionListener() {
781: public void actionPerformed(ActionEvent e) {
782: AskChooseEnvironment.this .dispose();
783:
784: }
785: });
786:
787: JLabel envLabel = new JLabel(Language.getInstance()
788: .getText("Environnement")
789: + " : ");
790:
791: JPanel textFieldPane = new JPanel();
792: textFieldPane.setLayout(new BoxLayout(textFieldPane,
793: BoxLayout.Y_AXIS));
794: textFieldPane.add(envComboBox);
795:
796: JPanel textPane = new JPanel();
797: textPane
798: .setLayout(new BoxLayout(textPane, BoxLayout.Y_AXIS));
799: textPane.add(envLabel);
800:
801: JPanel textPaneAll = new JPanel(new FlowLayout(
802: FlowLayout.CENTER));
803: textPaneAll.add(textPane);
804: textPaneAll.add(textFieldPane);
805:
806: JPanel buttonPanel = new JPanel(new FlowLayout(
807: FlowLayout.CENTER));
808: buttonPanel.add(validateButton);
809: buttonPanel.add(cancelButton);
810:
811: JPanel labelSet = new JPanel();
812: labelSet.add(textPaneAll);
813:
814: panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
815: panel.add(labelSet);
816: panel.add(buttonPanel);
817: panel.setBorder(BorderFactory.createRaisedBevelBorder());
818:
819: this .getContentPane().add(panel);
820:
821: this .setTitle(Language.getInstance().getText(
822: "Environnement"));
823: //this.setLocation(300,300);
824: this.setLocationRelativeTo(this.getParent());
825: this.pack();
826: }
827:
828: }
829:
830: }
|