-
Notifications
You must be signed in to change notification settings - Fork 0
/
JWFileChooserConfigurationDefaults.java
117 lines (103 loc) · 3.7 KB
/
JWFileChooserConfigurationDefaults.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* Copyright © 2020 Mark Raynsford <code@io7m.com> https://www.io7m.com
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
package com.io7m.jwheatsheaf.api;
import java.nio.file.Path;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.SignStyle;
import java.util.function.Function;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
import static java.time.temporal.ChronoField.MINUTE_OF_HOUR;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
import static java.time.temporal.ChronoField.YEAR;
/**
* Default values used for file chooser configurations.
*/
public final class JWFileChooserConfigurationDefaults
{
private JWFileChooserConfigurationDefaults()
{
}
/**
* The default date/time formatter. This is essentially ISO-8601 format
* without microseconds.
*
* @return A date/time formatter
*/
public static DateTimeFormatter fileTimeFormatter()
{
return new DateTimeFormatterBuilder()
.appendValue(YEAR, 4, 10, SignStyle.EXCEEDS_PAD)
.appendLiteral('-')
.appendValue(MONTH_OF_YEAR, 2)
.appendLiteral('-')
.appendValue(DAY_OF_MONTH, 2)
.appendLiteral(' ')
.appendValue(HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(MINUTE_OF_HOUR, 2)
.optionalStart()
.appendLiteral(':')
.appendValue(SECOND_OF_MINUTE, 2)
.appendOffsetId()
.toFormatter();
}
/**
* The default file selection mode. By default, any type of file (including
* directories) may be selected.
*
* @return A function that dictates whether the selected items may be
* returned.
*/
public static Function<Path, Boolean> fileSelectionMode()
{
return (path) -> true;
}
/**
* This is a basic file size formatter that displays fractional kilobyte,
* megabyte, gigabyte, and terabyte values depending on sizes.
*
* @return A size formatter
*/
public static JWFileSizeFormatterType fileSizeFormatter()
{
return size -> {
if (size == -1L) {
return "";
}
final var real = Double.parseDouble(Long.toUnsignedString(size));
if (Long.compareUnsigned(size, 1_000L) < 0) {
return Long.toUnsignedString(size) + "B";
}
if (Long.compareUnsigned(size, 1_000_000L) < 0) {
final var resultSize = real / 1_000.0;
return String.format("%.2fkB", Double.valueOf(resultSize));
}
if (Long.compareUnsigned(size, 1_000_000_000L) < 0) {
final var resultSize = real / 1_000_000.0;
return String.format("%.2fMB", Double.valueOf(resultSize));
}
if (Long.compareUnsigned(size, 1_000_000_000_000L) < 0) {
final var resultSize = real / 1_000_000_000.0;
return String.format("%.2fGB", Double.valueOf(resultSize));
}
final var resultSize = real / 1_000_000_000_000.0;
return String.format("%.2fTB", Double.valueOf(resultSize));
};
}
}