/** Refreshes the AutMainList of the Project. */
 private void refreshAutMainList() throws ProjectDeletedException {
   try {
     GeneralStorage.getInstance()
         .getMasterSession()
         .refresh(GeneralStorage.getInstance().getProject().getAutCont());
   } catch (EntityNotFoundException enfe) {
     // Occurs if any Object Mapping information has been deleted while
     // the Project Properties were being edited.
     // Refresh the entire master session to ensure that AUT settings
     // and Object Mappings are in sync
     GeneralStorage.getInstance().reloadMasterSession(new NullProgressMonitor());
   }
 }
 /**
  * @param ts current testsuite
  * @return if testsuite meets general requirements for execution
  */
 private boolean areGeneralRequirementsAchieved(ITestSuitePO ts) {
   Locale workingLanguage = WorkingLanguageBP.getInstance().getWorkingLanguage();
   return workingLanguage != null
       && AutAgentRegistration.getRunningAuts(GeneralStorage.getInstance().getProject(), null)
           .keySet()
           .contains(ts.getAut());
 }
 /** @return the displayable lanugages */
 public List<Locale> getDisplayableLanguages() {
   IProjectPO currentProject = GeneralStorage.getInstance().getProject();
   if (currentProject != null) {
     return currentProject.getLangHelper().getLanguageList();
   }
   List<Locale> emptyList = Collections.emptyList();
   return emptyList;
 }
 /** @return current WorkingLanguage or null! */
 public Locale getWorkingLanguage() {
   Locale workingLang = null;
   IProjectPO project = GeneralStorage.getInstance().getProject();
   if (project != null) {
     workingLang = (m_currentLanguage != null) ? m_currentLanguage : project.getDefaultLanguage();
   }
   return workingLang;
 }
 /** {@inheritDoc} */
 public void handleProjectStateChanged(ProjectState state) {
   if (ProjectState.prop_modified.equals(state)) {
     List<Locale> langs =
         GeneralStorage.getInstance().getProject().getLangHelper().getLanguageList();
     if (m_currentLanguage != null && !langs.contains(m_currentLanguage)) {
       m_currentLanguage = null;
       setCurrentLanguage(getWorkingLanguage());
     }
   }
 }
  /** {@inheritDoc} */
  protected IContributionItem[] getContributionItems() {
    List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();

    if (GeneralStorage.getInstance().getProject() != null) {
      for (AutIdentifier autId : RunningAutBP.getListOfDefinedRunningAuts()) {
        contributionItems.add(createItem(autId));
      }
    }

    return contributionItems.toArray(new IContributionItem[contributionItems.size()]);
  }
  /** {@inheritDoc} */
  public List<ITestDataCubePO> getAll() {
    IProjectPO project = GeneralStorage.getInstance().getProject();

    // Try to load the Test Suites of the project
    try {
      return Arrays.asList(TestDataCubeBP.getAllTestDataCubesFor(project));
    } catch (NullPointerException exc) {
      // That means that there are none so return an empty list
      return Collections.emptyList();
    }
  }
 /** {@inheritDoc} */
 public void run(IMarker marker) {
   INodePO node = NodePM.getNode(GeneralStorage.getInstance().getProject().getId(), m_nodeGUID);
   if (node != null) {
     while (!(NodeBP.isEditable(node)
         && (node instanceof ITestSuitePO
             || node instanceof ITestJobPO
             || node instanceof ISpecTestCasePO))) {
       node = node.getParentNode();
     }
     AbstractOpenHandler.openEditor(node);
   }
 }
 /** @return all startable testsuites */
 public SortedSet<ITestSuitePO> getAllTestSuites() {
   SortedSet<ITestSuitePO> testSuites = new TreeSet<ITestSuitePO>();
   IProjectPO project = GeneralStorage.getInstance().getProject();
   if (project != null) {
     List<ITestSuitePO> tsInProject = TestSuiteBP.getListOfTestSuites(project);
     for (ITestSuitePO ts : tsInProject) {
       if (isTestSuiteStartable(ts)) {
         testSuites.add(ts);
       }
     }
   }
   return testSuites;
 }
 /** {@inheritDoc} */
 public String getText(Object element) {
   if (element instanceof AutIdentifier) {
     AutIdentifier autId = ((AutIdentifier) element);
     IProjectPO currentProject = GeneralStorage.getInstance().getProject();
     String displayText = autId.getExecutableName();
     if (currentProject != null
         && AutAgentRegistration.getAutForId(autId, currentProject) != null) {
       return displayText;
     }
     return displayText + " (unknown AUT ID)"; // $NON-NLS-1$
   }
   return super.getText(element);
 }
