diff --git a/common/source/java/ch/systemsx/cisd/common/filesystem/FileUtilities.java b/common/source/java/ch/systemsx/cisd/common/filesystem/FileUtilities.java index 5a7cde90d2ad64b25f24f51e3237d1ac4794f161..30c9adbc75bbfaae3f3e5ce96b81c74d398896f1 100644 --- a/common/source/java/ch/systemsx/cisd/common/filesystem/FileUtilities.java +++ b/common/source/java/ch/systemsx/cisd/common/filesystem/FileUtilities.java @@ -35,10 +35,13 @@ import java.io.PrintWriter; import java.io.RandomAccessFile; import java.io.Serializable; import java.io.StringWriter; +import java.text.DateFormat; import java.text.DecimalFormat; import java.text.NumberFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.regex.Pattern; @@ -86,7 +89,7 @@ import ch.systemsx.cisd.common.string.StringUtilities.IUniquenessChecker; * <p> * If you are tempted to add new functionality to this class, ensure that the new functionality does * not yet exist in <code>org.apache.common.io.FileUtils</code>, see <a - * href="http://jakarta.apache.org/commons/io/api-release/org/apache/commons/io/FileUtils.html" + * href="https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html" * >javadoc</a>. * * @author Bernd Rinn @@ -94,12 +97,13 @@ import ch.systemsx.cisd.common.string.StringUtilities.IUniquenessChecker; public final class FileUtilities { public static final List<String> HDF5_FILE_TYPES = Arrays.asList("h5", "h5ar"); - + private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, FileUtilities.class); + private static final Logger machineLog = LogFactory.getLogger(LogCategory.MACHINE, FileUtilities.class); - + private FileUtilities() { // Can not be instantiated. @@ -1371,6 +1375,50 @@ public final class FileUtilities return new File(uniqueFilePath); } + public final static File createTimestampUniqueFile(final File path, final Pattern regex) + { + return createTimestampUniqueFile(path); + } + + /** + * Creates a time stamp numbered file in <var>path</var>. + * + */ + public final static File createTimestampUniqueFile(final File path) + { + assert path != null; + final String filePath = path.getPath(); + + String uniqueTimestamp = getUniqueTimestamp(); + String uniqueFilePath = filePath + uniqueTimestamp; + + while (new File(uniqueFilePath).exists() == true) + { + uniqueTimestamp = getUniqueTimestamp(); + uniqueFilePath = filePath + uniqueTimestamp; + + } + return new File(uniqueFilePath); + } + + /** + * @return + * The format of the unique string consists of a time stamp and a unique random number: + * <var>_yyyy_MM_dd_HH_mm_ss_SSS_</var> + unique_number + */ + public final static String getUniqueTimestamp() + { + + final String DATE_FORMAT = "_yyyy_MM_dd_HH_mm_ss_SSS_"; + + int random_int = (int) (Math.random() * 1000); + long timestamp = System.currentTimeMillis(); + Date date = new Date(timestamp); + DateFormat formatter = new SimpleDateFormat(DATE_FORMAT); + return formatter.format(date) + random_int; + + } + /** * For given <var>root</var> and <var>file</var> extracts the relative path. * <p> @@ -2303,7 +2351,7 @@ public final class FileUtilities if (file == null) { throw new IllegalArgumentException("Unspecified file."); - } + } if (file.exists() == false) { throw new IllegalArgumentException("File does not exists: " + file); @@ -2337,9 +2385,9 @@ public final class FileUtilities throw CheckedExceptionTunnel.wrapIfNecessary(exception); } throw new EnvironmentFailureException("The size of the folder '" + file - + "' couldn't be determined:\n command: " + result.getCommandName() - + "\n commad line arguments: " + result.getCommandLine() - + "\n output: " + result.getOutput() - + "\n error output: "+ result.getErrorOutput()); + + "' couldn't be determined:\n command: " + result.getCommandName() + + "\n commad line arguments: " + result.getCommandLine() + + "\n output: " + result.getOutput() + + "\n error output: " + result.getErrorOutput()); } } diff --git a/common/source/java/ch/systemsx/cisd/common/mail/MailClient.java b/common/source/java/ch/systemsx/cisd/common/mail/MailClient.java index aff4c3e1dd63ea70c38f04f67f34c74bf999207d..092c0cb7d79c85153aa5d0cc02a77dd196285a81 100644 --- a/common/source/java/ch/systemsx/cisd/common/mail/MailClient.java +++ b/common/source/java/ch/systemsx/cisd/common/mail/MailClient.java @@ -75,21 +75,21 @@ public final class MailClient extends Authenticator implements IMailClient private static final String UNICODE_CHARSET = "utf-8"; private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION, MailClient.class); - + private final Properties properties; - + public MailClient(final String from, final String smtpHost) { this(from, smtpHost, null, null, null, null); } - + public MailClient( - final String from, - final String smtpHost, - final String smtpPort, - final String smtpUsername, - final String smtpPassword, - final String testAddress) + final String from, + final String smtpHost, + final String smtpPort, + final String smtpUsername, + final String smtpPassword, + final String testAddress) { assert from != null; assert smtpHost != null; @@ -97,33 +97,38 @@ public final class MailClient extends Authenticator implements IMailClient properties = new Properties(); properties.put(JavaMailProperties.MAIL_FROM, from); properties.put(JavaMailProperties.MAIL_SMTP_HOST, smtpHost); - if(smtpPort != null) { + if (smtpPort != null) + { properties.put(JavaMailProperties.MAIL_SMTP_PORT, smtpPort); } - if(smtpUsername != null) { + if (smtpUsername != null) + { properties.put(JavaMailProperties.MAIL_SMTP_USER, smtpUsername); } - if(smtpPassword != null) { + if (smtpPassword != null) + { properties.put(MailClient.MAIL_SMTP_PASSWORD, smtpPassword); } - if(testAddress != null) { + if (testAddress != null) + { properties.put(MailClient.MAIL_TEST_ADDRESS, testAddress); } init(); } - + public MailClient(MailClientParameters parameters) { this(parameters.getPropertiesInstance()); } - + public MailClient(Properties properties) { this.properties = ExtendedProperties.createWith(properties); init(); } - - private void init() { + + private void init() + { //Add some properties that don't need to come form the service String smtpUsername = properties.getProperty(JavaMailProperties.MAIL_SMTP_USER); String smtpPassword = properties.getProperty(MailClient.MAIL_SMTP_PASSWORD); @@ -131,16 +136,18 @@ public final class MailClient extends Authenticator implements IMailClient { properties.put(JavaMailProperties.MAIL_SMTP_AUTH, Boolean.TRUE.toString()); } - - properties.put(JavaMailProperties.MAIL_DEBUG,operationLog.isDebugEnabled() ? Boolean.TRUE.toString() : Boolean.FALSE.toString()); + + properties.put(JavaMailProperties.MAIL_DEBUG, operationLog.isDebugEnabled() ? Boolean.TRUE.toString() : Boolean.FALSE.toString()); properties.put(JavaMailProperties.MAIL_TRANSPORT_PROTOCOL, "smtp"); - + //Get properties from System try { Properties systemProperties = System.getProperties(); - for(String key:systemProperties.stringPropertyNames()) { - if(!properties.containsKey(key)) { + for (String key : systemProperties.stringPropertyNames()) + { + if (!properties.containsKey(key)) + { properties.put(key, systemProperties.getProperty(key)); } } @@ -150,8 +157,10 @@ public final class MailClient extends Authenticator implements IMailClient } //Clear all properties not staring with mail. - for(String key:properties.stringPropertyNames()) { - if(!key.startsWith("mail.")) { + for (String key : properties.stringPropertyNames()) + { + if (!key.startsWith("mail.")) + { properties.remove(key); } } @@ -168,8 +177,7 @@ public final class MailClient extends Authenticator implements IMailClient operationLog.info("Sending test email."); } // subject, content, replyToOrNull, fromOrNull, recipients - sendEmailMessage("test", "", null, null, new EMailAddress[] - { new EMailAddress(testAddress) }); + sendEmailMessage("test", "", null, null, new EMailAddress[] { new EMailAddress(testAddress) }); } else { if (operationLog.isInfoEnabled()) @@ -383,7 +391,7 @@ public final class MailClient extends Authenticator implements IMailClient throws EnvironmentFailureException { String from = properties.getProperty(JavaMailProperties.MAIL_FROM); - + final InternetAddress fromPerMail = (fromOrNull != null) ? fromOrNull : createInternetAddress(from); if (operationLog.isInfoEnabled()) @@ -398,7 +406,7 @@ public final class MailClient extends Authenticator implements IMailClient if (replyTo != null) { InternetAddress[] replyToAddress = - { replyTo }; + { replyTo }; msg.setReplyTo(replyToAddress); } msg.addRecipients(Message.RecipientType.TO, recipients); @@ -440,7 +448,7 @@ public final class MailClient extends Authenticator implements IMailClient private void send(MimeMessage msg) throws MessagingException { String smtpHost = properties.getProperty(JavaMailProperties.MAIL_SMTP_HOST); - + if (smtpHost.startsWith(FILE_PREFIX)) { // We don't have a real SMTP server @@ -456,7 +464,7 @@ public final class MailClient extends Authenticator implements IMailClient private void writeMessageToFile(MimeMessage msg) throws MessagingException { String smtpHost = properties.getProperty(JavaMailProperties.MAIL_SMTP_HOST); - + File emailFolder = new File(smtpHost.substring(FILE_PREFIX.length())); if (emailFolder.exists()) { @@ -474,7 +482,7 @@ public final class MailClient extends Authenticator implements IMailClient + emailFolder.getAbsolutePath() + "'."); } } - File file = FileUtilities.createNextNumberedFile(new File(emailFolder, "email"), null); + File file = FileUtilities.createTimestampUniqueFile(new File(emailFolder, "email"), null); StringBuilder builder = new StringBuilder(); final Enumeration<String> headers = msg.getAllHeaderLines(); while (headers.hasMoreElements()) @@ -512,7 +520,7 @@ public final class MailClient extends Authenticator implements IMailClient { String smtpUsername = properties.getProperty(JavaMailProperties.MAIL_SMTP_USER); String smtpPassword = properties.getProperty(MailClient.MAIL_SMTP_PASSWORD); - + return new PasswordAuthentication(smtpUsername, smtpPassword); }