diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java
index 476e04d..aab2b9e 100644
--- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java
+++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/PlotSettings.java
@@ -5,6 +5,7 @@ import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
import org.apache.commons.lang3.StringUtils;
@@ -26,7 +27,7 @@ public class PlotSettings {
private String dateFrom;
- private String dateTo;
+ private String dateRange;
public String getQuery() {
return query;
@@ -84,12 +85,12 @@ public class PlotSettings {
this.dateFrom = dateFrom;
}
- public String getDateTo() {
- return dateTo;
+ public String getDateRange() {
+ return dateRange;
}
- public void setDateTo(final String dateTo) {
- this.dateTo = dateTo;
+ public void setDateRange(final String dateRange) {
+ this.dateRange = dateRange;
}
public OffsetDateTime dateFrom() {
@@ -103,10 +104,40 @@ public class PlotSettings {
}
public OffsetDateTime dateTo() {
- if (StringUtils.isEmpty(dateTo)) {
+
+ final int period = Integer.parseInt(dateRange.split(" ")[0]);
+ final ChronoUnit unit = toChronoUnit(dateRange.split(" ")[1]);
+
+ if (StringUtils.isEmpty(dateRange)) {
return OffsetDateTime.ofInstant(Instant.ofEpochMilli(Long.MAX_VALUE), ZoneOffset.UTC);
} else {
- return LocalDateTime.parse(dateTo, DATE_FORMAT).atOffset(ZoneOffset.UTC);
+ return dateFrom().plus(period, unit);
+ }
+ }
+
+ private ChronoUnit toChronoUnit(final String string) {
+
+ switch (string) {
+ case "second":
+ case "seconds":
+ return ChronoUnit.SECONDS;
+ case "minute":
+ case "minutes":
+ return ChronoUnit.MINUTES;
+ case "hour":
+ case "hours":
+ return ChronoUnit.HOURS;
+ case "day":
+ case "days":
+ return ChronoUnit.DAYS;
+ case "week":
+ case "weeks":
+ return ChronoUnit.WEEKS;
+ case "month":
+ case "months":
+ return ChronoUnit.MONTHS;
+ default:
+ throw new IllegalArgumentException(string + " is an unknown chrono unit");
}
}
}
diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java b/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java
index 5495850..d6c4390 100644
--- a/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java
+++ b/pdb-ui/src/main/java/org/lucares/pdbui/PlotSettingsTransformer.java
@@ -17,7 +17,7 @@ class PlotSettingsTransformer {
result.setLimit(request.getLimit());
result.setLimitBy(toLimit(request.getLimitBy()));
result.setDateFrom(request.getDateFrom());
- result.setDateTo(request.getDateTo());
+ result.setDateRange(request.getDateRange());
return result;
}
diff --git a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java
index 1bcba52..04d9d2c 100644
--- a/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java
+++ b/pdb-ui/src/main/java/org/lucares/pdbui/domain/PlotRequest.java
@@ -15,7 +15,7 @@ public class PlotRequest {
private String dateFrom;
- private String dateTo;
+ private String dateRange;
public String getQuery() {
return query;
@@ -78,11 +78,15 @@ public class PlotRequest {
this.dateFrom = dateFrom;
}
- public String getDateTo() {
- return dateTo;
+ public String getDateRange() {
+ return dateRange;
}
- public void setDateTo(final String dateTo) {
- this.dateTo = dateTo;
+ public void setDateRange(final String dateRange) {
+ if (!dateRange.matches("\\d+ (second|minute|hour|day|week|month)s?")) {
+ throw new IllegalArgumentException(dateRange + " is not a valid range");
+ }
+ this.dateRange = dateRange;
}
+
}
diff --git a/pdb-ui/src/main/resources/resources/css/design.css b/pdb-ui/src/main/resources/resources/css/design.css
index f86f33c..d117604 100644
--- a/pdb-ui/src/main/resources/resources/css/design.css
+++ b/pdb-ui/src/main/resources/resources/css/design.css
@@ -99,3 +99,9 @@ body{
align-items: center;
}
+input:required:invalid {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAT1JREFUeNpi/P//PwMpgImBRMACY/x7/uDX39sXt/67cMoDyOVgMjBjYFbV/8kkqcCBrIER5KS/967s+rmkXxzI5wJiRSBm/v8P7NTfHHFFl5mVdIzhGv4+u///x+xmuAlcdXPB9KeqeLgYd3bDU2ZpRRmwH4DOeAI07QXIRKipYPD35184/nn17CO4p/+cOfjl76+/X4GYAYThGn7/g+Mfh/ZZwjUA/aABpJVhpv6+dQUjZP78Z0YEK7OezS2gwltg64GmfTu6i+HL+mUMP34wgvGvL78ZOEysf8M1sGgZvQIqfA1SDAL8iUUMPIFRQLf+AmMQ4DQ0vYYSrL9vXDz2sq9LFsiX4dLRA0t8OX0SHKzi5bXf2HUMBVA0gN356N7p7xdOS3w5fAgcfNxWtn+BJi9gVVBOQfYPQIABABvRq3BwGT3OAAAAAElFTkSuQmCC);
+ background-position: right top;
+ background-repeat: no-repeat;
+ box-shadow: none;
+}
diff --git a/pdb-ui/src/main/resources/resources/js/search.js b/pdb-ui/src/main/resources/resources/js/search.js
index 682e18b..0bb9319 100644
--- a/pdb-ui/src/main/resources/resources/js/search.js
+++ b/pdb-ui/src/main/resources/resources/js/search.js
@@ -90,7 +90,7 @@ function plot(event){
request['limitBy'] = $('#search-limit-by').val();
request['limit'] = parseInt($('#search-limit-value').val());
request['dateFrom'] = $('#search-date-from').val();
- request['dateTo'] = $('#search-date-to').val();
+ request['dateRange'] = $('#search-date-range').val();
var success = function(response){
diff --git a/pdb-ui/src/main/resources/templates/main.html b/pdb-ui/src/main/resources/templates/main.html
index ca6badf..d27175e 100644
--- a/pdb-ui/src/main/resources/templates/main.html
+++ b/pdb-ui/src/main/resources/templates/main.html
@@ -32,8 +32,16 @@
-
-
+
+
+