Exemple #11
0
 /**
  * clears the content of client
  *
  * @param alsoProjectIndependent whether also project independent editors should be closed such as
  *     the testresultviewer
  */
 public static void clearClient(final boolean alsoProjectIndependent) {
   final DataEventDispatcher ded = DataEventDispatcher.getInstance();
   TestExecution.getInstance().stopExecution();
   GeneralStorage gs = GeneralStorage.getInstance();
   if (gs != null && Persistor.instance() != null) {
     IProjectPO currProj = gs.getProject();
     if (currProj != null) {
       gs.nullProject();
     }
     gs.reset();
   }
   Plugin.getDisplay()
       .syncExec(
           new Runnable() {
             public void run() {
               Plugin.clearAllEditorsClipboard();
               final ProblemsBP problemsBP = ProblemsBP.getInstance();
               problemsBP.clearOldProblems();
               problemsBP.cleanupProblems();
               TestExecutionContributor.getInstance().getClientTest().resetToTesting();
               ded.fireRecordModeStateChanged(RecordModeState.notRunning);
               ded.fireOMStateChanged(OMState.notRunning);
               ded.fireProjectStateChanged(ProjectState.closed);
               Plugin.closeAllOpenedJubulaEditors(alsoProjectIndependent);
               ded.fireTestresultChanged(TestresultState.Clear);
               setTreeViewerInputNull(Constants.TESTRE_ID);
               for (TestCaseBrowser tcb : MultipleTCBTracker.getInstance().getOpenTCBs()) {
                 tcb.getTreeViewer().setInput(null);
               }
               setTreeViewerInputNull(Constants.TS_BROWSER_ID);
               setTreeViewerInputNull(Constants.COMPNAMEBROWSER_ID);
               clearAnalyzeResultPage();
             }
           });
   ded.fireProjectLoadedListener(new NullProgressMonitor());
 }
 @SuppressWarnings("synthetic-access")
 public void handleDataChanged(
     IPersistentObject po, DataState dataState, UpdateState updateState) {
   if (updateState == UpdateState.onlyInEditor) {
     return;
   }
   if (dataState == DataState.Deleted
       && po instanceof IProjectPO
       && GeneralStorage.getInstance().getProject() == null) {
     m_isProjectLoaded = false;
     m_lastUsedTestSuite = null;
     m_isAutStarted = false;
     m_atLeastOneTsAvailable = false;
     updateTestSuiteButtonState(false);
   }
 }
    /** {@inheritDoc} */
    public void run(IProgressMonitor monitor) {
      progressMonitor = monitor;
      IProjectPO project = GeneralStorage.getInstance().getProject();
      progressMonitor.setTaskName(Messages.PreparingConvertProjectTaskName);
      String basePath =
          genPath
              + StringConstants.SLASH
              + genPackage.replace(StringConstants.DOT, StringConstants.SLASH);
      uuidToNodeInfoMap = new HashMap<String, NodeInfo>();
      NodeInfo.setUuidToNodeInfoMap(uuidToNodeInfoMap);
      projects = new HashSet<IProjectPO>();
      workUnits = 0;

      if (project != null) {
        defaultToolkit = determineDefaultToolkit(project);
        addProjectsToConvert(project);

        try {
          for (IProjectPO p : projects) {
            determineClassNamesForProject(p, basePath);
          }
          progressMonitor.beginTask(Messages.PreparingConvertProjectTaskName, workUnits);
          for (IProjectPO p : projects) {
            progressMonitor.setTaskName(NLS.bind(Messages.ConvertProjectTaskName, p.getName()));
            handleProject(p, basePath);
          }
        } catch (StopConversionException e) {
          progressMonitor.setCanceled(true);
          if (!e.wasManuallyTriggered()) {
            ErrorHandlingUtil.createMessageDialog(
                new JBException(e.getMessage(), e, MessageIDs.E_CONVERSION_ABORTED_ERROR));
          }
          return;
        }
      }
      progressMonitor.done();
    }
  /**
   * Creates a new project, stops a started AUT, closes all opened editors.
   *
   * @param newProjectName the name for this project
   * @param monitor The progress monitor for this potentially long-running operation.
   * @throws InterruptedException if the operation is canceled.
   */
  private void createNewProject(final String newProjectName, IProgressMonitor monitor)
      throws InterruptedException {

    Plugin.closeAllOpenedJubulaEditors(false);
    m_newProject.setIsReusable(m_projectSettingWizardPage.isProjectReusable());
    m_newProject.setIsProtected(m_projectSettingWizardPage.isProjectProtected());
    if (m_autMain.getName() == null || StringConstants.EMPTY.equals(m_autMain.getName())) {
      m_newProject.removeAUTMain(m_autMain);
    }
    if (m_autConfig.getName() == null || StringConstants.EMPTY.equals(m_autConfig.getName())) {

      m_autMain.removeAutConfig(m_autConfig);
    }
    ParamNameBPDecorator paramNameMapper = new ParamNameBPDecorator(ParamNameBP.getInstance());
    final IWritableComponentNameMapper compNamesMapper =
        new ProjectComponentNameMapper(new ComponentNamesDecorator(null), m_newProject);
    List<INameMapper> mapperList = new ArrayList<INameMapper>();
    List<IWritableComponentNameMapper> compNameCacheList =
        new ArrayList<IWritableComponentNameMapper>();
    addUnboundModules(m_newProject);
    mapperList.add(paramNameMapper);
    compNameCacheList.add(compNamesMapper);
    try {
      GeneralStorage.getInstance().reset();
      ProjectPM.attachProjectToROSession(
          m_newProject, newProjectName, mapperList, compNameCacheList, monitor);
    } catch (PMSaveException e) {
      PMExceptionHandler.handlePMExceptionForMasterSession(
          new PMSaveException(e.getMessage(), MessageIDs.E_CREATE_NEW_PROJECT_FAILED));
    } catch (PMException e) {
      PMExceptionHandler.handlePMExceptionForMasterSession(e);
    } catch (ProjectDeletedException e) {
      PMExceptionHandler.handleProjectDeletedException();
    } catch (InterruptedException ie) {
      throw ie;
    }
  }
  /** {@inheritDoc} */
  public boolean performOk() {
    try {
      if (!m_oldProjectName.equals(m_newProjectName)) {
        if (ProjectPM.doesProjectNameExist(m_newProjectName)) {

          ErrorHandlingUtil.createMessageDialog(
              MessageIDs.E_PROJECTNAME_ALREADY_EXISTS, new Object[] {m_newProjectName}, null);
          return false;
        }
      }
      if (m_isReusableCheckbox != null) {
        getProject().setIsReusable(m_isReusableCheckbox.getSelection());
      }
      if (m_isProtectedCheckbox != null) {
        getProject().setIsProtected(m_isProtectedCheckbox.getSelection());
      }
      storeAutoTestResultCleanup();

      if (!m_oldProjectName.equals(m_newProjectName)) {
        ProjectNameBP.getInstance()
            .setName(getEditSupport().getSession(), getProject().getGuid(), m_newProjectName);
      }
      fireOkPressed();
      Set<IReusedProjectPO> origReused =
          ((IProjectPropertiesPO) getEditSupport().getOriginal()).getUsedProjects();
      Set<IReusedProjectPO> newReused =
          new HashSet<IReusedProjectPO>(
              ((IProjectPropertiesPO) getEditSupport().getWorkVersion()).getUsedProjects());
      newReused.removeAll(origReused);
      getEditSupport().saveWorkVersion();
      refreshAutMainList();
      DataEventDispatcher.getInstance().fireProjectStateChanged(ProjectState.prop_modified);
      for (IReusedProjectPO reused : newReused) {
        try {
          IProjectPO reusedProject = ProjectPM.loadReusedProject(reused);
          if (reusedProject != null) {
            // incomplete database, see https://bxapps.bredex.de/bugzilla/show_bug.cgi?id=854
            ComponentNamesBP.getInstance().refreshNames(reusedProject.getId());
          }
        } catch (JBException e) {
          // Could not refresh Component Name information for
          // reused project. Log the exception.
          log.error(Messages.ErrorWhileRetrievingReusedProjectInformation, e);
        }
      }
      // FIXME zeb This updates the Test Case Browser. Once we have separate
      //           EditSupports for each property page, then we can use
      //           "real" ReusedProjectPOs instead of a placeholder.
      DataEventDispatcher.getInstance()
          .fireDataChangedListener(
              PoMaker.createReusedProjectPO("1", 1, 1), // $NON-NLS-1$
              DataState.ReuseChanged,
              UpdateState.notInEditor);
      DataEventDispatcher.getInstance()
          .fireDataChangedListener(
              GeneralStorage.getInstance().getProject(),
              DataState.Renamed,
              UpdateState.notInEditor);
      CompletenessBP.getInstance().completeProjectCheck();
    } catch (PMException e) {
      ErrorHandlingUtil.createMessageDialog(e, null, null);
    } catch (ProjectDeletedException e) {
      PMExceptionHandler.handleProjectDeletedException();
    } catch (IncompatibleTypeException ite) {
      ErrorHandlingUtil.createMessageDialog(ite, ite.getErrorMessageParams(), null);
    }

    return true;
  }
  /** {@inheritDoc} */
  protected void initPropDescriptor() {
    if (!getPropertyDescriptorList().isEmpty()) {
      clearPropertyDescriptors();
    }

    // TestCase Name
    if (m_namePropDesc == null) {
      m_namePropDesc =
          new TextPropertyDescriptor(new ExecNameController(), P_REFERNCE_DISPLAY_NAME);
    }
    addPropertyDescriptor(m_namePropDesc);

    // Specification Name
    if (m_specNamePropDesc == null) {
      JBPropertyDescriptor propDes =
          new JBPropertyDescriptor(new SpecNameController(), P_SPECNAME_DISPLAY_NAME);
      propDes.setLabelProvider(new DisabledLabelProvider());
      m_specNamePropDesc = propDes;
    }
    addPropertyDescriptor(m_specNamePropDesc);

    // Comment
    if (m_commentPropDesc == null) {
      m_commentPropDesc =
          new TextPropertyDescriptor(new CommentController(), P_ELEMENT_DISPLAY_COMMENT);
    }
    addPropertyDescriptor(m_commentPropDesc);

    // Data Source
    addPropertyDescriptor(
        getDataSourcePropertyDescr(new ExecTestCaseTestDataSourceController(this)));

    // External data file
    if (m_extDataPropDesc == null) {
      m_extDataPropDesc =
          new TextPropertyDescriptor(new ExternalDataController(this), P_ELEMENT_DISPLAY_DATEFILE);
      m_extDataPropDesc.setCategory(P_TESTDATA_CAT);
    }
    addPropertyDescriptor(m_extDataPropDesc);

    // Referenced Test Data Cube
    if (m_referencedCubePropDesc == null) {
      IProjectPO activeProject = GeneralStorage.getInstance().getProject();
      IContentProposalProvider dataCubeRefProposalProvider = null;
      IValidator dataCubeRefValidator = null;

      if (activeProject != null) {
        dataCubeRefProposalProvider =
            new TestDataCubeRefContentProposalProvider(
                activeProject, (IParameterInterfacePO) getPoNode());
        dataCubeRefValidator = new TestDataCubeReferenceValidator(activeProject);
      }

      m_referencedCubePropDesc =
          new ContentAssistedTextPropertyDescriptor(
              new ReferenceTestDataController(this),
              P_ELEMENT_DISPLAY_REFDATA,
              dataCubeRefProposalProvider,
              dataCubeRefValidator,
              ContentProposalAdapter.PROPOSAL_REPLACE);
      m_referencedCubePropDesc.setCategory(P_TESTDATA_CAT);
    }
    addPropertyDescriptor(m_referencedCubePropDesc);

    // Parameters
    addPropertyDescriptor(createParamDescriptors());
  }
