From 56f0c5d5f8e4220a3a410565453a33d9499f9c85 Mon Sep 17 00:00:00 2001 From: Gabba Date: Fri, 15 Dec 2017 12:37:07 +0000 Subject: [PATCH 01/18] creates tests --- .../java/com/gildedrose/GildedRoseTest.java | 148 +++++++++++++++++- 1 file changed, 145 insertions(+), 3 deletions(-) diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 95bfddc4..ee262fa2 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -2,16 +2,158 @@ package com.gildedrose; import static org.junit.Assert.*; +import com.gildedrose.item.Item; import org.junit.Test; public class GildedRoseTest { @Test public void foo() { - Item[] items = new Item[] { new Item("foo", 0, 0) }; - GildedRose app = new GildedRose(items); + GildedRose app = newGildedRose("foo", 0, 0); + app.updateQuality(); - assertEquals("fixme", app.items[0].name); + + assertEquals("foo", app.items[0].name); } + @Test + public void standardItemDecreasesSellByDayNumberEachTime() { + GildedRose app = newGildedRose("standard item", 0, 0); + + app.updateQuality(); + + assertEquals(-1, itemSellByDayNumber(app)); + } + + @Test + public void brieDecreasesSellByDayNumberEachTime() { + GildedRose app = newGildedRose("Aged Brie", 0, 0); + + app.updateQuality(); + + assertEquals(-1, itemSellByDayNumber(app)); + } + + @Test + public void backstagePassesItemDecreasesSellByDayNumberEachTime() { + GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 0, 0); + + app.updateQuality(); + + assertEquals(-1, itemSellByDayNumber(app)); + } + + @Test + public void sulfurasItemDoesNotDecreaseSellByDayNumberEachTime() { + GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 0, 0); + + app.updateQuality(); + + assertEquals(0, itemSellByDayNumber(app)); + } + + @Test + public void brieIncreasesInQualityEachTime() { + GildedRose app = newGildedRose("Aged Brie", 1, 1); + + app.updateQuality(); + + assertEquals(2, itemQualityNumber(app)); + } + + @Test + public void brieQualityCannotGoAboveFiftyWhenIncreasing() { + GildedRose app = newGildedRose("Aged Brie", 1, 49); + + app.updateQuality(); + app.updateQuality(); + + assertEquals(50, itemQualityNumber(app)); + } + + @Test + public void backstagePassesItemDecreasesQualityByOneIfSellByDayMoreThanEleven() { + GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 12, 1); + + app.updateQuality(); + + assertEquals(2, itemQualityNumber(app)); + } + + @Test + public void backstagePassesItemDecreasesQualityByTwoIfSellByDayLessThanEleven() { + GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 10, 1); + + app.updateQuality(); + + assertEquals(3, itemQualityNumber(app)); + } + + @Test + public void backstagePassesItemDecreasesQualityByThreeIfSellByDayLessThanSix() { + GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 5, 1); + + app.updateQuality(); + + assertEquals(4, itemQualityNumber(app)); + } + + @Test + public void backstagePassesItemQualityDropsToZeroIfSellByDayHasPassed() { + GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 0,50); + + app.updateQuality(); + + assertEquals(0, itemQualityNumber(app)); + } + + @Test + public void normalItemDecreasesQualityByOneIfSellByDayIsAboveZero() { + GildedRose app = newGildedRose("foo", 2, 1); + + app.updateQuality(); + + assertEquals(0, itemQualityNumber(app)); + } + + @Test + public void normalItemDecreasesQualityByTwoOnceSellByDayHasPassed() { + GildedRose app = newGildedRose("foo",0, 5); + + app.updateQuality(); + + assertEquals(3, itemQualityNumber(app)); + } + + @Test + public void normalItemCannotHaveQualityBelowZero() { + GildedRose app = newGildedRose("foo", 0, 0); + + app.updateQuality(); + + assertEquals(0, itemQualityNumber(app)); + } + + @Test + public void nothingHappensToSulfurasItem() { + GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 1, 1); + + app.updateQuality(); + + assertEquals(1, itemQualityNumber(app)); + assertEquals(1, itemSellByDayNumber(app)); + } + + private GildedRose newGildedRose(String itemName, int itemSellIn, int itemQuality) { + Item[] items = new Item[] { new Item(itemName, itemSellIn, itemQuality)}; + return new GildedRose(items); + } + + private int itemSellByDayNumber(GildedRose app) { + return app.items[0].sellIn; + } + + private int itemQualityNumber(GildedRose app) { + return app.items[0].quality; + } } From a2b84d2659cf6e015d5a2a17f9dcf8bff3ef56fd Mon Sep 17 00:00:00 2001 From: Gabba Date: Fri, 15 Dec 2017 13:06:22 +0000 Subject: [PATCH 02/18] refactorings --- Java/.DS_Store | Bin 0 -> 6148 bytes Java/src/.DS_Store | Bin 0 -> 6148 bytes Java/src/main/.DS_Store | Bin 0 -> 6148 bytes Java/src/main/java/.DS_Store | Bin 0 -> 6148 bytes Java/src/main/java/com/.DS_Store | Bin 0 -> 6148 bytes Java/src/main/java/com/gildedrose/.DS_Store | Bin 0 -> 6148 bytes .../main/java/com/gildedrose/GildedRose.java | 77 +++++++----------- .../java/com/gildedrose/item/AgedBrie.java | 13 +++ .../gildedrose/item/BackstagePassesItem.java | 21 +++++ .../java/com/gildedrose/{ => item}/Item.java | 9 +- .../java/com/gildedrose/item/ItemFactory.java | 16 ++++ .../com/gildedrose/item/StandardItem.java | 17 ++++ .../java/com/gildedrose/item/Sulfuras.java | 11 +++ .../java/com/gildedrose/TexttestFixture.java | 2 + 14 files changed, 115 insertions(+), 51 deletions(-) create mode 100644 Java/.DS_Store create mode 100644 Java/src/.DS_Store create mode 100644 Java/src/main/.DS_Store create mode 100644 Java/src/main/java/.DS_Store create mode 100644 Java/src/main/java/com/.DS_Store create mode 100644 Java/src/main/java/com/gildedrose/.DS_Store create mode 100644 Java/src/main/java/com/gildedrose/item/AgedBrie.java create mode 100644 Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java rename Java/src/main/java/com/gildedrose/{ => item}/Item.java (73%) create mode 100644 Java/src/main/java/com/gildedrose/item/ItemFactory.java create mode 100644 Java/src/main/java/com/gildedrose/item/StandardItem.java create mode 100644 Java/src/main/java/com/gildedrose/item/Sulfuras.java diff --git a/Java/.DS_Store b/Java/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..59c2a77539e03a21c887df1809154825f69dca20 GIT binary patch literal 6148 zcmeHK&2G~`5S~p!>Iflns8qP^1&KpIH6Q{)NLJb&dP53=1EAKft=7WvMz%wMG{_fT zqC5ew!VB;?@a+#((u6}V2vsxE>^D0*vnzjN?|O+y3?{Kp)FmPhsdyYe?;RfEvxPApQ6!hU2AW6 zosQSJ;k_H4sOhi@t4TQsi#Mj1#!2Mtmr7;lb{M@%lj%Wsb4TS>nC3~b5dQXcn#XE7 zP?J0^%{(u{>IAuFp@Z)2+3d+vzb7B{AIy7l=KBvH_hjGi&*z@Eb;p0ce>nQ|d3HMg za;8bar-5(7$W4cT;2R9b!iQmzXDUC2M@P2}>jmnPP<4T!uNYrs9bFb?fEi#0F3Et~ zm%Qtj%;RuofEl>@4CwtqLNx{sYl~*<0;Z_#zh9b=Bm|vQ35`jf-nE_^CnSrM5cJ=wc_xJn%auWBL z0cPMzF(6vI!`%TM$(^k$52w#s2|a{r(Q&oK^As57C`PP4if=)Uz%R7{3>?-L;eqgv NfT4jKX5gPP@EeaJgLeP` literal 0 HcmV?d00001 diff --git a/Java/src/.DS_Store b/Java/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b4bc87c8b089641f2f24e61043dfe0a825337db3 GIT binary patch literal 6148 zcmeHK!Ab)$5S_HEZV|BuLA~uo@X$k7#VR5!wH|sCDtb_{ySC`Ux{>bIqP4Q$pZc_C-N2(RJ+JVvcrHqEU9~^}3-f3}eN5-ii#_i6C`|)8Iw`8v> zyKyT~G+Ta@Hy)T+27bGLq49No1JmL?Vw^2;<1Lr_syG5XR~ynsas+8t65J%gD>w4m@q NK+(VzGw`Dfya6B5X72z1 literal 0 HcmV?d00001 diff --git a/Java/src/main/.DS_Store b/Java/src/main/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..774ef1d926df00a398534e680716c29dda7382c1 GIT binary patch literal 6148 zcmeHK%}T>S5Z-O0CWzRBpx$y3JoM10SVe?T>!CLxq6d{WvBgGWwlryj)<~X1-^ds6 zadh^lL9O0ItjxgdH<_K;FyDsV3?YQp25pOw5+OtfoPZ5yvH5viC z^aAF=GhYzp?=!&nP9xXEB}3wV+P^)RTYnWI3d!TVB&F!*TwW?{V>&t7_exr4BdpEjIA0Fjq zQ20`XEGits6Bv1gL#H1GEW85WIDQ<5hzuYD$iVb7piVY@e)>zn3XlP0;D;ID=Yt8# z(N>sA6h{XPq6Gldz%2x9@#_z0atENTFp~%#5GqpvWhzxI234H{mFX~VtN2W!Oea*l z8P-v6rm91ss_~$v2q)B*h$Aw9418pO_kJKHe*YhS-~Wps9FPHI;D0hewYpQUL2c@8 zov4!EwI*l_lnal`B<3k#h^rW4`Bl6EDg^u{HvnygnMCk_;E#Zy0S9E@R~dK%4FOvp literal 0 HcmV?d00001 diff --git a/Java/src/main/java/.DS_Store b/Java/src/main/java/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8792a66c812a7b098205542f2e7624c49c785b6f GIT binary patch literal 6148 zcmeHK!AiqG5Z!I7rij>spx$y3JoM10SVe?T>!CNHq6d{WX^IV`S!q*)#z?+H|HvQk zb98ohS}fI@2$mU`eUsUl4f8haW*B33tiuHBH-f4CJA#?*4<)J)jB?}Q9q#g*dl&e_s8V_7xqM+^amgqa zjpB-N)9i`389C8tSaSwf>dE)IF52fp1QXkFFZ^!YDy^M}Fmn8`JNOcQed&juh-+dL zdPB9&nG^LOSG}lJ+DwvzL#u4=Rd>>|nON5De%Y*A)igDX^)2hT(e6JyCQs?}i{1(j zU#XH+#4)^rf%V-t2Vo$>Tkwpd$5DjD05L!e%nJi}z8TB&QV`Wa3=jjq#(+E@Oi+n7 zVy00Y9WbaC0I&dVC19(ce?U_@0ByufBX~f#P6gDd99s;Iy#v?jFmGdgrctLeuHFpm z;F~#iC>&c4ZmMv`ZH+V%1H`~I1G4u6Darf)^ymIx1<^nZ5Cikc058;=^%~TMck4`* w@~$;O+n`cpT&8i70*1PZAy!_+8=y+SZ%PBuM$9yV2ZVkE6b&>G1AofECpM;8J^%m! literal 0 HcmV?d00001 diff --git a/Java/src/main/java/com/.DS_Store b/Java/src/main/java/com/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..010bd2e2c90f0f06c12b7553379c3d0c5ee81ec0 GIT binary patch literal 6148 zcmeHK%}T>S5T317Q$_4SP;Yw?JoM10SVe?T_0XG8(Su4&Ot68Nl_s@lt>iiMjeG$g zM`wRpDs8V?WCmux$?VK-_S>+V0RUEQ`!+xk04!9AxdJw0MD|M^k(}|&ATl*Z06w%p zKmx%?G&!b`0l9Yza0ekoxOYSQSBu207YPsh<;QV=y7{F9tqD0^CwVYAAKpV0CTY3+ z$#OIK*|~YEP_PP1)^)upI`z~|+ey`JU8<+h4?JU^2@wr!*EvKFWNHRqo12N z$6%&Wrvo#^2QxD>Q=u?5JC4s)I50;ewZs51@RI>q`=J!&{eLpK{#QZN5Cg=(|73vW zkL$-(T${ODM^-8CT8?^yDn-U+8V4z8sH+%bS5T317Q$*}RP;Yw?JQOi1RuLgoMZAd>J*a46f<|JtG^s^vCC{Nx;H&ro zK90`*w6s>QQe*~ZzuC#mZuZ+{e*l108omus1ON+FVy=M24}ATqc{S3!h5R0?1=-ikWxc z;@*CX^O{M`wD<1SqA*F9mOfZ+BtJSfZWRhvVbVIU-iT&3b<;*taqFk57W#o_>?0wf zuI+lqVbHuNPH&4ib;CHQ_k^FFgt0H0714Nc8RZ+m)j-Y zvh9_%5-;23cH6RM=IyQh%e#li)>HfWMU530u5%?*20QSIMwf~EYCVobe2u`m6hF#HVt12I4h3>5=%f8eMR9fO%hwRK>jo&bpQ8mR literal 0 HcmV?d00001 diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index e6feb751..e7b49768 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,62 +1,43 @@ package com.gildedrose; +import com.gildedrose.item.Item; +import com.gildedrose.item.ItemFactory; + class GildedRose { + + private static final int LOWEST_QUALITY_LEVEL_POSSIBLE = 0; + private static final int HIGHEST_QUALITY_LEVEL_POSSIBLE = 50; + private final ItemFactory itemFactory; Item[] items; public GildedRose(Item[] items) { + this.itemFactory = new ItemFactory(); this.items = items; } public void updateQuality() { - for (int i = 0; i < items.length; i++) { - if (!items[i].name.equals("Aged Brie") - && !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].quality > 0) { - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].quality = items[i].quality - 1; - } - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - - if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].sellIn < 11) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - - if (items[i].sellIn < 6) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - } - } - } - - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].sellIn = items[i].sellIn - 1; - } - - if (items[i].sellIn < 0) { - if (!items[i].name.equals("Aged Brie")) { - if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].quality > 0) { - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].quality = items[i].quality - 1; - } - } - } else { - items[i].quality = items[i].quality - items[i].quality; - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } + customizeItems(); + for (Item item : items) { + item.updateYourState(); + if (hasReachedLowestQualityLimit(item.quality)) { + item.quality = LOWEST_QUALITY_LEVEL_POSSIBLE; + } else if (hasReachedHighestQualityLimit(item.quality)) { + item.quality = HIGHEST_QUALITY_LEVEL_POSSIBLE; } } } + + private void customizeItems() { + for (Item item : items) { + items = new Item[]{itemFactory.createItem(item.name, item.sellIn, item.quality)}; + } + } + + private boolean hasReachedLowestQualityLimit(int itemQuality) { + return itemQuality < LOWEST_QUALITY_LEVEL_POSSIBLE; + } + + private boolean hasReachedHighestQualityLimit(int itemQuality) { + return itemQuality > HIGHEST_QUALITY_LEVEL_POSSIBLE; + } } \ No newline at end of file diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java new file mode 100644 index 00000000..8b8f9dc2 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -0,0 +1,13 @@ +package com.gildedrose.item; + +public class AgedBrie extends Item { + + public AgedBrie(String name, int sellIn, int quality) { + super(name, sellIn, quality); + } + + public void updateYourState() { + sellIn -= 1; + quality += 1; + } +} diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java new file mode 100644 index 00000000..1589b42f --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -0,0 +1,21 @@ +package com.gildedrose.item; + +public class BackstagePassesItem extends Item { + + public BackstagePassesItem(String name, int sellIn, int quality) { + super(name, sellIn, quality); + } + + public void updateYourState() { + sellIn -= 1; + if (sellIn >= 11) { + quality += 1; + } else if (sellIn > 5) { + quality += 2; + } else if (sellIn > 0) { + quality += 3; + } else { + quality = 0; + } + } +} diff --git a/Java/src/main/java/com/gildedrose/Item.java b/Java/src/main/java/com/gildedrose/item/Item.java similarity index 73% rename from Java/src/main/java/com/gildedrose/Item.java rename to Java/src/main/java/com/gildedrose/item/Item.java index 465729ec..fa2e373e 100644 --- a/Java/src/main/java/com/gildedrose/Item.java +++ b/Java/src/main/java/com/gildedrose/item/Item.java @@ -1,4 +1,4 @@ -package com.gildedrose; +package com.gildedrose.item; public class Item { @@ -14,8 +14,11 @@ public class Item { this.quality = quality; } - @Override - public String toString() { + @Override + public String toString() { return this.name + ", " + this.sellIn + ", " + this.quality; } + + public void updateYourState() { + } } diff --git a/Java/src/main/java/com/gildedrose/item/ItemFactory.java b/Java/src/main/java/com/gildedrose/item/ItemFactory.java new file mode 100644 index 00000000..23a1cbb0 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/ItemFactory.java @@ -0,0 +1,16 @@ +package com.gildedrose.item; + +public class ItemFactory { + + public Item createItem(String itemName, int sellIn, int quality) { + if (itemName.equals("Sulfuras, Hand of Ragnaros")) { + return new Sulfuras(itemName, sellIn, quality); + } else if (itemName.equals("Aged Brie")) { + return new AgedBrie(itemName, sellIn, quality); + } else if (itemName.equals("Backstage passes to a TAFKAL80ETC concert")) { + return new BackstagePassesItem(itemName, sellIn, quality); + } else { + return new StandardItem(itemName, sellIn, quality); + } + } +} diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java new file mode 100644 index 00000000..4e355223 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -0,0 +1,17 @@ +package com.gildedrose.item; + +public class StandardItem extends Item { + + public StandardItem(String name, int sellIn, int quality) { + super(name, sellIn, quality); + } + + public void updateYourState() { + sellIn -= 1; + if (sellIn > 0) { + quality -= 1; + } else { + quality -= 2; + } + } +} diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java new file mode 100644 index 00000000..3843a166 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -0,0 +1,11 @@ +package com.gildedrose.item; + +public class Sulfuras extends Item { + + public Sulfuras(String name, int sellIn, int quality) { + super(name, sellIn, quality); + } + + public void updateYourState() { + } +} diff --git a/Java/src/test/java/com/gildedrose/TexttestFixture.java b/Java/src/test/java/com/gildedrose/TexttestFixture.java index d059c88f..e2b2ce1d 100644 --- a/Java/src/test/java/com/gildedrose/TexttestFixture.java +++ b/Java/src/test/java/com/gildedrose/TexttestFixture.java @@ -1,5 +1,7 @@ package com.gildedrose; +import com.gildedrose.item.Item; + public class TexttestFixture { public static void main(String[] args) { System.out.println("OMGHAI!"); From e8780706a1d310d4a6a04d3efeb89126ea1870d9 Mon Sep 17 00:00:00 2001 From: Gabba Date: Sat, 16 Dec 2017 11:48:03 +0000 Subject: [PATCH 03/18] introduces CustomisedItem interface so that Item class is not altered --- .../main/java/com/gildedrose/GildedRose.java | 29 ++++----- .../java/com/gildedrose/item/AgedBrie.java | 14 +++-- .../gildedrose/item/BackstagePassesItem.java | 26 ++++---- .../com/gildedrose/item/CustomisedItem.java | 5 ++ .../main/java/com/gildedrose/item/Item.java | 3 - .../java/com/gildedrose/item/ItemFactory.java | 16 ++--- .../com/gildedrose/item/QualityValues.java | 11 ++++ .../com/gildedrose/item/StandardItem.java | 20 +++--- .../java/com/gildedrose/item/Sulfuras.java | 9 +-- .../java/com/gildedrose/GildedRoseTest.java | 63 ++++++++++--------- 10 files changed, 109 insertions(+), 87 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/item/CustomisedItem.java create mode 100644 Java/src/main/java/com/gildedrose/item/QualityValues.java diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index e7b49768..a1c51a76 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -2,11 +2,11 @@ package com.gildedrose; import com.gildedrose.item.Item; import com.gildedrose.item.ItemFactory; +import com.gildedrose.item.QualityValues; class GildedRose { - private static final int LOWEST_QUALITY_LEVEL_POSSIBLE = 0; - private static final int HIGHEST_QUALITY_LEVEL_POSSIBLE = 50; + private static final int LOWEST_QUALITY_VALUE_POSSIBLE = 0; private final ItemFactory itemFactory; Item[] items; @@ -16,28 +16,21 @@ class GildedRose { } public void updateQuality() { - customizeItems(); for (Item item : items) { - item.updateYourState(); - if (hasReachedLowestQualityLimit(item.quality)) { - item.quality = LOWEST_QUALITY_LEVEL_POSSIBLE; - } else if (hasReachedHighestQualityLimit(item.quality)) { - item.quality = HIGHEST_QUALITY_LEVEL_POSSIBLE; + itemFactory.customiseItem(item).updateState(); + if (hasReachedLowestQualityValue(item)) { + item.quality = LOWEST_QUALITY_VALUE_POSSIBLE; + } else if (hasReachedHighestQualityValue(item)) { + item.quality = QualityValues.highestValuePossible(item); } } } - private void customizeItems() { - for (Item item : items) { - items = new Item[]{itemFactory.createItem(item.name, item.sellIn, item.quality)}; - } + private boolean hasReachedLowestQualityValue(Item item) { + return item.quality < LOWEST_QUALITY_VALUE_POSSIBLE; } - private boolean hasReachedLowestQualityLimit(int itemQuality) { - return itemQuality < LOWEST_QUALITY_LEVEL_POSSIBLE; - } - - private boolean hasReachedHighestQualityLimit(int itemQuality) { - return itemQuality > HIGHEST_QUALITY_LEVEL_POSSIBLE; + private boolean hasReachedHighestQualityValue(Item item) { + return item.quality > QualityValues.highestValuePossible(item); } } \ No newline at end of file diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index 8b8f9dc2..2943eca4 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -1,13 +1,15 @@ package com.gildedrose.item; -public class AgedBrie extends Item { +public class AgedBrie implements CustomisedItem { - public AgedBrie(String name, int sellIn, int quality) { - super(name, sellIn, quality); + public Item item; + + public AgedBrie(Item item) { + this.item = item; } - public void updateYourState() { - sellIn -= 1; - quality += 1; + public void updateState() { + item.sellIn -= 1; + item.quality += 1; } } diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 1589b42f..65e77429 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -1,21 +1,23 @@ package com.gildedrose.item; -public class BackstagePassesItem extends Item { +public class BackstagePassesItem implements CustomisedItem { - public BackstagePassesItem(String name, int sellIn, int quality) { - super(name, sellIn, quality); + public Item item; + + public BackstagePassesItem(Item item) { + this.item = item; } - public void updateYourState() { - sellIn -= 1; - if (sellIn >= 11) { - quality += 1; - } else if (sellIn > 5) { - quality += 2; - } else if (sellIn > 0) { - quality += 3; + public void updateState() { + item.sellIn -= 1; + if (item.sellIn >= 11) { + item.quality += 1; + } else if (item.sellIn > 5) { + item.quality += 2; + } else if (item.sellIn > 0) { + item.quality += 3; } else { - quality = 0; + item.quality = 0; } } } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java new file mode 100644 index 00000000..7b619438 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java @@ -0,0 +1,5 @@ +package com.gildedrose.item; + +public interface CustomisedItem { + void updateState(); +} diff --git a/Java/src/main/java/com/gildedrose/item/Item.java b/Java/src/main/java/com/gildedrose/item/Item.java index fa2e373e..d756624b 100644 --- a/Java/src/main/java/com/gildedrose/item/Item.java +++ b/Java/src/main/java/com/gildedrose/item/Item.java @@ -18,7 +18,4 @@ public class Item { public String toString() { return this.name + ", " + this.sellIn + ", " + this.quality; } - - public void updateYourState() { - } } diff --git a/Java/src/main/java/com/gildedrose/item/ItemFactory.java b/Java/src/main/java/com/gildedrose/item/ItemFactory.java index 23a1cbb0..6dc3637c 100644 --- a/Java/src/main/java/com/gildedrose/item/ItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/ItemFactory.java @@ -2,15 +2,15 @@ package com.gildedrose.item; public class ItemFactory { - public Item createItem(String itemName, int sellIn, int quality) { - if (itemName.equals("Sulfuras, Hand of Ragnaros")) { - return new Sulfuras(itemName, sellIn, quality); - } else if (itemName.equals("Aged Brie")) { - return new AgedBrie(itemName, sellIn, quality); - } else if (itemName.equals("Backstage passes to a TAFKAL80ETC concert")) { - return new BackstagePassesItem(itemName, sellIn, quality); + public CustomisedItem customiseItem(Item item) { + if (item.name.equals("Sulfuras, Hand of Ragnaros")) { + return new Sulfuras(item); + } else if (item.name.equals("Aged Brie")) { + return new AgedBrie(item); + } else if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { + return new BackstagePassesItem(item); } else { - return new StandardItem(itemName, sellIn, quality); + return new StandardItem(item); } } } diff --git a/Java/src/main/java/com/gildedrose/item/QualityValues.java b/Java/src/main/java/com/gildedrose/item/QualityValues.java new file mode 100644 index 00000000..0f69718d --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/QualityValues.java @@ -0,0 +1,11 @@ +package com.gildedrose.item; + +public final class QualityValues { + + public static int highestValuePossible(Item item) { + if (item.name.equals("Sulfuras, Hand of Ragnaros")) { + return 80; + } + return 50; + } +} diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index 4e355223..b61d10f5 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -1,17 +1,21 @@ package com.gildedrose.item; -public class StandardItem extends Item { +public class StandardItem implements CustomisedItem { - public StandardItem(String name, int sellIn, int quality) { - super(name, sellIn, quality); + public Item item; + + public StandardItem(Item item) { + this.item = item; } - public void updateYourState() { - sellIn -= 1; - if (sellIn > 0) { - quality -= 1; + public void updateState() { + item.sellIn -= 1; + if (item.sellIn > 0) { + item.quality -= 1; } else { - quality -= 2; + item.quality -= 2; } } + + } diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java index 3843a166..bc70499c 100644 --- a/Java/src/main/java/com/gildedrose/item/Sulfuras.java +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -1,11 +1,12 @@ package com.gildedrose.item; -public class Sulfuras extends Item { +public class Sulfuras implements CustomisedItem { - public Sulfuras(String name, int sellIn, int quality) { - super(name, sellIn, quality); + public Item item; + + public Sulfuras(Item item) { } - public void updateYourState() { + public void updateState() { } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index ee262fa2..9f78578c 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -43,22 +43,13 @@ public class GildedRoseTest { assertEquals(-1, itemSellByDayNumber(app)); } - @Test - public void sulfurasItemDoesNotDecreaseSellByDayNumberEachTime() { - GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 0, 0); - - app.updateQuality(); - - assertEquals(0, itemSellByDayNumber(app)); - } - @Test public void brieIncreasesInQualityEachTime() { GildedRose app = newGildedRose("Aged Brie", 1, 1); app.updateQuality(); - assertEquals(2, itemQualityNumber(app)); + assertEquals(2, itemQualityValue(app)); } @Test @@ -68,7 +59,7 @@ public class GildedRoseTest { app.updateQuality(); app.updateQuality(); - assertEquals(50, itemQualityNumber(app)); + assertEquals(50, itemQualityValue(app)); } @Test @@ -77,70 +68,86 @@ public class GildedRoseTest { app.updateQuality(); - assertEquals(2, itemQualityNumber(app)); + assertEquals(2, itemQualityValue(app)); } @Test - public void backstagePassesItemDecreasesQualityByTwoIfSellByDayLessThanEleven() { + public void backstagePassesItemDecreasesQualityByTwoIfSellByDayIsMoreThanSix() { GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 10, 1); app.updateQuality(); - assertEquals(3, itemQualityNumber(app)); + assertEquals(3, itemQualityValue(app)); } @Test - public void backstagePassesItemDecreasesQualityByThreeIfSellByDayLessThanSix() { + public void backstagePassesItemDecreasesQualityByThreeIfSellByDayIsMoreThanZero() { GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 5, 1); app.updateQuality(); - assertEquals(4, itemQualityNumber(app)); + assertEquals(4, itemQualityValue(app)); } @Test - public void backstagePassesItemQualityDropsToZeroIfSellByDayHasPassed() { + public void backstagePassesItemQualityDropsToZeroIfSellByDayIsZeroOrLess() { GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 0,50); app.updateQuality(); - assertEquals(0, itemQualityNumber(app)); + assertEquals(0, itemQualityValue(app)); } @Test - public void normalItemDecreasesQualityByOneIfSellByDayIsAboveZero() { + public void backstagePassesItemQualityCannotGoAboveFiftyWhenIncreasing() { + GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 5, 50); + + app.updateQuality(); + + assertEquals(50, itemQualityValue(app)); + } + + @Test + public void standardItemDecreasesQualityByOneIfSellByDayIsAboveZero() { GildedRose app = newGildedRose("foo", 2, 1); app.updateQuality(); - assertEquals(0, itemQualityNumber(app)); + assertEquals(0, itemQualityValue(app)); } @Test - public void normalItemDecreasesQualityByTwoOnceSellByDayHasPassed() { + public void standardItemDecreasesQualityByTwoOnceSellByDayIsZeroOrLess() { GildedRose app = newGildedRose("foo",0, 5); app.updateQuality(); - assertEquals(3, itemQualityNumber(app)); + assertEquals(3, itemQualityValue(app)); } @Test - public void normalItemCannotHaveQualityBelowZero() { + public void standardItemCannotHaveQualityBelowZero() { GildedRose app = newGildedRose("foo", 0, 0); app.updateQuality(); - assertEquals(0, itemQualityNumber(app)); + assertEquals(0, itemQualityValue(app)); } @Test - public void nothingHappensToSulfurasItem() { - GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 1, 1); + public void sulfurasHasQualityEighty() { + GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 1, 80); + + assertEquals(80, itemQualityValue(app)); + } + + @Test + public void sulfurasItemDoesNotAlterValues() { + GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 1, 80); app.updateQuality(); - assertEquals(1, itemQualityNumber(app)); + assertEquals(80, itemQualityValue(app)); assertEquals(1, itemSellByDayNumber(app)); } @@ -153,7 +160,7 @@ public class GildedRoseTest { return app.items[0].sellIn; } - private int itemQualityNumber(GildedRose app) { + private int itemQualityValue(GildedRose app) { return app.items[0].quality; } } From e6f4256062a69f7702104485f27c300f9d00233f Mon Sep 17 00:00:00 2001 From: Gabba Date: Sat, 16 Dec 2017 11:59:57 +0000 Subject: [PATCH 04/18] replaces strings for items names with constants --- .../main/java/com/gildedrose/GildedRose.java | 8 +++---- .../item/CustomisedItemFactory.java | 20 ++++++++++++++++ .../java/com/gildedrose/item/ItemFactory.java | 16 ------------- .../com/gildedrose/item/QualityValues.java | 2 +- .../java/com/gildedrose/GildedRoseTest.java | 23 ++++++++++--------- 5 files changed, 37 insertions(+), 32 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java delete mode 100644 Java/src/main/java/com/gildedrose/item/ItemFactory.java diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index a1c51a76..da3e65a7 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,23 +1,23 @@ package com.gildedrose; import com.gildedrose.item.Item; -import com.gildedrose.item.ItemFactory; +import com.gildedrose.item.CustomisedItemFactory; import com.gildedrose.item.QualityValues; class GildedRose { private static final int LOWEST_QUALITY_VALUE_POSSIBLE = 0; - private final ItemFactory itemFactory; + private final CustomisedItemFactory customisedItemFactory; Item[] items; public GildedRose(Item[] items) { - this.itemFactory = new ItemFactory(); + this.customisedItemFactory = new CustomisedItemFactory(); this.items = items; } public void updateQuality() { for (Item item : items) { - itemFactory.customiseItem(item).updateState(); + customisedItemFactory.customiseItem(item).updateState(); if (hasReachedLowestQualityValue(item)) { item.quality = LOWEST_QUALITY_VALUE_POSSIBLE; } else if (hasReachedHighestQualityValue(item)) { diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java new file mode 100644 index 00000000..770abcc1 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -0,0 +1,20 @@ +package com.gildedrose.item; + +public class CustomisedItemFactory { + + public final static String SULFURAS = "Sulfuras, Hand of Ragnaros"; + public final static String BRIE = "Aged Brie"; + public final static String BACKSTAGE_PASSES_ITEM = "Backstage passes to a TAFKAL80ETC concert"; + + public CustomisedItem customiseItem(Item item) { + if (item.name.equals(SULFURAS)) { + return new Sulfuras(item); + } else if (item.name.equals(BRIE)) { + return new AgedBrie(item); + } else if (item.name.equals(BACKSTAGE_PASSES_ITEM)) { + return new BackstagePassesItem(item); + } else { + return new StandardItem(item); + } + } +} diff --git a/Java/src/main/java/com/gildedrose/item/ItemFactory.java b/Java/src/main/java/com/gildedrose/item/ItemFactory.java deleted file mode 100644 index 6dc3637c..00000000 --- a/Java/src/main/java/com/gildedrose/item/ItemFactory.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.gildedrose.item; - -public class ItemFactory { - - public CustomisedItem customiseItem(Item item) { - if (item.name.equals("Sulfuras, Hand of Ragnaros")) { - return new Sulfuras(item); - } else if (item.name.equals("Aged Brie")) { - return new AgedBrie(item); - } else if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { - return new BackstagePassesItem(item); - } else { - return new StandardItem(item); - } - } -} diff --git a/Java/src/main/java/com/gildedrose/item/QualityValues.java b/Java/src/main/java/com/gildedrose/item/QualityValues.java index 0f69718d..83ab044b 100644 --- a/Java/src/main/java/com/gildedrose/item/QualityValues.java +++ b/Java/src/main/java/com/gildedrose/item/QualityValues.java @@ -3,7 +3,7 @@ package com.gildedrose.item; public final class QualityValues { public static int highestValuePossible(Item item) { - if (item.name.equals("Sulfuras, Hand of Ragnaros")) { + if (item.name.equals(CustomisedItemFactory.SULFURAS)) { return 80; } return 50; diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 9f78578c..d211789e 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -3,6 +3,7 @@ package com.gildedrose; import static org.junit.Assert.*; import com.gildedrose.item.Item; +import com.gildedrose.item.CustomisedItemFactory; import org.junit.Test; public class GildedRoseTest { @@ -27,7 +28,7 @@ public class GildedRoseTest { @Test public void brieDecreasesSellByDayNumberEachTime() { - GildedRose app = newGildedRose("Aged Brie", 0, 0); + GildedRose app = newGildedRose(CustomisedItemFactory.BRIE, 0, 0); app.updateQuality(); @@ -36,7 +37,7 @@ public class GildedRoseTest { @Test public void backstagePassesItemDecreasesSellByDayNumberEachTime() { - GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 0, 0); + GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 0, 0); app.updateQuality(); @@ -45,7 +46,7 @@ public class GildedRoseTest { @Test public void brieIncreasesInQualityEachTime() { - GildedRose app = newGildedRose("Aged Brie", 1, 1); + GildedRose app = newGildedRose(CustomisedItemFactory.BRIE, 1, 1); app.updateQuality(); @@ -54,7 +55,7 @@ public class GildedRoseTest { @Test public void brieQualityCannotGoAboveFiftyWhenIncreasing() { - GildedRose app = newGildedRose("Aged Brie", 1, 49); + GildedRose app = newGildedRose(CustomisedItemFactory.BRIE, 1, 49); app.updateQuality(); app.updateQuality(); @@ -64,7 +65,7 @@ public class GildedRoseTest { @Test public void backstagePassesItemDecreasesQualityByOneIfSellByDayMoreThanEleven() { - GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 12, 1); + GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 12, 1); app.updateQuality(); @@ -73,7 +74,7 @@ public class GildedRoseTest { @Test public void backstagePassesItemDecreasesQualityByTwoIfSellByDayIsMoreThanSix() { - GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 10, 1); + GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 10, 1); app.updateQuality(); @@ -82,7 +83,7 @@ public class GildedRoseTest { @Test public void backstagePassesItemDecreasesQualityByThreeIfSellByDayIsMoreThanZero() { - GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 5, 1); + GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 5, 1); app.updateQuality(); @@ -91,7 +92,7 @@ public class GildedRoseTest { @Test public void backstagePassesItemQualityDropsToZeroIfSellByDayIsZeroOrLess() { - GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 0,50); + GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 0,50); app.updateQuality(); @@ -100,7 +101,7 @@ public class GildedRoseTest { @Test public void backstagePassesItemQualityCannotGoAboveFiftyWhenIncreasing() { - GildedRose app = newGildedRose("Backstage passes to a TAFKAL80ETC concert", 5, 50); + GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 5, 50); app.updateQuality(); @@ -136,14 +137,14 @@ public class GildedRoseTest { @Test public void sulfurasHasQualityEighty() { - GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 1, 80); + GildedRose app = newGildedRose(CustomisedItemFactory.SULFURAS, 1, 80); assertEquals(80, itemQualityValue(app)); } @Test public void sulfurasItemDoesNotAlterValues() { - GildedRose app = newGildedRose("Sulfuras, Hand of Ragnaros", 1, 80); + GildedRose app = newGildedRose(CustomisedItemFactory.SULFURAS, 1, 80); app.updateQuality(); From ad087914bcc23d26355f0a3c3593fe5939a49b65 Mon Sep 17 00:00:00 2001 From: Gabba Date: Mon, 18 Dec 2017 11:51:18 +0000 Subject: [PATCH 05/18] adds Conjured item --- .../main/java/com/gildedrose/item/.DS_Store | Bin 0 -> 6148 bytes .../com/gildedrose/item/ConjuredItem.java | 20 ++++++++++ .../item/CustomisedItemFactory.java | 3 ++ .../java/com/gildedrose/GildedRoseTest.java | 37 ++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 Java/src/main/java/com/gildedrose/item/.DS_Store create mode 100644 Java/src/main/java/com/gildedrose/item/ConjuredItem.java diff --git a/Java/src/main/java/com/gildedrose/item/.DS_Store b/Java/src/main/java/com/gildedrose/item/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6bc317c42d9ebdafdfc8cbaddc3366d4991f4071 GIT binary patch literal 6148 zcmeHKO-sW-5Pe&Vv`C?zES_@oBzX1`V-2lH$^nr9>Sk|lCZKlxN+4d{`PVvI*Dv0_cK+z^+%rt|@$ zQ#|Qf1b1 zk(6U?o}eznM=3*x8P=HNj^#r2s9`qJ5|d3cQ@|831%6xs?%86k1CLgk0;Yf|P$(eZ zhlnm12h2U{r-Owa0fn0M-1obj7Ong95DCj>2Trj z;lju+oKT#O&is*fhl@R0X$qJE+Y0RYW>@zAtNQc*HpyD1fGO~=6mZS{u%Gai!rr>` va{Hg+9N#Act literal 0 HcmV?d00001 diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java new file mode 100644 index 00000000..648c81f9 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -0,0 +1,20 @@ +package com.gildedrose.item; + +public class ConjuredItem implements CustomisedItem { + + private final Item item; + + public ConjuredItem(Item item) { + this.item = item; + } + + public void updateState() { + item.sellIn -= 1; + if (item.sellIn > 0) { + item.quality -= 2; + } else { + item.quality -= 4; + } + } + +} diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index 770abcc1..9aa14e06 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -5,6 +5,7 @@ public class CustomisedItemFactory { public final static String SULFURAS = "Sulfuras, Hand of Ragnaros"; public final static String BRIE = "Aged Brie"; public final static String BACKSTAGE_PASSES_ITEM = "Backstage passes to a TAFKAL80ETC concert"; + public final static String CONJURED_ITEM = "Conjured"; public CustomisedItem customiseItem(Item item) { if (item.name.equals(SULFURAS)) { @@ -13,6 +14,8 @@ public class CustomisedItemFactory { return new AgedBrie(item); } else if (item.name.equals(BACKSTAGE_PASSES_ITEM)) { return new BackstagePassesItem(item); + } else if (item.name.equals(CONJURED_ITEM)) { + return new ConjuredItem(item); } else { return new StandardItem(item); } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index d211789e..7bda5177 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -2,6 +2,7 @@ package com.gildedrose; import static org.junit.Assert.*; +import com.gildedrose.item.CustomisedItem; import com.gildedrose.item.Item; import com.gildedrose.item.CustomisedItemFactory; import org.junit.Test; @@ -44,6 +45,15 @@ public class GildedRoseTest { assertEquals(-1, itemSellByDayNumber(app)); } + @Test + public void conjuredItemDecreasesSellByDayNumberEachTime() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM, 0, 0); + + app.updateQuality(); + + assertEquals(-1, itemSellByDayNumber(app)); + } + @Test public void brieIncreasesInQualityEachTime() { GildedRose app = newGildedRose(CustomisedItemFactory.BRIE, 1, 1); @@ -152,6 +162,33 @@ public class GildedRoseTest { assertEquals(1, itemSellByDayNumber(app)); } + @Test + public void conjuredItemDecreasesQualityByTwoIfSellByDayIsAboveZero() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM, 2, 5); + + app.updateQuality(); + + assertEquals(3, itemQualityValue(app)); + } + + @Test + public void conjuredItemDecreasesQualityByFourOnceSellByDayIsZeroOrLess() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM,0, 5); + + app.updateQuality(); + + assertEquals(1, itemQualityValue(app)); + } + + @Test + public void conjuredItemCannotHaveQualityBelowZero() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM, 0, 0); + + app.updateQuality(); + + assertEquals(0, itemQualityValue(app)); + } + private GildedRose newGildedRose(String itemName, int itemSellIn, int itemQuality) { Item[] items = new Item[] { new Item(itemName, itemSellIn, itemQuality)}; return new GildedRose(items); From 8b1df0a5e611ead801259ffd8fd3a75451f7da14 Mon Sep 17 00:00:00 2001 From: Gabba Date: Mon, 18 Dec 2017 12:25:44 +0000 Subject: [PATCH 06/18] makes fields private --- Java/src/main/java/com/gildedrose/item/AgedBrie.java | 2 +- .../main/java/com/gildedrose/item/BackstagePassesItem.java | 2 +- .../main/java/com/gildedrose/item/CustomisedItemFactory.java | 2 +- Java/src/main/java/com/gildedrose/item/StandardItem.java | 2 +- Java/src/main/java/com/gildedrose/item/Sulfuras.java | 5 ----- 5 files changed, 4 insertions(+), 9 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index 2943eca4..3f736fa8 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -2,7 +2,7 @@ package com.gildedrose.item; public class AgedBrie implements CustomisedItem { - public Item item; + private final Item item; public AgedBrie(Item item) { this.item = item; diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 65e77429..62def8f0 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -2,7 +2,7 @@ package com.gildedrose.item; public class BackstagePassesItem implements CustomisedItem { - public Item item; + private final Item item; public BackstagePassesItem(Item item) { this.item = item; diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index 9aa14e06..c99bce7d 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -9,7 +9,7 @@ public class CustomisedItemFactory { public CustomisedItem customiseItem(Item item) { if (item.name.equals(SULFURAS)) { - return new Sulfuras(item); + return new Sulfuras(); } else if (item.name.equals(BRIE)) { return new AgedBrie(item); } else if (item.name.equals(BACKSTAGE_PASSES_ITEM)) { diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index b61d10f5..f9f006b6 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -2,7 +2,7 @@ package com.gildedrose.item; public class StandardItem implements CustomisedItem { - public Item item; + private final Item item; public StandardItem(Item item) { this.item = item; diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java index bc70499c..398721e6 100644 --- a/Java/src/main/java/com/gildedrose/item/Sulfuras.java +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -2,11 +2,6 @@ package com.gildedrose.item; public class Sulfuras implements CustomisedItem { - public Item item; - - public Sulfuras(Item item) { - } - public void updateState() { } } From c4e303ef707f41bec2eb99c2085758fc0514e994 Mon Sep 17 00:00:00 2001 From: Gabba Date: Mon, 18 Dec 2017 13:17:25 +0000 Subject: [PATCH 07/18] method extractions --- .../java/com/gildedrose/item/AgedBrie.java | 8 +++++ .../gildedrose/item/BackstagePassesItem.java | 32 ++++++++++++++----- .../com/gildedrose/item/ConjuredItem.java | 19 ++++++++--- .../com/gildedrose/item/StandardItem.java | 18 ++++++++--- 4 files changed, 61 insertions(+), 16 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index 3f736fa8..8f3cb9b7 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -9,7 +9,15 @@ public class AgedBrie implements CustomisedItem { } public void updateState() { + decreaseSellByDayValueByOne(); + increaseQualityByOne(); + } + + private void decreaseSellByDayValueByOne() { item.sellIn -= 1; + } + + private void increaseQualityByOne() { item.quality += 1; } } diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 62def8f0..1308f41e 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -9,15 +9,31 @@ public class BackstagePassesItem implements CustomisedItem { } public void updateState() { - item.sellIn -= 1; - if (item.sellIn >= 11) { - item.quality += 1; - } else if (item.sellIn > 5) { - item.quality += 2; - } else if (item.sellIn > 0) { - item.quality += 3; + decreaseSellByDayValueByOne(); + if (sellByDayValueIsOver(10)) { + increaseQualityBy(1); + } else if (sellByDayValueIsOver(5)) { + increaseQualityBy(2); + } else if (sellByDayValueIsOver(0)) { + increaseQualityBy(3); } else { - item.quality = 0; + dropQualityToZero(); } } + + private void decreaseSellByDayValueByOne() { + item.sellIn -= 1; + } + + private boolean sellByDayValueIsOver(int dayNumber) { + return item.sellIn > dayNumber; + } + + private void increaseQualityBy(int qualityValue) { + item.quality += qualityValue; + } + + private void dropQualityToZero() { + item.quality = 0; + } } diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index 648c81f9..32c59238 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -9,12 +9,23 @@ public class ConjuredItem implements CustomisedItem { } public void updateState() { - item.sellIn -= 1; - if (item.sellIn > 0) { - item.quality -= 2; + decreaseSellByDayValueByOne(); + if (sellByDayValueIsOverZero()) { + decreaseQualityBy(2); } else { - item.quality -= 4; + decreaseQualityBy(4); } } + private void decreaseSellByDayValueByOne() { + item.sellIn -= 1; + } + + private boolean sellByDayValueIsOverZero() { + return item.sellIn > 0; + } + + private void decreaseQualityBy(int qualityValue) { + item.quality -= qualityValue; + } } diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index f9f006b6..41bf342f 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -9,13 +9,23 @@ public class StandardItem implements CustomisedItem { } public void updateState() { - item.sellIn -= 1; - if (item.sellIn > 0) { - item.quality -= 1; + decreaseSellByDayValueByOne(); + if (sellByDayValueIsOverZero()) { + decreaseQualityBy(1); } else { - item.quality -= 2; + decreaseQualityBy(2); } } + private void decreaseSellByDayValueByOne() { + item.sellIn -= 1; + } + private boolean sellByDayValueIsOverZero() { + return item.sellIn > 0; + } + + private void decreaseQualityBy(int qualityValue) { + item.quality -= qualityValue; + } } From 5df478fa29b1ef9387051f35e21839c61dfae2d9 Mon Sep 17 00:00:00 2001 From: Gabba Date: Mon, 18 Dec 2017 15:08:20 +0000 Subject: [PATCH 08/18] conjured item extends standard item --- .../com/gildedrose/item/ConjuredItem.java | 28 ++++--------------- .../com/gildedrose/item/StandardItem.java | 12 ++++++-- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index 32c59238..4d62df34 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -1,31 +1,13 @@ package com.gildedrose.item; -public class ConjuredItem implements CustomisedItem { - - private final Item item; +public class ConjuredItem extends StandardItem { public ConjuredItem(Item item) { - this.item = item; + super(item); } - public void updateState() { - decreaseSellByDayValueByOne(); - if (sellByDayValueIsOverZero()) { - decreaseQualityBy(2); - } else { - decreaseQualityBy(4); - } - } - - private void decreaseSellByDayValueByOne() { - item.sellIn -= 1; - } - - private boolean sellByDayValueIsOverZero() { - return item.sellIn > 0; - } - - private void decreaseQualityBy(int qualityValue) { - item.quality -= qualityValue; + @Override + public int decreasingValueOverZeroDaysToSell() { + return 2; } } diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index 41bf342f..d5b4aa67 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -11,12 +11,16 @@ public class StandardItem implements CustomisedItem { public void updateState() { decreaseSellByDayValueByOne(); if (sellByDayValueIsOverZero()) { - decreaseQualityBy(1); + decreaseQualityBy(decreasingValueOverZeroDaysToSell()); } else { - decreaseQualityBy(2); + decreaseQualityBy(decreasingValueForZeroOrLessDaysToSell()); } } + public int decreasingValueOverZeroDaysToSell() { + return 1; + } + private void decreaseSellByDayValueByOne() { item.sellIn -= 1; } @@ -28,4 +32,8 @@ public class StandardItem implements CustomisedItem { private void decreaseQualityBy(int qualityValue) { item.quality -= qualityValue; } + + private int decreasingValueForZeroOrLessDaysToSell() { + return decreasingValueOverZeroDaysToSell() * 2; + } } From 7b4a1b6c3be844d0e6e752b4956702d4d3f9632e Mon Sep 17 00:00:00 2001 From: Gabba Date: Mon, 18 Dec 2017 15:33:14 +0000 Subject: [PATCH 09/18] replaces if-statements with Map in Factory Class --- .../main/java/com/gildedrose/GildedRose.java | 9 ++++--- .../item/CustomisedItemFactory.java | 26 ++++++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index da3e65a7..b2be1de8 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,5 +1,6 @@ package com.gildedrose; +import com.gildedrose.item.CustomisedItem; import com.gildedrose.item.Item; import com.gildedrose.item.CustomisedItemFactory; import com.gildedrose.item.QualityValues; @@ -7,17 +8,15 @@ import com.gildedrose.item.QualityValues; class GildedRose { private static final int LOWEST_QUALITY_VALUE_POSSIBLE = 0; - private final CustomisedItemFactory customisedItemFactory; Item[] items; public GildedRose(Item[] items) { - this.customisedItemFactory = new CustomisedItemFactory(); this.items = items; } public void updateQuality() { for (Item item : items) { - customisedItemFactory.customiseItem(item).updateState(); + customisedItem(item).updateState(); if (hasReachedLowestQualityValue(item)) { item.quality = LOWEST_QUALITY_VALUE_POSSIBLE; } else if (hasReachedHighestQualityValue(item)) { @@ -26,6 +25,10 @@ class GildedRose { } } + private CustomisedItem customisedItem(Item item) { + return new CustomisedItemFactory(item).customiseItem(item); + } + private boolean hasReachedLowestQualityValue(Item item) { return item.quality < LOWEST_QUALITY_VALUE_POSSIBLE; } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index c99bce7d..1d5c143e 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -1,23 +1,31 @@ package com.gildedrose.item; +import java.util.HashMap; +import java.util.Map; + public class CustomisedItemFactory { + private final static Map ITEM_TYPES_LIST = new HashMap<>(); public final static String SULFURAS = "Sulfuras, Hand of Ragnaros"; public final static String BRIE = "Aged Brie"; public final static String BACKSTAGE_PASSES_ITEM = "Backstage passes to a TAFKAL80ETC concert"; public final static String CONJURED_ITEM = "Conjured"; + public CustomisedItemFactory(Item item) { + ITEM_TYPES_LIST.put(SULFURAS, new Sulfuras()); + ITEM_TYPES_LIST.put(BRIE, new AgedBrie(item)); + ITEM_TYPES_LIST.put(BACKSTAGE_PASSES_ITEM, new BackstagePassesItem(item)); + ITEM_TYPES_LIST.put(CONJURED_ITEM, new ConjuredItem(item)); + } + public CustomisedItem customiseItem(Item item) { - if (item.name.equals(SULFURAS)) { - return new Sulfuras(); - } else if (item.name.equals(BRIE)) { - return new AgedBrie(item); - } else if (item.name.equals(BACKSTAGE_PASSES_ITEM)) { - return new BackstagePassesItem(item); - } else if (item.name.equals(CONJURED_ITEM)) { - return new ConjuredItem(item); - } else { + if (isStandardItem(item)) { return new StandardItem(item); } + return ITEM_TYPES_LIST.get(item.name); + } + + private boolean isStandardItem(Item item) { + return !ITEM_TYPES_LIST.keySet().contains(item.name); } } From a025f011eaa572e0fa257764c445b2ea52fb0e1f Mon Sep 17 00:00:00 2001 From: Gabba Date: Wed, 10 Jan 2018 12:35:29 +0000 Subject: [PATCH 10/18] deletes .DS_Store files --- Java/.DS_Store | Bin 6148 -> 0 bytes Java/src/.DS_Store | Bin 6148 -> 0 bytes Java/src/main/.DS_Store | Bin 6148 -> 0 bytes Java/src/main/java/.DS_Store | Bin 6148 -> 0 bytes Java/src/main/java/com/.DS_Store | Bin 6148 -> 0 bytes Java/src/main/java/com/gildedrose/.DS_Store | Bin 6148 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Java/.DS_Store delete mode 100644 Java/src/.DS_Store delete mode 100644 Java/src/main/.DS_Store delete mode 100644 Java/src/main/java/.DS_Store delete mode 100644 Java/src/main/java/com/.DS_Store delete mode 100644 Java/src/main/java/com/gildedrose/.DS_Store diff --git a/Java/.DS_Store b/Java/.DS_Store deleted file mode 100644 index 59c2a77539e03a21c887df1809154825f69dca20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK&2G~`5S~p!>Iflns8qP^1&KpIH6Q{)NLJb&dP53=1EAKft=7WvMz%wMG{_fT zqC5ew!VB;?@a+#((u6}V2vsxE>^D0*vnzjN?|O+y3?{Kp)FmPhsdyYe?;RfEvxPApQ6!hU2AW6 zosQSJ;k_H4sOhi@t4TQsi#Mj1#!2Mtmr7;lb{M@%lj%Wsb4TS>nC3~b5dQXcn#XE7 zP?J0^%{(u{>IAuFp@Z)2+3d+vzb7B{AIy7l=KBvH_hjGi&*z@Eb;p0ce>nQ|d3HMg za;8bar-5(7$W4cT;2R9b!iQmzXDUC2M@P2}>jmnPP<4T!uNYrs9bFb?fEi#0F3Et~ zm%Qtj%;RuofEl>@4CwtqLNx{sYl~*<0;Z_#zh9b=Bm|vQ35`jf-nE_^CnSrM5cJ=wc_xJn%auWBL z0cPMzF(6vI!`%TM$(^k$52w#s2|a{r(Q&oK^As57C`PP4if=)Uz%R7{3>?-L;eqgv NfT4jKX5gPP@EeaJgLeP` diff --git a/Java/src/.DS_Store b/Java/src/.DS_Store deleted file mode 100644 index b4bc87c8b089641f2f24e61043dfe0a825337db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!Ab)$5S_HEZV|BuLA~uo@X$k7#VR5!wH|sCDtb_{ySC`Ux{>bIqP4Q$pZc_C-N2(RJ+JVvcrHqEU9~^}3-f3}eN5-ii#_i6C`|)8Iw`8v> zyKyT~G+Ta@Hy)T+27bGLq49No1JmL?Vw^2;<1Lr_syG5XR~ynsas+8t65J%gD>w4m@q NK+(VzGw`Dfya6B5X72z1 diff --git a/Java/src/main/.DS_Store b/Java/src/main/.DS_Store deleted file mode 100644 index 774ef1d926df00a398534e680716c29dda7382c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}T>S5Z-O0CWzRBpx$y3JoM10SVe?T>!CLxq6d{WvBgGWwlryj)<~X1-^ds6 zadh^lL9O0ItjxgdH<_K;FyDsV3?YQp25pOw5+OtfoPZ5yvH5viC z^aAF=GhYzp?=!&nP9xXEB}3wV+P^)RTYnWI3d!TVB&F!*TwW?{V>&t7_exr4BdpEjIA0Fjq zQ20`XEGits6Bv1gL#H1GEW85WIDQ<5hzuYD$iVb7piVY@e)>zn3XlP0;D;ID=Yt8# z(N>sA6h{XPq6Gldz%2x9@#_z0atENTFp~%#5GqpvWhzxI234H{mFX~VtN2W!Oea*l z8P-v6rm91ss_~$v2q)B*h$Aw9418pO_kJKHe*YhS-~Wps9FPHI;D0hewYpQUL2c@8 zov4!EwI*l_lnal`B<3k#h^rW4`Bl6EDg^u{HvnygnMCk_;E#Zy0S9E@R~dK%4FOvp diff --git a/Java/src/main/java/.DS_Store b/Java/src/main/java/.DS_Store deleted file mode 100644 index 8792a66c812a7b098205542f2e7624c49c785b6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!AiqG5Z!I7rij>spx$y3JoM10SVe?T>!CNHq6d{WX^IV`S!q*)#z?+H|HvQk zb98ohS}fI@2$mU`eUsUl4f8haW*B33tiuHBH-f4CJA#?*4<)J)jB?}Q9q#g*dl&e_s8V_7xqM+^amgqa zjpB-N)9i`389C8tSaSwf>dE)IF52fp1QXkFFZ^!YDy^M}Fmn8`JNOcQed&juh-+dL zdPB9&nG^LOSG}lJ+DwvzL#u4=Rd>>|nON5De%Y*A)igDX^)2hT(e6JyCQs?}i{1(j zU#XH+#4)^rf%V-t2Vo$>Tkwpd$5DjD05L!e%nJi}z8TB&QV`Wa3=jjq#(+E@Oi+n7 zVy00Y9WbaC0I&dVC19(ce?U_@0ByufBX~f#P6gDd99s;Iy#v?jFmGdgrctLeuHFpm z;F~#iC>&c4ZmMv`ZH+V%1H`~I1G4u6Darf)^ymIx1<^nZ5Cikc058;=^%~TMck4`* w@~$;O+n`cpT&8i70*1PZAy!_+8=y+SZ%PBuM$9yV2ZVkE6b&>G1AofECpM;8J^%m! diff --git a/Java/src/main/java/com/.DS_Store b/Java/src/main/java/com/.DS_Store deleted file mode 100644 index 010bd2e2c90f0f06c12b7553379c3d0c5ee81ec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%}T>S5T317Q$_4SP;Yw?JoM10SVe?T_0XG8(Su4&Ot68Nl_s@lt>iiMjeG$g zM`wRpDs8V?WCmux$?VK-_S>+V0RUEQ`!+xk04!9AxdJw0MD|M^k(}|&ATl*Z06w%p zKmx%?G&!b`0l9Yza0ekoxOYSQSBu207YPsh<;QV=y7{F9tqD0^CwVYAAKpV0CTY3+ z$#OIK*|~YEP_PP1)^)upI`z~|+ey`JU8<+h4?JU^2@wr!*EvKFWNHRqo12N z$6%&Wrvo#^2QxD>Q=u?5JC4s)I50;ewZs51@RI>q`=J!&{eLpK{#QZN5Cg=(|73vW zkL$-(T${ODM^-8CT8?^yDn-U+8V4z8sH+%bS5T317Q$*}RP;Yw?JQOi1RuLgoMZAd>J*a46f<|JtG^s^vCC{Nx;H&ro zK90`*w6s>QQe*~ZzuC#mZuZ+{e*l108omus1ON+FVy=M24}ATqc{S3!h5R0?1=-ikWxc z;@*CX^O{M`wD<1SqA*F9mOfZ+BtJSfZWRhvVbVIU-iT&3b<;*taqFk57W#o_>?0wf zuI+lqVbHuNPH&4ib;CHQ_k^FFgt0H0714Nc8RZ+m)j-Y zvh9_%5-;23cH6RM=IyQh%e#li)>HfWMU530u5%?*20QSIMwf~EYCVobe2u`m6hF#HVt12I4h3>5=%f8eMR9fO%hwRK>jo&bpQ8mR From bdb783786ce0e82d4a8a069cdfd33fdb9c7a3d10 Mon Sep 17 00:00:00 2001 From: Gabriella Medas Date: Wed, 10 Jan 2018 12:44:12 +0000 Subject: [PATCH 11/18] Delets .DS_Store --- Java/src/main/java/com/gildedrose/item/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Java/src/main/java/com/gildedrose/item/.DS_Store diff --git a/Java/src/main/java/com/gildedrose/item/.DS_Store b/Java/src/main/java/com/gildedrose/item/.DS_Store deleted file mode 100644 index 6bc317c42d9ebdafdfc8cbaddc3366d4991f4071..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKO-sW-5Pe&Vv`C?zES_@oBzX1`V-2lH$^nr9>Sk|lCZKlxN+4d{`PVvI*Dv0_cK+z^+%rt|@$ zQ#|Qf1b1 zk(6U?o}eznM=3*x8P=HNj^#r2s9`qJ5|d3cQ@|831%6xs?%86k1CLgk0;Yf|P$(eZ zhlnm12h2U{r-Owa0fn0M-1obj7Ong95DCj>2Trj z;lju+oKT#O&is*fhl@R0X$qJE+Y0RYW>@zAtNQc*HpyD1fGO~=6mZS{u%Gai!rr>` va{Hg+9N#Act From 7b0e2daa3d745e77f3f4768fd980a7e510cb9428 Mon Sep 17 00:00:00 2001 From: Gabba Date: Thu, 11 Jan 2018 12:32:00 +0000 Subject: [PATCH 12/18] moves lowest quality value --- Java/src/main/java/com/gildedrose/GildedRose.java | 5 ++--- Java/src/main/java/com/gildedrose/item/QualityValues.java | 4 ++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index b2be1de8..596856f7 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -7,7 +7,6 @@ import com.gildedrose.item.QualityValues; class GildedRose { - private static final int LOWEST_QUALITY_VALUE_POSSIBLE = 0; Item[] items; public GildedRose(Item[] items) { @@ -18,7 +17,7 @@ class GildedRose { for (Item item : items) { customisedItem(item).updateState(); if (hasReachedLowestQualityValue(item)) { - item.quality = LOWEST_QUALITY_VALUE_POSSIBLE; + item.quality = QualityValues.lowestValuePossible(); } else if (hasReachedHighestQualityValue(item)) { item.quality = QualityValues.highestValuePossible(item); } @@ -30,7 +29,7 @@ class GildedRose { } private boolean hasReachedLowestQualityValue(Item item) { - return item.quality < LOWEST_QUALITY_VALUE_POSSIBLE; + return item.quality < QualityValues.lowestValuePossible(); } private boolean hasReachedHighestQualityValue(Item item) { diff --git a/Java/src/main/java/com/gildedrose/item/QualityValues.java b/Java/src/main/java/com/gildedrose/item/QualityValues.java index 83ab044b..cc4d52a3 100644 --- a/Java/src/main/java/com/gildedrose/item/QualityValues.java +++ b/Java/src/main/java/com/gildedrose/item/QualityValues.java @@ -2,6 +2,10 @@ package com.gildedrose.item; public final class QualityValues { + public static int lowestValuePossible() { + return 0; + } + public static int highestValuePossible(Item item) { if (item.name.equals(CustomisedItemFactory.SULFURAS)) { return 80; From 9b308c8e2212a2343490d88c5463737c81ebea86 Mon Sep 17 00:00:00 2001 From: Gabba Date: Fri, 12 Jan 2018 15:38:43 +0000 Subject: [PATCH 13/18] different implementation of constructor --- .../main/java/com/gildedrose/GildedRose.java | 8 +++---- .../item/CustomisedItemFactory.java | 22 ++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 596856f7..8d6e5cb9 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -7,15 +7,17 @@ import com.gildedrose.item.QualityValues; class GildedRose { + private final CustomisedItemFactory itemFactory; Item[] items; public GildedRose(Item[] items) { this.items = items; + this.itemFactory = new CustomisedItemFactory(); } public void updateQuality() { for (Item item : items) { - customisedItem(item).updateState(); + itemFactory.customiseItem(item).updateState(); if (hasReachedLowestQualityValue(item)) { item.quality = QualityValues.lowestValuePossible(); } else if (hasReachedHighestQualityValue(item)) { @@ -24,10 +26,6 @@ class GildedRose { } } - private CustomisedItem customisedItem(Item item) { - return new CustomisedItemFactory(item).customiseItem(item); - } - private boolean hasReachedLowestQualityValue(Item item) { return item.quality < QualityValues.lowestValuePossible(); } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index 1d5c143e..e4864475 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -2,30 +2,32 @@ package com.gildedrose.item; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; public class CustomisedItemFactory { - private final static Map ITEM_TYPES_LIST = new HashMap<>(); + private final static Map> ITEM_TYPES_LIST = new HashMap<>(); public final static String SULFURAS = "Sulfuras, Hand of Ragnaros"; public final static String BRIE = "Aged Brie"; public final static String BACKSTAGE_PASSES_ITEM = "Backstage passes to a TAFKAL80ETC concert"; public final static String CONJURED_ITEM = "Conjured"; - public CustomisedItemFactory(Item item) { - ITEM_TYPES_LIST.put(SULFURAS, new Sulfuras()); - ITEM_TYPES_LIST.put(BRIE, new AgedBrie(item)); - ITEM_TYPES_LIST.put(BACKSTAGE_PASSES_ITEM, new BackstagePassesItem(item)); - ITEM_TYPES_LIST.put(CONJURED_ITEM, new ConjuredItem(item)); + public CustomisedItemFactory() { + ITEM_TYPES_LIST.put(SULFURAS, (item) -> new Sulfuras()); + ITEM_TYPES_LIST.put(BRIE, AgedBrie::new); + ITEM_TYPES_LIST.put(BACKSTAGE_PASSES_ITEM, BackstagePassesItem::new); + ITEM_TYPES_LIST.put(CONJURED_ITEM, ConjuredItem::new); } public CustomisedItem customiseItem(Item item) { - if (isStandardItem(item)) { + String name = item.name; + if (isStandardItem(name)) { return new StandardItem(item); } - return ITEM_TYPES_LIST.get(item.name); + return ITEM_TYPES_LIST.get(name).apply(item); } - private boolean isStandardItem(Item item) { - return !ITEM_TYPES_LIST.keySet().contains(item.name); + private boolean isStandardItem(String name) { + return !ITEM_TYPES_LIST.keySet().contains(name); } } From 77e9669f6ed718130b6fd250a7a920924d48988e Mon Sep 17 00:00:00 2001 From: Gabba Date: Mon, 15 Jan 2018 17:37:04 +0000 Subject: [PATCH 14/18] introduces Template Pattern with abstract class CustomisedItem --- .../main/java/com/gildedrose/GildedRose.java | 17 +-------- .../java/com/gildedrose/item/AgedBrie.java | 23 ++++++++---- .../gildedrose/item/BackstagePassesItem.java | 37 ++++++++++++------- .../com/gildedrose/item/ConjuredItem.java | 33 +++++++++++++++-- .../com/gildedrose/item/CustomisedItem.java | 22 ++++++++++- .../item/CustomisedItemFactory.java | 2 +- .../com/gildedrose/item/StandardItem.java | 33 ++++++++--------- .../java/com/gildedrose/item/Sulfuras.java | 27 +++++++++++++- .../java/com/gildedrose/GildedRoseTest.java | 6 +-- 9 files changed, 134 insertions(+), 66 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 8d6e5cb9..76519690 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,9 +1,7 @@ package com.gildedrose; -import com.gildedrose.item.CustomisedItem; import com.gildedrose.item.Item; import com.gildedrose.item.CustomisedItemFactory; -import com.gildedrose.item.QualityValues; class GildedRose { @@ -17,20 +15,7 @@ class GildedRose { public void updateQuality() { for (Item item : items) { - itemFactory.customiseItem(item).updateState(); - if (hasReachedLowestQualityValue(item)) { - item.quality = QualityValues.lowestValuePossible(); - } else if (hasReachedHighestQualityValue(item)) { - item.quality = QualityValues.highestValuePossible(item); - } + itemFactory.customiseItem(item).updateState(item); } } - - private boolean hasReachedLowestQualityValue(Item item) { - return item.quality < QualityValues.lowestValuePossible(); - } - - private boolean hasReachedHighestQualityValue(Item item) { - return item.quality > QualityValues.highestValuePossible(item); - } } \ No newline at end of file diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index 8f3cb9b7..4efc314c 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -1,6 +1,6 @@ package com.gildedrose.item; -public class AgedBrie implements CustomisedItem { +public class AgedBrie extends CustomisedItem { private final Item item; @@ -8,16 +8,23 @@ public class AgedBrie implements CustomisedItem { this.item = item; } - public void updateState() { - decreaseSellByDayValueByOne(); - increaseQualityByOne(); + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; } - private void decreaseSellByDayValueByOne() { - item.sellIn -= 1; + @Override + int updatedItemQuality() { + return item.quality += 1; } - private void increaseQualityByOne() { - item.quality += 1; + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } } diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 1308f41e..e2b4b105 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -1,6 +1,6 @@ package com.gildedrose.item; -public class BackstagePassesItem implements CustomisedItem { +public class BackstagePassesItem extends CustomisedItem { private final Item item; @@ -8,32 +8,43 @@ public class BackstagePassesItem implements CustomisedItem { this.item = item; } - public void updateState() { - decreaseSellByDayValueByOne(); + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; + } + + @Override + int updatedItemQuality() { if (sellByDayValueIsOver(10)) { - increaseQualityBy(1); + return qualityIncreasedBy(1); } else if (sellByDayValueIsOver(5)) { - increaseQualityBy(2); + return qualityIncreasedBy(2); } else if (sellByDayValueIsOver(0)) { - increaseQualityBy(3); + return qualityIncreasedBy(3); } else { - dropQualityToZero(); + return qualityDroppedToZero(); } } - private void decreaseSellByDayValueByOne() { - item.sellIn -= 1; + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } private boolean sellByDayValueIsOver(int dayNumber) { return item.sellIn > dayNumber; } - private void increaseQualityBy(int qualityValue) { - item.quality += qualityValue; + private int qualityIncreasedBy(int qualityValue) { + return item.quality += qualityValue; } - private void dropQualityToZero() { - item.quality = 0; + private int qualityDroppedToZero() { + return 0; } } diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index 4d62df34..697f5b78 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -1,13 +1,38 @@ package com.gildedrose.item; -public class ConjuredItem extends StandardItem { +public class ConjuredItem extends CustomisedItem { + + private final Item item; public ConjuredItem(Item item) { - super(item); + this.item = item; } @Override - public int decreasingValueOverZeroDaysToSell() { - return 2; + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); + } + + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; + } + + @Override + int updatedItemQuality() { + if (sellByDayValueIsOverZero()) { + return item.quality -= 2; + } else { + return item.quality -= 4; + } + } + + private boolean sellByDayValueIsOverZero() { + return item.sellIn > 0; } } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java index 7b619438..65e39119 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java @@ -1,5 +1,23 @@ package com.gildedrose.item; -public interface CustomisedItem { - void updateState(); +public abstract class CustomisedItem { + + public final void updateState(Item item) { + item.sellIn = updatedItemSellIn(); + item.quality = updatedItemQuality(); + + if (hasReachedLowestQualityValue()) { + item.quality = QualityValues.lowestValuePossible(); + } else if (hasReachedHighestQualityValue()) { + item.quality = QualityValues.highestValuePossible(item); + } + } + + abstract int updatedItemSellIn(); + + abstract int updatedItemQuality(); + + protected abstract boolean hasReachedHighestQualityValue(); + + protected abstract boolean hasReachedLowestQualityValue(); } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index e4864475..4be371cd 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -13,7 +13,7 @@ public class CustomisedItemFactory { public final static String CONJURED_ITEM = "Conjured"; public CustomisedItemFactory() { - ITEM_TYPES_LIST.put(SULFURAS, (item) -> new Sulfuras()); + ITEM_TYPES_LIST.put(SULFURAS, Sulfuras::new); ITEM_TYPES_LIST.put(BRIE, AgedBrie::new); ITEM_TYPES_LIST.put(BACKSTAGE_PASSES_ITEM, BackstagePassesItem::new); ITEM_TYPES_LIST.put(CONJURED_ITEM, ConjuredItem::new); diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index d5b4aa67..a89e99d9 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -1,6 +1,6 @@ package com.gildedrose.item; -public class StandardItem implements CustomisedItem { +public class StandardItem extends CustomisedItem { private final Item item; @@ -8,32 +8,31 @@ public class StandardItem implements CustomisedItem { this.item = item; } - public void updateState() { - decreaseSellByDayValueByOne(); + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; + } + + @Override + int updatedItemQuality() { if (sellByDayValueIsOverZero()) { - decreaseQualityBy(decreasingValueOverZeroDaysToSell()); + return item.quality -= 1; } else { - decreaseQualityBy(decreasingValueForZeroOrLessDaysToSell()); + return item.quality -= 2; } } - public int decreasingValueOverZeroDaysToSell() { - return 1; + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); } - private void decreaseSellByDayValueByOne() { - item.sellIn -= 1; + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } private boolean sellByDayValueIsOverZero() { return item.sellIn > 0; } - - private void decreaseQualityBy(int qualityValue) { - item.quality -= qualityValue; - } - - private int decreasingValueForZeroOrLessDaysToSell() { - return decreasingValueOverZeroDaysToSell() * 2; - } } diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java index 398721e6..451a9b5e 100644 --- a/Java/src/main/java/com/gildedrose/item/Sulfuras.java +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -1,7 +1,30 @@ package com.gildedrose.item; -public class Sulfuras implements CustomisedItem { +public class Sulfuras extends CustomisedItem { - public void updateState() { + private final Item item; + + public Sulfuras(Item item) { + this.item = item; + } + + @Override + int updatedItemSellIn() { + return item.sellIn; + } + + @Override + int updatedItemQuality() { + return item.quality; + } + + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item) ; + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 7bda5177..a27b2d6e 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -74,7 +74,7 @@ public class GildedRoseTest { } @Test - public void backstagePassesItemDecreasesQualityByOneIfSellByDayMoreThanEleven() { + public void backstagePassesItemIncreasesQualityByOneIfSellByDayMoreThanEleven() { GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 12, 1); app.updateQuality(); @@ -83,7 +83,7 @@ public class GildedRoseTest { } @Test - public void backstagePassesItemDecreasesQualityByTwoIfSellByDayIsMoreThanSix() { + public void backstagePassesItemIncreasesQualityByTwoIfSellByDayIsMoreThanSix() { GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 10, 1); app.updateQuality(); @@ -92,7 +92,7 @@ public class GildedRoseTest { } @Test - public void backstagePassesItemDecreasesQualityByThreeIfSellByDayIsMoreThanZero() { + public void backstagePassesItemIncreasesQualityByThreeIfSellByDayIsMoreThanZero() { GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 5, 1); app.updateQuality(); From cda1b03183fd01b39d727438bade97529c13b76a Mon Sep 17 00:00:00 2001 From: Gabba Date: Tue, 16 Jan 2018 10:34:38 +0000 Subject: [PATCH 15/18] abstract class implements methods which are not overridden --- .../main/java/com/gildedrose/item/AgedBrie.java | 14 ++------------ .../com/gildedrose/item/BackstagePassesItem.java | 14 ++------------ .../java/com/gildedrose/item/ConjuredItem.java | 14 ++------------ .../java/com/gildedrose/item/CustomisedItem.java | 12 ++++++++---- .../java/com/gildedrose/item/QualityValues.java | 6 +++--- .../java/com/gildedrose/item/StandardItem.java | 14 ++------------ .../main/java/com/gildedrose/item/Sulfuras.java | 14 ++------------ 7 files changed, 21 insertions(+), 67 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index 4efc314c..20688f06 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -1,10 +1,10 @@ package com.gildedrose.item; -public class AgedBrie extends CustomisedItem { +class AgedBrie extends CustomisedItem { private final Item item; - public AgedBrie(Item item) { + AgedBrie(Item item) { this.item = item; } @@ -17,14 +17,4 @@ public class AgedBrie extends CustomisedItem { int updatedItemQuality() { return item.quality += 1; } - - @Override - protected boolean hasReachedHighestQualityValue() { - return item.quality > QualityValues.highestValuePossible(item); - } - - @Override - protected boolean hasReachedLowestQualityValue() { - return item.quality < QualityValues.lowestValuePossible(); - } } diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index e2b4b105..50736f90 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -1,10 +1,10 @@ package com.gildedrose.item; -public class BackstagePassesItem extends CustomisedItem { +class BackstagePassesItem extends CustomisedItem { private final Item item; - public BackstagePassesItem(Item item) { + BackstagePassesItem(Item item) { this.item = item; } @@ -26,16 +26,6 @@ public class BackstagePassesItem extends CustomisedItem { } } - @Override - protected boolean hasReachedHighestQualityValue() { - return item.quality > QualityValues.highestValuePossible(item); - } - - @Override - protected boolean hasReachedLowestQualityValue() { - return item.quality < QualityValues.lowestValuePossible(); - } - private boolean sellByDayValueIsOver(int dayNumber) { return item.sellIn > dayNumber; } diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index 697f5b78..17d8d97e 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -1,23 +1,13 @@ package com.gildedrose.item; -public class ConjuredItem extends CustomisedItem { +class ConjuredItem extends CustomisedItem { private final Item item; - public ConjuredItem(Item item) { + ConjuredItem(Item item) { this.item = item; } - @Override - protected boolean hasReachedHighestQualityValue() { - return item.quality > QualityValues.highestValuePossible(item); - } - - @Override - protected boolean hasReachedLowestQualityValue() { - return item.quality < QualityValues.lowestValuePossible(); - } - @Override int updatedItemSellIn() { return item.sellIn -= 1; diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java index 65e39119..293d3e34 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java @@ -6,9 +6,9 @@ public abstract class CustomisedItem { item.sellIn = updatedItemSellIn(); item.quality = updatedItemQuality(); - if (hasReachedLowestQualityValue()) { + if (hasReachedLowestQualityValue(item)) { item.quality = QualityValues.lowestValuePossible(); - } else if (hasReachedHighestQualityValue()) { + } else if (hasReachedHighestQualityValue(item)) { item.quality = QualityValues.highestValuePossible(item); } } @@ -17,7 +17,11 @@ public abstract class CustomisedItem { abstract int updatedItemQuality(); - protected abstract boolean hasReachedHighestQualityValue(); + private boolean hasReachedHighestQualityValue(Item item) { + return item.quality > QualityValues.highestValuePossible(item); + } - protected abstract boolean hasReachedLowestQualityValue(); + private boolean hasReachedLowestQualityValue(Item item) { + return item.quality < QualityValues.lowestValuePossible(); + } } diff --git a/Java/src/main/java/com/gildedrose/item/QualityValues.java b/Java/src/main/java/com/gildedrose/item/QualityValues.java index cc4d52a3..2d4cffd9 100644 --- a/Java/src/main/java/com/gildedrose/item/QualityValues.java +++ b/Java/src/main/java/com/gildedrose/item/QualityValues.java @@ -1,12 +1,12 @@ package com.gildedrose.item; -public final class QualityValues { +final class QualityValues { - public static int lowestValuePossible() { + static int lowestValuePossible() { return 0; } - public static int highestValuePossible(Item item) { + static int highestValuePossible(Item item) { if (item.name.equals(CustomisedItemFactory.SULFURAS)) { return 80; } diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index a89e99d9..2a60dcb6 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -1,10 +1,10 @@ package com.gildedrose.item; -public class StandardItem extends CustomisedItem { +class StandardItem extends CustomisedItem { private final Item item; - public StandardItem(Item item) { + StandardItem(Item item) { this.item = item; } @@ -22,16 +22,6 @@ public class StandardItem extends CustomisedItem { } } - @Override - protected boolean hasReachedHighestQualityValue() { - return item.quality > QualityValues.highestValuePossible(item); - } - - @Override - protected boolean hasReachedLowestQualityValue() { - return item.quality < QualityValues.lowestValuePossible(); - } - private boolean sellByDayValueIsOverZero() { return item.sellIn > 0; } diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java index 451a9b5e..4f8e9188 100644 --- a/Java/src/main/java/com/gildedrose/item/Sulfuras.java +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -1,10 +1,10 @@ package com.gildedrose.item; -public class Sulfuras extends CustomisedItem { +class Sulfuras extends CustomisedItem { private final Item item; - public Sulfuras(Item item) { + Sulfuras(Item item) { this.item = item; } @@ -17,14 +17,4 @@ public class Sulfuras extends CustomisedItem { int updatedItemQuality() { return item.quality; } - - @Override - protected boolean hasReachedHighestQualityValue() { - return item.quality > QualityValues.highestValuePossible(item) ; - } - - @Override - protected boolean hasReachedLowestQualityValue() { - return item.quality < QualityValues.lowestValuePossible(); - } } From 35a0abea18dde78f22a2ccc09332344563a99b98 Mon Sep 17 00:00:00 2001 From: Gabba Date: Tue, 16 Jan 2018 10:44:34 +0000 Subject: [PATCH 16/18] Item is passed in CustomisedItem contructor --- .../src/main/java/com/gildedrose/GildedRose.java | 2 +- .../main/java/com/gildedrose/item/AgedBrie.java | 1 + .../com/gildedrose/item/BackstagePassesItem.java | 1 + .../java/com/gildedrose/item/ConjuredItem.java | 1 + .../java/com/gildedrose/item/CustomisedItem.java | 16 +++++++++++----- .../java/com/gildedrose/item/StandardItem.java | 1 + .../main/java/com/gildedrose/item/Sulfuras.java | 1 + 7 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 76519690..5351dbcc 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -15,7 +15,7 @@ class GildedRose { public void updateQuality() { for (Item item : items) { - itemFactory.customiseItem(item).updateState(item); + itemFactory.customiseItem(item).updateState(); } } } \ No newline at end of file diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index 20688f06..a6992c41 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -5,6 +5,7 @@ class AgedBrie extends CustomisedItem { private final Item item; AgedBrie(Item item) { + super(item); this.item = item; } diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 50736f90..18a04d85 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -5,6 +5,7 @@ class BackstagePassesItem extends CustomisedItem { private final Item item; BackstagePassesItem(Item item) { + super(item); this.item = item; } diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index 17d8d97e..eaa58855 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -5,6 +5,7 @@ class ConjuredItem extends CustomisedItem { private final Item item; ConjuredItem(Item item) { + super(item); this.item = item; } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java index 293d3e34..ef6796a9 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java @@ -2,13 +2,19 @@ package com.gildedrose.item; public abstract class CustomisedItem { - public final void updateState(Item item) { + private final Item item; + + CustomisedItem(Item item) { + this.item = item; + } + + public final void updateState() { item.sellIn = updatedItemSellIn(); item.quality = updatedItemQuality(); - if (hasReachedLowestQualityValue(item)) { + if (hasReachedLowestQualityValue()) { item.quality = QualityValues.lowestValuePossible(); - } else if (hasReachedHighestQualityValue(item)) { + } else if (hasReachedHighestQualityValue()) { item.quality = QualityValues.highestValuePossible(item); } } @@ -17,11 +23,11 @@ public abstract class CustomisedItem { abstract int updatedItemQuality(); - private boolean hasReachedHighestQualityValue(Item item) { + private boolean hasReachedHighestQualityValue() { return item.quality > QualityValues.highestValuePossible(item); } - private boolean hasReachedLowestQualityValue(Item item) { + private boolean hasReachedLowestQualityValue() { return item.quality < QualityValues.lowestValuePossible(); } } diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index 2a60dcb6..5c498a62 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -5,6 +5,7 @@ class StandardItem extends CustomisedItem { private final Item item; StandardItem(Item item) { + super(item); this.item = item; } diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java index 4f8e9188..e39d5473 100644 --- a/Java/src/main/java/com/gildedrose/item/Sulfuras.java +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -5,6 +5,7 @@ class Sulfuras extends CustomisedItem { private final Item item; Sulfuras(Item item) { + super(item); this.item = item; } From 24d4b6de737aba7105f2343db9fd7ba815363759 Mon Sep 17 00:00:00 2001 From: Gabba Date: Tue, 16 Jan 2018 10:58:56 +0000 Subject: [PATCH 17/18] turns Item field in CustomisedItem class into public --- Java/src/main/java/com/gildedrose/item/AgedBrie.java | 3 --- .../src/main/java/com/gildedrose/item/BackstagePassesItem.java | 3 --- Java/src/main/java/com/gildedrose/item/ConjuredItem.java | 3 --- Java/src/main/java/com/gildedrose/item/CustomisedItem.java | 2 +- Java/src/main/java/com/gildedrose/item/StandardItem.java | 3 --- Java/src/main/java/com/gildedrose/item/Sulfuras.java | 3 --- 6 files changed, 1 insertion(+), 16 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index a6992c41..f0356fb3 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -2,11 +2,8 @@ package com.gildedrose.item; class AgedBrie extends CustomisedItem { - private final Item item; - AgedBrie(Item item) { super(item); - this.item = item; } @Override diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 18a04d85..53ba1c22 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -2,11 +2,8 @@ package com.gildedrose.item; class BackstagePassesItem extends CustomisedItem { - private final Item item; - BackstagePassesItem(Item item) { super(item); - this.item = item; } @Override diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index eaa58855..9c21ce34 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -2,11 +2,8 @@ package com.gildedrose.item; class ConjuredItem extends CustomisedItem { - private final Item item; - ConjuredItem(Item item) { super(item); - this.item = item; } @Override diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java index ef6796a9..40e6eeca 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java @@ -2,7 +2,7 @@ package com.gildedrose.item; public abstract class CustomisedItem { - private final Item item; + public final Item item; CustomisedItem(Item item) { this.item = item; diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index 5c498a62..402aa7d0 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -2,11 +2,8 @@ package com.gildedrose.item; class StandardItem extends CustomisedItem { - private final Item item; - StandardItem(Item item) { super(item); - this.item = item; } @Override diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java index e39d5473..dbb29e6e 100644 --- a/Java/src/main/java/com/gildedrose/item/Sulfuras.java +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -2,11 +2,8 @@ package com.gildedrose.item; class Sulfuras extends CustomisedItem { - private final Item item; - Sulfuras(Item item) { super(item); - this.item = item; } @Override From 4dfcd8081e82b6a7a6c7366ade2b440566bb9e79 Mon Sep 17 00:00:00 2001 From: Gabba Date: Tue, 16 Jan 2018 13:05:07 +0000 Subject: [PATCH 18/18] provides default implementation for method updateItemSellIn() --- Java/src/main/java/com/gildedrose/item/AgedBrie.java | 5 ----- .../main/java/com/gildedrose/item/BackstagePassesItem.java | 5 ----- Java/src/main/java/com/gildedrose/item/ConjuredItem.java | 5 ----- Java/src/main/java/com/gildedrose/item/CustomisedItem.java | 4 +++- Java/src/main/java/com/gildedrose/item/StandardItem.java | 5 ----- 5 files changed, 3 insertions(+), 21 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index f0356fb3..d096eeb9 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -6,11 +6,6 @@ class AgedBrie extends CustomisedItem { super(item); } - @Override - int updatedItemSellIn() { - return item.sellIn -= 1; - } - @Override int updatedItemQuality() { return item.quality += 1; diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 53ba1c22..1db96874 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -6,11 +6,6 @@ class BackstagePassesItem extends CustomisedItem { super(item); } - @Override - int updatedItemSellIn() { - return item.sellIn -= 1; - } - @Override int updatedItemQuality() { if (sellByDayValueIsOver(10)) { diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index 9c21ce34..e4f61761 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -6,11 +6,6 @@ class ConjuredItem extends CustomisedItem { super(item); } - @Override - int updatedItemSellIn() { - return item.sellIn -= 1; - } - @Override int updatedItemQuality() { if (sellByDayValueIsOverZero()) { diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java index 40e6eeca..9cb5ace1 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java @@ -19,7 +19,9 @@ public abstract class CustomisedItem { } } - abstract int updatedItemSellIn(); + int updatedItemSellIn() { + return item.sellIn -= 1; + } abstract int updatedItemQuality(); diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index 402aa7d0..5aa1fdae 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -6,11 +6,6 @@ class StandardItem extends CustomisedItem { super(item); } - @Override - int updatedItemSellIn() { - return item.sellIn -= 1; - } - @Override int updatedItemQuality() { if (sellByDayValueIsOverZero()) {