From 41902a6ec4e438e4563441092ba4103cbc776814 Mon Sep 17 00:00:00 2001 From: rschoene <rene.schoene@tu-dresden.de> Date: Fri, 3 May 2019 15:13:57 +0200 Subject: [PATCH] Make TupleHSB immutable. --- eraser-base/src/main/jastadd/Item.jrag | 12 ++++---- .../inf/st/eraser/jastadd/model/TupleHSB.java | 30 +++++++++++++++++-- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/eraser-base/src/main/jastadd/Item.jrag b/eraser-base/src/main/jastadd/Item.jrag index 4b8e1abe..2bb0eb80 100644 --- a/eraser-base/src/main/jastadd/Item.jrag +++ b/eraser-base/src/main/jastadd/Item.jrag @@ -26,7 +26,7 @@ aspect ItemHandling { // TupleHSB and String work like default eq ColorItem.getStateAsDouble() { logger.warn("getStateAsDouble called on item " + getLabel() + ". Using brightness."); - return getState().brightness; + return getState().getBrightness(); } eq DateTimeItem.getStateAsDouble() = getState().getTime(); eq ItemWithBooleanState.getStateAsDouble() = getState() ? 1 : 0; @@ -87,7 +87,7 @@ aspect ItemHandling { public abstract void Item.setStateFromLong(long value); public void ColorItem.setStateFromLong(long value) { // only set brightness - this.setState(TupleHSB.of(getState().hue, getState().saturation, Math.toIntExact(value))); + this.setState(getState().withDifferentBrightness(Math.toIntExact(value))); } public void DateTimeItem.setStateFromLong(long value) { this.setState(new Date(value)); @@ -167,10 +167,10 @@ aspect ItemHandling { logger.warn("Ignoring color update using {} for {}", this, value); } public void ItemWithBooleanState.setStateFromColor(TupleHSB value) { - this.setState(value != null && value.brightness > 0); + this.setState(value != null && value.getBrightness() > 0); } public void ItemWithDoubleState.setStateFromColor(TupleHSB value) { - this.setState(value.brightness); + this.setState(value.getBrightness()); } public void ItemWithStringState.setStateFromColor(TupleHSB value) { this.setState(value.toString()); @@ -358,9 +358,7 @@ aspect ItemHandling { } private void ColorItem.setBrightness(int value) { - TupleHSB newState = getState().clone(); - newState.brightness = value; - setState(newState); + setState(getState().withDifferentBrightness(value)); } //--- ItemPreference.apply --- diff --git a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/TupleHSB.java b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/TupleHSB.java index a3520402..8e9ee2ad 100644 --- a/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/TupleHSB.java +++ b/eraser-base/src/main/java/de/tudresden/inf/st/eraser/jastadd/model/TupleHSB.java @@ -8,9 +8,9 @@ import java.util.Objects; * @author rschoene - Initial contribution */ public class TupleHSB implements Cloneable { - public int hue; - public int saturation; - public int brightness; + private int hue; + private int saturation; + private int brightness; public static TupleHSB of(int hue, int saturation, int brightness) { TupleHSB result = new TupleHSB(); result.hue = hue; @@ -19,6 +19,30 @@ public class TupleHSB implements Cloneable { return result; } + public int getHue() { + return hue; + } + + public int getSaturation() { + return saturation; + } + + public int getBrightness() { + return brightness; + } + + public TupleHSB withDifferentHue(int hue) { + return TupleHSB.of(hue, this.saturation, this.brightness); + } + + public TupleHSB withDifferentSaturation(int saturation) { + return TupleHSB.of(this.hue, saturation, this.brightness); + } + + public TupleHSB withDifferentBrightness(int brightness) { + return TupleHSB.of(this.hue, this.saturation, brightness); + } + public String toString() { return String.format("%s,%s,%s", hue, saturation, brightness); } -- GitLab