/**
 * This validator checks a list of Test Cases before it can be used to change the CTDS column usage.
 *
 * @author BREDEX GmbH
 */
public class TestCasesValidator {

  /** The current project ID. */
  private Long m_projectId = GeneralStorage.getInstance().getProject().getId();

  /**
   * True, if all Test Cases are using the same Central Test Data Set and this Central Test Data Set
   * has got one or more columns, otherwise false.
   */
  private boolean m_isReferencedCtdsOk = false;

  /** The list of referenced Test Cases with different CTDS. */
  private List<IExecTestCasePO> m_execsWithDifferentCTDS = new ArrayList<IExecTestCasePO>();

  /** The list of Test Cases with a specification not defined in the current project. */
  private List<ITestCasePO> m_testCasesWithSpecNotDefinedInCurrentProject =
      new ArrayList<ITestCasePO>();

  /** The list of valid Test Cases. */
  private List<ITestCasePO> m_validTestCases = new ArrayList<ITestCasePO>();

  /**
   * Creates the distinct invalid and valid lists from the given list of Test Cases.
   *
   * @param testCases The list of Test Cases to check.
   * @see #getExecsWithDifferentCTDS()
   * @see #getTCsWithSpecNotDefinedInCurrentProject()
   * @see #getValidTestCases()
   */
  public TestCasesValidator(Collection<ITestCasePO> testCases) {
    IParameterInterfacePO dataCube = null;
    for (ITestCasePO testCase : testCases) {
      IParameterInterfacePO currentDataCube = testCase.getReferencedDataCube();
      if (dataCube == null && currentDataCube != null) {
        dataCube = currentDataCube;
        if (dataCube.getParameterListSize() == 0) {
          return;
        }
      } else if (currentDataCube == null || !dataCube.equals(currentDataCube)) {
        return;
      }
      boolean isValid = false;
      if (testCase instanceof IExecTestCasePO) {
        IExecTestCasePO exec = (IExecTestCasePO) testCase;
        isValid = checkSpecDefinedInCurrentProject(exec) && checkHasOnlyOneCTDS(exec);
      } else {
        // should be a specification Test Case
        ISpecTestCasePO spec = (ISpecTestCasePO) testCase;
        isValid = checkSpecDefinedInCurrentProject(spec);
      }
      if (isValid) {
        m_validTestCases.add(testCase);
      }
    }
    m_isReferencedCtdsOk = true;
  }

  /**
   * @return True, if all Test Cases are using the same Central Test Data Set and this Central Test
   *     Data Set has got one or more columns, otherwise false.
   */
  public boolean isReferencedDataCubeOk() {
    return m_isReferencedCtdsOk;
  }

  /**
   * Add invalid Test Case automatically to list returned by {@link
   * #getTCsWithSpecNotDefinedInCurrentProject()}.
   *
   * @param exec The execution Test Case.
   * @return True, if the specification Test Case of the given execution Test Case is defined in the
   *     current project, otherwise false.
   */
  private boolean checkSpecDefinedInCurrentProject(IExecTestCasePO exec) {
    if (m_projectId.equals(exec.getSpecTestCase().getParentProjectId())) {
      return true;
    }
    m_testCasesWithSpecNotDefinedInCurrentProject.add(exec);
    return false;
  }

  /**
   * Add invalid Test Case automatically to list returned by {@link
   * #getTCsWithSpecNotDefinedInCurrentProject()}.
   *
   * @param spec The specification Test Case.
   * @return True, if the specification Test Case is defined in the current project, otherwise
   *     false.
   */
  private boolean checkSpecDefinedInCurrentProject(ISpecTestCasePO spec) {
    if (m_projectId.equals(spec.getParentProjectId())) {
      return true;
    }
    m_testCasesWithSpecNotDefinedInCurrentProject.add(spec);
    return false;
  }

