package com.constellio.app.api.cmis.requests.object; import org.apache.chemistry.opencmis.commons.PropertyIds; import org.apache.chemistry.opencmis.commons.data.ObjectData; import org.apache.chemistry.opencmis.commons.data.Properties; import org.apache.chemistry.opencmis.commons.enums.Action; import org.apache.chemistry.opencmis.commons.server.CallContext; import org.apache.chemistry.opencmis.commons.server.ObjectInfoHandler; import org.apache.chemistry.opencmis.commons.spi.Holder; import org.apache.commons.lang3.builder.ToStringBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.constellio.app.api.cmis.CmisExceptions.CmisExceptions_CannotUpdateCollection; import com.constellio.app.api.cmis.binding.collection.ConstellioCollectionRepository; import com.constellio.app.api.cmis.binding.global.ConstellioCmisContextParameters; import com.constellio.app.api.cmis.builders.object.RecordBuilder; import com.constellio.app.api.cmis.requests.CmisCollectionRequest; import com.constellio.app.extensions.api.cmis.params.UpdateFolderParams; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.services.records.RecordServicesException; public class UpdatePropertiesRequest extends CmisCollectionRequest<ObjectData> { private static final Logger LOGGER = LoggerFactory.getLogger(CmisCollectionRequest.class); private final Holder<String> objectId; private final Properties properties; private final ObjectInfoHandler objectInfos; public UpdatePropertiesRequest(ConstellioCollectionRepository repository, AppLayerFactory appLayerFactory, CallContext context, Holder<String> objectId, Properties properties, ObjectInfoHandler objectInfos) { super(context, repository, appLayerFactory); this.objectId = objectId; this.properties = properties; this.objectInfos = objectInfos; } @Override public ObjectData process() { Record updatedRecord = modelLayerFactory.newRecordServices().getDocumentById(objectId.getValue(), user); ensureUserHasAllowableActionsOnRecord(updatedRecord, Action.CAN_UPDATE_PROPERTIES); MetadataSchema schema = types().getSchema(updatedRecord.getSchemaCode()); if ("collection_default".equals(schema.getCode())) { throw new CmisExceptions_CannotUpdateCollection(); } else { Object changeToken = properties.getProperties().get(PropertyIds.CHANGE_TOKEN); return updateRecordFromProperties(updatedRecord, schema); } } public ObjectData updateRecordFromProperties(Record updatedRecord, MetadataSchema schema) { new RecordBuilder(properties, callContext, appLayerFactory).setMetadataFromProperties(updatedRecord); try { recordServices.execute(new Transaction(updatedRecord).setUser(user)); } catch (RecordServicesException e) { throw new RuntimeException(e); } // UpdateFolderParams updateFolderParams = new UpdateFolderParams(user, updatedRecord); // appLayerFactory.getExtensions().forCollection(collection).onUpdateCMISFolder(updateFolderParams); recordServices.refresh(updatedRecord); return newObjectDataBuilder().build(updatedRecord, null, false, false, objectInfos); } @Override protected Logger getLogger() { return LOGGER; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }