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.deletefile.conversation;
26
27 import org.bitrepository.bitrepositoryelements.ResponseCode;
28 import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileRequest;
29 import org.bitrepository.bitrepositorymessages.IdentifyPillarsForDeleteFileResponse;
30 import org.bitrepository.bitrepositorymessages.MessageResponse;
31 import org.bitrepository.client.conversation.ConversationContext;
32 import org.bitrepository.client.conversation.GeneralConversationState;
33 import org.bitrepository.client.conversation.IdentifyingState;
34 import org.bitrepository.common.exceptions.UnableToFinishException;
35
36
37
38
39 public class IdentifyPillarsForDeleteFile extends IdentifyingState {
40 private final DeleteFileConversationContext context;
41
42 public IdentifyPillarsForDeleteFile(DeleteFileConversationContext context) {
43 super(context.getContributors());
44 this.context = context;
45 }
46
47 @Override
48 public GeneralConversationState getOperationState() {
49 return new DeletingFile(context, getSelector().getSelectedComponents());
50 }
51
52
53
54
55
56
57
58 @Override
59 protected void handleFailureResponse(MessageResponse msg) throws UnableToFinishException {
60 IdentifyPillarsForDeleteFileResponse response = (IdentifyPillarsForDeleteFileResponse) msg;
61 ResponseCode responseCode = response.getResponseInfo().getResponseCode();
62 if(responseCode.equals(ResponseCode.FILE_NOT_FOUND_FAILURE)) {
63
64 getContext().getMonitor().contributorIdentified(response);
65 getContext().getMonitor().contributorComplete(new DeleteFileCompletePillarEvent(
66 response.getFrom(), response.getCollectionID(), null ));
67 } else {
68 getContext().getMonitor().contributorFailed(
69 msg.getResponseInfo().getResponseText(), msg.getFrom(),
70 msg.getResponseInfo().getResponseCode());
71 throw new UnableToFinishException("Can not continue with delete operation, as " + msg.getFrom() +
72 " is unable to perform the deletion.");
73 }
74 }
75
76 @Override
77 protected void sendRequest() {
78 IdentifyPillarsForDeleteFileRequest msg = new IdentifyPillarsForDeleteFileRequest();
79 initializeMessage(msg);
80 msg.setFileID(context.getFileID());
81 msg.setDestination(context.getSettings().getCollectionDestination());
82 context.getMessageSender().sendMessage(msg);
83 context.getMonitor().identifyRequestSent("Identifying pillars for delete file");
84 }
85
86 @Override
87 protected ConversationContext getContext() {
88 return context;
89 }
90
91 @Override
92 protected String getPrimitiveName() {
93 return "IdentifyPillarsForDeleteFile";
94 }
95
96 @Override
97 protected boolean canFinish() {
98 return (getOutstandingComponents().isEmpty());
99 }
100
101 @Override
102 protected void checkForChecksumPillar(MessageResponse msg) {
103 IdentifyPillarsForDeleteFileResponse response = (IdentifyPillarsForDeleteFileResponse) msg;
104 if (response.getPillarChecksumSpec() != null) {
105 context.addChecksumPillar(response.getPillarID());
106 }
107 }
108 }