use of v7db.files.spi.InlineContent in project v7files by thiloplanz.
the class MongoContentStorage method getContent.
public Content getContent(ContentPointer pointer) throws IOException {
if (pointer == null)
return null;
if (pointer instanceof InlineContent)
return (Content) pointer;
if (pointer instanceof ContentSHA) {
ContentSHA p = (ContentSHA) pointer;
byte[] sha = p.getSHA();
Content base = getContent(sha);
if (base == null)
throw new IllegalArgumentException("base SHA not found: " + Hex.encodeHexString(sha));
return base;
}
if (pointer instanceof StoredContent) {
StoredContent p = (StoredContent) pointer;
byte[] sha = p.getBaseSHA();
Content base = getContent(sha);
if (base == null)
throw new IllegalArgumentException("base SHA not found: " + Hex.encodeHexString(sha));
if (p.getLength() != base.getLength()) {
return new OffsetAndLength(base, 0, p.getLength());
}
return base;
}
throw new IllegalArgumentException(pointer.getClass().toString());
}
use of v7db.files.spi.InlineContent in project v7files by thiloplanz.
the class MongoReferenceTracking method updateReferences.
public void updateReferences(Object ownerId, ContentPointer... contents) throws IOException {
List<byte[]> content = new ArrayList<byte[]>();
for (ContentPointer cp : contents) {
if (cp instanceof InlineContent)
continue;
if (cp instanceof StoredContent)
content.add(((StoredContent) cp).getBaseSHA());
else if (cp instanceof ContentSHA)
content.add(((ContentSHA) cp).getSHA());
else
throw new IllegalArgumentException(cp.getClass().getName());
}
WriteResult r = refCollection.update(new BasicDBObject("_id", ownerId), new BasicDBObject("$set", new BasicDBObject("refs", content)).append("$addToSet", new BasicDBObject("refHistory", new BasicDBObject("$each", content))), false, false, WriteConcern.SAFE);
if (r.getN() == 1)
return;
if (r.getN() != 0)
throw new IllegalStateException();
refCollection.insert(WriteConcern.SAFE, new BasicDBObject("_id", ownerId).append("refs", content).append("refHistory", content));
}
use of v7db.files.spi.InlineContent in project v7files by thiloplanz.
the class V7File method getDigest.
public String getDigest() {
ContentPointer contentPointer = getContentPointer();
if (contentPointer instanceof ContentSHA) {
return ((ContentSHA) contentPointer).getDigest();
}
if (contentPointer instanceof InlineContent) {
try {
return DigestUtils.shaHex(((InlineContent) contentPointer).getInputStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (contentPointer.getLength() == 0)
return ContentSHA.calculate(ArrayUtils.EMPTY_BYTE_ARRAY).getDigest();
// TODO:
System.err.println("NO DIGEST!");
return null;
}
Aggregations