diff --git a/.gitignore b/.gitignore
index 1ff57af1..91aaf7a3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+.idea
+
bin
obj
*.sln.DotSettings.user
diff --git a/.idea/GildedRose-Refactoring-Kata.iml b/.idea/GildedRose-Refactoring-Kata.iml
new file mode 100644
index 00000000..d6ebd480
--- /dev/null
+++ b/.idea/GildedRose-Refactoring-Kata.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 00000000..552fd661
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 00000000..15a15b21
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 00000000..d4110417
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 00000000..f58bbc11
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 00000000..ba43e086
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Android
+
+
+ Android > Lint > Correctness
+
+
+ Android > Lint > Performance
+
+
+ CorrectnessLintAndroid
+
+
+ General
+
+
+ GeneralScala
+
+
+ Kotlin
+
+
+ LintAndroid
+
+
+ Maven
+
+
+ Plugin DevKit
+
+
+ Scala
+
+
+ XPath
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 00000000..9833340a
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 00000000..35eb1ddf
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 00000000..b56bb3c0
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,661 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1566408399458
+
+
+ 1566408399458
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/Java/src/main/java/com/gildedrose/GildedRose.java
+ 11
+
+
+
+
+ file://$PROJECT_DIR$/Java/src/test/java/com/gildedrose/GildedRoseTest.java
+ 46
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ No facets are configured
+
+
+
+
+
+
+
+
+
+
+
+ Bundled Protobuf Distribution
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ gilded-rose-kata
+
+
+
+
+
+
+
+
+
+
+
+
+ Maven: junit:junit:4.12
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Java/src/main/java/com/gildedrose/AgedBrieUpdater.java b/Java/src/main/java/com/gildedrose/AgedBrieUpdater.java
index 38344efa..33470d64 100644
--- a/Java/src/main/java/com/gildedrose/AgedBrieUpdater.java
+++ b/Java/src/main/java/com/gildedrose/AgedBrieUpdater.java
@@ -1,19 +1,22 @@
package com.gildedrose;
-public class AgedBrieUpdater extends CustomItemUpdater {
+class AgedBrieUpdater extends CustomItemUpdater {
+
+ AgedBrieUpdater() {
+ }
@Override
- void updateSellIn(Item item) {
+ void updateSellIn() {
item.sellIn -= 1;
}
@Override
- boolean canUpdateQuality(final Item item) {
+ boolean canUpdateQuality() {
return item.quality < HIGHEST_QUALITY;
}
@Override
- int getUpdateValue(final Item item) {
+ int getUpdateValue() {
return INCREASE_NORMAL;
}
}
diff --git a/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java b/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java
index df27ef91..b7ed093d 100644
--- a/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java
+++ b/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java
@@ -1,20 +1,24 @@
package com.gildedrose;
-public class BackstagePassUpdater extends CustomItemUpdater {
+class BackstagePassUpdater extends CustomItemUpdater {
+
+ BackstagePassUpdater() {
+ }
@Override
- void updateSellIn(Item item) {
+ void updateSellIn() {
item.sellIn -=1;
}
@Override
- boolean canUpdateQuality(final Item item) {
+ boolean canUpdateQuality() {
return item.quality < HIGHEST_QUALITY && item.quality > MIN_QUALITY;
}
@Override
- int getUpdateValue(final Item item) {
+ int getUpdateValue() {
if (sellByDateLessThan(item, 0)) {
+ // if sell by date has passed then the quality should be zero
return -item.quality;
} else if (sellByDateLessThan(item, 6)) {
return INCREASE_THRICE_AS_FAST;
diff --git a/Java/src/main/java/com/gildedrose/ConjuredUpdater.java b/Java/src/main/java/com/gildedrose/ConjuredUpdater.java
index 2ccb6983..3a760cb4 100644
--- a/Java/src/main/java/com/gildedrose/ConjuredUpdater.java
+++ b/Java/src/main/java/com/gildedrose/ConjuredUpdater.java
@@ -1,9 +1,12 @@
package com.gildedrose;
-public class ConjuredUpdater extends StandardItemUpdater {
+class ConjuredUpdater extends StandardItemUpdater {
+
+ ConjuredUpdater() {
+ }
@Override
- int getUpdateValue(final Item item) {
+ int getUpdateValue() {
if (item.sellIn < 0) {
return DEGRADE_TWICE_AS_FAST * 2;
} else {
diff --git a/Java/src/main/java/com/gildedrose/CustomItemUpdater.java b/Java/src/main/java/com/gildedrose/CustomItemUpdater.java
index ab6761d5..e045658b 100644
--- a/Java/src/main/java/com/gildedrose/CustomItemUpdater.java
+++ b/Java/src/main/java/com/gildedrose/CustomItemUpdater.java
@@ -1,7 +1,11 @@
package com.gildedrose;
-public abstract class CustomItemUpdater extends ItemUpdater{
- int getNewQuality(final Item item){
- return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
+abstract class CustomItemUpdater extends ItemUpdater{
+
+ CustomItemUpdater() {
+ }
+
+ int getNewQuality(){
+ return Math.min(item.quality + getUpdateValue(), HIGHEST_QUALITY);
}
}
diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java
index 930c6dfb..3dc7f110 100644
--- a/Java/src/main/java/com/gildedrose/GildedRose.java
+++ b/Java/src/main/java/com/gildedrose/GildedRose.java
@@ -10,7 +10,7 @@ class GildedRose {
public void updateQuality() {
for (Item item : items) {
ItemUpdaterFactory.getItemUpdater(item)
- .updateStateFor(item);
+ .updateStateFor();
}
}
}
\ No newline at end of file
diff --git a/Java/src/main/java/com/gildedrose/ItemUpdater.java b/Java/src/main/java/com/gildedrose/ItemUpdater.java
index 409ea2d7..fd2791ab 100644
--- a/Java/src/main/java/com/gildedrose/ItemUpdater.java
+++ b/Java/src/main/java/com/gildedrose/ItemUpdater.java
@@ -9,18 +9,26 @@ abstract class ItemUpdater {
static int INCREASE_TWICE_AS_FAST = 2;
static int INCREASE_THRICE_AS_FAST = 3;
- void updateStateFor(Item item){
- updateSellIn(item);
- updateQuality(item);
+ Item item;
+
+ ItemUpdater() {}
+
+ void updateStateFor(){
+ updateSellIn();
+ updateQuality();
}
- private void updateQuality(Item item) {
- if (canUpdateQuality(item)) {
- item.quality = Math.max(getNewQuality(item), MIN_QUALITY);
+ private void updateQuality() {
+ if (canUpdateQuality()) {
+ item.quality = Math.max(getNewQuality(), MIN_QUALITY);
}
}
- abstract void updateSellIn(Item item);
- abstract boolean canUpdateQuality(Item item);
- abstract int getUpdateValue(Item item);
- abstract int getNewQuality(Item item);
+ abstract void updateSellIn();
+ abstract boolean canUpdateQuality();
+ abstract int getUpdateValue();
+ abstract int getNewQuality();
+
+ public void setItem(Item item) {
+ this.item = item;
+ }
}
diff --git a/Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java b/Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java
index 725416e0..16f19b04 100644
--- a/Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java
+++ b/Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java
@@ -7,6 +7,7 @@ import java.util.Optional;
class ItemUpdaterFactory {
private static final Map registeredItemUpdaters = new HashMap<>();
+
static {
registeredItemUpdaters.put("Aged Brie", new AgedBrieUpdater());
registeredItemUpdaters.put("Backstage passes to a TAFKAL80ETC concert", new BackstagePassUpdater());
@@ -19,7 +20,10 @@ class ItemUpdaterFactory {
}
static ItemUpdater getItemUpdater(final Item item) {
- return Optional.ofNullable(registeredItemUpdaters.get(item.name))
+ ItemUpdater itemUpdater = Optional.ofNullable(registeredItemUpdaters.get(item.name))
.orElse(new StandardItemUpdater());
+ itemUpdater.setItem(item);
+
+ return itemUpdater;
}
}
diff --git a/Java/src/main/java/com/gildedrose/LegendaryItemUpdater.java b/Java/src/main/java/com/gildedrose/LegendaryItemUpdater.java
index 93af09df..869f811e 100644
--- a/Java/src/main/java/com/gildedrose/LegendaryItemUpdater.java
+++ b/Java/src/main/java/com/gildedrose/LegendaryItemUpdater.java
@@ -3,7 +3,10 @@ package com.gildedrose;
abstract class LegendaryItemUpdater extends ItemUpdater{
static int HIGHEST_QUALITY = 80;
- int getNewQuality(final Item item){
- return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
+ LegendaryItemUpdater() {
+ }
+
+ int getNewQuality(){
+ return Math.min(item.quality + getUpdateValue(), HIGHEST_QUALITY);
}
}
diff --git a/Java/src/main/java/com/gildedrose/StandardItemUpdater.java b/Java/src/main/java/com/gildedrose/StandardItemUpdater.java
index e2f0da37..bf8e06f5 100644
--- a/Java/src/main/java/com/gildedrose/StandardItemUpdater.java
+++ b/Java/src/main/java/com/gildedrose/StandardItemUpdater.java
@@ -2,18 +2,21 @@ package com.gildedrose;
class StandardItemUpdater extends ItemUpdater {
+ StandardItemUpdater() {
+ }
+
@Override
- void updateSellIn(Item item) {
+ void updateSellIn() {
item.sellIn -= 1;
}
@Override
- boolean canUpdateQuality(final Item item) {
+ boolean canUpdateQuality() {
return item.quality <= HIGHEST_QUALITY && item.quality > MIN_QUALITY;
}
@Override
- int getUpdateValue(final Item item) {
+ int getUpdateValue() {
if (item.sellIn < 0) {
return DEGRADE_NORMAL * 2;
} else {
@@ -22,7 +25,7 @@ class StandardItemUpdater extends ItemUpdater {
}
@Override
- int getNewQuality(final Item item) {
- return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
+ int getNewQuality() {
+ return Math.min(item.quality + getUpdateValue(), HIGHEST_QUALITY);
}
}
diff --git a/Java/src/main/java/com/gildedrose/SulfurasUpdater.java b/Java/src/main/java/com/gildedrose/SulfurasUpdater.java
index 5cc14933..a80a2890 100644
--- a/Java/src/main/java/com/gildedrose/SulfurasUpdater.java
+++ b/Java/src/main/java/com/gildedrose/SulfurasUpdater.java
@@ -1,19 +1,22 @@
package com.gildedrose;
class SulfurasUpdater extends LegendaryItemUpdater {
+
+ SulfurasUpdater() {}
+
@Override
- void updateSellIn(Item item) {
+ void updateSellIn() {
System.out.print("########Never gets old ############");
}
@Override
- boolean canUpdateQuality(final Item item) {
+ boolean canUpdateQuality() {
// "Sulfuras", being a legendary item, never decreases in Quality
return item.quality < HIGHEST_QUALITY;
}
@Override
- int getUpdateValue(final Item item) {
+ int getUpdateValue() {
// "Sulfuras", being a legendary item, never decreases in Quality. Its value is always 80
return HIGHEST_QUALITY - item.quality;
}