Search in sources :

Example 11 with VCDocumentInfo

use of org.vcell.util.document.VCDocumentInfo in project vcell by virtualcell.

the class DatabaseWindowPanel method setSelectedDocumentInfo.

/**
 * Sets the selectedDocumentInfo property (cbit.vcell.document.VCDocumentInfo) value.
 * @param selectedDocumentInfo The new value for the property.
 * @see #getSelectedDocumentInfo
 */
private void setSelectedDocumentInfo(VCDocumentInfo selectedDocumentInfo) {
    VCDocumentInfo oldValue = fieldSelectedDocumentInfo;
    fieldSelectedDocumentInfo = selectedDocumentInfo;
    firePropertyChange(PROPERTY_NAME_SELECTED_DOCUMENT_INFO, oldValue, selectedDocumentInfo);
    if (fieldSelectedDocumentInfo == null) {
        setSelectedObjects(new Object[] {});
    } else {
        setSelectedObjects(new Object[] { fieldSelectedDocumentInfo });
    }
}
Also used : VCDocumentInfo(org.vcell.util.document.VCDocumentInfo)

Example 12 with VCDocumentInfo

use of org.vcell.util.document.VCDocumentInfo in project vcell by virtualcell.

the class TestingFrameworkWindowPanel method testingFrameworkPanel_actionPerformed.

/**
 * Comment
 */
