Skip to content

Commit 22dbc06

Browse files
committed
Updating preservation agent only when its different from the existing one #3588
1 parent 3480a4b commit 22dbc06

1 file changed

Lines changed: 16 additions & 4 deletions

File tree

roda-core/roda-core/src/main/java/org/roda/core/plugins/base/ingest/EARKSIP2ToAIPPluginUtils.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
*/
88
package org.roda.core.plugins.base.ingest;
99

10+
import java.io.IOException;
1011
import java.io.UnsupportedEncodingException;
1112
import java.net.URLDecoder;
1213
import java.util.Collections;
@@ -16,6 +17,7 @@
1617
import java.util.Optional;
1718

1819
import org.apache.commons.io.FilenameUtils;
20+
import org.apache.commons.io.IOUtils;
1921
import org.roda.core.common.PremisV3Utils;
2022
import org.roda.core.data.common.RodaConstants;
2123
import org.roda.core.data.exceptions.AlreadyExistsException;
@@ -39,6 +41,7 @@
3941
import org.roda.core.model.ModelService;
4042
import org.roda.core.plugins.Plugin;
4143
import org.roda.core.plugins.PluginHelper;
44+
import org.roda.core.storage.Binary;
4245
import org.roda.core.storage.ContentPayload;
4346
import org.roda.core.storage.ExternalFileManifestContentPayload;
4447
import org.roda.core.storage.StorageService;
@@ -225,10 +228,19 @@ private static void processPreservationMetadata(ModelService model, List<IPMetad
225228
agentComplexType.getVersion());
226229

227230
try {
228-
if (model.retrievePreservationAgent(
229-
agentComplexType.getAgentIdentifier().getFirst().getAgentIdentifierValue()) != null) {
230-
model.updatePreservationMetadata(PreservationMetadataType.AGENT,
231-
agentComplexType.getAgentIdentifier().getFirst().getAgentIdentifierValue(), premisAgentBinary, true);
231+
Binary existingPA = model
232+
.retrievePreservationAgent(agentComplexType.getAgentIdentifier().getFirst().getAgentIdentifierValue());
233+
if (existingPA != null) {
234+
try {
235+
if (!IOUtils.contentEquals(existingPA.getContent().createInputStream(),
236+
premisAgentBinary.createInputStream())) {
237+
model.updatePreservationMetadata(PreservationMetadataType.AGENT,
238+
agentComplexType.getAgentIdentifier().getFirst().getAgentIdentifierValue(), premisAgentBinary,
239+
true);
240+
}
241+
} catch (IOException e) {
242+
throw new GenericException("Could not update binary content", e);
243+
}
232244
} else {
233245
model.createPreservationMetadata(PreservationMetadataType.AGENT,
234246
agentComplexType.getAgentIdentifier().getFirst().getAgentIdentifierValue(), premisAgentBinary, true);

0 commit comments

Comments
 (0)