diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 6cdb2555..7f39af3c 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,7 +1,10 @@ package com.gildedrose; import com.gildedrose.rules.AgedBrieQualityRule; +import com.gildedrose.rules.BackstagePassQualityRule; +import com.gildedrose.rules.DefaultQualityRule; import com.gildedrose.rules.QualityRule; +import com.gildedrose.rules.Result; import com.gildedrose.rules.SulfurasQualityRule; import lombok.val; @@ -13,7 +16,8 @@ class GildedRose { private final List rules = List.of( new SulfurasQualityRule(), new AgedBrieQualityRule(), - new QualityRule() + new BackstagePassQualityRule(), + new DefaultQualityRule() ); public GildedRose(Item[] items) { @@ -29,13 +33,15 @@ class GildedRose { private void processItem(final Item item) { + val newSellIn = calculateSellIn(item.name, item.sellIn); + var newQuality = rules.stream() - .reduce(new QualityRule.Result(item.quality, false), + .reduce(new Result(item.quality, false), (q, rule) -> { if (q.isFinalValue() || !rule.shouldApply(item.name)) { return q; } else { - return rule.calculateQuality(q.getQuality()); + return rule.calculateQuality(q.getQuality(), newSellIn); } }, (a, b) -> b).getQuality(); @@ -69,7 +75,7 @@ class GildedRose { } */ - val newSellIn = calculateSellIn(item.name, item.sellIn); + /* if (newSellIn < 0) { if (!item.name.equals("Aged Brie")) { diff --git a/Java/src/main/java/com/gildedrose/rules/AgedBrieQualityRule.java b/Java/src/main/java/com/gildedrose/rules/AgedBrieQualityRule.java index a1874942..b31acb2c 100644 --- a/Java/src/main/java/com/gildedrose/rules/AgedBrieQualityRule.java +++ b/Java/src/main/java/com/gildedrose/rules/AgedBrieQualityRule.java @@ -2,7 +2,7 @@ package com.gildedrose.rules; import static java.lang.Integer.min; -public class AgedBrieQualityRule extends QualityRule { +public class AgedBrieQualityRule implements QualityRule { @Override public boolean shouldApply(String itemName) { @@ -10,7 +10,7 @@ public class AgedBrieQualityRule extends QualityRule { } @Override - public Result calculateQuality(int oldQuality) { + public Result calculateQuality(int oldQuality, int sellIn) { return new Result(min(oldQuality + 1, 50), true); } } diff --git a/Java/src/main/java/com/gildedrose/rules/BackstagePassQualityRule.java b/Java/src/main/java/com/gildedrose/rules/BackstagePassQualityRule.java new file mode 100644 index 00000000..c41633e8 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/rules/BackstagePassQualityRule.java @@ -0,0 +1,17 @@ +package com.gildedrose.rules; + +import static java.lang.Integer.min; + +public class BackstagePassQualityRule implements QualityRule { + + @Override + public boolean shouldApply(String itemName) { + return "Backstage passes to a TAFKAL80ETC concert".equals(itemName); + } + + @Override + public Result calculateQuality(int oldQuality, int sellIn) { + final int newQuality = oldQuality + 2; + return new Result(min(newQuality, 50), true); + } +} diff --git a/Java/src/main/java/com/gildedrose/rules/DefaultQualityRule.java b/Java/src/main/java/com/gildedrose/rules/DefaultQualityRule.java new file mode 100644 index 00000000..5fc226ac --- /dev/null +++ b/Java/src/main/java/com/gildedrose/rules/DefaultQualityRule.java @@ -0,0 +1,17 @@ +package com.gildedrose.rules; + +import static java.lang.Integer.max; + +public class DefaultQualityRule implements QualityRule { + + @Override + public boolean shouldApply(String itemName) { + return true; + } + + @Override + public Result calculateQuality(int oldQuality, int sellIn) { + return new Result(max(oldQuality - 1, 0), false); + } + +} diff --git a/Java/src/main/java/com/gildedrose/rules/QualityRule.java b/Java/src/main/java/com/gildedrose/rules/QualityRule.java index 61f2bac5..b7bd0ad2 100644 --- a/Java/src/main/java/com/gildedrose/rules/QualityRule.java +++ b/Java/src/main/java/com/gildedrose/rules/QualityRule.java @@ -1,32 +1,7 @@ package com.gildedrose.rules; -import static java.lang.Integer.max; +public interface QualityRule { + boolean shouldApply(String itemName); -public class QualityRule { - - public boolean shouldApply(String itemName) { - return true; - } - - public Result calculateQuality(int oldQuality) { - return new Result(max(oldQuality - 1, 0), false); - } - - public static class Result { - final int quality; - final boolean isFinalValue; - - public Result(int quality, boolean isFinalValue) { - this.quality = quality; - this.isFinalValue = isFinalValue; - } - - public int getQuality() { - return quality; - } - - public boolean isFinalValue() { - return isFinalValue; - } - } + Result calculateQuality(int oldQuality, int sellIn); } diff --git a/Java/src/main/java/com/gildedrose/rules/Result.java b/Java/src/main/java/com/gildedrose/rules/Result.java new file mode 100644 index 00000000..828cda5e --- /dev/null +++ b/Java/src/main/java/com/gildedrose/rules/Result.java @@ -0,0 +1,19 @@ +package com.gildedrose.rules; + +public class Result { + final int quality; + final boolean isFinalValue; + + public Result(int quality, boolean isFinalValue) { + this.quality = quality; + this.isFinalValue = isFinalValue; + } + + public int getQuality() { + return quality; + } + + public boolean isFinalValue() { + return isFinalValue; + } +} diff --git a/Java/src/main/java/com/gildedrose/rules/SulfurasQualityRule.java b/Java/src/main/java/com/gildedrose/rules/SulfurasQualityRule.java index 841adef1..91c1ace0 100644 --- a/Java/src/main/java/com/gildedrose/rules/SulfurasQualityRule.java +++ b/Java/src/main/java/com/gildedrose/rules/SulfurasQualityRule.java @@ -1,6 +1,6 @@ package com.gildedrose.rules; -public class SulfurasQualityRule extends QualityRule { +public class SulfurasQualityRule implements QualityRule { @Override public boolean shouldApply(String itemName) { @@ -8,7 +8,7 @@ public class SulfurasQualityRule extends QualityRule { } @Override - public Result calculateQuality(int oldQuality) { + public Result calculateQuality(int oldQuality, int sellIn) { return new Result(oldQuality, true); } }