package fr.ippon.tatami.repository.cassandra;
import fr.ippon.tatami.domain.status.Status;
import fr.ippon.tatami.repository.TaglineRepository;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.cassandra.serializers.UUIDSerializer;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.factory.HFactory;
import me.prettyprint.hector.api.mutation.Mutator;
import org.springframework.stereotype.Repository;
import javax.inject.Inject;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
import static fr.ippon.tatami.config.ColumnFamilyKeys.TAGLINE_CF;
/**
* Cassandra implementation of the Tag line repository.
* <p/>
* Structure :
* - Key = tag + domain
* - Name = statusId
* - Value = ""
*
* @author Julien Dubois
*/
@Repository
public class CassandraTaglineRepository extends AbstractCassandraLineRepository implements TaglineRepository {
@Inject
private Keyspace keyspaceOperator;
@Override
public void addStatusToTagline(String tag, Status status) {
addStatus(getKey(status.getDomain(), tag), TAGLINE_CF, status.getStatusId());
}
@Override
public void removeStatusesFromTagline(String tag, String domain, Collection<String> statusIdsToDelete) {
Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, StringSerializer.get());
for (String statusId : statusIdsToDelete) {
mutator.addDeletion(
getKey(domain, tag),
TAGLINE_CF,
UUID.fromString(statusId),
UUIDSerializer.get());
}
mutator.execute();
}
@Override
public List<String> getTagline(String domain, String tag, int size, String start, String finish) {
return getLineFromCF(TAGLINE_CF, getKey(domain, tag), size, start, finish);
}
/**
* Generates the key for this column family.
*/
private String getKey(String domain, String tag) {
return tag.toLowerCase() + "-" + domain;
}
}