Package org.apache.lucene.gdata.storage.lucenestorage

Source Code of org.apache.lucene.gdata.storage.lucenestorage.StorageEntryWrapper

/**
* Copyright 2004 The Apache Software Foundation
*
* 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.apache.lucene.gdata.storage.lucenestorage;

import java.io.IOException;
import java.io.Serializable;
import java.io.StringWriter;

import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.gdata.data.ServerBaseEntry;
import org.apache.lucene.gdata.server.registry.ProvidedService;
import org.apache.lucene.gdata.server.registry.ProvidedServiceConfig;
import org.apache.lucene.gdata.storage.lucenestorage.StorageBuffer.BufferableEntry;

import com.google.gdata.data.BaseEntry;
import com.google.gdata.util.common.xml.XmlWriter;

/**
* This immutable class wrapps <tt>ServerBaseEntry</tt> for an internal
* Storage representation of an entry. This class also acts as a Documentfactory
* for lucene documents to be stored inside the index.
*
* @author Simon Willnauer
*
*/
public class StorageEntryWrapper implements Comparable<StorageEntryWrapper>, Serializable,
        StorageWrapper {

    private static final long serialVersionUID = -4619985652059888526L;
    /*
     * client api uses UTF-8 to encode server requests and entries
     */
    private static final String INTERNAL_ENCODING = "UTF-8";

    /**
     * lucene field name Entry id
     */
    public final static String FIELD_ENTRY_ID = "entryId";

    /**
     * lucene field name feed id
     */
    public final static String FIELD_FEED_REFERENCE = "feedReference";

    /**
     * lucene field name entry content
     */
    public final static String FIELD_CONTENT = "content";

    /**
     * lucene field name creating timestamp
     */
    public final static String FIELD_TIMESTAMP = "timestamp";

    /**
     * lucene field name entry version
     */
    public final static String FIELD_VERSION = "entryVersion";
    private  int version;

    private  String entryId;

    private  String feedId;

    private  String content;

    private transient ServerBaseEntry entry;

    private Long timestamp;

    private Document document;

    private StorageOperation operation;

    private transient ProvidedService config;

    /**
     * Creates a new StorageEntryWrapper.
     *
     * @param entry -
     *            the entry to wrap
     *
     * @param operation -
     *            the StorageOperation
     *
     * @throws IOException -
     *             if the entry content can not be generated
     */
    public StorageEntryWrapper(final ServerBaseEntry entry,
            StorageOperation operation) throws IOException {
        this.entry = entry;
        this.operation = operation;
        this.entryId = entry.getId();
        this.feedId = entry.getFeedId();
        this.version = entry.getVersion();
        if (operation != StorageOperation.DELETE) {
            this.config = entry.getServiceConfig();
            this.content = buildContent();
           
        
        }
        this.timestamp = new Long(
                this.entry.getUpdated() != null ? this.entry.getUpdated()
                        .getValue() : System.currentTimeMillis());
           

    }
  
    private String buildContent() throws IOException {
        StringWriter writer = new StringWriter();
        XmlWriter xmlWriter = new XmlWriter(writer, INTERNAL_ENCODING);
        this.entry.generateAtom(xmlWriter, this.config.getExtensionProfile());
        return writer.toString();

    }

    /**
     * @see org.apache.lucene.gdata.storage.lucenestorage.StorageWrapper#getLuceneDocument()
     */
    public Document getLuceneDocument() {
        if(this.operation == StorageOperation.DELETE)
            return null;
        if (this.document != null)
            return this.document;
        this.document = new Document();
        this.document.add(new Field(FIELD_ENTRY_ID, this.entryId,
                Field.Store.YES, Field.Index.UN_TOKENIZED));
        this.document.add(new Field(FIELD_FEED_REFERENCE, this.feedId,
                Field.Store.YES, Field.Index.UN_TOKENIZED));
        this.document.add(new Field(FIELD_CONTENT,this.content,
                Field.Store.COMPRESS, Field.Index.NO));
        this.document.add(new Field(FIELD_TIMESTAMP, this.timestamp.toString(),
                Field.Store.YES, Field.Index.UN_TOKENIZED));
        this.document.add(new Field(FIELD_VERSION, Integer.toString(this.version),
                Field.Store.YES, Field.Index.UN_TOKENIZED));

        return this.document;

    }

    /**
     * @return - the wrapped entry
     */
    public BaseEntry getEntry() {
        /*
         * this wrapps the entry again. BufferableEntry creates a new instance
         * for the dynamic element like links.
         */
        return new BufferableEntry(this.entry.getEntry());
    }

    /**
     * @return - the entry id
     */
    public String getEntryId() {
        return this.entryId;
    }

    /**
     * @return - the feed id
     */
    public String getFeedId() {
        return this.feedId;
    }

    /**
     * Storage operations
     *
     * @author Simon Willnauer
     *
     */
    public static enum StorageOperation {
        /**
         * delete
         */
        DELETE,
        /**
         * update
         */
        UPDATE,
        /**
         * insert
         */
        INSERT
    }

    /**
     * @return the specified storage operation
     */
    public StorageOperation getOperation() {
        return this.operation;
    }

    /**
     * This compare method compares the timestamps of the wrapper instances.
     *
     * @param arg0 -
     *            the wrapper to compare
     * @par
     * @return - 0 if the wrappers timestamp are the same, an integer > 0 if the
     *         given wrapper is after this wrapper
     *
     */
    public int compareTo(StorageEntryWrapper arg0) {
        return arg0.timestamp.equals(this.timestamp) ? 0
                : (arg0.timestamp > this.timestamp ? 1 : -1);
    }

    /**
     * @return - the specified {@link ProvidedServiceConfig}
     */
    public ProvidedService getConfigurator() {
        return this.config;
    }

    /**
     * @return Returns the timestamp.
     */
    public Long getTimestamp() {
        return this.timestamp;
    }

    /**
     * @return - the version of the entry
     */
    public int getVersion() {
       
        return this.version;
    }



}
TOP

Related Classes of org.apache.lucene.gdata.storage.lucenestorage.StorageEntryWrapper

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.