Package org.hibernate.search.indexes.serialization.javaserialization.impl

Source Code of org.hibernate.search.indexes.serialization.javaserialization.impl.JavaSerializationDeserializer

/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.indexes.serialization.javaserialization.impl;

import java.util.List;

import org.apache.lucene.util.AttributeImpl;
import org.hibernate.search.exception.SearchException;
import org.hibernate.search.bridge.spi.ConversionContext;
import org.hibernate.search.bridge.util.impl.ContextualExceptionBridgeHelper;
import org.hibernate.search.indexes.serialization.impl.SerializationHelper;
import org.hibernate.search.indexes.serialization.spi.Deserializer;
import org.hibernate.search.indexes.serialization.spi.LuceneWorksBuilder;

/**
* @author Emmanuel Bernard <emmanuel@hibernate.org>
*/
public class JavaSerializationDeserializer implements Deserializer {

  @Override
  public void deserialize(byte[] data, LuceneWorksBuilder hydrator) {
    Message message = SerializationHelper.toInstance( data, Message.class );
    final ConversionContext conversionContext = new ContextualExceptionBridgeHelper();
    for ( Operation operation : message.getOperations() ) {
      if ( operation instanceof OptimizeAll ) {
        hydrator.addOptimizeAll();
      }
      else if ( operation instanceof PurgeAll ) {
        PurgeAll safeOperation = (PurgeAll) operation;
        hydrator.addPurgeAllLuceneWork( safeOperation.getClass().getName() );
      }
      else if ( operation instanceof Delete ) {
        Delete safeOperation = (Delete) operation;
        hydrator.addId( safeOperation.getId() );
        hydrator.addDeleteLuceneWork(
            safeOperation.getEntityClassName(),
            conversionContext
        );
      }
      else if ( operation instanceof Add ) {
        Add safeOperation = (Add) operation;
        buildLuceneDocument( safeOperation.getDocument(), hydrator );
        hydrator.addId( safeOperation.getId() );
        hydrator.addAddLuceneWork(
            safeOperation.getEntityClassName(),
            safeOperation.getFieldToAnalyzerMap(),
            conversionContext
        );
      }
      else if ( operation instanceof Update ) {
        Update safeOperation = (Update) operation;
        buildLuceneDocument( safeOperation.getDocument(), hydrator );
        hydrator.addId( safeOperation.getId() );
        hydrator.addUpdateLuceneWork(
            safeOperation.getEntityClassName(),
            safeOperation.getFieldToAnalyzerMap(),
            conversionContext
        );
      }
    }
  }

  private void buildLuceneDocument(SerializableDocument document, LuceneWorksBuilder hydrator) {
    hydrator.defineDocument();
    for ( SerializableFieldable field : document.getFieldables() ) {
      if ( field instanceof SerializableCustomFieldable ) {
        SerializableCustomFieldable safeField = (SerializableCustomFieldable) field;
        hydrator.addFieldable( safeField.getInstance() );
      }
      else if ( field instanceof SerializableNumericField ) {
        SerializableNumericField safeField = (SerializableNumericField) field;
        if ( field instanceof SerializableIntField ) {
          hydrator.addIntNumericField(
              ( (SerializableIntField) field ).getValue(),
              safeField.getName(),
              safeField.getPrecisionStep(),
              safeField.getStore(),
              safeField.isIndexed(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else if ( field instanceof SerializableLongField ) {
          hydrator.addLongNumericField(
              ( (SerializableLongField) field ).getValue(),
              safeField.getName(),
              safeField.getPrecisionStep(),
              safeField.getStore(),
              safeField.isIndexed(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else if ( field instanceof SerializableFloatField ) {
          hydrator.addFloatNumericField(
              ( (SerializableFloatField) field ).getValue(),
              safeField.getName(),
              safeField.getPrecisionStep(),
              safeField.getStore(),
              safeField.isIndexed(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else if ( field instanceof SerializableDoubleField ) {
          hydrator.addDoubleNumericField(
              ( (SerializableDoubleField) field ).getValue(),
              safeField.getName(),
              safeField.getPrecisionStep(),
              safeField.getStore(),
              safeField.isIndexed(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else {
          throw new SearchException( "Unknown SerializableNumericField: " + field.getClass() );
        }
      }
      else if ( field instanceof SerializableField ) {
        SerializableField safeField = (SerializableField) field;
        if ( field instanceof SerializableBinaryField ) {
          SerializableBinaryField reallySafeField = (SerializableBinaryField) field;
          hydrator.addFieldWithBinaryData(
              reallySafeField.getName(),
              reallySafeField.getValue(),
              reallySafeField.getOffset(),
              reallySafeField.getLength(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else if ( field instanceof SerializableStringField ) {
          SerializableStringField reallySafeField = (SerializableStringField) field;
          hydrator.addFieldWithStringData(
              reallySafeField.getName(),
              reallySafeField.getValue(),
              reallySafeField.getStore(),
              reallySafeField.getIndex(),
              reallySafeField.getTermVector(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else if ( field instanceof SerializableTokenStreamField ) {
          SerializableTokenStreamField reallySafeField = (SerializableTokenStreamField) field;
          List<List<AttributeImpl>> tokens = reallySafeField.getValue().getStream();
          for ( List<AttributeImpl> token : tokens ) {
            for ( AttributeImpl attribute : token ) {
              hydrator.addAttributeInstance( attribute );
            }
            hydrator.addToken();
          }
          hydrator.addFieldWithTokenStreamData(
              reallySafeField.getName(),
              reallySafeField.getTermVector(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else if ( field instanceof SerializableReaderField ) {
          SerializableReaderField reallySafeField = (SerializableReaderField) field;
          hydrator.addFieldWithSerializableReaderData(
              reallySafeField.getName(),
              reallySafeField.getValue(),
              reallySafeField.getTermVector(),
              safeField.getBoost(),
              safeField.isOmitNorms(),
              safeField.isOmitTermFreqAndPositions()
          );
        }
        else {
          throw new SearchException( "Unknown SerializableField: " + field.getClass() );
        }
      }
      else {
        throw new SearchException( "Unknown SerializableFieldable: " + field.getClass() );
      }
    }
  }
}
TOP

Related Classes of org.hibernate.search.indexes.serialization.javaserialization.impl.JavaSerializationDeserializer

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.