Package org.sindice.siren.index.codecs

Source Code of org.sindice.siren.index.codecs.RandomSirenCodec

/**
* Copyright 2014 National University of Ireland, Galway.
*
* This file is part of the SIREn project. Project and contact information:
*
*  https://github.com/rdelbru/SIREn
*
* 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 org.sindice.siren.index.codecs;

import java.security.InvalidParameterException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;

import org.apache.lucene.codecs.Codec;
import org.apache.lucene.codecs.PostingsFormat;
import org.apache.lucene.codecs.lucene40.Lucene40Codec;
import org.apache.lucene.codecs.lucene40.Lucene40PostingsFormat;
import org.sindice.siren.index.codecs.siren10.Siren10AForPostingsFormat;
import org.sindice.siren.index.codecs.siren10.Siren10VIntPostingsFormat;
import org.sindice.siren.util.SirenTestCase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RandomSirenCodec extends Lucene40Codec {

  final Random random;
  private final HashSet<String> sirenFields = new HashSet<String>();
  final PostingsFormat lucene40 = new Lucene40PostingsFormat();
  PostingsFormat defaultTestFormat;

  private static final int[] BLOCK_SIZES = new int[] {1, 2, 16, 32, 64, 128, 256, 512, 1024};

  public enum PostingsFormatType {
    RANDOM, SIREN_10
  }

  protected static final Logger logger = LoggerFactory.getLogger(RandomSirenCodec.class);

  public RandomSirenCodec(final Random random) {
    this(random, PostingsFormatType.RANDOM);
  }

  public RandomSirenCodec(final Random random, final PostingsFormatType formatType) {
    this.addSirenFields(SirenTestCase.DEFAULT_TEST_FIELD);
    this.random = random;
    this.defaultTestFormat = this.getPostingsFormat(formatType);
    Codec.setDefault(this);
  }

  public RandomSirenCodec(final Random random, final PostingsFormat format) {
    this.addSirenFields(SirenTestCase.DEFAULT_TEST_FIELD);
    this.random = random;
    this.defaultTestFormat = format;
    Codec.setDefault(this);
  }

  public void addSirenFields(final String... fields) {
    sirenFields.addAll(Arrays.asList(fields));
  }

  @Override
  public PostingsFormat getPostingsFormatForField(final String field) {
    if (sirenFields.contains(field)) {
      return defaultTestFormat;
    }
    else {
      return lucene40;
    }
  }

  @Override
  public String toString() {
    return "RandomSirenCodec[" + defaultTestFormat.toString() + "]";
  }

  private PostingsFormat getPostingsFormat(final PostingsFormatType formatType) {
    switch (formatType) {
      case RANDOM:
        return this.newRandomPostingsFormat();

      case SIREN_10:
        return this.newSiren10PostingsFormat();

      default:
        throw new InvalidParameterException();
    }
  }

  private PostingsFormat newSiren10PostingsFormat() {
    final int blockSize = this.newRandomBlockSize();
    final int i = random.nextInt(2);
    switch (i) {

      case 0:
        return new Siren10VIntPostingsFormat(blockSize);

      case 1:
        return new Siren10AForPostingsFormat(blockSize);

      default:
        throw new InvalidParameterException();
    }
  }

  private PostingsFormat newRandomPostingsFormat() {
    final int i = random.nextInt(1);
    switch (i) {

      case 0:
        return this.newSiren10PostingsFormat();

      default:
        throw new InvalidParameterException();
    }
  }

  private int newRandomBlockSize() {
    return BLOCK_SIZES[random.nextInt(BLOCK_SIZES.length)];
  }

}
TOP

Related Classes of org.sindice.siren.index.codecs.RandomSirenCodec

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.