@Override public Status update(String table, String key, Map<String, ByteIterator> values) { for (Map.Entry<String, ByteIterator> entry : values.entrySet()) { Key kvKey = createKey(table, key, entry.getKey()); Value kvValue = Value.createValue(entry.getValue().toArray()); try { store.put(kvKey, kvValue); } catch (FaultException e) { System.err.println(e); return Status.ERROR; } } return Status.OK; }
@Override public Status read(String table, String key, Set<String> fields, Map<String, ByteIterator> result) { Key kvKey = createKey(table, key); SortedMap<Key, ValueVersion> kvResult; try { kvResult = store.multiGet(kvKey, null, null); } catch (FaultException e) { System.err.println(e); return Status.ERROR; } for (Map.Entry<Key, ValueVersion> entry : kvResult.entrySet()) { /* If fields is null, read all fields */ String field = getFieldFromKey(entry.getKey()); if (fields != null && !fields.contains(field)) { continue; } result.put(field, new ByteArrayByteIterator(entry.getValue().getValue().getValue())); } return Status.OK; }
@Override public Map<String, Object> search(String query, Class<?> parentClass, EntityMetadata parentMetadata, Class<?> childClass, EntityMetadata childMetadata, Object entityId, int start, int count) { String secIndexName = getIndexTableName(childMetadata); String parentIdColumnName = ((AbstractAttribute) parentMetadata.getIdAttribute()).getJPAColumnName(); String childIdColumnName = ((AbstractAttribute) childMetadata.getIdAttribute()).getJPAColumnName(); String id = PropertyAccessorHelper.getString(entityId); List<String> majorComponents = new ArrayList<String>(); majorComponents.add(secIndexName); majorComponents.add(parentIdColumnName); majorComponents.add(id); Key majorKeyToFind = Key.createKey(majorComponents); Iterator<KeyValueVersion> iterator = kvStore.multiGetIterator(Direction.FORWARD, 0, majorKeyToFind, null, null); Map<String, Object> results = new HashMap<String, Object>(); while (iterator.hasNext()) { KeyValueVersion keyValueVersion = iterator.next(); String minorKey = keyValueVersion.getKey().getMinorPath().get(0); PropertyAccessor accessor = PropertyAccessorFactory .getPropertyAccessor(childMetadata.getIdAttribute().getBindableJavaType()); byte[] idByteArr = keyValueVersion.getValue().getValue(); Object keyObj = accessor.fromBytes(childMetadata.getIdAttribute().getBindableJavaType(), idByteArr); results.put(childIdColumnName + "|" + minorKey, keyObj); } return results; }
@Override public void index(Class entityClazz, EntityMetadata m, Map<String, Object> values, Object entityId, final Class parentClazz) { String idColumnName = ((AbstractAttribute) m.getIdAttribute()).getJPAColumnName(); Object id = values.get(idColumnName); for (String column : values.keySet()) { Object valueObject = values.get(column); List<String> majorKeyComponents = new ArrayList<String>(); majorKeyComponents.add(getIndexTableName(m)); majorKeyComponents.add(column); majorKeyComponents.add(PropertyAccessorHelper.getString(valueObject)); String minorKey = PropertyAccessorHelper.getString(id); Key key = Key.createKey(majorKeyComponents, minorKey); byte[] valueByteArray = PropertyAccessorHelper.getBytes(id); kvStore.put(key, Value.createValue(valueByteArray)); } }
.getPropertyAccessor(entityMetadata.getIdAttribute().getBindableJavaType()); byte[] idByteArr = keyValueVersion.getValue().getValue(); Object keyObj = accessor.fromBytes(entityMetadata.getIdAttribute().getBindableJavaType(), idByteArr);
byte[] value = keyValueVersion.getValue().getValue(); Object valueObject = PropertyAccessorHelper.getObject( ((AbstractAttribute) entityMetadata.getIdAttribute()).getBindableJavaType(), value);