quality rules

This commit is contained in:
Konstantin Pavlov 2019-06-30 06:31:16 +02:00
parent efac644812
commit aaa385d397
2 changed files with 54 additions and 0 deletions

View File

@ -1,10 +1,19 @@
package com.gildedrose; package com.gildedrose;
import com.gildedrose.rules.QualityRule;
import com.gildedrose.rules.SulfurasQualityRule;
import lombok.val; import lombok.val;
import java.util.List;
class GildedRose { class GildedRose {
Item[] items; Item[] items;
private final List<QualityRule> rules = List.of(
new SulfurasQualityRule(),
new QualityRule()
);
public GildedRose(Item[] items) { public GildedRose(Item[] items) {
this.items = items; this.items = items;
} }
@ -17,6 +26,18 @@ class GildedRose {
} }
private void processItem(final Item item) { 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") if (!item.name.equals("Aged Brie")
&& !item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { && !item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (item.quality > 0) { if (item.quality > 0) {
@ -64,6 +85,7 @@ class GildedRose {
} }
} }
item.quality = newQuality;
item.sellIn = newSellIn; item.sellIn = newSellIn;
} }

View File

@ -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;
}
}
}