package org.example; import java.util.Map; import com.google.common.base.Optional; import com.google.common.collect.Maps; public class DocumentStorage { private static final Map<DocumentId, Document> documents = Maps.newConcurrentMap(); private final DocumentIdGenerator generator; public DocumentStorage(DocumentIdGenerator generator) { this.generator = generator; } public DocumentId create(Document document) { DocumentId documentId = generator.generateUniqueDocumentId(); documents.put(documentId, document); return documentId; } public Optional<Document> getDocumentFor(DocumentId documentId){ Document document = documents.get(documentId); return Optional.fromNullable(document); } public Optional<Document> update(DocumentId documentId, Document document) { Document old = documents.put(documentId, document); return Optional.fromNullable(old); } public Optional<Document> deleteDocumentWith(DocumentId documentId) { Document removed = documents.remove(documentId); return Optional.fromNullable(removed); } public boolean contains(DocumentId documentId) { return documents.containsKey(documentId); } }