package com.constellio.app.api.cmis.requests.object; import java.util.ArrayList; import java.util.List; import org.apache.chemistry.opencmis.commons.data.BulkUpdateObjectIdAndChangeToken; import org.apache.chemistry.opencmis.commons.data.Properties; import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException; import org.apache.chemistry.opencmis.commons.impl.dataobjects.BulkUpdateObjectIdAndChangeTokenImpl; 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_InvalidArgumentNoObjectIdsProvided; import com.constellio.app.api.cmis.binding.collection.ConstellioCollectionRepository; import com.constellio.app.api.cmis.requests.CmisCollectionRequest; import com.constellio.app.services.factories.AppLayerFactory; public class BulkUpdatePropertiesRequest extends CmisCollectionRequest<List<BulkUpdateObjectIdAndChangeToken>> { private static final Logger LOGGER = LoggerFactory.getLogger(CmisCollectionRequest.class); private final UpdatePropertiesRequest updatePropertiesRequest; private final List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken; private final Properties properties; private final ObjectInfoHandler objectInfos; public BulkUpdatePropertiesRequest(ConstellioCollectionRepository repository, AppLayerFactory appLayerFactory, UpdatePropertiesRequest updatePropertiesRequest, CallContext context, List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties, ObjectInfoHandler objectInfos) { super(context, repository, appLayerFactory); this.updatePropertiesRequest = updatePropertiesRequest; this.objectIdAndChangeToken = objectIdAndChangeToken; this.properties = properties; this.objectInfos = objectInfos; } /** * CMIS bulkUpdateProperties. */ @Override public List<BulkUpdateObjectIdAndChangeToken> process() { if (objectIdAndChangeToken == null) { throw new CmisExceptions_InvalidArgumentNoObjectIdsProvided(); } List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>(); for (BulkUpdateObjectIdAndChangeToken oid : objectIdAndChangeToken) { if (oid == null) { // ignore invalid ids continue; } try { Holder<String> oidHolder = new Holder<String>(oid.getId()); updatePropertiesRequest.process(); result.add(new BulkUpdateObjectIdAndChangeTokenImpl(oid.getId(), oidHolder.getValue(), null)); } catch (CmisBaseException e) { // ignore exceptions - see specification } } return result; } @Override protected Logger getLogger() { return LOGGER; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }