1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.bitrepository.modify.replacefile;
26
27 import java.net.URL;
28 import java.util.Arrays;
29 import org.bitrepository.bitrepositoryelements.ChecksumDataForFileTYPE;
30 import org.bitrepository.bitrepositoryelements.ChecksumSpecTYPE;
31 import org.bitrepository.client.AbstractClient;
32 import org.bitrepository.client.conversation.mediator.ConversationMediator;
33 import org.bitrepository.client.eventhandler.EventHandler;
34 import org.bitrepository.common.ArgumentValidator;
35 import org.bitrepository.common.settings.Settings;
36 import org.bitrepository.modify.replacefile.conversation.IdentifyPillarsForReplaceFile;
37 import org.bitrepository.modify.replacefile.conversation.ReplaceFileConversationContext;
38 import org.bitrepository.protocol.messagebus.MessageBus;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42
43
44
45 public class ConversationBasedReplaceFileClient extends AbstractClient implements ReplaceFileClient {
46 private final Logger log = LoggerFactory.getLogger(this.getClass());
47
48
49
50
51 public ConversationBasedReplaceFileClient(MessageBus messageBus, ConversationMediator conversationMediator,
52 Settings settings, String clientID) {
53 super(settings, conversationMediator, messageBus, clientID);
54 }
55
56 @Override
57 public void replaceFile(String collectionID, String fileID, String pillarId, ChecksumDataForFileTYPE checksumForDeleteAtPillar,
58 ChecksumSpecTYPE checksumRequestedForDeletedFile, URL url, long sizeOfNewFile,
59 ChecksumDataForFileTYPE checksumForNewFileValidationAtPillar, ChecksumSpecTYPE checksumRequestsForNewFile,
60 EventHandler eventHandler, String auditTrailInformation) {
61 ArgumentValidator.checkNotNullOrEmpty(collectionID, "collectionID");
62 ArgumentValidator.checkNotNullOrEmpty(fileID, "fileID");
63 validateFileID(fileID);
64 ArgumentValidator.checkNotNullOrEmpty(fileID, "String fileId");
65 ArgumentValidator.checkNotNullOrEmpty(pillarId, "String pillarId");
66 if(settings.getRepositorySettings().getProtocolSettings().isRequireChecksumForDestructiveRequests()) {
67 ArgumentValidator.checkNotNull(checksumForDeleteAtPillar, "ChecksumDataForFileTYPE checksumForDeleteAtPillar");
68 }
69 if(settings.getRepositorySettings().getProtocolSettings().isRequireChecksumForNewFileRequests()) {
70 ArgumentValidator.checkNotNull(checksumForNewFileValidationAtPillar,
71 "ChecksumDataForFileTYPE checksumForNewFileValidationAtPillar");
72 }
73
74 log.info("Requesting the replacement of the file '" + fileID + "' at the pillar '" + pillarId + "' from the "
75 + "URL '" + url + "' and with the size '" + sizeOfNewFile + "', where the old file has the checksum '"
76 + checksumForDeleteAtPillar + "' and is requested the checksum '" + checksumRequestedForDeletedFile
77 + "', and the new file has the checksum '" + checksumForNewFileValidationAtPillar + "' and requesting "
78 + "the checksum '" + checksumRequestsForNewFile + "'. With the audittrail '" + auditTrailInformation
79 + "'");
80 ReplaceFileConversationContext context = new ReplaceFileConversationContext(collectionID, fileID,
81 sizeOfNewFile, url, checksumForDeleteAtPillar, checksumRequestedForDeletedFile,
82 checksumForNewFileValidationAtPillar, checksumRequestsForNewFile, settings, messageBus,
83 clientID, Arrays.asList(pillarId), eventHandler, auditTrailInformation);
84 startConversation(context, new IdentifyPillarsForReplaceFile(context));
85 }
86 }