예제 #1
0
  /**
   * Process file revision
   *
   * @param fr file revision
   * @param ch commit history, already populated with artifact history records
   * @param monitor progress monitor
   */
  private void processFileRevision(IFileRevision fr, CommitHistory ch, IProgressMonitor monitor) {
    String commitId = fr.getContentIdentifier();
    String name = fr.getName();
    int lineCount = getLineCount(fr, monitor);

    // create artifact identifier and add it to the existing commit
    ArtifactIdentifier ai = ScoFactory.eINSTANCE.createArtifactIdentifier();
    ai.setCurrentLineCount(lineCount);
    ai.setResourceName(name);

    // add the resource revision identifier to the corresponding commit record
    ArtifactCommit ac = findCommit(ch, commitId);
    if (ac != null) {
      ac.getArtifactIdentifiers().add(ai);
    } else {
      CertWareLog.logWarning(
          String.format("%s %s", "Could not find commit for file", fr.getName()));
    }
  }
예제 #2
0
  /**
   * Process the EGit history associated with a given project.
   *
   * @param selectedProject selected project, presumably an object contribution selection
   * @throws CoreException
   * @throws IOException
   */
  public void processHistory(IProject selectedProject, IProgressMonitor monitor)
      throws CoreException, IOException {

    // find the repository mapping for the project
    // if none found, return
    RepositoryMapping repositoryMapping = RepositoryMapping.getMapping((IResource) selectedProject);
    if (repositoryMapping == null) {
      CertWareLog.logWarning(
          String.format("%s %s", "Missing repository for project", selectedProject.getName()));
      return;
    }

    // build the commit history model, load it from the tree walk
    final CommitHistory commitHistory = ScoFactory.eINSTANCE.createCommitHistory();
    Repository repo = repositoryMapping.getRepository();
    RevWalk revWalk = new RevWalk(repo);
    ObjectId headObject = repo.resolve("HEAD");
    revWalk.markStart(revWalk.parseCommit(headObject));

    final Set<String> repositoryPaths =
        Collections.singleton(repositoryMapping.getRepoRelativePath(selectedProject));
    revWalk.setTreeFilter(PathFilterGroup.createFromStrings(repositoryPaths));

    for (RevCommit commit : revWalk) {
      String commitName = commit.getName();
      ArtifactCommit artifactCommit = ScoFactory.eINSTANCE.createArtifactCommit();
      artifactCommit.setCommitIdentifier(commitName);
      commitHistory.getCommitRecord().add(artifactCommit);
    }

    revWalk.dispose();

    // use the Git provider to find the file history, then converge into the model
    GitProvider provider = (GitProvider) RepositoryProvider.getProvider(selectedProject);
    IFileHistoryProvider fileHistoryProvider = provider.getFileHistoryProvider();
    IResource[] projectMembers = selectedProject.members();

    monitor.beginTask("Processing project resources", projectMembers.length);
    for (IResource resource : projectMembers) {
      processResource(resource, fileHistoryProvider, commitHistory, monitor);
      monitor.worked(1);
      if (monitor.isCanceled()) {
        return;
      }
    }

    // model complete with commit history and associated file sizes
    // write the resulting model to an SCO file
    // expecting preference to have no extension, so add it if necessary
    IPreferenceStore store = Activator.getDefault().getPreferenceStore();
    String fileName = store.getString(PreferenceConstants.P_FILENAME_SCO);
    if (fileName.endsWith(ICertWareConstants.SCO_EXTENSION) == false) {
      fileName = fileName + '.' + ICertWareConstants.SCO_EXTENSION;
    }

    // fully specify the path to the new file given the container project
    final String modelFile =
        selectedProject.getFullPath().toPortableString() + IPath.SEPARATOR + fileName;

    // create the resource in a workspace modify operation
    WorkspaceModifyOperation operation =
        new WorkspaceModifyOperation() {
          @Override
          protected void execute(IProgressMonitor progressMonitor) {
            try {
              // create a resource set and resource for a new file
              ResourceSet resourceSet = new ResourceSetImpl();
              URI fileURI = URI.createPlatformResourceURI(modelFile, true);
              Resource resource = resourceSet.createResource(fileURI);
              resource.getContents().add(commitHistory);

              // save the contents of the resource to the file system
              Map<Object, Object> options = new HashMap<Object, Object>();
              options.put(XMLResource.OPTION_ENCODING, FILE_ENCODING);
              resource.save(options);
            } catch (Exception e) {
              CertWareLog.logError(String.format("%s %s", "Saving SCO file", modelFile), e);
            }
          }
        };

    // modify the workspace
    try {
      operation.run(monitor);
    } catch (Exception e) {
      CertWareLog.logError(
          String.format("%s %s", "Modifying workspace for", selectedProject.getName()), e);
    }

    monitor.done();
  }
