001/* 002 * Copyright (c) 2005 Jens Schou, Staffan Gustafsson, Bjorn Lanneskog, 003 * Einar Pehrson and Sebastian Kekkonen 004 * 005 * This file is part of 006 * CleanSheets Extension for Test Cases 007 * 008 * CleanSheets Extension for Test Cases is free software; you can 009 * redistribute it and/or modify it under the terms of the GNU General Public 010 * License as published by the Free Software Foundation; either version 2 of 011 * the License, or (at your option) any later version. 012 * 013 * CleanSheets Extension for Test Cases is distributed in the hope that 014 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied 015 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 016 * See the GNU General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with CleanSheets Extension for Test Cases; if not, write to the 020 * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 021 * Boston, MA 02111-1307 USA 022 */ 023package csheets.ext.test.ui; 024 025import java.util.HashSet; 026import java.util.Set; 027 028import javax.swing.JOptionPane; 029 030import csheets.core.Value; 031import csheets.ext.assertion.AssertableCell; 032import csheets.ext.assertion.Assertion; 033import csheets.ext.assertion.AssertionExtension; 034import csheets.ext.test.DuplicateUserTCPException; 035import csheets.ext.test.TestCaseParam; 036import csheets.ext.test.TestableCell; 037import csheets.ui.ctrl.UIController; 038 039/** 040 * A controller for updating the test case parameters of a cell. 041 * @author Einar Pehrson 042 */ 043public class TestCaseParamController { 044 045 /** The user interface controller */ 046 private UIController uiController; 047 048 /** 049 * Creates a new test case parameter controller. 050 * @param uiController the user interface controller 051 */ 052 public TestCaseParamController(UIController uiController) { 053 this.uiController = uiController; 054 } 055 056 /** 057 * Sets the active cell's user-specified testcase parameters. 058 * @param cell the cell to add the parameter to 059 * @param content the content of the parameter to be added 060 * @param unChangedParams a set containing all parameters that were not changed 061 * @return true the parameter that was added, or null if the parameter was not added 062 */ 063 public TestCaseParam setTestCaseParams(TestableCell cell, String content, 064 Set<TestCaseParam> unChangedParams) { 065 // Checks if any parameters were removed 066 Set<TestCaseParam> oldParams = new HashSet<TestCaseParam>(cell.getTestCaseParams()); 067 oldParams.removeAll(unChangedParams); 068 069 if (!oldParams.isEmpty()) 070 // Parameters were removed 071 for (TestCaseParam removedParam : oldParams) 072 cell.removeTestCaseParam(removedParam); 073 074 // Checks if a parameter was added 075 if(content != null) { 076 Value value = Value.parseValue(content); 077 078 // Asserts if possible 079 if (value.getType() == Value.Type.NUMERIC) { 080 AssertableCell assertableCell 081 = (AssertableCell)cell.getExtension(AssertionExtension.NAME); 082 if (assertableCell != null) { 083 if (assertableCell.isAsserted()) 084 if (assertableCell.assertAny(value) == Assertion.Result.FAILED) 085 // Shows error, should perhaps ask for corfirmation? 086 showError("The test case parameter that was entered for cell " + 087 cell + " violated the cell's assertion."); 088 } 089 } 090 091 // Attempts to add the parameter 092 try { 093 TestCaseParam param = cell.addTestCaseParam(value); 094 uiController.setWorkbookModified(cell.getSpreadsheet().getWorkbook()); 095 return param; 096 } catch (DuplicateUserTCPException e) { 097 // Informs user that the parameter could not be added 098 showError(e.getMessage()); 099 return null; 100 } 101 } else 102 return null; 103 } 104 105 /** 106 * Shows an error dialog displaying the given message. 107 */ 108 private void showError(Object message) { 109 JOptionPane.showMessageDialog( 110 null, 111 message, 112 "Error", 113 JOptionPane.ERROR_MESSAGE 114 ); 115 } 116}