public void handleRevisions(
      EClass eClass,
      CDOBranch branch,
      long timeStamp,
      boolean exactTime,
      CDORevisionHandler handler) {
    Query query = getObjectContainer().query();
    query.constrain(DB4ORevision.class);
    if (eClass != null) {
      query
          .descend(DB4ORevision.ATTRIBUTE_PACKAGE_NS_URI)
          .constrain(eClass.getEPackage().getNsURI());
      query.descend(DB4ORevision.ATTRIBUTE_CLASS_NAME).constrain(eClass.getName());
    }

    ObjectSet<?> revisions = query.execute();
    if (revisions.isEmpty()) {
      return;
    }

    for (Object revision : revisions.toArray()) {
      CDORevision cdoRevision = DB4ORevision.getCDORevision(getStore(), (DB4ORevision) revision);
      handler.handleRevision(cdoRevision);
    }
  }
  public boolean handleRevision(CDORevision revision) {
    if (revision.getVersion() < CDOBranchVersion.FIRST_VERSION - 1) {
      revision =
          new DetachedCDORevision(
              revision.getEClass(),
              revision.getID(),
              revision.getBranch(),
              -revision.getVersion(),
              revision.getTimeStamp(),
              revision.getRevised());
    }

    return delegate.handleRevision(revision);
  }