Package com.google.enterprise.connector.pusher

Source Code of com.google.enterprise.connector.pusher.MockPusher

// Copyright 2006 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.pusher;

import com.google.enterprise.connector.spi.Document;
import com.google.enterprise.connector.spi.Property;
import com.google.enterprise.connector.spi.RepositoryDocumentException;
import com.google.enterprise.connector.spi.RepositoryException;
import com.google.enterprise.connector.spi.SpiConstants;
import com.google.enterprise.connector.spi.Value;
import com.google.enterprise.connector.spiimpl.BinaryValue;
import com.google.enterprise.connector.util.Base64FilterInputStream;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;

public class MockPusher implements Pusher, PusherFactory {

  private PusherStatus status = PusherStatus.OK;
  private int totalDocs = 0;
  private PrintStream printStream;

  public MockPusher() {
    this(System.out);
  }

  public MockPusher(PrintStream ps) {
    printStream = ps;
  }

  @Override
  public Pusher newPusher(String connectorName) {
    totalDocs = 0;
    if (status == PusherStatus.DISABLED) {
      status = PusherStatus.OK;
    }
    return this;
  }

  @Override
  public PusherStatus take(Document document)
      throws PushException, FeedException, RepositoryException {
    // Mirror behaviour of DocPusher.
    if (status == PusherStatus.DISABLED) {
      return PusherStatus.DISABLED;
    }

    printStream.println("<document>");

    // first take care of some special attributes
    Property property = null;

    // we just do the DOCID first so it is easy to find
    String name = SpiConstants.PROPNAME_DOCID;
    if ((property = document.findProperty(name)) == null) {
      throw new RepositoryDocumentException(SpiConstants.PROPNAME_DOCID
                                            + " is missing");
    }
    processProperty(name, property);

    for (String propName : document.getPropertyNames()) {
      if (propName.equals(SpiConstants.PROPNAME_DOCID)) {
        // we already dealt with these
        continue;
      }
      property = document.findProperty(propName);
      processProperty(propName, property);
    }

    printStream.println("</document>");
    totalDocs++;
    return status;
  }

  @Override
  public void flush() throws PushException, FeedException, RepositoryException {
    printStream.flush();
    status = PusherStatus.DISABLED;
  }

  @Override
  public void cancel() {
    totalDocs = 0;
    status = PusherStatus.DISABLED;
  }

  /**
   * @return the current PusherStatus
   */
  @Override
  public PusherStatus getPusherStatus()
      throws PushException, FeedException, RepositoryException {
    return status;
  }

  public void setPusherStatus(PusherStatus status) {
    this.status = status;
  }

  private void processProperty(String name, Property property)
      throws RepositoryException {
    InputStream contentStream = null;
    InputStream encodedContentStream = null;
    try {
      Value v = property.nextValue();
      // if we have a contentfile property, we want to stream the InputStream
      // to demonstrate that we don't blow up memory
      if (v instanceof BinaryValue) {
        contentStream = ((BinaryValue) v).getInputStream();
        if (null != contentStream) {
          encodedContentStream = new Base64FilterInputStream(contentStream);
        }
        int totalBytesRead = 0;
        if (null != encodedContentStream) {
          int bytesRead = 0;
          byte[] b = new byte[16384];
          try {
            while (-1 != (bytesRead = encodedContentStream.read(b))) {
              totalBytesRead += bytesRead;
            }
          } catch (IOException e) {
            throw new RepositoryDocumentException(
                "Error reading content stream.", e);
          }
        }
        printStream.println("Total bytes read in base64 encoded file: "
            + totalBytesRead);
      }
      do {
        printStream.println("<" + name + ">");
        printStream.println(v.toString());
        printStream.println("</" + name + ">");
      } while ((v = property.nextValue()) != null);
    } finally {
      if (null != encodedContentStream) {
        try { encodedContentStream.close(); } catch (IOException e) {}
      }
      if (null != contentStream) {
        try { contentStream.close(); } catch (IOException e) {}
      }
    }
  }

  public int getTotalDocs() {
    return totalDocs;
  }
}
TOP

Related Classes of com.google.enterprise.connector.pusher.MockPusher

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.