Package com.google.enterprise.connector.util.diffing

Source Code of com.google.enterprise.connector.util.diffing.OrderedSnapshotWriter

// Copyright 2013 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.enterprise.connector.util.diffing;

import static com.google.enterprise.connector.util.diffing.DocumentSnapshotComparator.COMPARATOR;

import com.google.common.io.NullOutputStream;

import java.io.OutputStreamWriter;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* A wrapper on the SnapshotWriter that enforces an ordering on the
* written snapshots, to prevent duplicates being written to the
* store. This is slightly hacky because SnapshotWriter is a concrete
* implementation rather than an interface.
*/
class OrderedSnapshotWriter extends SnapshotWriter {
  private static final Logger LOG = Logger.getLogger(
      OrderedSnapshotWriter.class.getName());

  private final SnapshotWriter delegate;

  /** The largest document snapshot we have seen. */
  private DocumentSnapshot maxWrittenSnapshot;

  public OrderedSnapshotWriter(SnapshotWriter delegate)
      throws SnapshotWriterException{
    // The superclass is not actually used, but the Writer argument
    // cannot be null. We use a null sink.
    super(new OutputStreamWriter(new NullOutputStream()), null, null);
    this.delegate = delegate;
    this.maxWrittenSnapshot = null;
  }

  @Override
  public void write(DocumentSnapshot snapshot)
      throws SnapshotWriterException, IllegalArgumentException {
    if (maxWrittenSnapshot == null
        || COMPARATOR.compare(snapshot, maxWrittenSnapshot) > 0) {
      maxWrittenSnapshot = snapshot;
      delegate.write(snapshot);
    } else {
      LOG.log(Level.WARNING, "Processed out of order document snapshot {0}, "
          + "not writing to store.", snapshot.getDocumentId());
    }
  }

  @Override
  public void close() throws SnapshotWriterException {
    delegate.close();
  }

  @Override
  public String getPath() {
    return delegate.getPath();
  }

  @Override
  public long getRecordCount() {
    return delegate.getRecordCount();
  }
}
TOP

Related Classes of com.google.enterprise.connector.util.diffing.OrderedSnapshotWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.