@Override
  public void process(
      final HasCancellation cancellation, OrcsSession session, TransactionData txData) {
    try {
      final Set<Long> datas = new LinkedHashSet<Long>();
      txData
          .getChangeSet()
          .accept(
              new OrcsVisitorAdapter() {
                @Override
                public void visit(AttributeData data) {
                  IAttributeType type = types.getByUuid(data.getTypeUuid());
                  if (types.isTaggable(type)) {
                    datas.add(data.getVersion().getGammaId());
                  }
                }
              });

      List<Future<?>> futures = indexer.indexResources(session, types, datas).call();
      for (Future<?> future : futures) {
        if (cancellation != null && cancellation.isCancelled()) {
          future.cancel(true);
        } else {
          // Wait for execution to complete
          future.get();
        }
      }
    } catch (Exception ex) {
      logger.error(ex, "Error indexing transaction [%s]", txData);
    }
  }
 /** Called after a resource method is executed */
 @Override
 public void filter(
     ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
   if (activityLog.isEnabled()) {
     try {
       Long entryId =
           (Long) requestContext.getProperty(ActivityConstants.HTTP_HEADER__ACTIVITY_ENTRY_ID);
       if (entryId != null) {
         StatusType statusType = responseContext.getStatusInfo();
         if (statusType.getFamily() == Status.Family.SUCCESSFUL) {
           activityLog.completeEntry(entryId);
         } else {
           activityLog.endEntryAbnormally(entryId, responseContext.getStatus());
         }
       } else {
         // Response was called without a matching request
         activityLog.createActivityThread(
             Activity.JAXRS_METHOD_CALL_FILTER_ERROR,
             ActivityConstants.DEFAULT_ACCOUNT_ID,
             ActivityConstants.DEFAULT_SERVER_ID,
             ActivityConstants.DEFAULT_CLIENT_ID,
             ActivityConstants.ERROR_MSG__MISSING_ACTIVITY_HEADER);
       }
     } catch (Throwable th) {
       logger.error(th, "Error during ActivityContainerResponseFilter");
     }
   }
 }
  private static OseeServerInfoMutable createOseeServerInfo(
      Log logger, ApplicationServerDataStore dataStore, Set<String> defaultVersions) {
    String serverAddress = "127.0.0.1";
    try {
      serverAddress = InetAddress.getLocalHost().getCanonicalHostName();
    } catch (UnknownHostException ex) {
      //
    }
    int port = OseeServerProperties.getOseeApplicationServerPort();

    String checkSum = "-1";
    try {
      String address = String.format("%s:%s", serverAddress, port);
      ByteArrayInputStream inputStream = new ByteArrayInputStream(address.getBytes("UTF-8"));
      checkSum = ChecksumUtil.createChecksumAsString(inputStream, ChecksumUtil.MD5);
    } catch (Exception ex) {
      logger.error(ex, "Error generating application server id");
    }
    OseeServerInfoMutable toReturn =
        new OseeServerInfoMutable(
            checkSum,
            serverAddress,
            port,
            new String[0],
            GlobalTime.GreenwichMeanTimestamp(),
            false);
    toReturn.setVersions(defaultVersions);
    return toReturn;
  }
  /** Called before a resource method is executed */
  @Override
  public void filter(ContainerRequestContext context) {
    if (activityLog.isEnabled()) {
      try {
        String message =
            String.format("%s %s", context.getMethod(), context.getUriInfo().getRequestUri());
        Long serverId = getServerId(context);
        Long clientId = ActivityConstants.DEFAULT_CLIENT_ID;
        if (Strings.isNumeric(context.getHeaders().getFirst("osee.client.id"))) {
          clientId = Long.valueOf(context.getHeaders().getFirst("osee.client.id"));
        }

        Long accountId = ActivityConstants.DEFAULT_ACCOUNT_ID;
        if (Strings.isNumeric(context.getHeaders().getFirst("osee.account.id"))) {
          accountId = Long.valueOf(context.getHeaders().getFirst("osee.account.id"));
        }
        Long entryId =
            activityLog.createActivityThread(
                Activity.JAXRS_METHOD_CALL, accountId, serverId, clientId, message);

        context.setProperty(ActivityConstants.HTTP_HEADER__ACTIVITY_ENTRY_ID, entryId);
      } catch (Throwable th) {
        logger.error(th, "Error during ActivityContainerRequestFilter");
      }
    }
  }