DocumentAndOp.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.contrib.index.mapred;
  19. import java.io.DataInput;
  20. import java.io.DataOutput;
  21. import java.io.IOException;
  22. import org.apache.hadoop.io.Writable;
  23. import org.apache.lucene.document.Document;
  24. import org.apache.lucene.index.Term;
  25. /**
  26.  * This class represents an indexing operation. The operation can be an insert,
  27.  * a delete or an update. If the operation is an insert or an update, a (new)
  28.  * document must be specified. If the operation is a delete or an update, a
  29.  * delete term must be specified.
  30.  */
  31. public class DocumentAndOp implements Writable {
  32.   /**
  33.    * This class represents the type of an operation - an insert, a delete or
  34.    * an update.
  35.    */
  36.   public static final class Op {
  37.     public static final Op INSERT = new Op("INSERT");
  38.     public static final Op DELETE = new Op("DELETE");
  39.     public static final Op UPDATE = new Op("UPDATE");
  40.     private String name;
  41.     private Op(String name) {
  42.       this.name = name;
  43.     }
  44.     public String toString() {
  45.       return name;
  46.     }
  47.   }
  48.   private Op op;
  49.   private Document doc;
  50.   private Term term;
  51.   /**
  52.    * Constructor for no operation.
  53.    */
  54.   public DocumentAndOp() {
  55.   }
  56.   /**
  57.    * Constructor for an insert operation.
  58.    * @param op
  59.    * @param doc
  60.    */
  61.   public DocumentAndOp(Op op, Document doc) {
  62.     assert (op == Op.INSERT);
  63.     this.op = op;
  64.     this.doc = doc;
  65.     this.term = null;
  66.   }
  67.   /**
  68.    * Constructor for a delete operation.
  69.    * @param op
  70.    * @param term
  71.    */
  72.   public DocumentAndOp(Op op, Term term) {
  73.     assert (op == Op.DELETE);
  74.     this.op = op;
  75.     this.doc = null;
  76.     this.term = term;
  77.   }
  78.   /**
  79.    * Constructor for an insert, a delete or an update operation.
  80.    * @param op
  81.    * @param doc
  82.    * @param term
  83.    */
  84.   public DocumentAndOp(Op op, Document doc, Term term) {
  85.     if (op == Op.INSERT) {
  86.       assert (doc != null);
  87.       assert (term == null);
  88.     } else if (op == Op.DELETE) {
  89.       assert (doc == null);
  90.       assert (term != null);
  91.     } else {
  92.       assert (op == Op.UPDATE);
  93.       assert (doc != null);
  94.       assert (term != null);
  95.     }
  96.     this.op = op;
  97.     this.doc = doc;
  98.     this.term = term;
  99.   }
  100.   /**
  101.    * Set the instance to be an insert operation.
  102.    * @param doc
  103.    */
  104.   public void setInsert(Document doc) {
  105.     this.op = Op.INSERT;
  106.     this.doc = doc;
  107.     this.term = null;
  108.   }
  109.   /**
  110.    * Set the instance to be a delete operation.
  111.    * @param term
  112.    */
  113.   public void setDelete(Term term) {
  114.     this.op = Op.DELETE;
  115.     this.doc = null;
  116.     this.term = term;
  117.   }
  118.   /**
  119.    * Set the instance to be an update operation.
  120.    * @param doc
  121.    * @param term
  122.    */
  123.   public void setUpdate(Document doc, Term term) {
  124.     this.op = Op.UPDATE;
  125.     this.doc = doc;
  126.     this.term = term;
  127.   }
  128.   /**
  129.    * Get the type of operation.
  130.    * @return the type of the operation.
  131.    */
  132.   public Op getOp() {
  133.     return op;
  134.   }
  135.   /**
  136.    * Get the document.
  137.    * @return the document
  138.    */
  139.   public Document getDocument() {
  140.     return doc;
  141.   }
  142.   /**
  143.    * Get the term.
  144.    * @return the term
  145.    */
  146.   public Term getTerm() {
  147.     return term;
  148.   }
  149.   /* (non-Javadoc)
  150.    * @see java.lang.Object#toString()
  151.    */
  152.   public String toString() {
  153.     StringBuilder buffer = new StringBuilder();
  154.     buffer.append(this.getClass().getName());
  155.     buffer.append("[op=");
  156.     buffer.append(op);
  157.     buffer.append(", doc=");
  158.     if (doc != null) {
  159.       buffer.append(doc);
  160.     } else {
  161.       buffer.append("null");
  162.     }
  163.     buffer.append(", term=");
  164.     if (term != null) {
  165.       buffer.append(term);
  166.     } else {
  167.       buffer.append("null");
  168.     }
  169.     buffer.append("]");
  170.     return buffer.toString();
  171.   }
  172.   /* (non-Javadoc)
  173.    * @see org.apache.hadoop.io.Writable#write(java.io.DataOutput)
  174.    */
  175.   public void write(DataOutput out) throws IOException {
  176.     throw new IOException(this.getClass().getName()
  177.         + ".write should never be called");
  178.   }
  179.   /* (non-Javadoc)
  180.    * @see org.apache.hadoop.io.Writable#readFields(java.io.DataInput)
  181.    */
  182.   public void readFields(DataInput in) throws IOException {
  183.     throw new IOException(this.getClass().getName()
  184.         + ".readFields should never be called");
  185.   }
  186. }