  /** @return The list of Test Cases with a specification not defined in the current project. */
  public List<ITestCasePO> getTCsWithSpecNotDefinedInCurrentProject() {
    return m_testCasesWithSpecNotDefinedInCurrentProject;
  }

  /**
   * Add invalid Test Case automatically to list returned by {@link #getExecsWithDifferentCTDS()}.
   *
   * @param exec The execution Test Case to check.
   * @return True, if the specification Test Case has no CTDS, or it is the same as the CTDS at the
   *     execution Test Case.
   */
  private boolean checkHasOnlyOneCTDS(IExecTestCasePO exec) {
    if (exec.getSpecTestCase().getReferencedDataCube() == null
        || exec.getReferencedDataCube() == exec.getSpecTestCase().getReferencedDataCube()) {
      return true;
    }
    m_execsWithDifferentCTDS.add(exec);
    return false;
  }

  /** @return The list of execution Test Cases with different CTDS. */
  public List<IExecTestCasePO> getExecsWithDifferentCTDS() {
    return m_execsWithDifferentCTDS;
  }

  /**
   * @return True, if all invalid lists are empty, otherwise false. A Test Case is invalid, if the
   *     specification Test Case is not defined in the current project or if the specification of a
   *     referenced Test Case use a different CTDS.
   */
  public boolean areAllTestCasesOk() {
    return m_testCasesWithSpecNotDefinedInCurrentProject.isEmpty()
        && m_execsWithDifferentCTDS.isEmpty();
  }

  /** @return The list of valid Test Cases. */
  public List<ITestCasePO> getInvalidTestCases() {
    List<ITestCasePO> testCases = new ArrayList<ITestCasePO>();
    testCases.addAll(m_testCasesWithSpecNotDefinedInCurrentProject);
    testCases.addAll(m_execsWithDifferentCTDS);
    return testCases;
  }

  /** @return The list of valid Test Cases. */
  public List<ITestCasePO> getValidTestCases() {
    return m_validTestCases;
  }
}