Skip to content

Commit 7ee616c

Browse files
committed
updating preservation agent only when its different from the existing one
1 parent c55c50e commit 7ee616c

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;
@@ -20,6 +21,7 @@
2021
import gov.loc.premis.v3.PremisComplexType;
2122
import jakarta.xml.bind.JAXBElement;
2223
import org.apache.commons.io.FilenameUtils;
24+
import org.apache.commons.io.IOUtils;
2325
import org.roda.core.common.PremisV3Utils;
2426
import org.roda.core.data.common.RodaConstants;
2527
import org.roda.core.data.exceptions.AlreadyExistsException;
@@ -44,6 +46,7 @@
4446
import org.roda.core.model.utils.ModelUtils;
4547
import org.roda.core.plugins.Plugin;
4648
import org.roda.core.plugins.PluginHelper;
49+
import org.roda.core.storage.Binary;
4750
import org.roda.core.storage.ContentPayload;
4851
import org.roda.core.storage.ExternalFileManifestContentPayload;
4952
import org.roda.core.storage.StorageService;
@@ -224,10 +227,19 @@ private static void processPreservationMetadata(ModelService model, List<IPMetad
224227
agentComplexType.getVersion());
225228

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

0 commit comments

Comments
 (0)