From aaa385d397a65620583b197fb235a5518cdde053 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Sun, 30 Jun 2019 06:31:16 +0200 Subject: [PATCH] quality rules --- .../main/java/com/gildedrose/GildedRose.java | 22 +++++++++++++ .../com/gildedrose/rules/QualityRule.java | 32 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 Java/src/main/java/com/gildedrose/rules/QualityRule.java diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 188319c8..c25a6c95 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,10 +1,19 @@ package com.gildedrose; +import com.gildedrose.rules.QualityRule; +import com.gildedrose.rules.SulfurasQualityRule; import lombok.val; +import java.util.List; + class GildedRose { Item[] items; + private final List rules = List.of( + new SulfurasQualityRule(), + new QualityRule() + ); + public GildedRose(Item[] items) { this.items = items; } @@ -17,6 +26,18 @@ class GildedRose { } private void processItem(final Item item) { + + var newQuality = rules.stream() + .reduce(new QualityRule.Result(item.quality, false), + (q, rule) -> { + if (q.isFinalValue() || !rule.shouldApply(item.name)) { + return q; + } else { + return rule.calculateQuality(q.getQuality()); + } + }, + (a, b) -> b).getQuality(); + if (!item.name.equals("Aged Brie") && !item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { if (item.quality > 0) { @@ -64,6 +85,7 @@ class GildedRose { } } + item.quality = newQuality; item.sellIn = newSellIn; } diff --git a/Java/src/main/java/com/gildedrose/rules/QualityRule.java b/Java/src/main/java/com/gildedrose/rules/QualityRule.java new file mode 100644 index 00000000..61f2bac5 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/rules/QualityRule.java @@ -0,0 +1,32 @@ +package com.gildedrose.rules; + +import static java.lang.Integer.max; + +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; + } + } +}