package com.constellio.model.entities.records;
import java.util.List;
import java.util.Set;
import org.joda.time.LocalDateTime;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.ModifiableStructure;
import com.constellio.model.services.contents.ContentVersionDataSummary;
public interface Content extends ModifiableStructure {
String getId();
ContentVersion getCurrentVersion();
ContentVersion getCurrentCheckedOutVersion();
ContentVersion getCurrentVersionSeenBy(User user);
ContentVersion getLastMajorContentVersion();
/**
* Sorted by asc version label
*/
List<ContentVersion> getHistoryVersions();
/**
* Sorted by asc version label
*/
List<ContentVersion> getVersions();
Content checkOut(User user);
Content checkIn();
Content cancelCheckOut();
Content checkInWithModification(ContentVersionDataSummary newVersion, boolean finalized);
Content checkInWithModificationAndName(ContentVersionDataSummary newVersion, boolean finalized, String name);
Content renameCurrentVersion(String newFilename);
Content setVersionComment(String comment);
Content setVersionModificationDatetime(LocalDateTime localDateTime);
Content updateContent(User user, ContentVersionDataSummary newVersion, boolean finalize);
Content updateContentWithName(User user, ContentVersionDataSummary newVersion, boolean finalize, String name);
Content updateContentWithVersionAndName(User user, ContentVersionDataSummary newVersion, String version, String name);
LocalDateTime getCheckoutDateTime();
String getCheckoutUserId();
boolean isDirty();
Content updateCheckedOutContent(ContentVersionDataSummary newVersion);
Content updateCheckedOutContentWithName(ContentVersionDataSummary newVersion, String name);
Content finalizeVersion();
ContentVersion getVersion(String version);
Content deleteVersion(String versionLabel, User user);
Content deleteVersion(String versionLabel);
boolean isEmptyVersion();
// TODO Write a test
boolean isDeleteContentVersionPossible(String version);
Set<String> getHashOfAllVersions();
//List<String> getDeletedVersionHashes();
}