From fedc2824f683e2175af44008753d9294208cbe7b Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Thu, 10 Oct 2019 10:20:40 +0200 Subject: [PATCH] [New] TimeValue and its implementations are now Comparable --- .../java/li/strolch/model/timevalue/IValue.java | 2 +- .../model/timevalue/impl/BooleanValue.java | 5 +++++ .../model/timevalue/impl/FloatListValue.java | 7 +++++++ .../strolch/model/timevalue/impl/FloatValue.java | 4 ++++ .../model/timevalue/impl/IntegerValue.java | 4 ++++ .../strolch/model/timevalue/impl/LongValue.java | 4 ++++ .../model/timevalue/impl/StringSetValue.java | 8 ++++++++ .../strolch/model/timevalue/impl/TimeValue.java | 16 ++++++++++++++-- 8 files changed, 47 insertions(+), 3 deletions(-) diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValue.java index afaab8a1c..42f7d921f 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/IValue.java @@ -24,7 +24,7 @@ package li.strolch.model.timevalue; * * @author Martin Smock */ -public interface IValue { +public interface IValue extends Comparable> { /** * @return the type of this {@link IValue} diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/BooleanValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/BooleanValue.java index bc5ce3ede..3ec946658 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/BooleanValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/BooleanValue.java @@ -115,4 +115,9 @@ public class BooleanValue implements IValue, Serializable { } return true; } + + @Override + public int compareTo(IValue o) { + return Boolean.compare(this.value, o.getValue()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatListValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatListValue.java index c642a221e..0cdf37c58 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatListValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatListValue.java @@ -153,4 +153,11 @@ public class FloatListValue implements IValue>, Serializable { return true; } + @Override + public int compareTo(IValue> o) { + List otherValues = o.getValue(); + if (this.value.equals(otherValues)) + return 0; + return Integer.compare(this.value.size(), otherValues.size()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatValue.java index 1159bf33a..bb8c9bb06 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/FloatValue.java @@ -125,4 +125,8 @@ public class FloatValue implements IValue, Serializable { return true; } + @Override + public int compareTo(IValue o) { + return Double.compare(this.value, o.getValue()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/IntegerValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/IntegerValue.java index b7dc7ebbd..1d691e614 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/IntegerValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/IntegerValue.java @@ -116,4 +116,8 @@ public class IntegerValue implements IValue, Serializable { return true; } + @Override + public int compareTo(IValue o) { + return Integer.compare(this.value, o.getValue()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/LongValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/LongValue.java index c646a1b6c..53b682f43 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/LongValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/LongValue.java @@ -116,4 +116,8 @@ public class LongValue implements IValue, Serializable { return true; } + @Override + public int compareTo(IValue o) { + return Long.compare(this.value, o.getValue()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/StringSetValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/StringSetValue.java index cb998a5ce..9d7c6a958 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/StringSetValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/StringSetValue.java @@ -141,4 +141,12 @@ public class StringSetValue implements IValue>, Serializable { sb.append("]"); return sb.toString(); } + + @Override + public int compareTo(IValue> o) { + Set otherValues = o.getValue(); + if (this.aStrings.equals(otherValues)) + return 0; + return Integer.compare(this.aStrings.size(), otherValues.size()); + } } diff --git a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeValue.java b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeValue.java index 71625035c..b5249751f 100644 --- a/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeValue.java +++ b/li.strolch.model/src/main/java/li/strolch/model/timevalue/impl/TimeValue.java @@ -31,7 +31,9 @@ public class TimeValue implements ITimeValue, Serializable /** * @param time + * the time for this value * @param value + * the actual value for this value */ public TimeValue(final Long time, final T value) { this.time = time; @@ -41,7 +43,7 @@ public class TimeValue implements ITimeValue, Serializable @Override @SuppressWarnings("unchecked") public T getValue() { - return (T) this.value.getCopy(); + return this.value == null ? null : (T) this.value.getCopy(); } @Override @@ -62,9 +64,19 @@ public class TimeValue implements ITimeValue, Serializable return this; } + @SuppressWarnings("unchecked") @Override public int compareTo(final ITimeValue arg0) { - return this.getTime().compareTo(arg0.getTime()); + int i = getTime().compareTo(arg0.getTime()); + if (i != 0) + return i; + if (this.value == null && arg0.getValue() == null) + return 0; + if (this.value == null) + return -1; + if (arg0.getValue() == null) + return 1; + return getValue().compareTo(arg0.getValue()); } @SuppressWarnings("unchecked")