diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index d0eb04a8..a5a60595 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,29 +1,22 @@ package com.gildedrose; +import java.util.ArrayList; import java.util.Arrays; +import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; class GildedRose { Item[] items; + private final List itemWrappers; public GildedRose(Item[] items) { this.items = items; + this.itemWrappers = new ArrayList<>(items.length); + Arrays.stream(items).forEach(item -> itemWrappers.add(new ItemWrapper(item))); } public void updateQuality() { - Arrays.stream(items).forEach(this::updateQuality); - } - - public void updateQuality(Item item) { - if (item.name.equals("Aged Brie")) { - AgedBrieStrategy.INSTANCE.applyTo(item); - } else if (item.name.startsWith("Backstage passes")) { - BackstagePassesStrategy.INSTANCE.applyTo(item); - } else if (item.name.startsWith("Conjured")) { - ConjuredStrategy.INSTANCE.applyTo(item); - } else { - DefaultStrategy.INSTANCE.applyTo(item); - } + itemWrappers.forEach(ItemWrapper::updateQuality); } } diff --git a/Java/src/main/java/com/gildedrose/ItemWrapper.java b/Java/src/main/java/com/gildedrose/ItemWrapper.java new file mode 100644 index 00000000..70de53db --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ItemWrapper.java @@ -0,0 +1,32 @@ +package com.gildedrose; + +import com.gildedrose.strategies.AgedBrieStrategy; +import com.gildedrose.strategies.BackstagePassesStrategy; +import com.gildedrose.strategies.ConjuredStrategy; +import com.gildedrose.strategies.DefaultStrategy; +import com.gildedrose.strategies.QualityUpdateStrategy; +import com.gildedrose.strategies.SulfurasStrategy; + +public class ItemWrapper { + private final Item item; + private final QualityUpdateStrategy strategy; + + public ItemWrapper(Item item) { + this.item = item; + if (item.name.equals("Aged Brie")) { + strategy = AgedBrieStrategy.INSTANCE; + } else if (item.name.startsWith("Backstage passes")) { + strategy = BackstagePassesStrategy.INSTANCE; + } else if (item.name.startsWith("Conjured")) { + strategy = ConjuredStrategy.INSTANCE; + } else if (item.name.startsWith("Sulfuras")) { + strategy = SulfurasStrategy.INSTANCE; + } else { + strategy = DefaultStrategy.INSTANCE; + } + } + + public void updateQuality() { + strategy.applyTo(item); + } +} diff --git a/Java/src/main/java/com/gildedrose/AgedBrieStrategy.java b/Java/src/main/java/com/gildedrose/strategies/AgedBrieStrategy.java similarity index 51% rename from Java/src/main/java/com/gildedrose/AgedBrieStrategy.java rename to Java/src/main/java/com/gildedrose/strategies/AgedBrieStrategy.java index 1162e11e..2facee74 100644 --- a/Java/src/main/java/com/gildedrose/AgedBrieStrategy.java +++ b/Java/src/main/java/com/gildedrose/strategies/AgedBrieStrategy.java @@ -1,11 +1,13 @@ -package com.gildedrose; +package com.gildedrose.strategies; + +import com.gildedrose.Item; public enum AgedBrieStrategy implements QualityUpdateStrategy { INSTANCE; @Override public void applyTo(Item item) { - item.quality = Math.min(50, item.sellIn < 0 ? item.quality+2 : item.quality+1); + item.quality = Math.min(50, item.sellIn <= 0 ? item.quality+2 : item.quality+1); --item.sellIn; } } diff --git a/Java/src/main/java/com/gildedrose/BackstagePassesStrategy.java b/Java/src/main/java/com/gildedrose/strategies/BackstagePassesStrategy.java similarity index 75% rename from Java/src/main/java/com/gildedrose/BackstagePassesStrategy.java rename to Java/src/main/java/com/gildedrose/strategies/BackstagePassesStrategy.java index 37c5318f..14cbf789 100644 --- a/Java/src/main/java/com/gildedrose/BackstagePassesStrategy.java +++ b/Java/src/main/java/com/gildedrose/strategies/BackstagePassesStrategy.java @@ -1,4 +1,6 @@ -package com.gildedrose; +package com.gildedrose.strategies; + +import com.gildedrose.Item; public enum BackstagePassesStrategy implements QualityUpdateStrategy { INSTANCE; @@ -7,9 +9,9 @@ public enum BackstagePassesStrategy implements QualityUpdateStrategy { public void applyTo(Item item) { if (item.sellIn <= 0) { item.quality = 0; - } else if (item.sellIn >= 10) { + } else if (item.sellIn > 10) { item.quality = Math.min(50, item.quality+1); - } else if (item.sellIn >= 5) { + } else if (item.sellIn > 5) { item.quality = Math.min(50, item.quality+2); } else { item.quality = Math.min(50, item.quality+3); diff --git a/Java/src/main/java/com/gildedrose/ConjuredStrategy.java b/Java/src/main/java/com/gildedrose/strategies/ConjuredStrategy.java similarity index 83% rename from Java/src/main/java/com/gildedrose/ConjuredStrategy.java rename to Java/src/main/java/com/gildedrose/strategies/ConjuredStrategy.java index 7e34087f..a0d2ea56 100644 --- a/Java/src/main/java/com/gildedrose/ConjuredStrategy.java +++ b/Java/src/main/java/com/gildedrose/strategies/ConjuredStrategy.java @@ -1,4 +1,6 @@ -package com.gildedrose; +package com.gildedrose.strategies; + +import com.gildedrose.Item; public enum ConjuredStrategy implements QualityUpdateStrategy { INSTANCE; diff --git a/Java/src/main/java/com/gildedrose/DefaultStrategy.java b/Java/src/main/java/com/gildedrose/strategies/DefaultStrategy.java similarity index 72% rename from Java/src/main/java/com/gildedrose/DefaultStrategy.java rename to Java/src/main/java/com/gildedrose/strategies/DefaultStrategy.java index f2c5a00a..73716f53 100644 --- a/Java/src/main/java/com/gildedrose/DefaultStrategy.java +++ b/Java/src/main/java/com/gildedrose/strategies/DefaultStrategy.java @@ -1,4 +1,6 @@ -package com.gildedrose; +package com.gildedrose.strategies; + +import com.gildedrose.Item; public enum DefaultStrategy implements QualityUpdateStrategy { INSTANCE; @@ -6,6 +8,6 @@ public enum DefaultStrategy implements QualityUpdateStrategy { @Override public void applyTo(Item item) { item.quality = Math.max(0, item.sellIn > 0 ? (item.quality-1) : (item.quality-2)); - item.sellIn = item.sellIn - 1; + --item.sellIn; } } diff --git a/Java/src/main/java/com/gildedrose/QualityUpdateStrategy.java b/Java/src/main/java/com/gildedrose/strategies/QualityUpdateStrategy.java similarity index 53% rename from Java/src/main/java/com/gildedrose/QualityUpdateStrategy.java rename to Java/src/main/java/com/gildedrose/strategies/QualityUpdateStrategy.java index 682b4f67..e5ca1cc1 100644 --- a/Java/src/main/java/com/gildedrose/QualityUpdateStrategy.java +++ b/Java/src/main/java/com/gildedrose/strategies/QualityUpdateStrategy.java @@ -1,4 +1,6 @@ -package com.gildedrose; +package com.gildedrose.strategies; + +import com.gildedrose.Item; public interface QualityUpdateStrategy { void applyTo(Item item); diff --git a/Java/src/main/java/com/gildedrose/strategies/SulfurasStrategy.java b/Java/src/main/java/com/gildedrose/strategies/SulfurasStrategy.java new file mode 100644 index 00000000..98448b25 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/strategies/SulfurasStrategy.java @@ -0,0 +1,12 @@ +package com.gildedrose.strategies; + +import com.gildedrose.Item; + +public enum SulfurasStrategy implements QualityUpdateStrategy{ + INSTANCE; + + @Override + public void applyTo(Item item) { + //do nothing + } +} diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 499c20df..b67a2603 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -108,7 +108,6 @@ class GildedRoseTest { } @Test - @Disabled @DisplayName("Conjured Item") void updateQualityConjuredItem() { Item conjuredItemUnderTest = new Item("Conjured Sample Item", 1, 8);