/* * Copyright (c) 2012 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.constraint.impl; import java.net.URI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.netflix.astyanax.Keyspace; import com.netflix.astyanax.connectionpool.exceptions.ConnectionException; import com.netflix.astyanax.model.Column; import com.netflix.astyanax.query.RowQuery; import com.emc.storageos.db.client.constraint.ContainmentPrefixConstraint; import com.emc.storageos.db.client.impl.ColumnField; import com.emc.storageos.db.client.impl.IndexColumnName; import com.emc.storageos.db.client.impl.IndexColumnNameSerializer; import com.emc.storageos.db.client.model.DataObject; /** * ContainmentPrefixConstrat default implementation */ public class ContainmentPrefixConstraintImpl extends ConstraintImpl<IndexColumnName> implements ContainmentPrefixConstraint { private static final Logger log = LoggerFactory.getLogger(ContainmentPrefixConstraintImpl.class); private URI _indexKey; private String _prefix; private Keyspace _keyspace; private ColumnField _field; public ContainmentPrefixConstraintImpl(URI indexKey, String prefix, ColumnField field) { super(indexKey, prefix, field); indexSerializer = IndexColumnNameSerializer.get(); _indexKey = indexKey; _prefix = prefix; _field = field; } @Override public void setKeyspace(Keyspace keyspace) { _keyspace = keyspace; } @Override protected <T> void queryOnePage(final QueryResult<T> result) throws ConnectionException { queryOnePageWithAutoPaginate(genQuery(), result); } @Override protected RowQuery<String, IndexColumnName> genQuery() { RowQuery<String, IndexColumnName> query = _keyspace.prepareQuery(_field.getIndexCF()) .getKey(_indexKey.toString()) .withColumnRange(_field.buildPrefixRange(_prefix, pageCount)); return query; } @Override protected URI getURI(Column<IndexColumnName> col) { return URI.create(col.getName().getFour()); } @Override protected <T> T createQueryHit(final QueryResult<T> result, Column<IndexColumnName> column) { return result.createQueryHit(getURI(column), column.getName().getThree(), column.getName().getTimeUUID()); } @Override public Class<? extends DataObject> getDataObjectType() { return _field.getDataObjectType(); } @Override public boolean isValid() { return this._indexKey!=null && !this._indexKey.toString().isEmpty(); } }