예제 #3
0
  /**
   * Production method for computations.
   *
   * @param monitor progress monitor
   * @return CANCEL or OK
   */
  @SuppressWarnings({"unchecked", "rawtypes"})
  public IStatus produce(IProgressMonitor monitor) {
    /** network name for messages */
    String networkName = "undefined"; // $NON-NLS-1$

    try {
      if (initialNetwork == null) {
        cancel();
        CertWareLog.logWarning("Network not defined for calculation");
        view.setWarningMessage(CANCEL_MSG);
        return Status.CANCEL_STATUS;
      }

      if (nodes.isEmpty()) {
        cancel();
        CertWareLog.logWarning("No variable selections available for Pr(e) calculation");
        view.setWarningMessage(CANCEL_MSG);
        return Status.CANCEL_STATUS;
      }

      // network name from loaded file
      networkName = view.getSelectedFile().getName();

      // initialize variables from selections
      Set setPreVariables = new HashSet();
      for (VariableNode v : nodes) {
        if (v.isSelected()) {
          setPreVariables.add(v.getNode());
        }
      }

      // initialize evidence from selections
      HashMap evidence = new HashMap();
      for (VariableNode vn : nodes) {
        for (VariableNodeState vns : vn.states) {
          if (vns.isSelected()) {
            FiniteVariable fv = vn.getNode();
            evidence.put(fv, fv.instance(vns.getStateName()));
          }
        }
      }

      // instantiation formatter
      VariableImpl.setStringifier(AbstractStringifier.VARIABLE_ID);
      monitor.worked(1);

      if (monitor.isCanceled()) {
        CertWareLog.logWarning(CANCEL_MSG);
        view.setWarningMessage(CANCEL_MSG);
        return Status.CANCEL_STATUS;
      }

      /*
         // create a new set of variables and remove those whose evidence have set keys
         Set allVarsMinusEvidence = new HashSet( initialNetwork );
         allVarsMinusEvidence.removeAll( evidence.keySet() );

         // initialize a MapEngine and perform the MPE computation
         MapEngine mpe = new MapEngine( initialNetwork, allVarsMinusEvidence, evidence );
      VariableImpl.setStringifier( AbstractStringifier.VARIABLE_ID );
      */

      // create the dynamator
      JEngineGenerator dynamator = new JEngineGenerator();

      // edit settings
      JoinTreeSettings settings =
          dynamator.getSettings((PropertySuperintendent) initialNetwork, true);

      // define the elimination order heuristic used to create the join tree
      settings.setEliminationHeuristic(EliminationHeuristic.MIN_FILL);

      // create the inference engine
      InferenceEngine engine = dynamator.manufactureInferenceEngine(initialNetwork);

      // set the observations
      try {
        initialNetwork.getEvidenceController().setObservations(evidence);
      } catch (StateNotFoundException e) {
        CertWareLog.logError("Performing Pr(e) query", e);
        view.setErrorMessage(e.getMessage());
        return null;
      }
      ;

      // results
      double score = engine.probability();
      // Map instantiation = engine.getInstance();

      monitor.worked(2);
      if (monitor.isCanceled()) {
        CertWareLog.logWarning(CANCEL_MSG);
        return Status.CANCEL_STATUS;
      }

      // reset marginals
      // clearMarginals();
      setMarginals(engine);

      // update results in view
      LinkedHashMap<String, String> rows = new LinkedHashMap<String, String>();
      rows.put("Pr(e)", getProbability(score));
      view.addResult(rows);

      monitor.worked(1);

    } catch (Exception e) {
      CertWareLog.logError(String.format("%s %s", "Pr(e) query for", networkName), e);
      return Status.CANCEL_STATUS;
    }

    String doneMessage = String.format("%s %s %s", "Pr(e) query for", networkName, "complete.");
    CertWareLog.logInfo(doneMessage);
    return Status.OK_STATUS;
  }