package com.constellio.app.api.cmis.binding.utils;
import java.util.ArrayList;
import java.util.List;
import com.constellio.model.entities.records.Content;
import com.constellio.model.entities.records.ContentVersion;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.model.services.records.RecordServices;
public class CmisContentUtils {
public static ContentCmisDocument getContent(String id, RecordServices recordServices, MetadataSchemaTypes types) {
String[] idParts = id.split("_");
//Code at position 0 is a constant
String recordId = idParts[1];
String metadataLocalCode = idParts[2];
String contentId = idParts[3];
String contentVersion = idParts[4];
Record record = recordServices.getDocumentById(recordId);
MetadataSchema schema = types.getSchema(record.getSchemaCode());
Metadata metadata = schema.getMetadata(metadataLocalCode);
Content content = null;
if (metadata.isMultivalue() == true) {
for (Object aContent : record.getList(metadata)) {
if (((Content) aContent).getId().equals(contentId)) {
content = (Content) aContent;
break;
}
}
} else {
content = record.get(metadata);
}
if (content == null || !contentId.equals(content.getId())) {
throw new RuntimeException("No such content with id '" + id + "'");
}
return createContentCmisDocument(content, metadataLocalCode, contentVersion, record);
}
private static ContentCmisDocument createContentCmisDocument(Content content, String metadataLocalCode, String contentVersion,
Record record) {
boolean isPrivateWorkingCopy = false;
String returnedContentVersion = contentVersion;
if (contentVersion.equals("co")) {
if (content.getCurrentCheckedOutVersion() != null) {
returnedContentVersion = content.getCurrentCheckedOutVersion().getVersion();
isPrivateWorkingCopy = true;
} else {
returnedContentVersion = content.getCurrentVersion().getVersion();
}
}
return new ContentCmisDocument(content, returnedContentVersion, record, metadataLocalCode, isPrivateWorkingCopy);
}
public static List<ContentCmisDocument> getAllVersions(String id, RecordServices recordServices, MetadataSchemaTypes types,
User user) {
String[] idParts = id.split("_");
String metadataLocalCode = idParts[2];
ContentCmisDocument aContentVersion = getContent(id, recordServices, types);
Content content = aContentVersion.getContent();
List<ContentCmisDocument> allVersions = new ArrayList<>();
for (ContentVersion version : content.getHistoryVersions()) {
allVersions
.add(0, new ContentCmisDocument(content, version.getVersion(), aContentVersion.getRecord(),
metadataLocalCode, false));
}
allVersions
.add(0, new ContentCmisDocument(content, content.getCurrentVersion().getVersion(), aContentVersion.getRecord(),
metadataLocalCode, false));
if (user.getId().equals(content.getCheckoutUserId())) {
allVersions
.add(0, new ContentCmisDocument(content, content.getCurrentCheckedOutVersion().getVersion(),
aContentVersion.getRecord(), metadataLocalCode, true));
}
return allVersions;
}
}