Package org.lilyproject.hbaseindex

Source Code of org.lilyproject.hbaseindex.IndexEntry

/*
* Copyright 2010 Outerthought bvba
*
* 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.lilyproject.hbaseindex;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.lilyproject.util.ByteArrayKey;

/**
* An entry to add to or remove from an Index.
*
* <p>This object can be simply instantiated yourself and passed to
* {@link Index#addEntry} or {@link Index#removeEntry}.
*
* <p>The fields added to this entry should correspond in name
* and type to the fields defined in the {@link IndexDefinition}.
*
* <p>Missing fields will be interpreted as fields with a null value.
*/
public class IndexEntry {
    private final IndexDefinition definition;
    private Map<String, Object> fields = new HashMap<String, Object>();
    private Map<ByteArrayKey, byte[]> data = new HashMap<ByteArrayKey, byte[]>();
    private byte[] identifier;

    public IndexEntry(IndexDefinition definition) {
        this.definition = definition;
    }

    public IndexEntry(IndexDefinition definition, byte[] identifier) {
        this.definition = definition;
        this.identifier = identifier;
    }

    public void addField(String name, Object value) {
        definition.checkFieldSupport(name, value);

        fields.put(name, value);
    }

    /**
     * Allows to add optional data to be stored in the index entry row.
     *
     * @param qualifier
     * @param value
     */
    public void addData(byte[] qualifier, byte[] value) {
        data.put(new ByteArrayKey(qualifier), value);
    }

    protected Map<ByteArrayKey, byte[]> getData() {
        return data;
    }

    /**
     * Get the values to be serialized into a byte array, in index definition order. Missing fields are inserted as
     * null values.
     *
     * @return the values to be serialized into a byte array
     */
    Object[] getFieldValuesInSerializationOrder() {
        final List<Object> values = new ArrayList<Object>(definition.getFields().size() + 1);
        for (IndexFieldDefinition indexFieldDefinition : definition.getFields()) {
            final Object fieldValueOrNull = fields.get(indexFieldDefinition.getName());
            values.add(fieldValueOrNull);
        }

        values.add(identifier);

        return values.toArray();
    }

    public void setIdentifier(byte[] identifier) {
        this.identifier = identifier;
    }

    public void validate() {
        if (identifier == null) {
            throw new MalformedIndexEntryException("Index entry does not specify an identifier.");
        }
    }
}
TOP

Related Classes of org.lilyproject.hbaseindex.IndexEntry

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.