private void validateActionAtEnd(Artifact actionArt) throws OseeCoreException {
    resultData.log("\nValidating End...");
    // Ensure event service is connected
    if (!OseeEventManager.isEventManagerConnected()) {
      resultData.logError("Remote Event Service is not connected");
      return;
    }
    resultData.log("Remote Event Service connected");

    // Validate values
    TeamWorkFlowArtifact teamArt = ActionManager.getFirstTeam(actionArt);
    testEquals(
        "Description",
        "description 4",
        teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null));
    testEquals("Change Type", ChangeType.Support, ChangeTypeUtil.getChangeType(teamArt));
    testEquals(
        "Priority", "3", teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null));
    testEquals(
        "Validation Required",
        "false",
        String.valueOf(teamArt.getSoleAttributeValue(AtsAttributeTypes.ValidationRequired, null)));

    IAtsVersion verArt = AtsVersionService.get().getTargetedVersion(teamArt);
    String expectedTargetedVersion;
    if (verArt != null) {
      expectedTargetedVersion = verArt.toString();
    } else {
      expectedTargetedVersion = "not set";
    }
    testEquals("Targeted Version", expectedTargetedVersion, "2.5.7");
    testEquals("State", TeamState.Analyze.getName(), teamArt.getStateMgr().getCurrentStateName());
  }
 private void testEquals(String name, Object expected, Object actual) {
   if (!expected.equals(actual)) {
     resultData.logError(
         String.format("Error: [%s] - expected [%s] actual[%s]", name, expected, actual));
   } else {
     resultData.log(
         String.format("Valid: [%s] - expected [%s] actual[%s]", name, expected, actual));
   }
 }
  private void runDestinationTestEnd(String ttNum) throws OseeCoreException {
    String title = getName() + " - Destination Client Test - End";
    String actionTitle = "tt " + ttNum;
    resultData.log("Running " + title);

    Artifact actionArt =
        ArtifactQuery.getArtifactFromTypeAndName(
            AtsArtifactTypes.Action, actionTitle, AtsUtil.getAtsBranch());

    if (actionArt == null) {
      resultData.logError(String.format("Couldn't load Action named [%s]", actionTitle));
    } else {
      resultData.log("Loaded Action " + actionArt);
      AtsUtil.openATSAction(actionArt, AtsOpenOption.OpenOneOrPopupSelect);
    }
    validateActionAtEnd(actionArt);
    XResultDataUI.report(resultData, title);
  }
 public static IStatus runIt(
     IProgressMonitor monitor,
     String jobName,
     Collection<TeamWorkFlowArtifact> teamArts,
     IAttributeType attributeType) {
   XResultData rd = new XResultData();
   try {
     if (teamArts.isEmpty()) {
       throw new OseeStateException("No Actions/Workflows Specified");
     }
     retrieveData(monitor, teamArts, attributeType, rd);
     if (rd.toString().equals("")) {
       rd.log("No Problems Found");
     }
     final String html =
         XResultDataUI.getReport(rd, jobName)
             .getManipulatedHtml(Arrays.asList(Manipulations.NONE));
     final String title = jobName;
     Displays.pendInDisplayThread(
         new Runnable() {
           @Override
           public void run() {
             Result result = new HtmlExportTable(title, html, true, false).exportCsv();
             if (result.isFalse()) {
               AWorkbench.popup(result);
               return;
             }
             AWorkbench.popup(
                 title,
                 "Completed "
                     + title
                     + "\n\nFile saved to "
                     + System.getProperty("user.home")
                     + File.separator
                     + "table.csv");
           }
         });
     monitor.done();
     return Status.OK_STATUS;
   } catch (Exception ex) {
     OseeLog.log(Activator.class, Level.SEVERE, ex);
     return new Status(IStatus.ERROR, Activator.PLUGIN_ID, -1, "Failed", ex);
   }
 }
  private void validateActionAtStart(Artifact actionArt) throws OseeCoreException {
    resultData.log("\nValidating Start...");
    // Ensure event service is connected
    if (!OseeEventManager.isEventManagerConnected()) {
      resultData.logError("Remote Event Service is not connected");
      return;
    }
    resultData.log("Remote Event Service connected");

    // Validate values
    TeamWorkFlowArtifact teamArt = ActionManager.getFirstTeam(actionArt);
    testEquals(
        "Description",
        "description",
        teamArt.getSoleAttributeValue(AtsAttributeTypes.Description, null));
    testEquals("Change Type", ChangeType.Improvement, ChangeTypeUtil.getChangeType(teamArt));
    testEquals(
        "Priority", "1", teamArt.getSoleAttributeValue(AtsAttributeTypes.PriorityType, null));
  }
  /** used recursively when originally passed a directory, thus an array of files is accepted */
  private static void retrieveData(
      IProgressMonitor monitor,
      Collection<TeamWorkFlowArtifact> teamArts,
      IAttributeType attributeType,
      XResultData rd)
      throws OseeCoreException {
    monitor.subTask("Retrieving Actions");

    int x = 1;
    rd.addRaw(AHTML.beginMultiColumnTable(95));
    rd.addRaw(
        AHTML.addHeaderRowMultiColumnTable(
            new String[] {"HRID", "Bulld", "UI", attributeType.getName(), "RPCR", "Change"}));
    for (TeamWorkFlowArtifact teamArt : teamArts) {
      String rcprId = teamArt.getSoleAttributeValue(AtsAttributeTypes.LegacyPcrId, "");
      String result =
          String.format(
              "Processing %s/%s RPCR %s for \"%s\"",
              x, teamArts.size(), rcprId, teamArt.getTeamDefinition().getName());
      monitor.subTask(result);
      rd.log("\nRPCR " + rcprId);
      for (ICommitConfigArtifact commitConfigArt :
          AtsBranchManagerCore.getConfigArtifactsConfiguredToCommitTo(teamArt)) {
        processTeam(
            teamArt,
            BranchManager.getBranchByGuid(commitConfigArt.getBaslineBranchGuid()).getShortName(),
            attributeType,
            commitConfigArt,
            rd);
      }
      x++;

      //          System.err.println("Developmental purposes only, don't release with this");
      //          if (x >= 5)
      //          break;
    }
    rd.addRaw(AHTML.endMultiColumnTable());
  }
 private static void processTeam(
     TeamWorkFlowArtifact teamArt,
     String buildId,
     IAttributeType attributeType,
     ICommitConfigArtifact commitConfigArt,
     XResultData rd)
     throws OseeCoreException {
   String rpcrNum = teamArt.getSoleAttributeValue(AtsAttributeTypes.LegacyPcrId, "");
   ChangeData changeData = AtsBranchManager.getChangeData(teamArt, commitConfigArt);
   for (Artifact modArt :
       changeData.getArtifacts(
           KindType.Artifact, ModificationType.NEW, ModificationType.MODIFIED)) {
     List<String> attrStrs = modArt.getAttributesToStringList(attributeType);
     if (attrStrs.isEmpty()) {
       attrStrs.add(EnumeratedAttribute.UNSPECIFIED_VALUE);
     }
     for (String attrStr : attrStrs) {
       rd.addRaw(
           AHTML.addRowMultiColumnTable(
               new String[] {
                 teamArt.getHumanReadableId(),
                 buildId,
                 modArt.getName(),
                 attrStr,
                 rpcrNum,
                 "Content"
               }));
     }
   }
   for (Artifact artChg : changeData.getArtifacts(KindType.Artifact, ModificationType.DELETED)) {
     List<String> attrStrs = artChg.getAttributesToStringList(attributeType);
     if (attrStrs.isEmpty()) {
       attrStrs.add(EnumeratedAttribute.UNSPECIFIED_VALUE);
     }
     for (String attrStr : attrStrs) {
       rd.addRaw(
           AHTML.addRowMultiColumnTable(
               new String[] {
                 teamArt.getHumanReadableId(),
                 buildId,
                 artChg.getName(),
                 attrStr,
                 rpcrNum,
                 "Deleted"
               }));
     }
   }
   for (Artifact artChg :
       changeData.getArtifacts(
           KindType.RelationOnly, ModificationType.NEW, ModificationType.MODIFIED)) {
     List<String> attrStrs = artChg.getAttributesToStringList(attributeType);
     if (attrStrs.isEmpty()) {
       attrStrs.add(EnumeratedAttribute.UNSPECIFIED_VALUE);
     }
     for (String attrStr : attrStrs) {
       rd.addRaw(
           AHTML.addRowMultiColumnTable(
               new String[] {
                 teamArt.getHumanReadableId(),
                 buildId,
                 artChg.getName(),
                 attrStr,
                 rpcrNum,
                 "Relation"
               }));
     }
   }
 }
  private void runClientTest() throws OseeCoreException {
    String title = getName() + " - Destination Client Test";
    resultData.log("Running " + title);
    NewActionJob job = null;
    job =
        new NewActionJob(
            "tt",
            "description",
            ChangeType.Improvement,
            "1",
            null,
            false,
            getActionableItemsByToken(Arrays.asList(atsActionableItem)),
            null,
            null);
    job.setUser(true);
    job.setPriority(Job.LONG);
    job.schedule();
    try {
      job.join();
    } catch (InterruptedException ex) {
      OseeLog.log(Activator.class, Level.SEVERE, ex);
    }

    Artifact actionArt = job.getActionArt();
    resultData.log("Created Action " + actionArt);
    TeamWorkFlowArtifact teamArt = ActionManager.getFirstTeam(actionArt);

    // Make current user assignee for convenience to developer
    teamArt.getStateMgr().addAssignee(AtsClientService.get().getUserAdmin().getCurrentUser());
    teamArt.persist(getClass().getSimpleName());

    validateActionAtStart(actionArt);

    // Wait for destination client to start
    if (!MessageDialog.openConfirm(
        Displays.getActiveShell(),
        getName(),
        "Launch \"Destination Client - Start\" test, enter \""
            + actionArt.getName().replaceFirst("tt ", "")
            + "\" and press Ok")) {
      return;
    }

    int sleepTime = 250;
    makeChanges1(teamArt);
    sleep(sleepTime);
    makeChanges2(teamArt);
    sleep(sleepTime);
    makeChanges3(teamArt);
    sleep(sleepTime);
    makeChanges4(teamArt);
    sleep(sleepTime);
    makeChanges5(teamArt);
    sleep(sleepTime);
    makeChanges6(teamArt);
    sleep(sleepTime);
    makeChanges7(teamArt);
    sleep(sleepTime);

    validateActionAtEnd(actionArt);

    // Wait for destination client to end
    if (!MessageDialog.openConfirm(
        Displays.getActiveShell(),
        getName(),
        "Launch \"Destination Client - End\" test, enter \""
            + actionArt.getName().replaceFirst("tt ", "")
            + "\" and press Ok")) {
      return;
    }

    XResultDataUI.report(resultData, title);
  }