package com.constellio.app.api.cmis.requests.object; import org.apache.chemistry.opencmis.commons.data.ContentStream; import org.apache.chemistry.opencmis.commons.data.ObjectData; import org.apache.chemistry.opencmis.commons.data.Properties; import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition; import org.apache.chemistry.opencmis.commons.enums.Action; import org.apache.chemistry.opencmis.commons.enums.BaseTypeId; import org.apache.chemistry.opencmis.commons.enums.VersioningState; import org.apache.chemistry.opencmis.commons.server.CallContext; import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler; import org.apache.commons.lang3.builder.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.constellio.app.api.cmis.CmisExceptions.CmisExceptions_ObjectNotFound; import com.constellio.app.api.cmis.ConstellioCmisException; import com.constellio.app.api.cmis.binding.collection.ConstellioCollectionRepository; import com.constellio.app.api.cmis.binding.utils.CmisUtils; import com.constellio.app.api.cmis.binding.utils.ContentCmisDocument; import com.constellio.app.api.cmis.requests.CmisCollectionRequest; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.model.entities.records.Record; public class CreateObjectRequest extends CmisCollectionRequest<ObjectData> { private static final Logger LOGGER = LoggerFactory.getLogger(CmisCollectionRequest.class); private final Properties properties; private final ObjectInfoHandler objectInfos; CreateFolderRequest createFolderRequest; CreateDocumentRequest createDocumentRequest; public CreateObjectRequest(ConstellioCollectionRepository repository, AppLayerFactory appLayerFactory, CreateFolderRequest createFolderRequest, CreateDocumentRequest createDocumentRequest, CallContext context, Properties properties, String folderId, ContentStream contentStream, VersioningState versioningState, ObjectInfoHandler objectInfos) { super(context, repository, appLayerFactory); this.createFolderRequest = createFolderRequest; this.createDocumentRequest = createDocumentRequest; this.properties = properties; this.objectInfos = objectInfos; } @Override public ObjectData process() throws ConstellioCmisException { boolean userReadOnly = false; String typeId = CmisUtils.getObjectTypeId(properties); TypeDefinition type = repository.getTypeDefinitionsManager().getInternalTypeDefinition(typeId); if (type == null) { throw new CmisExceptions_ObjectNotFound("Type", typeId); } if (type.getBaseTypeId() == BaseTypeId.CMIS_DOCUMENT) { ContentCmisDocument contentCmisDocument = createDocumentRequest.process(); return newContentObjectDataBuilder().build(contentCmisDocument, null, false, userReadOnly, objectInfos); } else if (type.getBaseTypeId() == BaseTypeId.CMIS_FOLDER) { String objectId = createFolderRequest.process(); Record record = recordServices.getDocumentById(objectId); return newObjectDataBuilder().build(record, null, false, userReadOnly, objectInfos); } else { throw new CmisExceptions_ObjectNotFound("Type", typeId); } } @Override protected Logger getLogger() { return LOGGER; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }