blob: 0127a62cde8ea30893add6e8eaddcbf530ca14c1 [file] [log] [blame]
/* Copyright (c) 2013 Stanford University
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR(S) DISCLAIM ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL AUTHORS BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package com.tinkerpop.blueprints.impls.ramcloud;
import java.io.Serializable;
import java.util.Set;
import com.tinkerpop.blueprints.Element;
public class RamCloudKeyIndex<T extends RamCloudElement> extends RamCloudIndex<T> implements Serializable {
public RamCloudKeyIndex(long tableId, String indexName, Object propValue, RamCloudGraph graph, Class<T> indexClass) {
super(tableId, indexName, propValue, graph, indexClass);
}
public RamCloudKeyIndex(long tableId, byte[] rcKey, RamCloudGraph graph, Class<T> indexClass) {
super(tableId, rcKey, graph, indexClass);
}
public boolean autoUpdate(final String key, final Object newValue, final Object oldValue, final T element) {
if (graph.indexedKeys.contains(key)) {
if (oldValue != null) {
this.remove(key, oldValue, element);
}
this.put(key, newValue, element);
return true;
} else {
return false;
}
}
public void autoRemove(final String key, final Object oldValue, final T element) {
if (graph.indexedKeys.contains(key)) {
this.remove(key, oldValue, element);
}
}
public long reIndexElements(final RamCloudGraph graph, final Iterable<? extends Element> elements, final Set<String> keys) {
long counter = 0;
for (final Element element : elements) {
for (final String key : keys) {
final Object value = element.removeProperty(key);
if (null != value) {
counter++;
element.setProperty(key, value);
}
}
}
return counter;
}
}