View Javadoc

1   /*
2    * #%L
3    * Bitrepository Modifying Client
4    * 
5    * $Id: ConversationBasedDeleteFileClient.java 639 2011-12-15 10:24:45Z jolf $
6    * $HeadURL: https://sbforge.org/svn/bitrepository/bitrepository-reference/trunk/bitrepository-modifying-client/src/main/java/org/bitrepository/modify/deletefile/ConversationBasedDeleteFileClient.java $
7    * %%
8    * Copyright (C) 2010 - 2011 The State and University Library, The Royal Library and The State Archives, Denmark
9    * %%
10   * This program is free software: you can redistribute it and/or modify
11   * it under the terms of the GNU Lesser General Public License as 
12   * published by the Free Software Foundation, either version 2.1 of the 
13   * License, or (at your option) any later version.
14   * 
15   * This program is distributed in the hope that it will be useful,
16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
17   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   * GNU General Lesser Public License for more details.
19   * 
20   * You should have received a copy of the GNU General Lesser Public 
21   * License along with this program.  If not, see
22   * <http://www.gnu.org/licenses/lgpl-2.1.html>.
23   * #L%
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   * A conversation based implementation of the ReplaceFileClient.
44   */
45  public class ConversationBasedReplaceFileClient extends AbstractClient implements ReplaceFileClient {
46      private final Logger log = LoggerFactory.getLogger(this.getClass());
47  
48      /**
49       * @see AbstractClient
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  }