public OutputType processResearcher() throws Exception {
      Researcher researcher = createResearcher();
      researcher.setAffiliation(affiliation);

      final List<String> preStatements = new ArrayList<String>();
      preStatements.add(String.format(REMOVE_DERIVED_DATA, getResearcherURI()));

      String getCnts =
          String.format(
              GET_COAUTHOR_CNTS, getResearcherURI(), researcher.getAffiliation().getURI());
      getSparqlClient()
          .select(
              getCnts,
              new ResultSetConsumer() {
                public void useResultSet(ResultSet rs) throws Exception {
                  if (rs.hasNext()) {
                    QuerySolution qs = rs.next();
                    if (qs.getLiteral("?erc").getInt() > 0 && qs.getLiteral("?cwc").getInt() > 0) {
                      String update =
                          String.format(
                              ADD_COAUTHOR_CNTS,
                              getResearcherURI(),
                              qs.getLiteral("?erc").getInt(),
                              qs.getLiteral("?cwc").getInt());
                      preStatements.add(update);
                    }
                  }
                }
              });

      // new
      store.startTransaction();
      store.execute(preStatements);
      store.execute(
          String.format(DELETE_PRIOR_PROCESS_LOG, getResearcherURI(), getCrawler().getURI()));
      store.update(researcher);
      store.endTransaction();
      // new

      return OutputType.PROCESSED;
    }