private void testingFrameworkPanel_actionPerformed(final ActionEvent e) {
    if (tfRefreshTreeTask == null) {
        tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager());
    }
    Hashtable<String, Object> hash = new Hashtable<String, Object>();
    Vector<AsynchClientTask> tasksV = new Vector<AsynchClientTask>();
    try {
        final TreePath[] selectedTreePaths = gettestingFrameworkPanel().getSelectedTreePaths();
        if (selectedTreePaths != null && selectedTreePaths.length > 1) {
            Object refObj = ((BioModelNode) selectedTreePaths[0].getLastPathComponent()).getUserObject();
            for (int i = 1; i < selectedTreePaths.length; i++) {
                Object currentObj = ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject();
                if ((refObj == null && currentObj == null) || ((refObj != null && currentObj != null) && (refObj.getClass().equals(currentObj.getClass()))) || (refObj instanceof TestCaseNew && currentObj instanceof TestCaseNew)) {
                    continue;
                } else {
                    throw new IllegalArgumentException("Multiple selections must all be of same type");
                }
            }
        }
        final Object selectedObj = gettestingFrameworkPanel().getTreeSelection();
        if (e.getActionCommand().equals(TestingFrameworkPanel.DELETE_XML_LOAD_TEST)) {
            int result = DialogUtils.showComponentOKCancelDialog(this, new JLabel("Delete " + selectedTreePaths.length + " Load Tests?"), "Confirm Load Test Delete");
            if (result != JOptionPane.OK_OPTION) {
                return;
            }
            AsynchClientTask deleteLoadTestTask = new AsynchClientTask("Deleting Load Test...", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                @Override
                public void run(Hashtable<String, Object> hashTable) throws Exception {
                    LoadTestInfoOP deleteLoadTestInfoOP = new LoadTestInfoOP(LoadTestOpFlag.delete, null, null);
                    LoadTestSoftwareVersionTimeStamp[] deleteTheseversTimestamps = new LoadTestSoftwareVersionTimeStamp[selectedTreePaths.length];
                    for (int i = 0; i < selectedTreePaths.length; i++) {
                        deleteTheseversTimestamps[i] = ((LoadTestTreeInfo) ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject()).loadTestSoftwareVersionTimeStamp;
                    }
                    deleteLoadTestInfoOP.setDeleteInfo(deleteTheseversTimestamps);
                    getTestingFrameworkWindowManager().getRequestManager().getDocumentManager().doTestSuiteOP(deleteLoadTestInfoOP);
                    final ActionEvent refreshAction = new ActionEvent(this, 0, TestingFrameworkPanel.REFRESH_XML_LOAD_TEST);
                    new Thread(new Runnable() {

                        public void run() {
                            testingFrameworkPanel_actionPerformed(refreshAction);
                        }
                    }).start();
                }
            };
            tasksV.add(deleteLoadTestTask);
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.RUN_XML_LOAD_TEST_All) || e.getActionCommand().equals(TestingFrameworkPanel.RUN_XML_LOAD_TEST_MODELS) || e.getActionCommand().equals(TestingFrameworkPanel.RUN_XML_LOAD_TEST_USERS)) {
            final Date[] beginDate = new Date[1];
            final Date[] endDate = new Date[1];
            final TreeSet<String> uniqueUserIDTreeSet = new TreeSet<String>();
            final Vector<KeyValue> bioAndMathModelKeyValueV = new Vector<KeyValue>();
            String typeMsg = "All";
            if (!e.getActionCommand().equals(TestingFrameworkPanel.RUN_XML_LOAD_TEST_All)) {
                if (selectedTreePaths != null && selectedTreePaths.length > 0) {
                    Object refObj = ((BioModelNode) selectedTreePaths[0].getLastPathComponent()).getUserObject();
                    if (refObj instanceof TestingFrmwkTreeModel.LoadTestTreeInfo) {
                        for (int i = 0; i < selectedTreePaths.length; i++) {
                            refObj = ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject();
                            uniqueUserIDTreeSet.add(((TestingFrmwkTreeModel.LoadTestTreeInfo) refObj).userid);
                            if (!e.getActionCommand().equals(TestingFrameworkPanel.RUN_XML_LOAD_TEST_USERS)) {
                                bioAndMathModelKeyValueV.add(((TestingFrmwkTreeModel.LoadTestTreeInfo) refObj).bioOrMathModelKey);
                            }
                        }
                    }
                }
            } else {
                // TreeSet<VCDocumentInfo> dateRangeDocInfoTreeSet =
                // new TreeSet<VCDocumentInfo>(new Comparator<VCDocumentInfo>() {
                // public int compare(VCDocumentInfo o1, VCDocumentInfo o2) {
                // return o1.getVersion().getDate().compareTo(o2.getVersion().getDate());
                // }
                // });
                // BioModelInfo[] allBioModelInfos = getDocumentManager().getBioModelInfos();
                // dateRangeDocInfoTreeSet.addAll(Arrays.asList(allBioModelInfos));
                // MathModelInfo[] allMathModelInfos = getDocumentManager().getMathModelInfos();
                // dateRangeDocInfoTreeSet.addAll(Arrays.asList(allMathModelInfos));
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                // Date firstDate = simpleDateFormat.parse(simpleDateFormat.format(dateRangeDocInfoTreeSet.first().getVersion().getDate()));
                // Date lastDate = simpleDateFormat.parse(simpleDateFormat.format(dateRangeDocInfoTreeSet.last().getVersion().getDate()));
                Date firstDate = simpleDateFormat.parse("2000-01-01");
                Date lastDate = simpleDateFormat.parse(simpleDateFormat.format(Calendar.getInstance().getTime()));
                String allDateRangeString = simpleDateFormat.format(firstDate) + "," + simpleDateFormat.format(lastDate);
                while (beginDate[0] == null || endDate[0] == null) {
                    try {
                        String dateRangeString = DialogUtils.showInputDialog0(this, "Enter Date Range (begin,end) to include (e.g. '" + allDateRangeString + "')", allDateRangeString);
                        beginDate[0] = simpleDateFormat.parse(dateRangeString.substring(0, dateRangeString.indexOf(",")));
                        endDate[0] = simpleDateFormat.parse(dateRangeString.substring(dateRangeString.indexOf(",") + 1));
                    // if(beginDate.compareTo(firstDate) != 0 ||
                    // endDate.compareTo(lastDate) != 0){
                    // Iterator<VCDocumentInfo> vcDocIter = dateRangeDocInfoTreeSet.iterator();
                    // while(vcDocIter.hasNext()){
                    // VCDocumentInfo vcDocInfo = vcDocIter.next();
                    // Date docDate = simpleDateFormat.parse(simpleDateFormat.format(vcDocInfo.getVersion().getDate()));
                    // if(docDate.compareTo(beginDate) < 0 ||
                    // docDate.compareTo(endDate) > 0){
                    // continue;
                    // }
                    // uniqueUserIDTreeSet.add(vcDocInfo.getVersion().getOwner().getName());
                    // bioAndMathModelKeyValueV.add(vcDocInfo.getVersion().getVersionKey());
                    // }
                    // }
                    } catch (UtilCancelException uce) {
                        return;
                    } catch (Exception e2) {
                        DialogUtils.showErrorDialog(this, e2.getMessage());
                    }
                }
                if (beginDate[0].compareTo(firstDate) == 0 && endDate[0].compareTo(lastDate) == 0) {
                    beginDate[0] = null;
                    endDate[0] = null;
                } else {
                    typeMsg = "between " + simpleDateFormat.format(beginDate[0]) + "," + simpleDateFormat.format(endDate[0]);
                }
            }
            if (e.getActionCommand().equals(TestingFrameworkPanel.RUN_XML_LOAD_TEST_MODELS)) {
                typeMsg = "Models (" + bioAndMathModelKeyValueV.size() + ")";
            } else if (e.getActionCommand().equals(TestingFrameworkPanel.RUN_XML_LOAD_TEST_USERS)) {
                typeMsg = "Users (" + uniqueUserIDTreeSet.size() + ")";
            }
            int result = DialogUtils.showComponentOKCancelDialog(TestingFrameworkWindowPanel.this, new JLabel("Run " + typeMsg + " Load Tests?"), "Confirm Load Test Run");
            if (result != JOptionPane.OK_OPTION) {
                return;
            }
            result = DialogUtils.showComponentOKCancelDialog(this, enterDBAndSoftwareVersPanel, "Enter Software Version running load test");
            if (result != JOptionPane.OK_OPTION) {
                return;
            }
            AsynchClientTask runXMLLoadTestTask = new AsynchClientTask("Running XML Load Test...", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                @Override
                public void run(Hashtable<String, Object> hashTable) throws Exception {
                    String[] uniqueUserIDArr = null;
                    KeyValue[] bioAndMathModelKeyValueArr = null;
                    if (beginDate[0] != null && endDate[0] != null) {
                        LoadTestInfoOpResults loadTestInfoOpResults = getTestingFrameworkWindowManager().getLoadTestInfoBetweenDates(beginDate[0], endDate[0]);
                        uniqueUserIDArr = loadTestInfoOpResults.getUniqueUserIDsBetweenDates();
                        bioAndMathModelKeyValueArr = loadTestInfoOpResults.getKeyValuesBetweenDates();
                    } else {
                        uniqueUserIDArr = (uniqueUserIDTreeSet.size() == 0 ? null : uniqueUserIDTreeSet.toArray(new String[0]));
                        bioAndMathModelKeyValueArr = (bioAndMathModelKeyValueV.size() == 0 ? null : bioAndMathModelKeyValueV.toArray(new KeyValue[0]));
                    }
                    throw new RuntimeException(TestingFrameworkWindowPanel.class.getSimpleName() + ".runXMLLoadTestTask(): Run Load Test disabled, directly dependend on MathVerifier.runLoadTest(), should move to standalone admin tool.");
                // MathVerifier mathVerifier = MathVerifier.createMathVerifier(
                // enterDBAndSoftwareVersPanel.getDBHost(),
                // enterDBAndSoftwareVersPanel.getDBName(),
                // enterDBAndSoftwareVersPanel.getDBSchema(),
                // enterDBAndSoftwareVersPanel.getDBPassword());
                // mathVerifier.runLoadTest(
                // uniqueUserIDArr,
                // bioAndMathModelKeyValueArr,
                // enterDBAndSoftwareVersPanel.getSoftwareVersion(),
                // (enterDBAndSoftwareVersPanel.getSoftwareVersion().length()==0?false:true),
                // (enterDBAndSoftwareVersPanel.getSoftwareVersion().length()==0?Compare.DEFAULT_COMPARE_LOGGER:null));
                }
            };
            tasksV.add(runXMLLoadTestTask);
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.REFRESH_XML_LOAD_TEST)) /*||
				e.getActionCommand().equals(TestingFrameworkPanel.REFRESH_INCLUDE_SLOW_XML_LOAD_TEST)*/
        {
            final String LOADTESTDETAILS_KEY = "LOADTESTDETAILS_KEY";
            AsynchClientTask getFailedLoadTest = new AsynchClientTask("Getting FailedLoadTests...", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                @Override
                public void run(Hashtable<String, Object> hashTable) throws Exception {
                    /*						Integer slowLoadThreshold = null;
						if(e.getActionCommand().equals(TestingFrameworkPanel.REFRESH_INCLUDE_SLOW_XML_LOAD_TEST)){
							String result = DialogUtils.showInputDialog0(TestingFrameworkWindowPanel.this, "Enter load time threshold (millseconds)","10000");
							slowLoadThreshold = new Integer(result);
						}
*/
                    if (gettestingFrameworkPanel().getSlowLoadThreshold() != null && gettestingFrameworkPanel().getLoadTestSQLCondition() != null) {
                        throw new IllegalArgumentException("SlowLoadThreshold and 'SQL Condition' cannot both be non-null at the same time.");
                    }
                    hashTable.put(LOADTESTDETAILS_KEY, getTestingFrameworkWindowManager().getLoadTestDetails(gettestingFrameworkPanel().getSlowLoadThreshold(), gettestingFrameworkPanel().getLoadTestSQLCondition()));
                }
            };
            AsynchClientTask refreshFailedLoadTest = new AsynchClientTask("Refreshing FailedLoadTests...", AsynchClientTask.TASKTYPE_SWING_BLOCKING) {

                @Override
                public void run(Hashtable<String, Object> hashTable) throws Exception {
                    getTestingFrameworkWindowManager().refreshLoadTest((LoadTestInfoOpResults) hashTable.get(LOADTESTDETAILS_KEY));
                }
            };
            tasksV.add(getFailedLoadTest);
            tasksV.add(refreshFailedLoadTest);
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.QUERY_TCRITVAR_CROSSREF)) {
            if (selectedObj instanceof TestingFrmwkTreeModel.TestCriteriaVarUserObj && selectedTreePaths.length == 1) {
                final TestingFrmwkTreeModel.TestCriteriaVarUserObj tcritVaruserObj = (TestingFrmwkTreeModel.TestCriteriaVarUserObj) selectedObj;
                final TestSuiteInfoNew tsInfoNew = gettestingFrameworkPanel().getTestSuiteInfoOfTreePath(selectedTreePaths[0]);
                AsynchClientTask queryTCritCrossRef = new AsynchClientTask("Query TCrit Var Cross Ref", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                        getTestingFrameworkWindowManager().queryTCritCrossRef(tsInfoNew, tcritVaruserObj.getTestCriteria(), tcritVaruserObj.getVariableComparisonSummary().getName());
                    }
                };
                tasksV.add(queryTCritCrossRef);
            } else {
                throw new Exception("Selected Object is not a TestCriteria Variable! Failed to Query Var Cross Ref.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.QUERY_TCRIT_CROSSREF)) {
            if (selectedObj instanceof TestCriteriaNew) {
                final TestCriteriaNew tcritNew = (TestCriteriaNew) selectedObj;
                final TestSuiteInfoNew tsInfoNew = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCriteria();
                AsynchClientTask queryTCritCrossRef = new AsynchClientTask("Query TCrit Cross Ref", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                        getTestingFrameworkWindowManager().queryTCritCrossRef(tsInfoNew, tcritNew, null);
                    }
                };
                tasksV.add(queryTCritCrossRef);
            } else {
                throw new Exception("Selected Object is not a TestCriteria! Failed to Query Cross Ref.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.LOCK_TESTSUITE)) {
            if (selectedObj instanceof TestSuiteInfoNew) {
                final TestSuiteInfoNew tsInfoNew = (TestSuiteInfoNew) selectedObj;
                AsynchClientTask lockTestSuiteTask = new AsynchClientTask("Lock TestSuite", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                        getTestingFrameworkWindowManager().lockTestSuite(tsInfoNew);
                    }
                };
                tasksV.add(lockTestSuiteTask);
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfoNew);
                tasksV.add(tfRefreshTreeTask);
            } else {
                throw new Exception("Selected Object is not a TestSuite! Failed to Lock TestSuite.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.EDIT_ANNOT_TESTSUITE)) {
            if (selectedObj instanceof TestSuiteInfoNew) {
                final TestSuiteInfoNew tsInfoNew = (TestSuiteInfoNew) selectedObj;
                String newAnnotation;
                // initialize fields
                String oldAnnotation = tsInfoNew.getTSAnnotation();
                // show the editor
                newAnnotation = org.vcell.util.gui.DialogUtils.showAnnotationDialog(this, oldAnnotation);
                final String finalAnnotation = newAnnotation;
                AsynchClientTask editTestSuiteAnnotation = new AsynchClientTask("Edit TestSuite Annotation", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                        getTestingFrameworkWindowManager().updateTestSuiteAnnotation(tsInfoNew, finalAnnotation);
                    }
                };
                tasksV.add(editTestSuiteAnnotation);
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfoNew);
                tasksV.add(tfRefreshTreeTask);
            } else {
                throw new Exception("Selected Object is not a TestSuite! Failed to Edit TestSuite Annotation.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.EDIT_ANNOT_TESTCASE)) {
            if (selectedObj instanceof TestCaseNew) {
                final TestCaseNew tcNew = (TestCaseNew) selectedObj;
                String newAnnotation;
                // initialize fields
                String oldAnnotation = tcNew.getAnnotation();
                // show the editor
                newAnnotation = org.vcell.util.gui.DialogUtils.showAnnotationDialog(this, oldAnnotation);
                final String finalAnnotation = newAnnotation;
                AsynchClientTask editTestCaseAnnotation = new AsynchClientTask("Edit TestCase Annotation", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                        getTestingFrameworkWindowManager().updateTestCaseAnnotation(tcNew, finalAnnotation);
                    }
                };
                tasksV.add(editTestCaseAnnotation);
                TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCase();
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                tasksV.add(tfRefreshTreeTask);
            } else {
                throw new Exception("Selected Object is not a TestCase! Failed to Edit TestCase Annotation.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.TOGGLE_STEADYSTATE)) {
            if (selectedObj instanceof TestCaseNew) {
                final TestCaseNew testCase = (TestCaseNew) selectedObj;
                String okString = "Ok";
                String confirm = PopupGenerator.showWarningDialog(this, "Toggle TestCase '" + testCase.getVersion().getName() + "'\nfrom " + testCase.getType() + " to " + (testCase.getType().equals(TestCaseNew.EXACT) ? TestCaseNew.EXACT_STEADY : TestCaseNew.EXACT), new String[] { okString, "Cancel" }, okString);
                if (confirm.equals(okString)) {
                    AsynchClientTask toggleSteadyState = new AsynchClientTask("Toggle Steady State", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                        public void run(Hashtable<String, Object> hashTable) throws Exception {
                            getTestingFrameworkWindowManager().toggleTestCaseSteadyState(new TestCaseNew[] { testCase });
                        }
                    };
                    tasksV.add(toggleSteadyState);
                    TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCase();
                    tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                    tasksV.add(tfRefreshTreeTask);
                } else {
                    throw UserCancelException.CANCEL_GENERIC;
                }
            } else {
                throw new Exception("Selected Object is not a TestCase! Cannot Toggle SteadyState");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.ADD_TESTSUITE)) {
            TestingFrameworkWindowManager.NewTestSuiteUserInformation newTestSuiteUserInfo = getTestingFrameworkWindowManager().getNewTestSuiteInfoFromUser(null, null);
            tasksV.add(new TFAddTestSuite(getTestingFrameworkWindowManager(), newTestSuiteUserInfo.testSuiteInfoNew));
            tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), newTestSuiteUserInfo.testSuiteInfoNew);
            tasksV.add(tfRefreshTreeTask);
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.REFRESH_TESTSUITE)) {
            TestSuiteInfoNew tsin = null;
            if (selectedObj instanceof TestSuiteInfoNew) {
                tsin = (TestSuiteInfoNew) selectedObj;
            } else if (selectedObj instanceof TestCaseNew) {
                tsin = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCase();
            } else if (selectedObj instanceof TestCriteriaNew) {
                tsin = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCriteria();
            }
            if (tsin == null) {
                throw new IllegalArgumentException("Refresh error: Unexpected tree selection type=" + selectedObj.getClass().getName());
            }
            tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsin);
            tasksV.add(new TFUpdateRunningStatus(getTestingFrameworkWindowManager(), tsin));
            tasksV.add(tfRefreshTreeTask);
        // getTestingFrameworkWindowManager().updateSimRunningStatus();
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.ADD_TESTCASE)) {
            if (selectedObj instanceof TestSuiteInfoNew) {
                TestSuiteInfoNew tsInfo = (TestSuiteInfoNew) selectedObj;
                TestCaseNew[] tcnArr = getTestingFrameworkWindowManager().getNewTestCaseArr();
                tasksV.add(new cbit.vcell.client.task.TFAddTestCases(getTestingFrameworkWindowManager(), tsInfo, tcnArr));
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                tasksV.add(tfRefreshTreeTask);
            } else {
                throw new Exception("Selected Object is not a test suite! Cannot add a test case");
            }
        } else if (e.getActionCommand().equals("Run All")) {
            if (selectedTreePaths == null || selectedTreePaths.length != 1) {
                throw new IllegalArgumentException("Command '" + e.getActionCommand() + "' Single Selection Only!");
            }
            if (selectedObj instanceof TestSuiteInfoNew) {
                TestSuiteInfoNew tsInfo = (TestSuiteInfoNew) selectedObj;
                String okString = "Ok";
                String confirm = PopupGenerator.showWarningDialog(this, "Run All Sims for TestSuite '" + tsInfo.getTSID() + "'?", new String[] { okString, "Cancel" }, okString);
                if (confirm.equals(okString)) {
                    tasksV.add(new TFRunSims(getTestingFrameworkWindowManager(), tsInfo));
                    tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                    tasksV.add(tfRefreshTreeTask);
                }
            } else {
                throw new Exception("Selected Object is not a test suite!");
            }
        } else if (e.getActionCommand().equals("Run Simulations")) {
            if (selectedTreePaths == null || selectedTreePaths.length != 1) {
                throw new IllegalArgumentException("Command '" + e.getActionCommand() + "' Single Selection Only!");
            }
            if (selectedObj instanceof TestCaseNew) {
                TestCaseNew testCase = (TestCaseNew) selectedObj;
                String okString = "Ok";
                String confirm = PopupGenerator.showWarningDialog(this, "Run All Sims for TestCase '" + testCase.getVersion().getName() + "'?", new String[] { okString, "Cancel" }, okString);
                if (confirm.equals(okString)) {
                    tasksV.add(new TFRunSims(getTestingFrameworkWindowManager(), testCase));
                    TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCase();
                    tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                    tasksV.add(tfRefreshTreeTask);
                }
            } else {
                throw new Exception("Selected Object is not a TestCase! Cannot run simulations");
            }
        } else if (e.getActionCommand().equals("Run")) {
            if (selectedTreePaths != null && selectedTreePaths.length > 0 && selectedTreePaths[0].getLastPathComponent() instanceof BioModelNode && ((BioModelNode) selectedTreePaths[0].getLastPathComponent()).getUserObject() instanceof TestCriteriaNew) {
                for (int i = 0; i < selectedTreePaths.length; i += 1) {
                    TestCriteriaNew tCriteria = (TestCriteriaNew) ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject();
                    tasksV.add(new TFRunSims(getTestingFrameworkWindowManager(), tCriteria));
                }
                TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCriteria();
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                tasksV.add(tfRefreshTreeTask);
            } else {
                throw new Exception("Selected Object is not a TestCriteria!");
            }
        } else if (e.getActionCommand().equals("View Results")) {
            if (selectedObj instanceof cbit.vcell.numericstest.TestCriteriaNew) {
                TestCriteriaNew tCriteria = (TestCriteriaNew) selectedObj;
                getTestingFrameworkWindowManager().viewResults(tCriteria);
            } else {
                PopupGenerator.showErrorDialog(TestingFrameworkWindowPanel.this, "Selected Object is not a TestCriteria!");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.COMPARERREGR_INTERNALREF_TESTCRITERIA) || e.getActionCommand().equals(TestingFrameworkPanel.COMPARERREGR_USERDEFREF_TESTCRITERIA)) {
            if (selectedObj instanceof cbit.vcell.numericstest.TestCriteriaNew) {
                TestCriteriaNew tCriteria = (TestCriteriaNew) selectedObj;
                SimulationStatus simStatus = getTestingFrameworkWindowManager().getRequestManager().getServerSimulationStatus(tCriteria.getSimInfo());
                if (simStatus.isRunning()) {
                    PopupGenerator.showErrorDialog(TestingFrameworkWindowPanel.this, "Selected simulation is still running!");
                    return;
                }
                SimulationInfo simulationInfo = tCriteria.getRegressionSimInfo();
                if (e.getActionCommand().equals(TestingFrameworkPanel.COMPARERREGR_USERDEFREF_TESTCRITERIA)) {
                    try {
                        simulationInfo = getUserSelectedSimulationInfo().getSimInfo();
                    } catch (UserCancelException e2) {
                        return;
                    }
                }
                if (simulationInfo == null) {
                    PopupGenerator.showErrorDialog(TestingFrameworkWindowPanel.this, "Either the selected simulation does not belong to a REGRESSION test or the regression simInfo is not set!");
                    return;
                }
                getTestingFrameworkWindowManager().compare(tCriteria, simulationInfo);
            } else {
                PopupGenerator.showErrorDialog(TestingFrameworkWindowPanel.this, "Selected Object is not a TestCriteria!");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.DUPLICATE_TESTSUITE)) {
            if (selectedObj instanceof TestSuiteInfoNew) {
                TestSuiteInfoNew tsInfoOriginal = (TestSuiteInfoNew) selectedObj;
                TestingFrameworkWindowManager.NewTestSuiteUserInformation newTestSuiteUserInfo = getTestingFrameworkWindowManager().getNewTestSuiteInfoFromUser(tsInfoOriginal.getTSAnnotation(), tsInfoOriginal.getTSID());
                tasksV.add(new TFDuplicateTestSuite(getTestingFrameworkWindowManager(), tsInfoOriginal, newTestSuiteUserInfo.testSuiteInfoNew, newTestSuiteUserInfo.regrRefFlag));
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), newTestSuiteUserInfo.testSuiteInfoNew);
                tasksV.add(tfRefreshTreeTask);
            // getTestingFrameworkWindowManager().duplicateTestSuite(tsInfo);
            } else {
                throw new Exception("Selected Object is not a test suite! Cannot duplicate");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.REMOVE_TESTCASE)) {
            if (selectedObj instanceof TestCaseNew) {
                String[][] rowData = new String[selectedTreePaths.length][3];
                TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCase();
                for (int i = 0; i < selectedTreePaths.length; i += 1) {
                    TestCaseNew tCase = (TestCaseNew) ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject();
                    rowData[i][0] = tsInfo.getTSID();
                    tasksV.add(new TFRemove(getTestingFrameworkWindowManager(), tCase));
                    if (tCase instanceof TestCaseNewBioModel) {
                        rowData[i][1] = "BM " + tCase.getVersion().getName();
                        rowData[i][2] = ((TestCaseNewBioModel) tCase).getSimContextName();
                    } else {
                        rowData[i][1] = "MM " + tCase.getVersion().getName();
                        rowData[i][2] = "N/A";
                    }
                }
                DialogUtils.showComponentOKCancelTableList(this, "Confirm Remove TestCase(s)", new String[] { "Test Suite", "Test Case", "App" }, rowData, null);
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                tasksV.add(tfRefreshTreeTask);
            } else {
                throw new Exception("Selected Object is not a TestCase, cannot remove selection!");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.REMOVE_TESTSUITE)) {
            if (selectedObj instanceof TestSuiteInfoNew) {
                TestSuiteInfoNew tsInfo = (TestSuiteInfoNew) selectedObj;
                String confirm = PopupGenerator.showWarningDialog(this, UserMessage.warn_deleteDocument.getMessage(tsInfo.getTSID()), UserMessage.warn_deleteDocument.getOptions(), UserMessage.warn_deleteDocument.getDefaultSelection());
                if (confirm.equals(UserMessage.OPTION_DELETE)) {
                    tasksV.add(new TFRemove(getTestingFrameworkWindowManager(), tsInfo));
                    tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                    tasksV.add(tfRefreshTreeTask);
                } else {
                    throw UserCancelException.CANCEL_GENERIC;
                }
            // getTestingFrameworkWindowManager().removeTestSuite(tsInfo);
            } else {
                throw new Exception("Selected Object is not a test suite! Cannot add a test case");
            }
        } else if (e.getActionCommand().equals("Generate TestSuite Report")) {
            final TreePath[] selectedTreePathsLocal = selectedTreePaths;
            new Thread(new Runnable() {

                public void run() {
                    try {
                        for (int i = 0; selectedTreePathsLocal != null && i < selectedTreePathsLocal.length; i += 1) {
                            Object selTreeNode = ((BioModelNode) selectedTreePathsLocal[i].getLastPathComponent()).getUserObject();
                            if (selTreeNode instanceof TestSuiteInfoNew) {
                                Vector<AsynchClientTask> tasksVLocal = new java.util.Vector<AsynchClientTask>();
                                TestSuiteInfoNew tsInfo = (TestSuiteInfoNew) selTreeNode;
                                tasksVLocal.add(new cbit.vcell.client.task.TFUpdateRunningStatus(getTestingFrameworkWindowManager(), tsInfo));
                                tasksVLocal.add(new TFGenerateReport(getTestingFrameworkWindowManager(), tsInfo));
                                final String END_NOTIFIER = "END NOTIFIER";
                                tasksVLocal.add(new AsynchClientTask(END_NOTIFIER, AsynchClientTask.TASKTYPE_NONSWING_BLOCKING, false, false) {

                                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                                        hashTable.put(END_NOTIFIER, END_NOTIFIER);
                                    }
                                });
                                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                                tasksVLocal.add(tfRefreshTreeTask);
                                AsynchClientTask[] tasksArr = new AsynchClientTask[tasksVLocal.size()];
                                tasksVLocal.copyInto(tasksArr);
                                Hashtable<String, Object> hashLocal = new Hashtable<String, Object>();
                                ClientTaskDispatcher.dispatch(TestingFrameworkWindowPanel.this, hashLocal, tasksArr, true);
                                // Wait for each report to complete before going on to next because report methods are not thread safe?
                                while (!hashLocal.contains(END_NOTIFIER)) {
                                    Thread.sleep(100);
                                }
                            } else {
                                throw new Exception("Error GenerateTestSuiteReport\nSelected Object is not a TestSuite");
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        PopupGenerator.showErrorDialog(TestingFrameworkWindowPanel.this, "Error GenerateTestSuiteReport\n" + e.getMessage(), e);
                        return;
                    }
                }
            }).start();
            return;
        } else if (e.getActionCommand().equals("Generate TestCase Report")) {
            Vector<TestSuiteInfoNew> tsinV = new Vector<TestSuiteInfoNew>();
            for (int i = 0; selectedTreePaths != null && i < selectedTreePaths.length; i += 1) {
                Object selTreeNode = ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject();
                if (selTreeNode instanceof TestCaseNew) {
                    TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfTreePath(selectedTreePaths[i]);
                    if (!tsinV.contains(tsInfo)) {
                        tsinV.add(tsInfo);
                        tasksV.add(new cbit.vcell.client.task.TFUpdateRunningStatus(getTestingFrameworkWindowManager(), tsInfo));
                    }
                    tasksV.add(new TFGenerateReport(getTestingFrameworkWindowManager(), (TestCaseNew) selTreeNode));
                } else {
                    throw new Exception("Selected Object is not a TestCase");
                }
            }
            tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), (tsinV.size() == 1 ? tsinV.elementAt(0) : null));
            tasksV.add(tfRefreshTreeTask);
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.GENTCRITREPORT_INTERNALREF_TESTCRITERIA) || e.getActionCommand().equals(TestingFrameworkPanel.GENTCRITREPORT_USERDEFREF_TESTCRITERIA)) {
            TFGenerateReport.VCDocumentAndSimInfo userDefinedRegrRef = null;
            if (e.getActionCommand().equals(TestingFrameworkPanel.GENTCRITREPORT_USERDEFREF_TESTCRITERIA)) {
                try {
                    userDefinedRegrRef = getUserSelectedSimulationInfo();
                } catch (UserCancelException e2) {
                    return;
                }
            }
            Vector<TestSuiteInfoNew> tsinV = new Vector<TestSuiteInfoNew>();
            for (int i = 0; selectedTreePaths != null && i < selectedTreePaths.length; i += 1) {
                Object selTreeNode = ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject();
                if (selTreeNode instanceof TestCriteriaNew) {
                    TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfTreePath(selectedTreePaths[i]);
                    if (!tsinV.contains(tsInfo)) {
                        tsinV.add(tsInfo);
                        tasksV.add(new cbit.vcell.client.task.TFUpdateRunningStatus(getTestingFrameworkWindowManager(), tsInfo));
                    }
                    tasksV.add(new TFGenerateReport(getTestingFrameworkWindowManager(), (TestCaseNew) ((BioModelNode) selectedTreePaths[i].getParentPath().getLastPathComponent()).getUserObject(), (TestCriteriaNew) selTreeNode, userDefinedRegrRef));
                } else {
                    throw new Exception("Selected Object is not a TestCriteria");
                }
            }
            tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), (tsinV.size() == 1 ? tsinV.elementAt(0) : null));
            tasksV.add(tfRefreshTreeTask);
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.REMOVE_DIFF_TESTCRITERIA)) {
            final int OLDER = 0;
            final int NEWER = 1;
            final TestSuiteInfoNew[] testSuiteInfoHolder = new TestSuiteInfoNew[2];
            if (selectedTreePaths.length == 2 && ((BioModelNode) selectedTreePaths[0].getLastPathComponent()).getUserObject() instanceof TestSuiteInfoNew && ((BioModelNode) selectedTreePaths[1].getLastPathComponent()).getUserObject() instanceof TestSuiteInfoNew) {
                // do outside task because its quick
                TestSuiteInfoNew testSuiteInfoOlder = (TestSuiteInfoNew) ((BioModelNode) selectedTreePaths[0].getLastPathComponent()).getUserObject();
                TestSuiteInfoNew testSuiteInfoNewer = (TestSuiteInfoNew) ((BioModelNode) selectedTreePaths[1].getLastPathComponent()).getUserObject();
                if (testSuiteInfoOlder.getTSDate().compareTo(testSuiteInfoNewer.getTSDate()) > 0) {
                    TestSuiteInfoNew temp = testSuiteInfoOlder;
                    testSuiteInfoOlder = testSuiteInfoNewer;
                    testSuiteInfoNewer = temp;
                }
                testSuiteInfoHolder[OLDER] = testSuiteInfoOlder;
                testSuiteInfoHolder[NEWER] = testSuiteInfoNewer;
                AsynchClientTask showDiffTask = new AsynchClientTask("Show Differential TestCriteria...", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                        ArrayList<TestSuiteNew> bothTestSuites = new ArrayList<TestSuiteNew>();
                        if (getClientTaskStatusSupport() != null) {
                            getClientTaskStatusSupport().setProgress(25);
                            getClientTaskStatusSupport().setMessage("Getting TestSuiteInfo '" + testSuiteInfoHolder[OLDER].getTSID() + "'");
                        }
                        bothTestSuites.add(getDocumentManager().getTestSuite(testSuiteInfoHolder[OLDER].getTSKey()));
                        if (getClientTaskStatusSupport() != null) {
                            getClientTaskStatusSupport().setProgress(50);
                            getClientTaskStatusSupport().setMessage("Getting TestSuiteInfo '" + testSuiteInfoHolder[NEWER].getTSID() + "'");
                        }
                        bothTestSuites.add(getDocumentManager().getTestSuite(testSuiteInfoHolder[NEWER].getTSKey()));
                        HashMap<String, TestCriteriaNew> olderTestCritHashMap = new HashMap<String, TestCriteriaNew>();
                        ArrayList<String> olderTestCaseBaseNames = new ArrayList<String>();
                        TreeMap<String, TestCriteriaNew> newDiffTestCriteria = new TreeMap<String, TestCriteriaNew>();
                        int excludedCount = 0;
                        for (TestSuiteNew currentTestSuite : bothTestSuites) {
                            BigDecimal currentTestSuiteKey = currentTestSuite.getTSInfoNew().getTSKey();
                            for (TestCaseNew tcn : currentTestSuite.getTestCases()) {
                                String prefixInfo = "TS='" + currentTestSuite.getTSInfoNew().getTSID() + "' Type='" + tcn.getType() + "' ";
                                String baseName = (tcn instanceof TestCaseNewBioModel ? "BioModel='" + ((TestCaseNewBioModel) tcn).getBioModelInfo().getVersion().getName() + "' App='" + ((TestCaseNewBioModel) tcn).getSimContextName() + "'" : "MathModel='" + ((TestCaseNewMathModel) tcn).getMathModelInfo().getVersion().getName()) + "'";
                                if (currentTestSuite.getTSInfoNew().getTSKey().equals(testSuiteInfoHolder[OLDER].getTSKey())) {
                                    if (!olderTestCaseBaseNames.contains(baseName)) {
                                        olderTestCaseBaseNames.add(baseName);
                                    } else {
                                        throw new Exception("Old testcase names duplicated.");
                                    }
                                }
                                for (TestCriteriaNew tcrit : tcn.getTestCriterias()) {
                                    String name = baseName + " Sim='" + tcrit.getSimInfo().getName() + "'";
                                    if (olderTestCritHashMap.containsKey(name)) {
                                        if (currentTestSuiteKey.equals(testSuiteInfoHolder[OLDER].getTSKey())) {
                                            throw new Exception("---Problem--- Older names not unique");
                                        }
                                        continue;
                                    } else if (currentTestSuiteKey.equals(testSuiteInfoHolder[NEWER].getTSKey())) {
                                        if (!olderTestCaseBaseNames.contains(baseName)) {
                                            // this happens when new TestSuite has added TestCase after duplication
                                            excludedCount += 1;
                                        } else if (newDiffTestCriteria.put(prefixInfo + name, tcrit) != null) {
                                            throw new Exception("---Problem--- Newer added names not unique");
                                        }
                                        continue;
                                    }
                                    olderTestCritHashMap.put(name, tcrit);
                                }
                            }
                        }
                        if (newDiffTestCriteria.size() > 0) {
                            if (getClientTaskStatusSupport() != null) {
                                getClientTaskStatusSupport().setMessage("Showing Differential list...");
                            }
                            String[][] rowData = new String[newDiffTestCriteria.size()][1];
                            String[] addedNamesArr = newDiffTestCriteria.keySet().toArray(new String[0]);
                            for (int i = 0; i < addedNamesArr.length; i++) {
                                rowData[i][0] = addedNamesArr[i];
                            }
                            final String DELETE = "Delete";
                            TableListResult result = DialogUtils.showComponentOptionsTableList(gettestingFrameworkPanel(), "Remove TestCriteria in TS='" + testSuiteInfoHolder[NEWER].getTSID() + "' that were not in TS='" + testSuiteInfoHolder[OLDER].getTSID() + "' (count=" + rowData.length + " of " + olderTestCritHashMap.size() + ", excluded=" + excludedCount + ")", new String[] { "Diff TestCriteria" }, rowData, ListSelectionModel.MULTIPLE_INTERVAL_SELECTION, null, new String[] { DELETE, "Cancel" }, DELETE, null);
                            if (result != null && result.selectedOption != null && result.selectedOption.equals(DELETE) && result.selectedTableRows != null && result.selectedTableRows.length > 0) {
                                TestCriteriaNew[] allNewDiffTeestCritArr = newDiffTestCriteria.values().toArray(new TestCriteriaNew[0]);
                                TestCriteriaNew[] selTestCritsArr = new TestCriteriaNew[result.selectedTableRows.length];
                                for (int i = 0; i < result.selectedTableRows.length; i++) {
                                    selTestCritsArr[i] = allNewDiffTeestCritArr[result.selectedTableRows[i]];
                                // System.out.println("Selected= "+rowData[result.selectedTableRows[i]][0]+"  --  SimName="+selTestCritsArrHolder[0][i].getSimInfo().getVersion().getName());
                                }
                                hashTable.put(TFRemoveTestCriteria.REMOVE_THESE_TESTCRITERIAS, selTestCritsArr);
                            } else {
                                throw UserCancelException.CANCEL_GENERIC;
                            }
                        } else {
                            throw new Exception("No differential TestCriteria found");
                        }
                    }
                };
                AsynchClientTask shouldRefreshTask = new // Prevent annoying refresh if cancel
                AsynchClientTask(// Prevent annoying refresh if cancel
                "", // Prevent annoying refresh if cancel
                AsynchClientTask.TASKTYPE_SWING_NONBLOCKING) {

                    public void run(Hashtable<String, Object> hashTable) throws Exception {
                        new TFRefresh(getTestingFrameworkWindowManager(), testSuiteInfoHolder[NEWER]).run(hashTable);
                    }
                };
                tasksV.add(showDiffTask);
                tasksV.add(new TFRemoveTestCriteria(getTestingFrameworkWindowManager()));
                tasksV.add(shouldRefreshTask);
            // tasksV.add(new TFRefresh(getTestingFrameworkWindowManager(),testSuiteInfoHolder[NEWER]));
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.REMOVE_TESTCRITERIA)) {
            if (selectedObj instanceof TestCriteriaNew) {
                ArrayList<TestCriteriaNew> selTestCritsArr = new ArrayList<TestCriteriaNew>();
                for (int i = 0; selectedTreePaths != null && i < selectedTreePaths.length; i += 1) {
                    Object selTreeNode = ((BioModelNode) selectedTreePaths[i].getLastPathComponent()).getUserObject();
                    if (selTreeNode instanceof TestCriteriaNew) {
                        selTestCritsArr.add(((TestCriteriaNew) selTreeNode));
                    }
                }
                final String DELETE = "Delete";
                String response = DialogUtils.showWarningDialog(gettestingFrameworkPanel(), "Delete " + selTestCritsArr.size() + " TestCriterias?", new String[] { DELETE, "Cancel" }, DELETE);
                if (response != null && response.equals(DELETE)) {
                    tasksV.add(new TFRemoveTestCriteria(getTestingFrameworkWindowManager(), selTestCritsArr.toArray(new TestCriteriaNew[0])));
                    TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCriteria();
                    tasksV.add(new TFRefresh(getTestingFrameworkWindowManager(), tsInfo));
                } else {
                    throw UserCancelException.CANCEL_GENERIC;
                }
            } else {
                throw new Exception("Selected Object is not a TestCriteria! Cannot remove test criteria.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.EDIT_TESTCRITERIA)) {
            if (selectedObj instanceof TestCriteriaNew) {
                TestCriteriaNew tCriteria = (TestCriteriaNew) selectedObj;
                TestCaseNew testCase = gettestingFrameworkPanel().getTestCaseOfSelectedCriteria();
                TestCriteriaNew tcritNew = getTestingFrameworkWindowManager().getNewTestCriteriaFromUser(testCase.getType(), tCriteria);
                tasksV.add(new TFUpdateTestCriteria(getTestingFrameworkWindowManager(), tCriteria, tcritNew));
                TestSuiteInfoNew tsInfo = gettestingFrameworkPanel().getTestSuiteInfoOfSelectedTestCriteria();
                tfRefreshTreeTask = new TFRefresh(getTestingFrameworkWindowManager(), tsInfo);
                tasksV.add(tfRefreshTreeTask);
            } else {
                throw new Exception("Selected Object is not a TestCriteria! Cannot edit test criteria.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.COPY_TCRIT_SIMID)) {
            if (selectedObj instanceof TestCriteriaNew) {
                TestCriteriaNew tCriteria = (TestCriteriaNew) selectedObj;
                KeyValue testCritSimID = tCriteria.getSimInfo().getVersion().getVersionKey();
                VCellTransferable.sendToClipboard(testCritSimID.toString());
                return;
            } else {
                throw new Exception("Selected Object is not a TestCriteria! Copy simid failed.");
            }
        } else if (e.getActionCommand().equals(TestingFrameworkPanel.LOAD_MODEL)) {
            final String LOAD_THIS_MODEL = "LOAD_THIS_MODEL";
            AsynchClientTask modelInfoTask = new AsynchClientTask("Finding Model Info...", AsynchClientTask.TASKTYPE_NONSWING_BLOCKING) {

                @Override
                public void run(Hashtable<String, Object> hashTable) throws Exception {
                    VCDocumentInfo vcDocumentInfo = null;
                    if (selectedObj instanceof TestCaseNew) {
                        TestCaseNew testCase = (TestCaseNew) selectedObj;
                        if (testCase instanceof TestCaseNewMathModel) {
                            vcDocumentInfo = ((TestCaseNewMathModel) testCase).getMathModelInfo();
                        } else if (testCase instanceof TestCaseNewBioModel) {
                            vcDocumentInfo = ((TestCaseNewBioModel) testCase).getBioModelInfo();
                        } else {
                            throw new IllegalArgumentException("Unexpected TestCase type=" + testCase.getClass().getName());
                        }
                        hashTable.put(LOAD_THIS_MODEL, vcDocumentInfo);
                    } else if (selectedObj instanceof LoadTestTreeInfo) {
                        throw new Exception("Not yet implemented for LoadTest.");
                    // LoadTestTreeInfo loadTestTreeInfo = (LoadTestTreeInfo)selectedObj;
                    // if(loadTestTreeInfo.modelType.equals(LoadTestInfoOpResults.MODELTYPE_BIO)){
                    // vcDocumentInfo = getDocumentManager().getBioModelInfo(loadTestTreeInfo.bioOrMathModelKey);
                    // }else if(loadTestTreeInfo.modelType.equals(LoadTestInfoOpResults.MODELTYPE_MATH)){
                    // vcDocumentInfo = getDocumentManager().getMathModelInfo(loadTestTreeInfo.bioOrMathModelKey);
                    // }else{
                    // throw new IllegalArgumentException("Unexpected LoadTestTreeInfo type="+loadTestTreeInfo.modelType);
                    // }
                    // hashTable.put(LOAD_THIS_MODEL, vcDocumentInfo);
                    }
                }
            };
            AsynchClientTask openModelTask = new AsynchClientTask("Opening model...", AsynchClientTask.TASKTYPE_SWING_BLOCKING) {

                @Override
                public void run(Hashtable<String, Object> hashTable) throws Exception {
                    if (selectedObj instanceof TestCaseNew) {
                        getTestingFrameworkWindowManager().loadModel((VCDocumentInfo) hashTable.get(LOAD_THIS_MODEL));
                    } else if (selectedObj instanceof LoadTestTreeInfo) {
                        throw new Exception("Not yet implemented for LoadTest.");
                    } else {
                        throw new Exception("Load Model expecting TestCaseNew or LoadTestTreeInfo but got " + selectedObj.getClass().getName());
                    }
                }
            };
            tasksV.add(modelInfoTask);
            tasksV.add(openModelTask);
        }
        // tasksV.add(tfRefreshTreeTask);
        AsynchClientTask[] tasksArr = new AsynchClientTask[tasksV.size()];
        tasksV.copyInto(tasksArr);
        ClientTaskDispatcher.dispatch(this, hash, tasksArr, true);
    } catch (Throwable exc) {
        if (!(exc instanceof UserCancelException) && !(exc instanceof UtilCancelException)) {
            exc.printStackTrace(System.out);
            PopupGenerator.showErrorDialog(TestingFrameworkWindowPanel.this, exc.getMessage(), exc);
        }
    }
}
Also used : HashMap(java.util.HashMap) ActionEvent(java.awt.event.ActionEvent) LoadTestInfoOpResults(cbit.vcell.numericstest.LoadTestInfoOpResults) UserCancelException(org.vcell.util.UserCancelException) ArrayList(java.util.ArrayList) TFUpdateRunningStatus(cbit.vcell.client.task.TFUpdateRunningStatus) LoadTestSoftwareVersionTimeStamp(cbit.vcell.numericstest.LoadTestInfoOpResults.LoadTestSoftwareVersionTimeStamp) TFRemove(cbit.vcell.client.task.TFRemove) TFRemoveTestCriteria(cbit.vcell.client.task.TFRemoveTestCriteria) TreeSet(java.util.TreeSet) Vector(java.util.Vector) UtilCancelException(org.vcell.util.UtilCancelException) TestSuiteNew(cbit.vcell.numericstest.TestSuiteNew) TestCriteriaNew(cbit.vcell.numericstest.TestCriteriaNew) TestCaseNew(cbit.vcell.numericstest.TestCaseNew) SimulationStatus(cbit.vcell.server.SimulationStatus) TFDuplicateTestSuite(cbit.vcell.client.task.TFDuplicateTestSuite) SimulationInfo(cbit.vcell.solver.SimulationInfo) TableListResult(org.vcell.util.gui.DialogUtils.TableListResult) AsynchClientTask(cbit.vcell.client.task.AsynchClientTask) KeyValue(org.vcell.util.document.KeyValue) LoadTestInfoOP(cbit.vcell.numericstest.LoadTestInfoOP) BioModelNode(cbit.vcell.desktop.BioModelNode) TestingFrmwkTreeModel(cbit.vcell.client.desktop.testingframework.TestingFrmwkTreeModel) TFGenerateReport(cbit.vcell.client.task.TFGenerateReport) TestCaseNewBioModel(cbit.vcell.numericstest.TestCaseNewBioModel) TFAddTestSuite(cbit.vcell.client.task.TFAddTestSuite) Hashtable(java.util.Hashtable) LoadTestTreeInfo(cbit.vcell.client.desktop.testingframework.TestingFrmwkTreeModel.LoadTestTreeInfo) JLabel(javax.swing.JLabel) TreeMap(java.util.TreeMap) Date(java.util.Date) UtilCancelException(org.vcell.util.UtilCancelException) UserCancelException(org.vcell.util.UserCancelException) BigDecimal(java.math.BigDecimal) TFUpdateRunningStatus(cbit.vcell.client.task.TFUpdateRunningStatus) LoadTestTreeInfo(cbit.vcell.client.desktop.testingframework.TestingFrmwkTreeModel.LoadTestTreeInfo) TreePath(javax.swing.tree.TreePath) VCDocumentInfo(org.vcell.util.document.VCDocumentInfo) TFUpdateTestCriteria(cbit.vcell.client.task.TFUpdateTestCriteria) TFRunSims(cbit.vcell.client.task.TFRunSims) TFRefresh(cbit.vcell.client.task.TFRefresh) TestCriteriaNew(cbit.vcell.numericstest.TestCriteriaNew) TestCaseNewMathModel(cbit.vcell.numericstest.TestCaseNewMathModel) SimpleDateFormat(java.text.SimpleDateFormat) TestSuiteInfoNew(cbit.vcell.numericstest.TestSuiteInfoNew)

Example 13 with VCDocumentInfo

use of org.vcell.util.document.VCDocumentInfo in project vcell by virtualcell.

the class MathVerifier method scan.

/**
 * Insert the method's description here.
 * Creation date: (2/2/01 3:40:29 PM)
 */
public void scan(User[] users, boolean bUpdateDatabase, KeyValue[] bioAndMathModelKeys) throws MathException, MappingException, SQLException, DataAccessException, ModelException, ExpressionException {
    // java.util.Calendar calendar = java.util.GregorianCalendar.getInstance();
    // //	calendar.set(2002,java.util.Calendar.MAY,7+1);
    // calendar.set(2002,java.util.Calendar.JULY,1);
    // final java.util.Date fluxCorrectionOrDisablingBugFixDate = calendar.getTime();
    // //	calendar.set(2001,java.util.Calendar.JUNE,13+1);
    // calendar.set(2002,java.util.Calendar.JANUARY,1);
    // final java.util.Date totalVolumeCorrectionFixDate = calendar.getTime();
    KeyValue[] sortedBioAndMathModelKeys = null;
    if (bioAndMathModelKeys != null) {
        sortedBioAndMathModelKeys = bioAndMathModelKeys.clone();
        Arrays.sort(sortedBioAndMathModelKeys, keyValueCpmparator);
    }
    for (int i = 0; i < users.length; i++) {
        User user = users[i];
        BioModelInfo[] bioModelInfos0 = dbServerImpl.getBioModelInfos(user, false);
        MathModelInfo[] mathModelInfos0 = dbServerImpl.getMathModelInfos(user, false);
        if (lg.isTraceEnabled())
            lg.trace("Testing user '" + user + "'");
        Vector<VCDocumentInfo> userBioAndMathModelInfoV = new Vector<VCDocumentInfo>();
        userBioAndMathModelInfoV.addAll(Arrays.asList(bioModelInfos0));
        userBioAndMathModelInfoV.addAll(Arrays.asList(mathModelInfos0));
        // 
        for (int j = 0; j < userBioAndMathModelInfoV.size(); j++) {
            // 
            // if certain Bio or Math models are requested, then filter all else out
            // 
            VCDocumentInfo documentInfo = userBioAndMathModelInfoV.elementAt(j);
            KeyValue versionKey = documentInfo.getVersion().getVersionKey();
            if (sortedBioAndMathModelKeys != null) {
                int srch = Arrays.binarySearch(sortedBioAndMathModelKeys, versionKey, keyValueCpmparator);
                if (srch < 0) {
                    continue;
                }
            }
            if (!(documentInfo instanceof BioModelInfo)) {
                continue;
            }
            // 
            if (skipHash.contains(versionKey)) {
                System.out.println("skipping " + (documentInfo instanceof BioModelInfo ? "BioModel" : "MathModel") + " with key '" + versionKey + "'");
                continue;
            }
            try {
                // 
                // read in the BioModel and MathModel from the database
                // 
                VCDocument vcDocumentFromDBCache = null;
                BigString vcDocumentXMLFromDBCache = null;
                try {
                    long startTime = System.currentTimeMillis();
                    if (documentInfo instanceof BioModelInfo) {
                        vcDocumentXMLFromDBCache = new BigString(dbServerImpl.getServerDocumentManager().getBioModelXML(new QueryHashtable(), user, versionKey, false));
                        vcDocumentFromDBCache = XmlHelper.XMLToBioModel(new XMLSource(vcDocumentXMLFromDBCache.toString()));
                    } else {
                        vcDocumentXMLFromDBCache = new BigString(dbServerImpl.getServerDocumentManager().getMathModelXML(new QueryHashtable(), user, versionKey, false));
                        vcDocumentFromDBCache = XmlHelper.XMLToMathModel(new XMLSource(vcDocumentXMLFromDBCache.toString()));
                    }
                    if (bUpdateDatabase && testFlag.equals(MathVerifier.MV_LOAD_XML)) {
                        updateLoadModelsStatTable_LoadTest(System.currentTimeMillis() - startTime, versionKey, null);
                    }
                } catch (Exception e) {
                    lg.error(e.getMessage(), e);
                    if (bUpdateDatabase && testFlag.equals(MathVerifier.MV_LOAD_XML)) {
                        updateLoadModelsStatTable_LoadTest(0, versionKey, e);
                    }
                }
                if (testFlag.equals(MathVerifier.MV_LOAD_XML)) {
                    // 
                    if (vcDocumentXMLFromDBCache != null) {
                        testDocumentLoad(bUpdateDatabase, user, documentInfo, vcDocumentFromDBCache);
                    }
                } else if (testFlag.equals(MathVerifier.MV_DEFAULT)) {
                    // 
                    if (vcDocumentFromDBCache instanceof BioModel) {
                        BioModel bioModel = (BioModel) vcDocumentFromDBCache;
                        checkMathForBioModel(vcDocumentXMLFromDBCache, bioModel, user, bUpdateDatabase);
                    }
                }
            } catch (Throwable e) {
                // exception in whole BioModel
                lg.error(e.getMessage(), e);
            // can't update anything in database, since we don't know what simcontexts are involved
            }
        }
    }
}
Also used : QueryHashtable(cbit.sql.QueryHashtable) KeyValue(org.vcell.util.document.KeyValue) User(org.vcell.util.document.User) VCDocument(org.vcell.util.document.VCDocument) BioModelInfo(org.vcell.util.document.BioModelInfo) MathModelInfo(org.vcell.util.document.MathModelInfo) BigString(org.vcell.util.BigString) PropertyVetoException(java.beans.PropertyVetoException) MatrixException(cbit.vcell.matrix.MatrixException) ModelException(cbit.vcell.model.ModelException) ObjectNotFoundException(org.vcell.util.ObjectNotFoundException) SQLException(java.sql.SQLException) XmlParseException(cbit.vcell.xml.XmlParseException) DataAccessException(org.vcell.util.DataAccessException) ExpressionException(cbit.vcell.parser.ExpressionException) MappingException(cbit.vcell.mapping.MappingException) MathException(cbit.vcell.math.MathException) VCDocumentInfo(org.vcell.util.document.VCDocumentInfo) BioModel(cbit.vcell.biomodel.BioModel) Vector(java.util.Vector) XMLSource(cbit.vcell.xml.XMLSource)

Example 14 with VCDocumentInfo

use of org.vcell.util.document.VCDocumentInfo in project vcell by virtualcell.

the class DbDriver method curate.

/**
 * Insert the method's description here.
 * Creation date: (5/23/2006 10:44:52 AM)
 */
public static VCDocumentInfo curate(CurateSpec curateSpec, Connection con, User user, DatabaseSyntax dbSyntax) throws DataAccessException, SQLException {
    VersionableType vType = null;
    if (curateSpec.getVCDocumentInfo() instanceof BioModelInfo) {
        vType = VersionableType.BioModelMetaData;
    } else if (curateSpec.getVCDocumentInfo() instanceof MathModelInfo) {
        vType = VersionableType.MathModelMetaData;
    } else {
        throw new DataAccessException("Expecting BioModelInfo or MathModelInfo but got type=" + curateSpec.getVCDocumentInfo().getClass().getName());
    }
    KeyValue vKey = curateSpec.getVCDocumentInfo().getVersion().getVersionKey();
    Version dbVersion = getVersionFromKeyValue(con, vType, vKey);
    // Must be owner to curate
    if (!dbVersion.getOwner().compareEqual(user)) {
        throw new PermissionException("Cannot curate " + vType.getTypeName() + " \"" + dbVersion.getName() + "\" (" + vKey + "), not owned by " + user.getName());
    }
    VersionFlag updatedVersionFlag = null;
    if (curateSpec.getCurateType() == CurateSpec.ARCHIVE) {
        if (!dbVersion.getFlag().compareEqual(VersionFlag.Current)) {
            throw new IllegalArgumentException("Only non-archived, non-published documents can be ARCHIVED");
        }
        updatedVersionFlag = VersionFlag.Archived;
    } else if (curateSpec.getCurateType() == CurateSpec.PUBLISH) {
        // Must have PUBLISH rights
        if (!dbVersion.getOwner().isPublisher()) {
            throw new PermissionException("Cannot curate " + vType.getTypeName() + " \"" + dbVersion.getName() + "\" (" + vKey + "), user " + user.getName() + " not granted PUBLISHING rights");
        }
        // Must be ARCHIVED and Public before PUBLISH is allowed
        if (!dbVersion.getFlag().compareEqual(VersionFlag.Archived) || !(dbVersion.getGroupAccess() instanceof GroupAccessAll)) {
            throw new IllegalArgumentException("Only ARCHIVED documents with PUBLIC permission can be PUBLISHED");
        }
        updatedVersionFlag = VersionFlag.Published;
    } else {
        throw new DataAccessException("Expecting CurateType " + CurateSpec.ARCHIVE + "(ARCHIVE) or " + CurateSpec.PUBLISH + "(PUBLISH) but got type=" + curateSpec.getCurateType());
    }
    VersionTable vTable = VersionTable.getVersionTable(vType);
    String set = vTable.versionFlag.getQualifiedColName() + " = " + updatedVersionFlag.getIntValue();
    String cond = vTable.id.getQualifiedColName() + " = " + vKey;
    String sql = DatabasePolicySQL.enforceOwnershipUpdate(user, vTable, set, cond);
    int numRowsProcessed = updateCleanSQL(con, sql);
    // Clear XML
    if (vType.equals(VersionableType.BioModelMetaData)) {
        updateCleanSQL(con, "DELETE FROM " + BioModelXMLTable.table.getTableName() + " WHERE " + BioModelXMLTable.table.bioModelRef.getQualifiedColName() + " = " + vKey.toString());
    } else if (vType.equals(VersionableType.MathModelMetaData)) {
        updateCleanSQL(con, "DELETE FROM " + MathModelXMLTable.table.getTableName() + " WHERE " + MathModelXMLTable.table.mathModelRef.getQualifiedColName() + " = " + vKey.toString());
    }
    VCDocumentInfo dbVCDocumentInfo = (VCDocumentInfo) getVersionableInfos(con, user, vType, false, vKey, false, dbSyntax).elementAt(0);
    return dbVCDocumentInfo;
}
Also used : PermissionException(org.vcell.util.PermissionException) KeyValue(org.vcell.util.document.KeyValue) BioModelInfo(org.vcell.util.document.BioModelInfo) MathModelInfo(org.vcell.util.document.MathModelInfo) VersionableType(org.vcell.util.document.VersionableType) VersionFlag(org.vcell.util.document.VersionFlag) GroupAccessAll(org.vcell.util.document.GroupAccessAll) Version(org.vcell.util.document.Version) VersionableTypeVersion(org.vcell.util.document.VersionableTypeVersion) VCDocumentInfo(org.vcell.util.document.VCDocumentInfo) DataAccessException(org.vcell.util.DataAccessException)

Example 15 with VCDocumentInfo

use of org.vcell.util.document.VCDocumentInfo in project vcell by virtualcell.

the class DatabaseWindowManager method comparePreviousEdition.

/**
 * Comment
 */
public void comparePreviousEdition() {
    // 
    if (getPanelSelection() == null) {
        PopupGenerator.showErrorDialog(this, "Error Comparing documents : No first document selected");
        return;
    }
    VCDocumentInfo thisDocumentInfo = getPanelSelection();
    // 
    // Get the previous version of the documentInfo
    // 
    VCDocumentInfo[] documentVersionsList = null;
    try {
        documentVersionsList = getDocumentVersionDates(thisDocumentInfo);
    } catch (DataAccessException e) {
        PopupGenerator.showErrorDialog(this, "Error accessing second document!");
    }
    if (documentVersionsList == null || documentVersionsList.length == 0) {
        PopupGenerator.showErrorDialog(this, "Error Comparing documents : Not Enough Versions to Compare!");
        return;
    }
    // 
    // Obtaining the previous version of the current biomodel. Set the previousBioModelInfo to
    // the first version in the bioModelVersionList. Then compare all the versions in the list
    // with the previousBioModelInfo to see if any of them are before previousBioModelInfo
    // datewise. If so, update previousBioModelInfo. The biomodelinfo stored in previousBioModelInfo
    // when it comes out of the loop is the previous version of the biomodel.
    // 
    VCDocumentInfo previousDocumentInfo = documentVersionsList[0];
    boolean bPrevious = false;
    for (int i = 0; i < documentVersionsList.length; i++) {
        if (documentVersionsList[i].getVersion().getDate().before(thisDocumentInfo.getVersion().getDate())) {
            bPrevious = true;
            previousDocumentInfo = documentVersionsList[i];
        } else {
            break;
        }
    }
    if (previousDocumentInfo.equals(documentVersionsList[0]) && !bPrevious) {
        PopupGenerator.showErrorDialog(this, "Current Version is the oldest! Choose another Version or Model to compare!");
        return;
    }
    // Check if both document types are of the same kind. If not, throw an error.
    if (((thisDocumentInfo instanceof BioModelInfo) && !(previousDocumentInfo instanceof BioModelInfo)) || ((thisDocumentInfo instanceof MathModelInfo) && !(previousDocumentInfo instanceof MathModelInfo)) || ((thisDocumentInfo instanceof GeometryInfo) && !(previousDocumentInfo instanceof GeometryInfo))) {
        PopupGenerator.showErrorDialog(this, "Error Comparing documents : The two documents are not of the same type!");
        return;
    }
    // Now that we have both the document versions to be compared, do the comparison and display the result
    compareWithOther(previousDocumentInfo, thisDocumentInfo);
}
Also used : VCDocumentInfo(org.vcell.util.document.VCDocumentInfo) BioModelInfo(org.vcell.util.document.BioModelInfo) GeometryInfo(cbit.vcell.geometry.GeometryInfo) MathModelInfo(org.vcell.util.document.MathModelInfo) DataAccessException(org.vcell.util.DataAccessException)

Aggregations

VCDocumentInfo (org.vcell.util.document.VCDocumentInfo)27 DataAccessException (org.vcell.util.DataAccessException)15 BioModelInfo (org.vcell.util.document.BioModelInfo)15 MathModelInfo (org.vcell.util.document.MathModelInfo)14 GeometryInfo (cbit.vcell.geometry.GeometryInfo)10 VCDocument (org.vcell.util.document.VCDocument)8 UserCancelException (org.vcell.util.UserCancelException)7 Vector (java.util.Vector)6 KeyValue (org.vcell.util.document.KeyValue)6 PropertyVetoException (java.beans.PropertyVetoException)5 Hashtable (java.util.Hashtable)5 UtilCancelException (org.vcell.util.UtilCancelException)5 ImageException (cbit.image.ImageException)4 AsynchClientTask (cbit.vcell.client.task.AsynchClientTask)4 GeometryException (cbit.vcell.geometry.GeometryException)4 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 DataFormatException (java.util.zip.DataFormatException)4 ObjectNotFoundException (org.vcell.util.ObjectNotFoundException)4 DocumentWindowManager (cbit.vcell.client.DocumentWindowManager)3