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/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-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-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-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);
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..61154b413 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;
@@ -102,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-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 52bd0d9b6..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/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..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;
}
@@ -123,14 +122,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 +168,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 +177,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 '{}'",
@@ -193,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..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
@@ -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());
@@ -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 8f55963bc..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
@@ -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;
@@ -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);
}
@@ -142,7 +141,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 +181,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/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/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..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;
@@ -83,7 +85,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());
@@ -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);
}
}
@@ -248,8 +251,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..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;
@@ -84,7 +86,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());
@@ -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 2a9339dc6..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;
@@ -72,7 +74,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());
@@ -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/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/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..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,8 +38,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.FileExchange;
-import org.bitrepository.protocol.LocalFileExchange;
import org.bitrepository.service.AlarmDispatcher;
import org.bitrepository.service.audit.MockAuditManager;
import org.bitrepository.service.contributor.ResponseDispatcher;
@@ -48,6 +46,7 @@
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 +57,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,35 +70,37 @@ 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");
context = new MessageHandlerContext(
settingsForCUT,
SettingsHelper.getPillarCollections(settingsForCUT.getComponentID(), settingsForCUT.getCollections()),
new ResponseDispatcher(settingsForCUT, messageBus),
new PillarAlarmDispatcher(settingsForCUT, messageBus),
- audits,
- fileExchange);
- model = new FileStorageModel(archives, csCache, alarmDispatcher, settingsForCUT, fileExchange);
+ audits
+ );
+ model = new FileStorageModel(archives, csCache, alarmDispatcher, settingsForCUT);
mediator = new PillarMediator(messageBus, context, model);
mediator.start();
try {
@@ -107,12 +109,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/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-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 {
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/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);
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;