From a67996f7b21c2184b034ba8fa6b4b26d924b8a41 Mon Sep 17 00:00:00 2001 From: bohlski Date: Thu, 27 Oct 2022 11:57:47 +0200 Subject: [PATCH 1/5] Fix typos and docs --- .../bitrepository/protocol/FileExchange.java | 26 +++++++------------ .../protocol/ProtocolComponentFactory.java | 2 +- .../protocol/activemq/ActiveMQMessageBus.java | 6 ++--- .../protocol/http/HttpFileExchange.java | 12 +++------ 4 files changed, 16 insertions(+), 30 deletions(-) diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java index fa0177f31..cace6089d 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java @@ -43,8 +43,7 @@ public interface FileExchange { * * @param in The stream from the file to upload. * @param url The URL where the stream is to be put. - * @throws IOException If any problems occurs during the transportation of - * the data. + * @throws IOException If any problems occurs during the transportation of the data. */ void putFile(InputStream in, URL url) throws IOException; @@ -52,19 +51,16 @@ public interface FileExchange { * Places a given file onto the file exchange * * @param file The file to be put into the file exchange. - * @return The url for the file, when it has been placed onto the - * file exchange. + * @return The url for the file, when it has been placed onto the file exchange. */ URL putFile(File file); /** - * Retrieves the data from a given url and puts it onto a given - * output-stream. + * Retrieves the data from a given url and puts it onto a given output-stream. * * @param out The output stream to put the data. * @param url The url for where the data should be retrieved. - * @throws IOException If any problems occurs during the retrieval of the - * data. + * @throws IOException If any problems occurs during the retrieval of the data. */ void getFile(OutputStream out, URL url) throws IOException; @@ -73,28 +69,24 @@ public interface FileExchange { * * @param url The URL to retrieve. * @return The InputStream for the data at the given URL. - * @throws IOException If any problems occurs during the transportation of - * the data. + * @throws IOException If any problems occurs during the transportation of the data. */ InputStream getFile(URL url) throws IOException; /** * Method for downloading a file at a given address. * - * @param outputFile The file where the data at the address should be - * placed. + * @param outputFile The file where the data at the address should be placed. * @param fileAddress The address where the data should be downloaded from. */ void getFile(File outputFile, String fileAddress); /** - * Creates the URL based on a filename. + * Creates the file-exchange URL based on a filename. * - * @param filename The name of the piece of data to transfer (in the form - * of a file). + * @param filename The name of the piece of data to transfer (in the form of a file). * @return The URL containing the filename. - * @throws MalformedURLException If the filename prevents the creation of - * a valid URL. + * @throws MalformedURLException If the filename prevents the creation of a valid URL. */ URL getURL(String filename) throws MalformedURLException; diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java index 52bd0d9b6..e61886963 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java @@ -80,7 +80,7 @@ public MessageBus getMessageBus(Settings settings, SecurityManager securityManag */ public FileExchange getFileExchange(Settings settings) { if (fileExchange == null) { - if ((settings.getReferenceSettings().getFileExchangeSettings() != null)) { + if (settings.getReferenceSettings().getFileExchangeSettings() != null) { ProtocolType protocolType = settings.getReferenceSettings().getFileExchangeSettings().getProtocolType(); if (protocolType == ProtocolType.HTTP) { fileExchange = new HttpFileExchange(settings); diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java index fbff7037b..52e1f523d 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/activemq/ActiveMQMessageBus.java @@ -109,7 +109,7 @@ public class ActiveMQMessageBus implements MessageBus { * The session for sending messages. Should not be the same as the consumer session, * as sessions are not thread safe. This also means the session should be used in a synchronized manor. * TODO Switch to use a session pool/producer poll to allow multithreaded message sending, see - * https://sbforge.org/jira/browse/BITMAG-357. + * https://sbforge.org/jira/browse/BITMAG-357. */ private final Session producerSession; @@ -164,9 +164,7 @@ public class ActiveMQMessageBus implements MessageBus { * @param settings The settings to use. * @param securityManager The security manager to use for message authentication. */ - public ActiveMQMessageBus( - Settings settings, - SecurityManager securityManager) { + public ActiveMQMessageBus(Settings settings, SecurityManager securityManager) { configuration = settings.getMessageBusConfiguration(); log.info("Initializing ActiveMQMessageBus: '{}'", configuration); this.securityManager = securityManager; diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java index 20eaaf2f4..68238f33b 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java @@ -123,14 +123,12 @@ public void getFile(File outputFile, String fileAddress) { } /** - * Retrieves the data from a given url and puts it onto a given - * output-stream. It has to be a 'HTTP' url, since the data is retrieved - * through a HTTP-request. + * Retrieves the data from a given url and puts it onto a given output-stream. + * It has to be a 'HTTP' url, since the data is retrieved through an HTTP-request. * * @param out The output stream to put the data. * @param url The url for where the data should be retrieved. - * @throws IOException If any problems occurs during the retrieval of the - * data. + * @throws IOException If any problems occurs during the retrieval of the data. */ protected void performDownload(OutputStream out, URL url) throws IOException { if (out == null || url == null) { @@ -171,7 +169,6 @@ private void performUpload(InputStream in, URL url) throws IOException { ArgumentValidator.checkNotNull(in, "InputStream in"); ArgumentValidator.checkNotNull(url, "URL url"); - try (CloseableHttpClient httpClient = getHttpClient()) { HttpPut httpPut = new HttpPut(url.toExternalForm()); InputStreamEntity reqEntity = new LargeChunkedInputStreamEntity(in); @@ -181,8 +178,7 @@ private void performUpload(InputStream in, URL url) throws IOException { // HTTP code >= 300 means error! if (response.getStatusLine().getStatusCode() >= HTTP_ERROR_CODE_BARRIER) { - throw new IOException( - "Could not upload file to URL '" + url.toExternalForm() + "'. got status code '" + + throw new IOException("Could not upload file to URL '" + url.toExternalForm() + "'. got status code '" + response.getStatusLine() + "'"); } log.debug("Uploaded data-stream to url '{}' and received the response line '{}'", From d1a82475b0dc714242b26a281c33b2fc85dbfc27 Mon Sep 17 00:00:00 2001 From: bohlski Date: Wed, 2 Nov 2022 10:57:10 +0100 Subject: [PATCH 2/5] Fix typos and the like --- .../org/bitrepository/commandline/GetFileCmd.java | 8 ++++---- .../org/bitrepository/protocol/FileExchange.java | 2 +- .../messagehandler/DeleteFileRequestHandler.java | 2 +- .../messagehandler/GetChecksumsRequestHandler.java | 5 ++--- .../messagehandler/GetFileIDsRequestHandler.java | 2 +- .../messagehandler/GetFileRequestHandler.java | 2 +- .../IdentifyPillarsForGetFileRequestHandler.java | 6 ++++-- .../messagehandler/PillarMessageHandler.java | 2 +- .../messagehandler/PutFileRequestHandler.java | 14 +++++++------- .../messagehandler/ReplaceFileRequestHandler.java | 2 +- .../GeneralMessageHandlingTest.java | 8 ++++---- 11 files changed, 27 insertions(+), 26 deletions(-) diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java index e7101f148..e386fd227 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/GetFileCmd.java @@ -144,8 +144,8 @@ private void downloadFile() { } else { outputFile = new File(cmdHandler.getOptionValue(Constants.FILE_ID_ARG)); } - FileExchange fileexchange = ProtocolComponentFactory.getInstance().getFileExchange(settings); - fileexchange.getFile(outputFile, fileUrl.toExternalForm()); + FileExchange fileExchange = ProtocolComponentFactory.getInstance().getFileExchange(settings); + fileExchange.getFile(outputFile, fileUrl.toExternalForm()); } /** @@ -156,8 +156,8 @@ private void downloadFile() { */ private URL extractUrl(String fileID) { try { - FileExchange fileexchange = ProtocolComponentFactory.getInstance().getFileExchange(settings); - return fileexchange.getURL(fileID); + FileExchange fileExchange = ProtocolComponentFactory.getInstance().getFileExchange(settings); + return fileExchange.getURL(fileID); } catch (MalformedURLException e) { throw new IllegalStateException("Could not make an URL for the file '" + fileID + "'.", e); } diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java index cace6089d..61154b413 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/FileExchange.java @@ -94,7 +94,7 @@ public interface FileExchange { * Removes a file from the given URL. * * @param url The URL where the file should be removed from. - * @throws IOException If issues occurs while removing the file. + * @throws IOException If issues occur while removing the file. * @throws URISyntaxException If the URL is not valid. */ void deleteFile(URL url) throws IOException, URISyntaxException; diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/DeleteFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/DeleteFileRequestHandler.java index 3635c020f..7b9bc91fc 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/DeleteFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/DeleteFileRequestHandler.java @@ -69,7 +69,7 @@ public MessageResponse generateFailedResponse(DeleteFileRequest request) { protected void validateRequest(DeleteFileRequest request, MessageContext messageContext) throws RequestHandlerException { validateCollectionID(request); - validatePillarId(request.getPillarID()); + validatePillarID(request.getPillarID()); getPillarModel().verifyChecksumAlgorithm(request.getChecksumRequestForExistingFile()); if (request.getChecksumDataForExistingFile() != null) { getPillarModel().verifyChecksumAlgorithm(request.getChecksumDataForExistingFile().getChecksumSpec()); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java index 8dbdda9c2..ff675873b 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java @@ -83,7 +83,7 @@ public MessageResponse generateFailedResponse(GetChecksumsRequest request) { protected void validateRequest(GetChecksumsRequest request, MessageContext requestContext) throws RequestHandlerException { validateCollectionID(request); - validatePillarId(request.getPillarID()); + validatePillarID(request.getPillarID()); getPillarModel().verifyChecksumAlgorithm(request.getChecksumRequestForExistingFile()); if (request.getFileIDs() != null && request.getFileIDs().getFileID() != null) { validateFileIDFormat(request.getFileIDs().getFileID()); @@ -248,8 +248,7 @@ private void uploadFile(File fileToUpload, String url) throws IOException { * @param results The results of the checksum calculations. * @param hasMoreEntries Whether more results can be found. */ - private void sendFinalResponse(GetChecksumsRequest request, ResultingChecksums results, - boolean hasMoreEntries) { + private void sendFinalResponse(GetChecksumsRequest request, ResultingChecksums results, boolean hasMoreEntries) { GetChecksumsFinalResponse response = createFinalResponse(request); ResponseInfo fri = new ResponseInfo(); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java index 7b2169aa9..aa89167e2 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java @@ -84,7 +84,7 @@ public MessageResponse generateFailedResponse(GetFileIDsRequest request) { protected void validateRequest(GetFileIDsRequest request, MessageContext requestContext) throws RequestHandlerException { validateCollectionID(request); - validatePillarId(request.getPillarID()); + validatePillarID(request.getPillarID()); if (request.getFileIDs() != null && request.getFileIDs().getFileID() != null) { validateFileIDFormat(request.getFileIDs().getFileID()); verifyFileIDExistence(request.getFileIDs(), request.getCollectionID()); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java index 2a9339dc6..557c1acc7 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java @@ -72,7 +72,7 @@ public MessageResponse generateFailedResponse(GetFileRequest message) { @Override protected void validateRequest(GetFileRequest request, MessageContext requestContext) throws RequestHandlerException { validateCollectionID(request); - validatePillarId(request.getPillarID()); + validatePillarID(request.getPillarID()); validateFileIDFormat(request.getFileID()); getPillarModel().verifyFileExists(request.getFileID(), request.getCollectionID()); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/IdentifyPillarsForGetFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/IdentifyPillarsForGetFileRequestHandler.java index 28e4c593d..fad8209fc 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/IdentifyPillarsForGetFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/IdentifyPillarsForGetFileRequestHandler.java @@ -63,9 +63,11 @@ public MessageResponse generateFailedResponse(IdentifyPillarsForGetFileRequest m } @Override - protected void validateRequest(IdentifyPillarsForGetFileRequest request, MessageContext requestContext) throws RequestHandlerException { + protected void validateRequest(IdentifyPillarsForGetFileRequest request, MessageContext requestContext) + throws RequestHandlerException { if (getPillarModel().getChecksumPillarSpec() != null) { - throw new InvalidMessageException(ResponseCode.REQUEST_NOT_SUPPORTED, "A ChecksumPillar cannot deliver " + "actual files."); + throw new InvalidMessageException(ResponseCode.REQUEST_NOT_SUPPORTED, + "A ChecksumPillar cannot deliver actual files."); } validateCollectionID(request); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PillarMessageHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PillarMessageHandler.java index 6daaff27d..a726450cc 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PillarMessageHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PillarMessageHandler.java @@ -88,7 +88,7 @@ protected AuditTrailManager getAuditManager() { * * @param pillarID The pillar id. */ - protected void validatePillarId(String pillarID) { + protected void validatePillarID(String pillarID) { if (!pillarID.equals(getSettings().getComponentID())) { throw new IllegalArgumentException( "The message had a wrong PillarId: " + "Expected '" + getSettings().getComponentID() + "' but was '" + pillarID + "'."); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PutFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PutFileRequestHandler.java index 8e0655e9d..3fc061df4 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PutFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/PutFileRequestHandler.java @@ -69,12 +69,12 @@ public MessageResponse generateFailedResponse(PutFileRequest message) { @Override protected void validateRequest(PutFileRequest request, MessageContext requestContext) throws RequestHandlerException { validateCollectionID(request); - validatePillarId(request.getPillarID()); + validatePillarID(request.getPillarID()); if (request.getChecksumDataForNewFile() != null) { getPillarModel().verifyChecksumAlgorithm(request.getChecksumDataForNewFile().getChecksumSpec()); } else if (getSettings().getRepositorySettings().getProtocolSettings().isRequireChecksumForNewFileRequests()) { throw new IllegalOperationException(ResponseCode.NEW_FILE_CHECKSUM_FAILURE, - "A checksum is required for " + "the PutFile operation to be performed.", request.getFileID()); + "A checksum is required for the PutFile operation to be performed.", request.getFileID()); } getPillarModel().verifyChecksumAlgorithm(request.getChecksumRequestForNewFile()); @@ -102,9 +102,9 @@ protected void performOperation(PutFileRequest request, MessageContext requestCo MessageUtils.createMessageIdentifier(request), request.getFileID(), request.getCollectionID()); try { retrieveFile(request); - getAuditManager().addAuditEvent(request.getCollectionID(), request.getFileID(), request.getFrom(), "Add file to archive.", - request.getAuditTrailInformation(), FileAction.PUT_FILE, request.getCorrelationID(), - requestContext.getCertificateFingerprint()); + getAuditManager().addAuditEvent(request.getCollectionID(), request.getFileID(), request.getFrom(), + "Add file to archive.", request.getAuditTrailInformation(), FileAction.PUT_FILE, + request.getCorrelationID(), requestContext.getCertificateFingerprint()); sendFinalResponse(request); } finally { getPillarModel().ensureFileNotInTmpDir(request.getFileID(), request.getCollectionID()); @@ -167,8 +167,8 @@ private void sendFinalResponse(PutFileRequest message) throws RequestHandlerExce response.setResponseInfo(frInfo); if (message.getChecksumRequestForNewFile() != null) { - response.setChecksumDataForNewFile(getPillarModel().getChecksumDataForFile(message.getFileID(), message.getCollectionID(), - message.getChecksumRequestForNewFile())); + response.setChecksumDataForNewFile(getPillarModel().getChecksumDataForFile(message.getFileID(), + message.getCollectionID(), message.getChecksumRequestForNewFile())); } else { log.debug("No checksum validation requested."); } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/ReplaceFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/ReplaceFileRequestHandler.java index 610961b6e..560999c15 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/ReplaceFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/ReplaceFileRequestHandler.java @@ -82,7 +82,7 @@ public MessageResponse generateFailedResponse(ReplaceFileRequest message) { protected void validateRequest(ReplaceFileRequest request, MessageContext requestContext) throws RequestHandlerException { validateCollectionID(request); - validatePillarId(request.getPillarID()); + validatePillarID(request.getPillarID()); validateFileIDFormat(request.getFileID()); if (!getPillarModel().hasFileID(request.getFileID(), request.getCollectionID())) { diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java index ceb42d223..53cb1068b 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/messagehandling/GeneralMessageHandlingTest.java @@ -46,7 +46,7 @@ public void setup() { } @Test( groups = {"regressiontest", "pillartest"}) - public void testPillarMessageHandler() throws Exception { + public void testPillarMessageHandler() { addDescription("Test the handling of the PillarMessageHandler super-class."); addStep("Setup", "Should be OK."); @@ -124,15 +124,15 @@ public Class getRequestClass() { } @Override - public void processRequest(MessageRequest request, MessageContext messageContext) throws RequestHandlerException {} + public void processRequest(MessageRequest request, MessageContext messageContext) {} @Override public MessageResponse generateFailedResponse(MessageRequest request) { return null; } - public void validatePillarID(String pillarID) throws RequestHandlerException { - super.validatePillarId(pillarID); + public void validatePillarID(String pillarID) { + super.validatePillarID(pillarID); } public void validateFileIDFormat(String fileID) throws RequestHandlerException { From a71125f50db3fa84e73fa653e3dad013dbf1e0a8 Mon Sep 17 00:00:00 2001 From: bohlski Date: Mon, 7 Nov 2022 13:46:51 +0100 Subject: [PATCH 3/5] Add FileExchangeResolver Also removed FileExchange as StorageModel-param and fixed few typos etc. --- .../commandline/CommandLineClient.java | 20 ++++-- .../protocol/LocalFileExchange.java | 14 ++-- .../protocol/ProtocolComponentFactory.java | 27 +++----- .../protocol/http/HttpFileExchange.java | 12 ++-- .../protocol/http/HttpsFileExchange.java | 4 +- .../protocol/utils/FileExchangeResolver.java | 62 +++++++++++++++++ .../fileexchange/LocalFileExchangeTest.java | 66 ++++++++---------- .../protocol/http/HttpFileExchangeTest.java | 14 ++-- .../utils/FileExchangeResolverTest.java | 67 +++++++++++++++++++ .../IntegrityServiceManager.java | 4 +- .../pillar/PillarComponentFactory.java | 10 ++- .../pillar/store/ChecksumStorageModel.java | 45 +++++++------ .../pillar/store/FileStorageModel.java | 11 +-- .../pillar/store/StorageModel.java | 9 +-- .../pillar/DefaultPillarTest.java | 16 ++++- .../pillar/store/ChecksumPillarModelTest.java | 11 ++- .../pillar/store/FullPillarModelTest.java | 11 +-- ...a => AuditTrailContributorDAOFactory.java} | 2 +- ...tributerTest.java => ContributorTest.java} | 2 +- 19 files changed, 265 insertions(+), 142 deletions(-) create mode 100644 bitrepository-core/src/main/java/org/bitrepository/protocol/utils/FileExchangeResolver.java create mode 100644 bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java rename bitrepository-service/src/main/java/org/bitrepository/service/audit/{AuditTrailContributerDAOFactory.java => AuditTrailContributorDAOFactory.java} (96%) rename bitrepository-service/src/test/java/org/bitrepository/service/{ContributerTest.java => ContributorTest.java} (97%) diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java index 4af4b6175..11ed897a7 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/CommandLineClient.java @@ -43,6 +43,7 @@ import org.bitrepository.protocol.messagebus.MessageBus; import org.bitrepository.protocol.messagebus.MessageBusManager; import org.bitrepository.protocol.security.SecurityManager; +import org.bitrepository.settings.referencesettings.ProtocolType; import javax.jms.JMSException; import java.io.File; @@ -335,19 +336,26 @@ protected void deleteFileAfterwards(URL url) { * @return The URL for the file. */ protected URL getURLOrUploadFile() { + FileExchange fileExchange = ProtocolComponentFactory.getInstance().getFileExchange(settings); if (cmdHandler.hasOption(Constants.FILE_ARG)) { File f = findTheFile(); - FileExchange fileexchange = ProtocolComponentFactory.getInstance().getFileExchange(settings); - return fileexchange.putFile(f); + return fileExchange.putFile(f); } else { String urlArg = cmdHandler.getOptionValue(Constants.URL_ARG); + try { final URL url = new URL(urlArg); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - int responseCode = connection.getResponseCode(); - if (responseCode > 399) { - throw new Exception("Http URL Connection ResponseCode: " + responseCode); + ProtocolType protocolType = ProtocolType.fromValue(url.getProtocol().toUpperCase(Locale.ROOT)); + if (protocolType != ProtocolType.FILE) { + // Test if URL can actually be opened to exit early + // - otherwise checksum pillars will still receive and store checksum. + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + int responseCode = connection.getResponseCode(); + + if (responseCode > 399) { + throw new Exception("Http URL Connection ResponseCode: " + responseCode); + } } return url; diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java index f873b88f6..fd6e09a09 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/LocalFileExchange.java @@ -21,8 +21,10 @@ */ package org.bitrepository.protocol; +import org.bitrepository.common.ArgumentValidator; import org.bitrepository.common.utils.FileUtils; import org.bitrepository.common.utils.StreamUtils; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; import java.io.BufferedOutputStream; import java.io.File; @@ -38,10 +40,10 @@ * File exchange used for exchanging files on a local filesystem */ public class LocalFileExchange implements FileExchange { - private final File storageDir; + private final FileExchangeSettings settings; - public LocalFileExchange(String storageDir) { - this.storageDir = new File(storageDir); + public LocalFileExchange(FileExchangeSettings settings) { + this.settings = settings; } @Override @@ -58,7 +60,7 @@ public void putFile(InputStream in, URL url) throws IOException { @Override public URL putFile(File dataFile) { try { - File dest = new File(storageDir, new File(dataFile.toString()).getName()); + File dest = new File(settings.getPath(), dataFile.getName()); FileUtils.copyFile(dataFile, dest); return dest.toURI().toURL(); } catch (MalformedURLException e) { @@ -98,7 +100,9 @@ public void getFile(File outputFile, String fileAddress) { @Override public URL getURL(String filename) throws MalformedURLException { - File dest = new File(storageDir, new File(filename).getName()); + ArgumentValidator.checkNotNull(settings, + "The ReferenceSettings are missing the settings for the file exchange."); + File dest = new File(settings.getPath(), new File(filename).getName()); URL url; try { url = dest.toURI().toURL(); diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java index e61886963..e61b456ba 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/ProtocolComponentFactory.java @@ -25,20 +25,16 @@ package org.bitrepository.protocol; import org.bitrepository.common.settings.Settings; -import org.bitrepository.protocol.http.HttpFileExchange; -import org.bitrepository.protocol.http.HttpsFileExchange; import org.bitrepository.protocol.messagebus.MessageBus; import org.bitrepository.protocol.messagebus.MessageBusManager; import org.bitrepository.protocol.security.SecurityManager; -import org.bitrepository.settings.referencesettings.ProtocolType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.bitrepository.protocol.utils.FileExchangeResolver; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; /** - * Provides access to the different component in the org.bitrepository.org.bitrepository.protocol module (Spring/IOC wannabe) + * Provides access to the different components in the org.bitrepository.protocol module (Spring/IOC wannabe) */ public final class ProtocolComponentFactory { - private static final Logger log = LoggerFactory.getLogger(ProtocolComponentFactory.class); private static ProtocolComponentFactory instance; public static synchronized ProtocolComponentFactory getInstance() { @@ -72,7 +68,7 @@ public MessageBus getMessageBus(Settings settings, SecurityManager securityManag } /** - * Gets you an FileExchange instance for data communication. Is instantiated based on the + * Gets you a FileExchange instance for data communication. Is instantiated based on the * configurations. * * @param settings The settings for the file exchange. @@ -80,18 +76,11 @@ public MessageBus getMessageBus(Settings settings, SecurityManager securityManag */ public FileExchange getFileExchange(Settings settings) { if (fileExchange == null) { - if (settings.getReferenceSettings().getFileExchangeSettings() != null) { - ProtocolType protocolType = settings.getReferenceSettings().getFileExchangeSettings().getProtocolType(); - if (protocolType == ProtocolType.HTTP) { - fileExchange = new HttpFileExchange(settings); - } else if (protocolType == ProtocolType.HTTPS) { - fileExchange = new HttpsFileExchange(settings); - } else if (protocolType == ProtocolType.FILE) { - fileExchange = new LocalFileExchange( - settings.getReferenceSettings().getFileExchangeSettings().getPath()); - } + FileExchangeSettings fileExchangeSettings = settings.getReferenceSettings().getFileExchangeSettings(); + if (fileExchangeSettings != null) { + fileExchange = FileExchangeResolver.getFileExchange(fileExchangeSettings); } else { - fileExchange = new HttpFileExchange(settings); + throw new IllegalStateException("No FileExchangeSettings found in configuration"); } } return fileExchange; diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java index 68238f33b..a65e56511 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpFileExchange.java @@ -35,7 +35,6 @@ import org.apache.http.impl.conn.ChunkyManagedHttpClientConnectionFactory; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.bitrepository.common.ArgumentValidator; -import org.bitrepository.common.settings.Settings; import org.bitrepository.common.utils.StreamUtils; import org.bitrepository.protocol.CoordinationLayerException; import org.bitrepository.protocol.FileExchange; @@ -63,9 +62,9 @@ public class HttpFileExchange implements FileExchange { private static final int HTTP_ERROR_CODE_BARRIER = 300; protected int HTTP_BUFFER_SIZE = 1024 * 1024; protected static final int HTTP_CHUNK_SIZE = 64 * 1024; - protected final Settings settings; + protected final FileExchangeSettings settings; - public HttpFileExchange(Settings settings) { + public HttpFileExchange(FileExchangeSettings settings) { this.settings = settings; } @@ -189,13 +188,12 @@ private void performUpload(InputStream in, URL url) throws IOException { @Override public URL getURL(String filename) throws MalformedURLException { ArgumentValidator.checkNotNullOrEmpty(filename, "String fileName"); - ArgumentValidator.checkNotNull(settings.getReferenceSettings().getFileExchangeSettings(), + ArgumentValidator.checkNotNull(settings, "The ReferenceSettings are missing the settings for the file exchange."); - FileExchangeSettings feSettings = settings.getReferenceSettings().getFileExchangeSettings(); String urlEncodedFilename = URLEncoder.encode(filename, StandardCharsets.UTF_8); - return new URL(feSettings.getProtocolType().value(), feSettings.getServerName(), feSettings.getPort().intValue(), - feSettings.getPath() + "/" + urlEncodedFilename); + return new URL(settings.getProtocolType().value(), settings.getServerName(), settings.getPort().intValue(), + settings.getPath() + "/" + urlEncodedFilename); } /** diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpsFileExchange.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpsFileExchange.java index 3a5706e87..f7b991d0b 100644 --- a/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpsFileExchange.java +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/http/HttpsFileExchange.java @@ -36,8 +36,8 @@ import org.apache.http.impl.conn.ChunkyManagedHttpClientConnectionFactory; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.impl.conn.SystemDefaultDnsResolver; -import org.bitrepository.common.settings.Settings; import org.bitrepository.protocol.CoordinationLayerException; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; @@ -51,7 +51,7 @@ public class HttpsFileExchange extends HttpFileExchange { private final HostnameVerifier hostnameVerifier; - public HttpsFileExchange(Settings settings) { + public HttpsFileExchange(FileExchangeSettings settings) { super(settings); hostnameVerifier = NoopHostnameVerifier.INSTANCE; } diff --git a/bitrepository-core/src/main/java/org/bitrepository/protocol/utils/FileExchangeResolver.java b/bitrepository-core/src/main/java/org/bitrepository/protocol/utils/FileExchangeResolver.java new file mode 100644 index 000000000..992cbfc47 --- /dev/null +++ b/bitrepository-core/src/main/java/org/bitrepository/protocol/utils/FileExchangeResolver.java @@ -0,0 +1,62 @@ +package org.bitrepository.protocol.utils; + +import org.bitrepository.common.settings.Settings; +import org.bitrepository.protocol.FileExchange; +import org.bitrepository.protocol.LocalFileExchange; +import org.bitrepository.protocol.http.HttpFileExchange; +import org.bitrepository.protocol.http.HttpsFileExchange; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; +import org.bitrepository.settings.referencesettings.ProtocolType; + +import java.net.URL; +import java.util.Locale; + +/** + * Util class for resolving what kind of file exchange to use. + */ +public class FileExchangeResolver { + /** + * Get an unconfigured {@link FileExchange} matching the given {@link URL}'s protocol. + * + * This should only be used when wanting a dynamically instantiated {@link FileExchange} to make get/put-operations + * to a specific URL. To get a {@link FileExchange} matching the statically configured {@link FileExchangeSettings} + * see {@link org.bitrepository.protocol.ProtocolComponentFactory#getFileExchange(Settings)}. + * + * @param url The {@link URL} to get a {@link FileExchange} from. + * @return A new {@link FileExchange} matching url. + */ + public static FileExchange getBasicFileExchangeFromURL(URL url) { + ProtocolType protocolType = protocolNameToProtocolType(url.getProtocol()); + FileExchangeSettings basicSettings = new FileExchangeSettings(); + basicSettings.setProtocolType(protocolType); + return getFileExchange(basicSettings); + } + + /** + * Get a {@link FileExchange} corresponding to the given {@link FileExchangeSettings} + * @param exchangeSettings Settings to get exchange from. + * @return New {@link FileExchange}. + */ + public static FileExchange getFileExchange(FileExchangeSettings exchangeSettings) { + switch (exchangeSettings.getProtocolType()) { + case FILE: + return new LocalFileExchange(exchangeSettings); + case HTTP: + return new HttpFileExchange(exchangeSettings); + case HTTPS: + return new HttpsFileExchange(exchangeSettings); + default: + throw new IllegalStateException("Can't resolve protocol type " + exchangeSettings); + } + } + + /** + * Gets a {@link ProtocolType} matching the given protocol name. + * Throws an {@link IllegalArgumentException} if an invalid/unsupported protocol is provided. + * @param protocol Protocol name (e.g. 'file' or 'https') + * @return The matching {@link ProtocolType}. + */ + private static ProtocolType protocolNameToProtocolType(String protocol) { + return ProtocolType.fromValue(protocol.toUpperCase(Locale.ROOT)); + } +} diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java index 4b1580d11..2e3b1ae1d 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/fileexchange/LocalFileExchangeTest.java @@ -1,9 +1,9 @@ package org.bitrepository.protocol.fileexchange; -import org.apache.commons.codec.CharEncoding; import org.apache.commons.io.IOUtils; import org.bitrepository.protocol.FileExchange; import org.bitrepository.protocol.LocalFileExchange; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; import org.fusesource.hawtbuf.ByteArrayInputStream; import org.jaccept.structure.ExtendedTestCase; import org.testng.Assert; @@ -25,11 +25,18 @@ import java.nio.file.Paths; public class LocalFileExchangeTest extends ExtendedTestCase { - final static String BASE_FILE_EXCHANGE_DIR = "target/fileexchange/"; - - @BeforeClass - public void createFileExchangeDir() throws IOException { + private FileExchange exchange; + + @BeforeClass(alwaysRun = true) + public void setup() throws IOException { + createFileExchangeDir(); + FileExchangeSettings settings = new FileExchangeSettings(); + settings.setPath(BASE_FILE_EXCHANGE_DIR); + exchange = new LocalFileExchange(settings); + } + + private void createFileExchangeDir() throws IOException { try { Files.createDirectory(Paths.get(BASE_FILE_EXCHANGE_DIR)); } catch (FileAlreadyExistsException e) { @@ -44,9 +51,7 @@ public void getUrlTest() throws MalformedURLException { File basedir = new File(BASE_FILE_EXCHANGE_DIR); URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + testFile); - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); - - URL actualUrl = lfe.getURL(testFile); + URL actualUrl = exchange.getURL(testFile); Assert.assertEquals(actualUrl, expectedUrl); File actualFile = new File(actualUrl.getFile()); Assert.assertFalse(actualFile.exists()); @@ -54,8 +59,8 @@ public void getUrlTest() throws MalformedURLException { /** * Test that filenames containing '#' character can be ingested in bitrepository - * Filenames needs to be ingested URLEncoded meaning that the url to filenames is delivered as "getUrlTestfileHashchar%23Testfragment" instead of getUrlTestfileHashchar#Testfragment - * @throws IOException + * Filenames needs to be ingested URLEncoded meaning that the url to filenames is delivered as + * "getUrlTestfileHashchar%23Testfragment" instead of getUrlTestfileHashchar#Testfragment */ @Test public void putFileByFileContainingHashTest() throws Exception { @@ -64,12 +69,11 @@ public void putFileByFileContainingHashTest() throws Exception { String testFileContent = "lorem ipsum1"; File testFile = createTestFile(testFileLocation, testFileContent); - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); - File basedir = new File(BASE_FILE_EXCHANGE_DIR); - URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + URLEncoder.encode(testFileName, CharEncoding.UTF_8)); + URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + URLEncoder.encode(testFileName, + StandardCharsets.UTF_8)); - URL fileExchangeUrl = lfe.putFile(testFile); + URL fileExchangeUrl = exchange.putFile(testFile); Assert.assertEquals(fileExchangeUrl, expectedUrl); File actualFile = new File(fileExchangeUrl.toURI()); Assert.assertTrue(actualFile.exists()); @@ -85,12 +89,10 @@ public void putFileByFileTest() throws IOException { String testFileContent = "lorem ipsum1"; File testFile = createTestFile(testFileLocation, testFileContent); - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); - File basedir = new File(BASE_FILE_EXCHANGE_DIR); URL expectedUrl = new URL("file:" + basedir.getAbsolutePath() + "/" + testFileName); - URL fileExchangeUrl = lfe.putFile(testFile); + URL fileExchangeUrl = exchange.putFile(testFile); Assert.assertEquals(fileExchangeUrl, expectedUrl); File actualFile = new File(fileExchangeUrl.getFile()); @@ -105,11 +107,9 @@ public void putFileByStreamTest() throws IOException { String testFileName = "putFileByStreamTestFile"; String testFileContent = "lorem ipsum2"; - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); - InputStream is = new ByteArrayInputStream(testFileContent.getBytes(StandardCharsets.UTF_8)); - URL fileExchangeUrl = lfe.getURL(testFileName); - lfe.putFile(is, fileExchangeUrl); + URL fileExchangeUrl = exchange.getURL(testFileName); + exchange.putFile(is, fileExchangeUrl); File fileExchangeFile = new File(fileExchangeUrl.getFile()); String fileExchangeContent = readTestFileContent(fileExchangeFile); @@ -123,12 +123,10 @@ public void getFileByInputStreamTest() throws IOException { String testFileContent = "lorem ipsum3"; String testFileLocation = "target/" + testFileName; - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); - File testFile = createTestFile(testFileLocation, testFileContent); URL testFileUrl = testFile.toURI().toURL(); - InputStream is = lfe.getFile(testFileUrl); + InputStream is = exchange.getFile(testFileUrl); String fileContent = IOUtils.toString(is, StandardCharsets.UTF_8); Assert.assertEquals(fileContent, testFileContent); } @@ -142,11 +140,9 @@ public void getFileByOutputStreamTest() throws IOException { File testFile = createTestFile(testFileLocation, testFileContent); URL testFileUrl = testFile.toURI().toURL(); - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); - OutputStream os = new ByteArrayOutputStream(); - lfe.getFile(os, testFileUrl); + exchange.getFile(os, testFileUrl); Assert.assertEquals(os.toString(), testFileContent); } @@ -155,15 +151,14 @@ public void getFileByAddressTest() throws IOException { String testFileName = "getFileByAddressTestFile"; String testFileContent = "lorem ipsum5"; String testFileLocation = "target/" + testFileName; - - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); + File testFile = createTestFile(testFileLocation, testFileContent); URL testFileUrl = testFile.toURI().toURL(); File destination = new File("target/getFileByAddressTestOutputFile"); destination.deleteOnExit(); - lfe.getFile(destination, testFileUrl.toString()); + exchange.getFile(destination, testFileUrl.toString()); String destinationContent = readTestFileContent(destination); Assert.assertEquals(destinationContent, testFileContent); } @@ -173,15 +168,13 @@ public void deleteFileTest() throws IOException, URISyntaxException { String testFileName = "putFileByStreamTestFile"; String testFileContent = "lorem ipsum6"; - FileExchange lfe = new LocalFileExchange(BASE_FILE_EXCHANGE_DIR); - InputStream is = new ByteArrayInputStream(testFileContent.getBytes(StandardCharsets.UTF_8)); - URL fileExchangeUrl = lfe.getURL(testFileName); - lfe.putFile(is, fileExchangeUrl); + URL fileExchangeUrl = exchange.getURL(testFileName); + exchange.putFile(is, fileExchangeUrl); File fileExchangeFile = new File(fileExchangeUrl.getFile()); Assert.assertTrue(fileExchangeFile.exists()); - lfe.deleteFile(fileExchangeUrl); + exchange.deleteFile(fileExchangeUrl); Assert.assertFalse(fileExchangeFile.exists()); } @@ -193,8 +186,7 @@ private File createTestFile(String filename, String content) throws IOException } private String readTestFileContent(File testFile) throws IOException { - String content = new String(Files.readAllBytes(Paths.get(testFile.toURI())), StandardCharsets.UTF_8); - return content; + return Files.readString(Paths.get(testFile.toURI())); } } diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java index be109a1b2..ef6485025 100644 --- a/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/http/HttpFileExchangeTest.java @@ -23,6 +23,7 @@ import org.bitrepository.common.settings.Settings; import org.bitrepository.common.settings.TestSettingsProvider; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; import org.bitrepository.settings.referencesettings.ProtocolType; import org.jaccept.structure.ExtendedTestCase; import org.testng.annotations.Test; @@ -38,12 +39,13 @@ public class HttpFileExchangeTest extends ExtendedTestCase { public void checkUrlEncodingOfFilenamesTest() throws MalformedURLException { addDescription("Tests that the filename is url-encoded correctly for a configured webdav server"); Settings mySettings = TestSettingsProvider.reloadSettings("uploadTest"); - mySettings.getReferenceSettings().getFileExchangeSettings().setProtocolType(ProtocolType.HTTP); - mySettings.getReferenceSettings().getFileExchangeSettings().setServerName("http:testserver.org"); - mySettings.getReferenceSettings().getFileExchangeSettings().setPort(BigInteger.valueOf(8000)); - mySettings.getReferenceSettings().getFileExchangeSettings().setPath("dav"); - HttpFileExchange fe = new HttpFileExchange(mySettings); - String serverPathPrefix = mySettings.getReferenceSettings().getFileExchangeSettings().getPath() + "/"; + FileExchangeSettings fileExchangeSettings = mySettings.getReferenceSettings().getFileExchangeSettings(); + fileExchangeSettings.setProtocolType(ProtocolType.HTTP); + fileExchangeSettings.setServerName("http:testserver.org"); + fileExchangeSettings.setPort(BigInteger.valueOf(8000)); + fileExchangeSettings.setPath("dav"); + HttpFileExchange fe = new HttpFileExchange(fileExchangeSettings); + String serverPathPrefix = fileExchangeSettings.getPath() + "/"; addStep("Check plain filename (a filename that does not see any changes due to urlencoding", "The filename " + "should be unmodified"); diff --git a/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java b/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java new file mode 100644 index 000000000..558bdab3b --- /dev/null +++ b/bitrepository-core/src/test/java/org/bitrepository/protocol/utils/FileExchangeResolverTest.java @@ -0,0 +1,67 @@ +package org.bitrepository.protocol.utils; + +import org.bitrepository.protocol.FileExchange; +import org.bitrepository.protocol.LocalFileExchange; +import org.bitrepository.protocol.http.HttpFileExchange; +import org.bitrepository.protocol.http.HttpsFileExchange; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; +import org.bitrepository.settings.referencesettings.ProtocolType; +import org.testng.annotations.Test; + +import java.net.MalformedURLException; +import java.net.URL; + +import static org.testng.Assert.assertEquals; + +public class FileExchangeResolverTest { + @Test + public void resolveFileProtocol() { + FileExchangeSettings settings = new FileExchangeSettings(); + settings.setProtocolType(ProtocolType.FILE); + FileExchange exchange = FileExchangeResolver.getFileExchange(settings); + assertEquals(exchange.getClass(), LocalFileExchange.class); + } + + @Test + public void resolveHttpProtocol() { + FileExchangeSettings settings = new FileExchangeSettings(); + settings.setProtocolType(ProtocolType.HTTP); + FileExchange exchange = FileExchangeResolver.getFileExchange(settings); + assertEquals(exchange.getClass(), HttpFileExchange.class); + } + + @Test + public void resolveHttpsProtocol() { + FileExchangeSettings settings = new FileExchangeSettings(); + settings.setProtocolType(ProtocolType.HTTPS); + FileExchange exchange = FileExchangeResolver.getFileExchange(settings); + assertEquals(exchange.getClass(), HttpsFileExchange.class); + } + + @Test + public void resolveFileProtocolURL() throws MalformedURLException { + URL url = new URL("file:///home/user/Desktop/my-cool-file.txt"); + FileExchange exchange = FileExchangeResolver.getBasicFileExchangeFromURL(url); + assertEquals(exchange.getClass(), LocalFileExchange.class); + } + + @Test + public void resolveHttpProtocolURL() throws MalformedURLException { + URL url = new URL("http://localhost:80/myfile.txt"); + FileExchange exchange = FileExchangeResolver.getBasicFileExchangeFromURL(url); + assertEquals(exchange.getClass(), HttpFileExchange.class); + } + + @Test + public void resolveHttpsProtocolURL() throws MalformedURLException { + URL url = new URL("https://localhost:443/myfile.txt"); + FileExchange exchange = FileExchangeResolver.getBasicFileExchangeFromURL(url); + assertEquals(exchange.getClass(), HttpsFileExchange.class); + } + + @Test(expectedExceptions = {IllegalArgumentException.class}) + public void resolveBadProtocolURL() throws MalformedURLException { + URL badURL = new URL("ftp://some/path"); + FileExchangeResolver.getBasicFileExchangeFromURL(badURL); + } +} diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java index c401b14b0..046932651 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java @@ -44,7 +44,7 @@ import org.bitrepository.protocol.security.SecurityManagerUtil; import org.bitrepository.service.LifeCycledService; import org.bitrepository.service.ServiceSettingsProvider; -import org.bitrepository.service.audit.AuditTrailContributerDAOFactory; +import org.bitrepository.service.audit.AuditTrailContributorDAOFactory; import org.bitrepository.service.audit.AuditTrailManager; import org.bitrepository.service.contributor.ContributorMediator; import org.bitrepository.service.contributor.SimpleContributorMediator; @@ -114,7 +114,7 @@ public static synchronized void initialize(String configurationDir) { messageBus = ProtocolComponentFactory.getInstance().getMessageBus(settings, securityManager); - AuditTrailContributerDAOFactory daoFactory = new AuditTrailContributerDAOFactory(); + AuditTrailContributorDAOFactory daoFactory = new AuditTrailContributorDAOFactory(); AuditTrailManager auditManager = daoFactory.getAuditTrailContributorDAO( settings.getReferenceSettings().getIntegrityServiceSettings().getAuditTrailContributerDatabase(), settings.getComponentID()); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java index 8f55963bc..0f29bb3d2 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java @@ -50,7 +50,7 @@ import org.bitrepository.protocol.security.PermissionStore; import org.bitrepository.protocol.security.SecurityManager; import org.bitrepository.service.AlarmDispatcher; -import org.bitrepository.service.audit.AuditTrailContributerDAOFactory; +import org.bitrepository.service.audit.AuditTrailContributorDAOFactory; import org.bitrepository.service.audit.AuditTrailManager; import org.bitrepository.service.contributor.ResponseDispatcher; import org.bitrepository.service.database.DatabaseManager; @@ -142,7 +142,7 @@ private ChecksumStore getChecksumStore(Settings settings) { * @return The AuditTrailManager. */ private AuditTrailManager getAuditTrailManager(Settings settings) { - AuditTrailContributerDAOFactory daoFactory = new AuditTrailContributerDAOFactory(); + AuditTrailContributorDAOFactory daoFactory = new AuditTrailContributorDAOFactory(); return daoFactory.getAuditTrailContributorDAO( settings.getReferenceSettings().getPillarSettings().getAuditTrailContributerDatabase(), settings.getComponentID()); @@ -182,12 +182,10 @@ private FileStore getFileStore(Settings settings) { private StorageModel getPillarModel(Settings settings, ChecksumStore cache, AlarmDispatcher alarmDispatcher) { PillarType pillarType = settings.getReferenceSettings().getPillarSettings().getPillarType(); if (pillarType == PillarType.CHECKSUM) { - return new ChecksumStorageModel(cache, alarmDispatcher, settings, - ProtocolComponentFactory.getInstance().getFileExchange(settings)); + return new ChecksumStorageModel(cache, alarmDispatcher, settings); } else if (pillarType == PillarType.FILE) { FileStore archive = getFileStore(settings); - return new FileStorageModel(archive, cache, alarmDispatcher, settings, - ProtocolComponentFactory.getInstance().getFileExchange(settings)); + return new FileStorageModel(archive, cache, alarmDispatcher, settings); } else { throw new IllegalStateException("Cannot instantiate a pillar of type '" + pillarType + "'."); } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java index 191e44f2e..e3f19008e 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/ChecksumStorageModel.java @@ -35,6 +35,7 @@ import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; import org.bitrepository.protocol.FileExchange; +import org.bitrepository.protocol.utils.FileExchangeResolver; import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.exception.IllegalOperationException; import org.bitrepository.service.exception.InvalidMessageException; @@ -58,10 +59,9 @@ public class ChecksumStorageModel extends StorageModel { * @param cache The storage for the checksums. * @param alarmDispatcher The alarm dispatcher. * @param settings The configuration to use. - * @param fileExchange The file exchange. */ - public ChecksumStorageModel(ChecksumStore cache, AlarmDispatcher alarmDispatcher, Settings settings, FileExchange fileExchange) { - super(null, cache, alarmDispatcher, settings, fileExchange); + public ChecksumStorageModel(ChecksumStore cache, AlarmDispatcher alarmDispatcher, Settings settings) { + super(null, cache, alarmDispatcher, settings); } @Override @@ -75,16 +75,18 @@ public void verifyEnoughFreeSpaceLeftForFile(Long fileSize, String collectionID) } @Override - public void replaceFile(String fileID, String collectionID, String fileAddress, ChecksumDataForFileTYPE expectedChecksum) - throws RequestHandlerException { - String calculatedChecksum = retrieveChecksumFromDownloadOrVerificationData(fileID, collectionID, fileAddress, expectedChecksum); + public void replaceFile(String fileID, String collectionID, String fileAddress, + ChecksumDataForFileTYPE expectedChecksum) throws RequestHandlerException { + String calculatedChecksum = retrieveChecksumFromDownloadOrVerificationData(fileID, collectionID, fileAddress, + expectedChecksum); cache.insertChecksumCalculation(fileID, collectionID, calculatedChecksum, new Date()); } @Override - public void putFile(String collectionID, String fileID, String fileAddress, ChecksumDataForFileTYPE expectedChecksum) - throws RequestHandlerException { - String calculatedChecksum = retrieveChecksumFromDownloadOrVerificationData(fileID, collectionID, fileAddress, expectedChecksum); + public void putFile(String collectionID, String fileID, String fileAddress, + ChecksumDataForFileTYPE expectedChecksum) throws RequestHandlerException { + String calculatedChecksum = retrieveChecksumFromDownloadOrVerificationData(fileID, collectionID, fileAddress, + expectedChecksum); cache.insertChecksumCalculation(fileID, collectionID, calculatedChecksum, new Date()); } @@ -99,7 +101,8 @@ protected void verifyFileToCacheConsistencyIfRequired(String fileID, String coll } @Override - protected String getNonDefaultChecksum(String fileID, String collectionID, ChecksumSpecTYPE csType) throws RequestHandlerException { + protected String getNonDefaultChecksum(String fileID, String collectionID, ChecksumSpecTYPE csType) + throws RequestHandlerException { throw new InvalidMessageException(ResponseCode.REQUEST_NOT_SUPPORTED, "The ChecksumPillar cannot handle a non-default checksum specification '" + csType + "'.'"); } @@ -112,13 +115,13 @@ public FileInfo getFileInfoForActualFile(String fileID, String collectionID) thr @Override public ExtractedFileIDsResultSet getFileIDsResultSet(String fileID, XMLGregorianCalendar minTimestamp, - XMLGregorianCalendar maxTimestamp, Long maxResults, String collectionID) { + XMLGregorianCalendar maxTimestamp, Long maxResults, String collectionID) { return cache.getFileIDs(minTimestamp, maxTimestamp, maxResults, fileID, collectionID); } @Override - protected ExtractedChecksumResultSet getNonDefaultChecksumResultSet(Long maxResults, String collectionID, ChecksumSpecTYPE csSpec) - throws RequestHandlerException { + protected ExtractedChecksumResultSet getNonDefaultChecksumResultSet(Long maxResults, String collectionID, + ChecksumSpecTYPE csSpec) throws RequestHandlerException { throw new InvalidMessageException(ResponseCode.REQUEST_NOT_SUPPORTED, "This is a checksum pillar and it does not have the actual file. Only it's checksum."); } @@ -141,12 +144,11 @@ public void verifyFileExists(String fileID, String collectionID) throws RequestH * extracted from here instead. * @return The checksum. * @throws RequestHandlerException If something goes wrong with extracting the checksum, e.g. it is missing from - * the 'expectedChecksum' part, it is not possible to download, or the downloaded file does not have - * the expected - * checksum. + * the 'expectedChecksum' part, it is not possible to download, + * or the downloaded file does not have the expected checksum. */ private String retrieveChecksumFromDownloadOrVerificationData(String fileID, String collectionID, String fileAddress, - ChecksumDataForFileTYPE expectedChecksum) throws RequestHandlerException { + ChecksumDataForFileTYPE expectedChecksum) throws RequestHandlerException { switch (getChecksumPillarFileDownload()) { case ALWAYS_DOWNLOAD: return downloadFileAndCalculateChecksum(fileID, collectionID, fileAddress, expectedChecksum); @@ -201,14 +203,15 @@ private String extractChecksum(ChecksumDataForFileTYPE checksumData) throws Requ * @throws RequestHandlerException If the operation fails. */ private String downloadFileAndCalculateChecksum(String fileID, String collectionID, String fileAddress, - ChecksumDataForFileTYPE expectedChecksum) throws RequestHandlerException { + ChecksumDataForFileTYPE expectedChecksum) throws RequestHandlerException { String calculatedChecksum = calculateChecksumForFileAtURL(fileAddress); if (!validChecksum(calculatedChecksum, expectedChecksum)) { String givenChecksum = Base16Utils.decodeBase16(expectedChecksum.getChecksumValue()); log.error("Wrong checksum for file '{}' at '{}'! Expected: [{}], but calculated: [{}]", fileID, collectionID, givenChecksum, calculatedChecksum); throw new IllegalOperationException(ResponseCode.NEW_FILE_CHECKSUM_FAILURE, - "Expected checksums '" + givenChecksum + "' but the checksum was '" + calculatedChecksum + "'.", fileID); + "Expected checksums '" + givenChecksum + "' but the checksum was '" + calculatedChecksum + "'.", + fileID); } return calculatedChecksum; @@ -225,7 +228,9 @@ private String calculateChecksumForFileAtURL(String fileAddress) throws RequestH log.debug("Retrieving the data from URL: '{}'", fileAddress); try { - return ChecksumUtils.generateChecksum(fileExchange.getFile(new URL(fileAddress)), defaultChecksumSpec); + URL fileURL = new URL(fileAddress); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(fileURL); + return ChecksumUtils.generateChecksum(fileExchange.getFile(fileURL), defaultChecksumSpec); } catch (IOException e) { String errMsg = "Could not retrieve the file from '" + fileAddress + "'"; log.error(errMsg, e); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java index 395365814..a786a5903 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/FileStorageModel.java @@ -41,6 +41,7 @@ import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; import org.bitrepository.protocol.FileExchange; +import org.bitrepository.protocol.utils.FileExchangeResolver; import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.exception.IdentifyContributorException; import org.bitrepository.service.exception.IllegalOperationException; @@ -71,11 +72,9 @@ public class FileStorageModel extends StorageModel { * @param cache The checksum store. * @param alarmDispatcher The alarm dispatcher. * @param settings The settings. - * @param fileExchange The file exchange. */ - public FileStorageModel(FileStore archives, ChecksumStore cache, AlarmDispatcher alarmDispatcher, Settings settings, - FileExchange fileExchange) { - super(archives, cache, alarmDispatcher, settings, fileExchange); + public FileStorageModel(FileStore archives, ChecksumStore cache, AlarmDispatcher alarmDispatcher, Settings settings) { + super(archives, cache, alarmDispatcher, settings); log.info("Instantiating the FileStorageModel: {}", getPillarID()); } @@ -326,7 +325,9 @@ private void transferFileToTmp(String fileID, String collectionID, String fileAd log.debug("Retrieving the data to be stored from URL: '{}'", fileAddress); try { - fileArchive.downloadFileForValidation(fileID, collectionID, fileExchange.getFile(new URL(fileAddress))); + URL fileURL = new URL(fileAddress); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(fileURL); + fileArchive.downloadFileForValidation(fileID, collectionID, fileExchange.getFile(fileURL)); } catch (IOException e) { String errMsg = "Could not retrieve the file from '" + fileAddress + "'"; log.error(errMsg, e); diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/StorageModel.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/StorageModel.java index 4975d6e69..553741705 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/StorageModel.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/store/StorageModel.java @@ -38,7 +38,6 @@ import org.bitrepository.pillar.store.checksumdatabase.ChecksumStore; import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; -import org.bitrepository.protocol.FileExchange; import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.exception.InvalidMessageException; import org.bitrepository.service.exception.RequestHandlerException; @@ -66,22 +65,18 @@ public abstract class StorageModel { protected final ChecksumSpecTYPE defaultChecksumSpec; protected final AlarmDispatcher alarmDispatcher; protected final Settings settings; - protected final FileExchange fileExchange; /** * @param archives The archive with the data. * @param cache The storage for the checksums. * @param alarmDispatcher The alarm dispatcher. * @param settings The configuration to use. - * @param fileExchange The file exchange. */ - protected StorageModel(FileStore archives, ChecksumStore cache, AlarmDispatcher alarmDispatcher, Settings settings, - FileExchange fileExchange) { - this.cache = cache; + protected StorageModel(FileStore archives, ChecksumStore cache, AlarmDispatcher alarmDispatcher, Settings settings) { this.fileArchive = archives; + this.cache = cache; this.alarmDispatcher = alarmDispatcher; this.settings = settings; - this.fileExchange = fileExchange; this.defaultChecksumSpec = ChecksumUtils.getDefault(settings); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java index 1752dead9..d4a10f2de 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java @@ -43,11 +43,13 @@ import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.audit.MockAuditManager; import org.bitrepository.service.contributor.ResponseDispatcher; +import org.bitrepository.settings.referencesettings.FileExchangeSettings; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.util.Date; + public abstract class DefaultPillarTest extends DefaultFixturePillarTest { protected FileStore archives; protected StorageModel model; @@ -58,6 +60,7 @@ public abstract class DefaultPillarTest extends DefaultFixturePillarTest { protected AlarmDispatcher alarmDispatcher; protected static final String EMPTY_FILE_CHECKSUM = "d41d8cd98f00b204e9800998ecf8427e"; protected static final ChecksumDataForFileTYPE EMPTY_FILE_CHECKSUM_DATA; + static { EMPTY_FILE_CHECKSUM_DATA = new ChecksumDataForFileTYPE(); EMPTY_FILE_CHECKSUM_DATA.setCalculationTimestamp(CalendarUtils.getXmlGregorianCalendar(new Date())); @@ -70,27 +73,32 @@ public abstract class DefaultPillarTest extends DefaultFixturePillarTest { System.err.println(e.getMessage()); } } + @Override protected void initializeCUT() { super.initializeCUT(); collectionID = settingsForTestClient.getCollections().get(0).getID(); File fileDir = new File(settingsForCUT.getReferenceSettings().getPillarSettings().getCollectionDirs().get(0).getFileDirs().get(0)); - if(fileDir.exists()) { + if (fileDir.exists()) { FileUtils.delete(fileDir); } createReferencePillar(); } + @Override protected void shutdownCUT() { shutdownMediator(); } + protected void createReferencePillar() { shutdownMediator(); csCache = new MemoryCacheMock(); archives = new CollectionArchiveManager(settingsForCUT); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); audits = new MockAuditManager(); - FileExchange fileExchange = new LocalFileExchange("src/test/resources"); + FileExchangeSettings settings = new FileExchangeSettings(); + settings.setPath("src/test/resources"); + FileExchange fileExchange = new LocalFileExchange(settings); context = new MessageHandlerContext( settingsForCUT, SettingsHelper.getPillarCollections(settingsForCUT.getComponentID(), settingsForCUT.getCollections()), @@ -98,7 +106,7 @@ protected void createReferencePillar() { new PillarAlarmDispatcher(settingsForCUT, messageBus), audits, fileExchange); - model = new FileStorageModel(archives, csCache, alarmDispatcher, settingsForCUT, fileExchange); + model = new FileStorageModel(archives, csCache, alarmDispatcher, settingsForCUT); mediator = new PillarMediator(messageBus, context, model); mediator.start(); try { @@ -107,12 +115,14 @@ protected void createReferencePillar() { throw new RuntimeException("Could not initialize the archive with an empty file.", e); } } + public void shutdownMediator() { if(mediator != null) { mediator.close(); mediator = null; } } + @Override protected String getComponentID() { return "ReferencePillar-" + testMethodName; diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java index cc8f7fd67..14ff080f2 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/ChecksumPillarModelTest.java @@ -27,12 +27,10 @@ import org.bitrepository.pillar.DefaultFixturePillarTest; import org.bitrepository.pillar.store.checksumcache.MemoryCacheMock; import org.bitrepository.pillar.store.checksumdatabase.ChecksumStore; -import org.bitrepository.protocol.LocalFileExchange; import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.settings.referencesettings.ChecksumPillarFileDownload; import org.testng.annotations.Test; -import java.io.IOException; import java.util.Date; import static org.testng.Assert.assertEquals; @@ -54,8 +52,7 @@ public class ChecksumPillarModelTest extends DefaultFixturePillarTest { protected void initializeCUT() { cache = new MemoryCacheMock(); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); - pillarModel = new ChecksumStorageModel(cache, alarmDispatcher, settingsForCUT, - new LocalFileExchange("src/test/resources")); + pillarModel = new ChecksumStorageModel(cache, alarmDispatcher, settingsForCUT); defaultCsType = ChecksumUtils.getDefault(settingsForCUT); @@ -65,7 +62,7 @@ protected void initializeCUT() { } @Test( groups = {"regressiontest", "pillartest"}) - public void testPillarModelBasicFunctionality() throws Exception { + public void testPillarModelBasicFunctionality() { addDescription("Test the basic functions of the full reference pillar model."); addStep("Check the pillar id in the pillar model", "Identical to the one from the test."); assertEquals(pillarModel.getPillarID(), getPillarID()); @@ -190,7 +187,7 @@ public void testPillarModelHasFile() throws Exception { } @Test( groups = {"regressiontest", "pillartest"}) - public void testPillarModelNoFile() throws Exception { + public void testPillarModelNoFile() { addDescription("Test that the file exists, when placed in the archive and cache"); addStep("Setup", "Should place the 'existing file' in the directory."); @@ -213,7 +210,7 @@ public void testPillarModelNoFile() throws Exception { } } - private void initializeWithDefaultFile() throws IOException { + private void initializeWithDefaultFile() { cache.insertChecksumCalculation(DEFAULT_FILE_ID, collectionID, EMPTY_MD5_CHECKSUM, new Date()); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java index 0733bc2a1..206293b33 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/store/FullPillarModelTest.java @@ -30,7 +30,6 @@ import org.bitrepository.pillar.store.checksumcache.MemoryCacheMock; import org.bitrepository.pillar.store.checksumdatabase.ChecksumStore; import org.bitrepository.pillar.store.filearchive.CollectionArchiveManager; -import org.bitrepository.protocol.LocalFileExchange; import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.exception.RequestHandlerException; import org.testng.annotations.Test; @@ -60,8 +59,7 @@ protected void initializeCUT() { cache = new MemoryCacheMock(); archives = new CollectionArchiveManager(settingsForCUT); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); - pillarModel = new FileStorageModel(archives, cache, alarmDispatcher, settingsForCUT, - new LocalFileExchange("src/test/resources")); + pillarModel = new FileStorageModel(archives, cache, alarmDispatcher, settingsForCUT); defaultCsType = ChecksumUtils.getDefault(settingsForCUT); @@ -139,13 +137,10 @@ public void testPillarModelNoFile() throws Exception { } catch (Exception e) { // expected } - - -// pillarModel. } - private void emptyArchive() throws IOException { - if(archives.hasFile(DEFAULT_FILE_ID, collectionID)) { + private void emptyArchive() { + if (archives.hasFile(DEFAULT_FILE_ID, collectionID)) { archives.deleteFile(DEFAULT_FILE_ID, collectionID); } archives.ensureFileNotInTmpDir(DEFAULT_FILE_ID, collectionID); diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/audit/AuditTrailContributerDAOFactory.java b/bitrepository-service/src/main/java/org/bitrepository/service/audit/AuditTrailContributorDAOFactory.java similarity index 96% rename from bitrepository-service/src/main/java/org/bitrepository/service/audit/AuditTrailContributerDAOFactory.java rename to bitrepository-service/src/main/java/org/bitrepository/service/audit/AuditTrailContributorDAOFactory.java index 7703d16b5..3847b8f03 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/audit/AuditTrailContributerDAOFactory.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/audit/AuditTrailContributorDAOFactory.java @@ -30,7 +30,7 @@ * * FIXME: Code does not reflect generic type. */ -public class AuditTrailContributerDAOFactory extends DatabaseFactory { +public class AuditTrailContributorDAOFactory extends DatabaseFactory { public AuditTrailContributorDAO getAuditTrailContributorDAO(DatabaseSpecifics ds, String componentID) { AuditTrailContributorDAO dao = getDAOInstance(ds); diff --git a/bitrepository-service/src/test/java/org/bitrepository/service/ContributerTest.java b/bitrepository-service/src/test/java/org/bitrepository/service/ContributorTest.java similarity index 97% rename from bitrepository-service/src/test/java/org/bitrepository/service/ContributerTest.java rename to bitrepository-service/src/test/java/org/bitrepository/service/ContributorTest.java index 75e97042e..c03ed49cd 100644 --- a/bitrepository-service/src/test/java/org/bitrepository/service/ContributerTest.java +++ b/bitrepository-service/src/test/java/org/bitrepository/service/ContributorTest.java @@ -28,7 +28,7 @@ /** * Contains the general functionality for creating contributor tests. */ -public abstract class ContributerTest extends IntegrationTest { +public abstract class ContributorTest extends IntegrationTest { protected static final String DEFAULT_FILE_ID = ClientTestMessageFactory.FILE_ID_DEFAULT; protected static String clientDestinationId; From 75c74f43d42c7fa506f3292b89161c6a6a0ba21e Mon Sep 17 00:00:00 2001 From: bohlski Date: Tue, 8 Nov 2022 18:05:11 +0100 Subject: [PATCH 4/5] Amend bad cmd-replace-file arg-description --- .../main/java/org/bitrepository/commandline/ReplaceFileCmd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java index 1034dbf96..eb6208941 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/ReplaceFileCmd.java @@ -100,7 +100,7 @@ protected void createOptionsForCmdArgumentHandler() { cmdHandler.addOption(fileOption); Option urlOption = new Option(URL_ARG, HAS_ARGUMENT, - "The URL for the file to be retrieved. Is required, unless the actual file is given."); + "The URL for the file to replace with. Is required, unless the actual file is given."); urlOption.setRequired(ARGUMENT_IS_NOT_REQUIRED); cmdHandler.addOption(urlOption); From 64617d20837094b1276e475d4b46d975c9500e3b Mon Sep 17 00:00:00 2001 From: bohlski Date: Wed, 9 Nov 2022 11:01:27 +0100 Subject: [PATCH 5/5] Replace FileExchange in ContributorContext I.e. FileExchange is no longer provided as a parameter to ContributorContext (and inheriting classes), but instead dynamically instantiated at time of use with FileExchangeResolver. This allows pillars to not bind themselves to a specific file exchange, but dynamically handle the provided url protocol. --- .../bitrepository/alarm/AlarmServiceFactory.java | 2 +- .../audittrails/AuditTrailServiceFactory.java | 2 +- .../org/bitrepository/commandline/PutFileCmd.java | 4 ++-- .../integrityservice/IntegrityServiceManager.java | 4 +--- .../pillar/PillarComponentFactory.java | 3 +-- .../pillar/common/MessageHandlerContext.java | 13 +++++-------- .../GetChecksumsRequestHandler.java | 5 ++++- .../messagehandler/GetFileIDsRequestHandler.java | 5 ++++- .../messagehandler/GetFileRequestHandler.java | 13 +++++++++---- .../bitrepository/pillar/DefaultPillarTest.java | 10 ++-------- .../org/bitrepository/pillar/MediatorTest.java | 15 +++++++-------- .../bitrepository/pillar/MockedPillarTest.java | 2 +- .../service/contributor/ContributorContext.java | 10 +--------- .../contributor/SimpleContributorMediator.java | 6 ++---- .../handler/GetAuditTrailsRequestHandler.java | 5 ++++- 15 files changed, 45 insertions(+), 54 deletions(-) diff --git a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/AlarmServiceFactory.java b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/AlarmServiceFactory.java index 420791334..6a5082fc6 100644 --- a/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/AlarmServiceFactory.java +++ b/bitrepository-alarm-service/src/main/java/org/bitrepository/alarm/AlarmServiceFactory.java @@ -107,7 +107,7 @@ public static synchronized AlarmService getAlarmService() { settings.getReferenceSettings().getAlarmServiceSettings().getID()); MessageBus messageBus = ProtocolComponentFactory.getInstance().getMessageBus(settings, securityManager); - ContributorMediator contributorMediator = new SimpleContributorMediator(messageBus, settings, null, null); + ContributorMediator contributorMediator = new SimpleContributorMediator(messageBus, settings, null); AlarmDAOFactory alarmDAOFactory = new AlarmDAOFactory(); AlarmStore store = alarmDAOFactory.getAlarmServiceDAOInstance( settings.getReferenceSettings().getAlarmServiceSettings().getAlarmServiceDatabase()); diff --git a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailServiceFactory.java b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailServiceFactory.java index c2ef50221..904a96ea3 100644 --- a/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailServiceFactory.java +++ b/bitrepository-audit-trail-service/src/main/java/org/bitrepository/audittrails/AuditTrailServiceFactory.java @@ -102,7 +102,7 @@ public static synchronized AuditTrailService getAuditTrailService() { if (auditTrailService == null) { ContributorMediator mediator = new SimpleContributorMediator( ProtocolComponentFactory.getInstance().getMessageBus(settings, securityManager), - settings, null, ProtocolComponentFactory.getInstance().getFileExchange(settings)); + settings, null); PutFileClient putClient = ModifyComponentFactory.getInstance().retrievePutClient(settings, securityManager, "audit-trail-preserver"); diff --git a/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java b/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java index 250fd3924..31dd59e95 100644 --- a/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java +++ b/bitrepository-client/src/main/java/org/bitrepository/commandline/PutFileCmd.java @@ -34,7 +34,7 @@ import org.bitrepository.modify.ModifyComponentFactory; import org.bitrepository.modify.putfile.PutFileClient; import org.bitrepository.protocol.FileExchange; -import org.bitrepository.protocol.ProtocolComponentFactory; +import org.bitrepository.protocol.utils.FileExchangeResolver; import java.io.IOException; import java.net.URL; @@ -172,7 +172,7 @@ private OperationEvent putTheFile() { final URL url = getURLOrUploadFile(); String fileID = retrieveFileID(); - FileExchange fileExchange = ProtocolComponentFactory.getInstance().getFileExchange(settings); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(url); output.debug("Initiating the PutFile conversation."); ChecksumDataForFileTYPE validationChecksum = getValidationChecksum(); diff --git a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java index 046932651..ac63f1e9e 100644 --- a/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java +++ b/bitrepository-integrity-service/src/main/java/org/bitrepository/integrityservice/IntegrityServiceManager.java @@ -135,14 +135,12 @@ public static synchronized void initialize(String configurationDir) { workFlowManager = new IntegrityWorkflowManager( new IntegrityWorkflowContext(settings, collector, model, alarmDispatcher, auditManager), new TimerBasedScheduler()); - contributor = new SimpleContributorMediator(messageBus, settings, auditManager, null); + contributor = new SimpleContributorMediator(messageBus, settings, auditManager); contributor.start(); } /** * Retrieves the shared settings based on the directory specified in the {@link #initialize(String)} method. - * - * @return The settings to used for the integrity service. */ private static void loadSettings() { if (confDir == null) { diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java index 0f29bb3d2..984ec8415 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/PillarComponentFactory.java @@ -118,8 +118,7 @@ public Pillar createPillar(Settings settings, MessageBus messageBus) { SettingsHelper.getPillarCollections(settings.getComponentID(), settings.getCollections()), responseDispatcher, alarmDispatcher, - audits, - ProtocolComponentFactory.getInstance().getFileExchange(settings)); + audits); return new Pillar(messageBus, settings, pillarModel, context); } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/common/MessageHandlerContext.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/common/MessageHandlerContext.java index 56c1436f9..19614f7a0 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/common/MessageHandlerContext.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/common/MessageHandlerContext.java @@ -23,7 +23,6 @@ import org.bitrepository.common.ArgumentValidator; import org.bitrepository.common.settings.Settings; -import org.bitrepository.protocol.FileExchange; import org.bitrepository.service.audit.AuditTrailManager; import org.bitrepository.service.contributor.ContributorContext; import org.bitrepository.service.contributor.ResponseDispatcher; @@ -45,15 +44,13 @@ public class MessageHandlerContext extends ContributorContext { * @param responseDispatcher The component for sending responses on the message-bus. * @param alarmDispatcher The component for dispatching alarms on the message-bus. * @param auditTrailManager The audit trail storage / manager. - * @param fileExchange The file exchange. */ public MessageHandlerContext(Settings settings, - List pillarCollections, - ResponseDispatcher responseDispatcher, - PillarAlarmDispatcher alarmDispatcher, - AuditTrailManager auditTrailManager, - FileExchange fileExchange) { - super(responseDispatcher, alarmDispatcher, settings, fileExchange); + List pillarCollections, + ResponseDispatcher responseDispatcher, + PillarAlarmDispatcher alarmDispatcher, + AuditTrailManager auditTrailManager) { + super(responseDispatcher, alarmDispatcher, settings); ArgumentValidator.checkNotNull(auditTrailManager, "AuditTrailManager"); this.auditTrailManager = auditTrailManager; this.pillarCollections = pillarCollections; diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java index ff675873b..91acfa372 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetChecksumsRequestHandler.java @@ -38,7 +38,9 @@ import org.bitrepository.pillar.common.MessageHandlerContext; import org.bitrepository.pillar.store.StorageModel; import org.bitrepository.pillar.store.checksumdatabase.ExtractedChecksumResultSet; +import org.bitrepository.protocol.FileExchange; import org.bitrepository.protocol.MessageContext; +import org.bitrepository.protocol.utils.FileExchangeResolver; import org.bitrepository.protocol.utils.MessageUtils; import org.bitrepository.service.exception.InvalidMessageException; import org.bitrepository.service.exception.RequestHandlerException; @@ -237,7 +239,8 @@ private void uploadFile(File fileToUpload, String url) throws IOException { // Upload the file. log.debug("Uploading file '{}' to {}", fileToUpload.getName(), url); try (InputStream in = new BufferedInputStream(new FileInputStream(fileToUpload))) { - context.getFileExchange().putFile(in, uploadUrl); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); + fileExchange.putFile(in, uploadUrl); } } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java index aa89167e2..1b91201c0 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileIDsRequestHandler.java @@ -39,7 +39,9 @@ import org.bitrepository.pillar.common.MessageHandlerContext; import org.bitrepository.pillar.store.StorageModel; import org.bitrepository.pillar.store.checksumdatabase.ExtractedFileIDsResultSet; +import org.bitrepository.protocol.FileExchange; import org.bitrepository.protocol.MessageContext; +import org.bitrepository.protocol.utils.FileExchangeResolver; import org.bitrepository.protocol.utils.MessageUtils; import org.bitrepository.service.exception.InvalidMessageException; import org.bitrepository.service.exception.RequestHandlerException; @@ -207,7 +209,8 @@ private void uploadFile(File fileToUpload, String url) throws IOException { log.debug("Uploading file '{}' to {}", fileToUpload.getName(), url); try (InputStream in = new BufferedInputStream(new FileInputStream(fileToUpload))) { - context.getFileExchange().putFile(in, uploadUrl); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); + fileExchange.putFile(in, uploadUrl); } } diff --git a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java index 557c1acc7..9c777d244 100644 --- a/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java +++ b/bitrepository-reference-pillar/src/main/java/org/bitrepository/pillar/messagehandler/GetFileRequestHandler.java @@ -35,7 +35,9 @@ import org.bitrepository.common.filestore.FileInfo; import org.bitrepository.pillar.common.MessageHandlerContext; import org.bitrepository.pillar.store.StorageModel; +import org.bitrepository.protocol.FileExchange; import org.bitrepository.protocol.MessageContext; +import org.bitrepository.protocol.utils.FileExchangeResolver; import org.bitrepository.protocol.utils.MessageUtils; import org.bitrepository.service.exception.InvalidMessageException; import org.bitrepository.service.exception.RequestHandlerException; @@ -110,6 +112,7 @@ protected void performOperation(GetFileRequest request, MessageContext requestCo */ protected void uploadToClient(GetFileRequest message) throws RequestHandlerException { FileInfo requestedFile = getPillarModel().getFileInfoForActualFile(message.getFileID(), message.getCollectionID()); + String fileAddress = message.getFileAddress(); try { InputStream is; @@ -119,13 +122,15 @@ protected void uploadToClient(GetFileRequest message) throws RequestHandlerExcep is = extractFilePart(requestedFile, message.getFilePart()); } - log.info("Uploading file '{}' to {}", requestedFile.getFileID(), message.getFileAddress()); - context.getFileExchange().putFile(is, new URL(message.getFileAddress())); + log.info("Uploading file '{}' to {}", requestedFile.getFileID(), fileAddress); + URL uploadUrl = new URL(fileAddress); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); + fileExchange.putFile(is, uploadUrl); } catch (IOException e) { log.warn("The file '{}' from collection '{}' could not be uploaded at '{}'", - message.getFileID(), message.getCollectionID(), message.getFileAddress()); + message.getFileID(), message.getCollectionID(), fileAddress); throw new InvalidMessageException(ResponseCode.FILE_TRANSFER_FAILURE, - "Could not deliver file to address '" + message.getFileAddress() + "'", e); + "Could not deliver file to address '" + fileAddress + "'", e); } } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java index d4a10f2de..338bd9899 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/DefaultPillarTest.java @@ -38,12 +38,9 @@ import org.bitrepository.pillar.store.checksumcache.MemoryCacheMock; import org.bitrepository.pillar.store.checksumdatabase.ChecksumStore; import org.bitrepository.pillar.store.filearchive.CollectionArchiveManager; -import org.bitrepository.protocol.FileExchange; -import org.bitrepository.protocol.LocalFileExchange; import org.bitrepository.service.AlarmDispatcher; import org.bitrepository.service.audit.MockAuditManager; import org.bitrepository.service.contributor.ResponseDispatcher; -import org.bitrepository.settings.referencesettings.FileExchangeSettings; import java.io.ByteArrayInputStream; import java.io.File; @@ -96,16 +93,13 @@ protected void createReferencePillar() { archives = new CollectionArchiveManager(settingsForCUT); alarmDispatcher = new AlarmDispatcher(settingsForCUT, messageBus); audits = new MockAuditManager(); - FileExchangeSettings settings = new FileExchangeSettings(); - settings.setPath("src/test/resources"); - FileExchange fileExchange = new LocalFileExchange(settings); context = new MessageHandlerContext( settingsForCUT, SettingsHelper.getPillarCollections(settingsForCUT.getComponentID(), settingsForCUT.getCollections()), new ResponseDispatcher(settingsForCUT, messageBus), new PillarAlarmDispatcher(settingsForCUT, messageBus), - audits, - fileExchange); + audits + ); model = new FileStorageModel(archives, csCache, alarmDispatcher, settingsForCUT); mediator = new PillarMediator(messageBus, context, model); mediator.start(); diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorTest.java index d30d78929..0866dc3cf 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MediatorTest.java @@ -35,7 +35,6 @@ import org.bitrepository.service.audit.MockAuditManager; import org.bitrepository.service.contributor.ResponseDispatcher; import org.bitrepository.service.contributor.handler.RequestHandler; -import org.bitrepository.service.exception.RequestHandlerException; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -51,18 +50,18 @@ public class MediatorTest extends DefaultFixturePillarTest { StorageModel model = null; @BeforeMethod (alwaysRun=true) - public void initialiseTest() throws Exception { + public void initialiseTest() { audits = new MockAuditManager(); context = new MessageHandlerContext( settingsForCUT, SettingsHelper.getPillarCollections(settingsForCUT.getComponentID(), settingsForCUT.getCollections()), new ResponseDispatcher(settingsForCUT, messageBus), new PillarAlarmDispatcher(settingsForCUT, messageBus), - audits, null); + audits); } @Test( groups = {"regressiontest", "pillartest"}) - public void testMediatorRuntimeExceptionHandling() throws Exception { + public void testMediatorRuntimeExceptionHandling() { addDescription("Tests the handling of a runtime exception"); addStep("Setup create and start the mediator.", ""); @@ -97,7 +96,7 @@ protected String getComponentID() { return "MediatorUnderTest"; } - private class TestMediator extends PillarMediator { + private static class TestMediator extends PillarMediator { public TestMediator(MessageHandlerContext context, StorageModel model) { super(messageBus, context, model); @@ -107,11 +106,11 @@ public TestMediator(MessageHandlerContext context, StorageModel model) { protected RequestHandler[] createListOfHandlers() { List handlers = new ArrayList<>(); handlers.add(new ErroneousRequestHandler()); - return handlers.toArray(new RequestHandler[handlers.size()]); + return handlers.toArray(new RequestHandler[0]); } } - private class ErroneousRequestHandler implements RequestHandler { + private static class ErroneousRequestHandler implements RequestHandler { @Override public Class getRequestClass() { @@ -119,7 +118,7 @@ public Class getRequestClass() { } @Override - public void processRequest(IdentifyContributorsForGetStatusRequest request, MessageContext messageContext) throws RequestHandlerException { + public void processRequest(IdentifyContributorsForGetStatusRequest request, MessageContext messageContext) { throw new RuntimeException("I am supposed to throw a RuntimeException"); } diff --git a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java index 2ef38e40a..cfc6e0ccf 100644 --- a/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java +++ b/bitrepository-reference-pillar/src/test/java/org/bitrepository/pillar/MockedPillarTest.java @@ -78,7 +78,7 @@ protected void createPillar() { SettingsHelper.getPillarCollections(settingsForCUT.getComponentID(), settingsForCUT.getCollections()), new ResponseDispatcher(settingsForCUT, messageBus), alarmDispatcher, - audits, fileExchangeMock); + audits); mediator = new PillarMediator(messageBus, context, model); mediator.start(); diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/ContributorContext.java b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/ContributorContext.java index 9caacacd0..55ebf5e72 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/ContributorContext.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/ContributorContext.java @@ -22,24 +22,20 @@ package org.bitrepository.service.contributor; import org.bitrepository.common.settings.Settings; -import org.bitrepository.protocol.FileExchange; import org.bitrepository.service.AlarmDispatcher; /** * The context for the contributor mediator. */ public class ContributorContext { - protected final FileExchange fileExchange; private final ResponseDispatcher responseDispatcher; private final AlarmDispatcher alarmDispatcher; private final Settings settings; - public ContributorContext(ResponseDispatcher responseDispatcher, AlarmDispatcher alarmDispatcher, Settings settings, - FileExchange fileExchange) { + public ContributorContext(ResponseDispatcher responseDispatcher, AlarmDispatcher alarmDispatcher, Settings settings) { this.responseDispatcher = responseDispatcher; this.alarmDispatcher = alarmDispatcher; this.settings = settings; - this.fileExchange = fileExchange; } public ResponseDispatcher getResponseDispatcher() { @@ -53,8 +49,4 @@ public AlarmDispatcher getAlarmDispatcher() { public Settings getSettings() { return settings; } - - public FileExchange getFileExchange() { - return fileExchange; - } } diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/SimpleContributorMediator.java b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/SimpleContributorMediator.java index 69979e24b..870cda014 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/SimpleContributorMediator.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/SimpleContributorMediator.java @@ -26,7 +26,6 @@ import org.bitrepository.bitrepositorymessages.MessageRequest; import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.common.settings.Settings; -import org.bitrepository.protocol.FileExchange; import org.bitrepository.protocol.MessageContext; import org.bitrepository.protocol.messagebus.MessageBus; import org.bitrepository.service.AlarmDispatcher; @@ -59,15 +58,14 @@ public class SimpleContributorMediator extends AbstractContributorMediator { * @param messageBus The message-bus for the mediator. * @param settings the settings for the mediator. * @param auditManager [OPTIONAL] The manager of audit trails. Only if the contributor has audit trails. - * @param fileExchange the file exchange */ public SimpleContributorMediator( - MessageBus messageBus, Settings settings, AuditTrailManager auditManager, FileExchange fileExchange) { + MessageBus messageBus, Settings settings, AuditTrailManager auditManager) { super(messageBus); context = new ContributorContext( new ResponseDispatcher(settings, messageBus), new AlarmDispatcher(settings, messageBus), - settings, fileExchange); + settings); this.auditManager = auditManager; } diff --git a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java index b8838f8b6..57293a8be 100644 --- a/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java +++ b/bitrepository-service/src/main/java/org/bitrepository/service/contributor/handler/GetAuditTrailsRequestHandler.java @@ -32,8 +32,10 @@ import org.bitrepository.bitrepositorymessages.MessageResponse; import org.bitrepository.common.JaxbHelper; import org.bitrepository.common.utils.CalendarUtils; +import org.bitrepository.protocol.FileExchange; import org.bitrepository.protocol.MessageContext; import org.bitrepository.protocol.ProtocolVersionLoader; +import org.bitrepository.protocol.utils.FileExchangeResolver; import org.bitrepository.service.audit.AuditTrailDatabaseResults; import org.bitrepository.service.audit.AuditTrailManager; import org.bitrepository.service.contributor.ContributorContext; @@ -175,7 +177,8 @@ protected void handleUpload(GetAuditTrailsRequest message, AuditTrailDatabaseRes URL uploadUrl = new URL(message.getResultAddress()); log.debug("Uploading file '{}' to {}", fileToUpload.getName(), uploadUrl.toExternalForm()); - getContext().getFileExchange().putFile(new FileInputStream(fileToUpload), uploadUrl); + FileExchange fileExchange = FileExchangeResolver.getBasicFileExchangeFromURL(uploadUrl); + fileExchange.putFile(new FileInputStream(fileToUpload), uploadUrl); } catch (Exception e) { throw new InvalidMessageException(ResponseCode.FILE_TRANSFER_FAILURE, "Could not handle the creation and upload of the results due to: " + e.getMessage(), e);