package io.lumify.core.model.artifactThumbnails;
import com.altamiracorp.bigtable.model.Column;
import com.altamiracorp.bigtable.model.ColumnFamily;
import com.altamiracorp.bigtable.model.ModelSession;
import com.altamiracorp.bigtable.model.Row;
import com.beust.jcommander.internal.Nullable;
import com.google.inject.Inject;
import io.lumify.core.model.ontology.OntologyRepository;
import io.lumify.core.user.User;
import org.securegraph.Vertex;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
public class BigTableArtifactThumbnailRepository extends ArtifactThumbnailRepository {
@Inject
public BigTableArtifactThumbnailRepository(@Nullable final ModelSession modelSession, final OntologyRepository ontologyRepository) {
super(modelSession, ontologyRepository);
}
@Override
public BigTableArtifactThumbnail fromRow(Row row) {
BigTableArtifactThumbnail artifactThumbnail = new BigTableArtifactThumbnail(row.getRowKey());
Collection<ColumnFamily> families = row.getColumnFamilies();
for (ColumnFamily columnFamily : families) {
String columnFamilyName = columnFamily.getColumnFamilyName();
if (columnFamilyName.equals(BigTableArtifactThumbnailMetadata.NAME)) {
Collection<Column> columns = columnFamily.getColumns();
artifactThumbnail.addColumnFamily(new BigTableArtifactThumbnailMetadata().addColumns(columns));
} else {
artifactThumbnail.addColumnFamily(columnFamily);
}
}
return artifactThumbnail;
}
@Override
public Row toRow(BigTableArtifactThumbnail artifactThumbnail) {
return artifactThumbnail;
}
@Override
public String getTableName() {
return BigTableArtifactThumbnail.TABLE_NAME;
}
@Override
public ArtifactThumbnail getThumbnail(Object artifactVertexId, String thumbnailType, int width, int height, User user) {
BigTableArtifactThumbnailRowKey rowKey = new BigTableArtifactThumbnailRowKey(artifactVertexId, thumbnailType, width, height);
BigTableArtifactThumbnail thumbnail = findByRowKey(rowKey.toString(), user.getModelUserContext());
if (thumbnail != null) {
BigTableArtifactThumbnailMetadata metadata = thumbnail.getMetadata();
return new ArtifactThumbnail(metadata.getData(), metadata.getType(), metadata.getFormat());
}
return null;
}
@Override
public byte[] getThumbnailData(Object artifactVertexId, String thumbnailType, int width, int height, User user) {
ArtifactThumbnail artifactThumbnail = getThumbnail(artifactVertexId, thumbnailType, width, height, user);
if (artifactThumbnail == null) {
return null;
}
return artifactThumbnail.getThumbnailData();
}
@Override
public ArtifactThumbnail createThumbnail(Vertex artifactVertex, String thumbnailType, InputStream in, int[] boundaryDims, User user) throws IOException {
ArtifactThumbnail thumbnail = super.generateThumbnail(artifactVertex, in, boundaryDims);
saveThumbnail(artifactVertex, thumbnailType, boundaryDims, thumbnail.getThumbnailData(), thumbnail.getType(), thumbnail.getFormat());
return thumbnail;
}
private void saveThumbnail(Object artifactVertexId, String thumbnailType, int[] boundaryDims, byte[] bytes, int type, String format) {
BigTableArtifactThumbnailRowKey artifactThumbnailRowKey = new BigTableArtifactThumbnailRowKey(artifactVertexId, thumbnailType, boundaryDims[0], boundaryDims[1]);
BigTableArtifactThumbnail artifactThumbnail = new BigTableArtifactThumbnail(artifactThumbnailRowKey);
artifactThumbnail.getMetadata().setData(bytes);
artifactThumbnail.getMetadata().setType(type);
artifactThumbnail.getMetadata().setFormat(format);
save(artifactThumbnail);
}
}