[Major] Added FileHelper.getTempFile() with option to ignore hours in path
This commit is contained in:
parent
e4dff737b4
commit
2c0b530f39
|
@ -15,8 +15,10 @@
|
|||
*/
|
||||
package li.strolch.utils.helper;
|
||||
|
||||
import static java.util.Collections.emptySet;
|
||||
import static li.strolch.utils.helper.StringHelper.isEmpty;
|
||||
import static li.strolch.utils.helper.StringHelper.normalizeLength;
|
||||
import static li.strolch.utils.helper.TempFileOptions.*;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
|
@ -27,9 +29,7 @@ import java.time.LocalDate;
|
|||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import li.strolch.utils.DataUnit;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -49,7 +49,8 @@ public class FileHelper {
|
|||
private static final DateTimeFormatter nonSeparatedDtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
||||
/**
|
||||
* Generates a path to the given temporary path to write a file separated in sub folders by day using current date
|
||||
* <p>Generates a path to the given temporary path to write a file separated in sub folders by day using current
|
||||
* date without any options enabled</p>
|
||||
*
|
||||
* @param tempPath
|
||||
* the directory to which to write the file
|
||||
|
@ -57,20 +58,24 @@ public class FileHelper {
|
|||
* the prefix of the file name
|
||||
* @param suffix
|
||||
* the prefix of the file name
|
||||
* @param separateDateSegments
|
||||
* true to separate date segments in sub folders
|
||||
* @param separateHours
|
||||
* true to have sub folders for each hour
|
||||
*
|
||||
* @return the temporary file
|
||||
*/
|
||||
public static File getTempFile(File tempPath, String prefix, String suffix, boolean separateDateSegments,
|
||||
boolean separateHours) {
|
||||
return getTempFile(tempPath, prefix, suffix, separateDateSegments, separateHours, true);
|
||||
public static File getTempFile(File tempPath, String prefix, String suffix) {
|
||||
return getTempFile(tempPath, prefix, suffix, emptySet());
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a path to the given temporary path to write a file separated in sub folders by day using current date
|
||||
* <p>Generates a path to the given temporary path to write a file separated in sub folders by day using current
|
||||
* date</p>
|
||||
*
|
||||
* <p>The options can be one of:</p>
|
||||
* <ul>
|
||||
* <li>{@link TempFileOptions#APPEND_MILLIS}</li>
|
||||
* <li>{@link TempFileOptions#SEPARATE_DATE_SEGMENTS}</li>
|
||||
* <li>{@link TempFileOptions#SEPARATE_HOURS}</li>
|
||||
* <li>{@link TempFileOptions#WITH_HOURS}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param tempPath
|
||||
* the directory to which to write the file
|
||||
|
@ -78,30 +83,33 @@ public class FileHelper {
|
|||
* the prefix of the file name
|
||||
* @param suffix
|
||||
* the prefix of the file name
|
||||
* @param separateDateSegments
|
||||
* true to separate date segments in sub folders
|
||||
* @param separateHours
|
||||
* true to have sub folders for each hour
|
||||
* @param appendMillis
|
||||
* true of append the current milliseconds to the file name
|
||||
* @param options
|
||||
* the option bits
|
||||
*
|
||||
* @return the temporary file
|
||||
*/
|
||||
public static File getTempFile(File tempPath, String prefix, String suffix, boolean separateDateSegments,
|
||||
boolean separateHours, boolean appendMillis) {
|
||||
public static File getTempFile(File tempPath, String prefix, String suffix, Set<TempFileOptions> options) {
|
||||
|
||||
LocalDateTime dateTime = LocalDateTime.now();
|
||||
LocalDate localDate = dateTime.toLocalDate();
|
||||
|
||||
boolean separateDateSegments = options.contains(SEPARATE_DATE_SEGMENTS);
|
||||
String date = separateDateSegments ? localDate.format(separatedDtf) : localDate.format(nonSeparatedDtf);
|
||||
|
||||
String currentHour = normalizeLength(String.valueOf(LocalTime.now().getHour()), 2, true, '0');
|
||||
String pathS = date + (separateHours ? "/" : "_") + currentHour;
|
||||
String pathS;
|
||||
if (options.contains(WITH_HOURS)) {
|
||||
boolean separateHours = options.contains(SEPARATE_HOURS);
|
||||
String currentHour = normalizeLength(String.valueOf(LocalTime.now().getHour()), 2, true, '0');
|
||||
pathS = date + (separateHours ? "/" : "_") + currentHour;
|
||||
} else {
|
||||
pathS = date;
|
||||
}
|
||||
|
||||
File path = new File(tempPath, pathS);
|
||||
if (!path.exists() && !path.mkdirs())
|
||||
throw new IllegalStateException("Failed to create path " + path.getAbsolutePath());
|
||||
|
||||
boolean appendMillis = options.contains(APPEND_MILLIS);
|
||||
if (appendMillis)
|
||||
prefix = (isEmpty(prefix) ? "" : prefix + "_");
|
||||
else
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
package li.strolch.utils.helper;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* The options to create the path for a temporary file using {@link FileHelper#getTempFile(File, String, String, TempFileOptions)}
|
||||
*/
|
||||
public enum TempFileOptions {
|
||||
NONE,
|
||||
SEPARATE_DATE_SEGMENTS,
|
||||
WITH_HOURS,
|
||||
SEPARATE_HOURS,
|
||||
APPEND_MILLIS
|
||||
}
|
|
@ -15,6 +15,8 @@
|
|||
*/
|
||||
package li.strolch.utils.helper;
|
||||
|
||||
import static li.strolch.utils.helper.FileHelper.getTempFile;
|
||||
|
||||
import javax.xml.bind.JAXBContext;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
|
@ -29,6 +31,7 @@ import javax.xml.transform.stream.StreamResult;
|
|||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Set;
|
||||
|
||||
import li.strolch.utils.RemoveCRFilterWriter;
|
||||
import li.strolch.utils.exceptions.XmlException;
|
||||
|
@ -290,8 +293,8 @@ public class XmlHelper {
|
|||
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
|
||||
transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
|
||||
transformer.setOutputProperty(OutputKeys.ENCODING, docEncoding);
|
||||
transformer
|
||||
.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount",
|
||||
"2"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
// transformer.setOutputProperty("{http://xml.apache.org/xalan}line-separator", "\t");
|
||||
|
||||
// Transform to file
|
||||
|
@ -329,11 +332,9 @@ public class XmlHelper {
|
|||
}
|
||||
}
|
||||
|
||||
public static void marshallTempFile(File tempPath, String prefix, boolean separateDateSegments,
|
||||
boolean separateHours, Object object) throws Exception {
|
||||
|
||||
File dataFile = FileHelper.getTempFile(tempPath, prefix, ".xml", separateDateSegments, separateHours);
|
||||
marshall(dataFile, object);
|
||||
public static void marshallTempFile(File tempPath, String prefix, Set<TempFileOptions> options, Object object)
|
||||
throws Exception {
|
||||
marshall(getTempFile(tempPath, prefix, ".xml", options), object);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
package li.strolch.utils.helper;
|
||||
|
||||
import static li.strolch.utils.helper.FileHelper.*;
|
||||
import static li.strolch.utils.helper.StringHelper.*;
|
||||
import static li.strolch.utils.helper.TempFileOptions.*;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
public class FileHelperTest {
|
||||
|
||||
private static File tempPath;
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() {
|
||||
tempPath = new File(System.getProperty("java.io.tmpdir"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateTempFileNoOptions() {
|
||||
File path = getTempFile(tempPath, "NoOptions", ".txt");
|
||||
LocalDate today = LocalDate.now();
|
||||
String expected = today + "/NoOptions.txt";
|
||||
assertEquals(new File(tempPath, expected), path);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateTempFileSeparateDateSegments() {
|
||||
File path = getTempFile(tempPath, "SeparateDateSegments", ".txt", Set.of(SEPARATE_DATE_SEGMENTS));
|
||||
LocalDate today = LocalDate.now();
|
||||
String expected =
|
||||
today.getYear() + "/" + normalizeLength(String.valueOf(today.getMonthValue()), 2, true, '0') + "/"
|
||||
+ normalizeLength(String.valueOf(today.getDayOfMonth()), 2, true, '0')
|
||||
+ "/SeparateDateSegments.txt";
|
||||
assertEquals(new File(tempPath, expected), path);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateTempFileSeparateDateSegments_WithHours() {
|
||||
File path = getTempFile(tempPath, "SeparateDateSegments", ".txt", Set.of(SEPARATE_DATE_SEGMENTS, WITH_HOURS));
|
||||
LocalDateTime today = LocalDateTime.now();
|
||||
String expected =
|
||||
today.getYear() + "/" + normalizeLength(String.valueOf(today.getMonthValue()), 2, true, '0') + "/"
|
||||
+ normalizeLength(String.valueOf(today.getDayOfMonth()), 2, true, '0') + "_" + normalizeLength(
|
||||
String.valueOf(today.getHour()), 2, true, '0') + "/SeparateDateSegments.txt";
|
||||
assertEquals(new File(tempPath, expected), path);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateTempFileSeparateDateSegments_WithHours_SeparateHours() {
|
||||
File path = getTempFile(tempPath, "SeparateDateSegments", ".txt",
|
||||
Set.of(SEPARATE_DATE_SEGMENTS, WITH_HOURS, SEPARATE_HOURS));
|
||||
LocalDateTime today = LocalDateTime.now();
|
||||
String expected =
|
||||
today.getYear() + "/" + normalizeLength(String.valueOf(today.getMonthValue()), 2, true, '0') + "/"
|
||||
+ normalizeLength(String.valueOf(today.getDayOfMonth()), 2, true, '0') + "/" + normalizeLength(
|
||||
String.valueOf(today.getHour()), 2, true, '0') + "/SeparateDateSegments.txt";
|
||||
assertEquals(new File(tempPath, expected), path);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue