GildedRose-Refactoring-Kata/Java/src/main/java/com/gildedrose/GildedRose.java
2020-02-06 22:19:53 +01:00

120 lines
2.6 KiB
Java

package com.gildedrose;
class GildedRose {
private static final int MIN_QUALITY = 0;
private static final int MAX_QUALITY = 50;
public static final String AGED_BRIE = "Aged Brie";
public static final String SULFURAS_HAND_OF_RAGNAROS = "Sulfuras, Hand of Ragnaros";
public static final String BACKSTAGE_PASSES = "Backstage passes to a TAFKAL80ETC concert";
public static final String CONJURED_MANA_CAKE = "Conjured Mana Cake";
Item[] items;
public GildedRose(Item[] items) {
this.items = items;
}
public void updateQuality() {
for (int i = 0; i < items.length; i++) {
Item item = items[i];
if(isLegendaryItem(item.name)) {
continue;
}
// update quality
if (isEnhancingItem(item.name)) {
int qualityOffset = determineEnhancingQualityOffset(item);
item.quality = Integer.min(item.quality + qualityOffset, MAX_QUALITY);
} else {
int qualityOffset = determineDegradingQualityOffset(item);
item.quality = Integer.max(MIN_QUALITY, item.quality - qualityOffset);
}
// update sell in value
item.sellIn -= 1;
}
}
/**
* @param name
* @return
*/
private boolean isLegendaryItem(String name) {
return name.equals(SULFURAS_HAND_OF_RAGNAROS);
}
/**
* @param name
* @return
*/
private boolean isEnhancingItem(String name) {
return name.equals(GildedRose.AGED_BRIE) || name.equals(BACKSTAGE_PASSES);
}
/**
* @param name
* @return
*/
private boolean isConjuredItem(String name) {
return name.equals(CONJURED_MANA_CAKE);
}
/**
* @param item
* @return
*/
private int determineEnhancingQualityOffset(Item item) {
int qualityOffset = 1;
if (item.name.equals(BACKSTAGE_PASSES)) {
if (isExpiredSale(item.sellIn)) {
qualityOffset = -item.quality;
} else if (isUrgentSale(item.sellIn)) {
qualityOffset += 2;
} else if (isExperingSale(item.sellIn)) {
qualityOffset += 1;
}
} else if (isExpiredSale(item.sellIn)) {
qualityOffset *= 2;
}
return qualityOffset;
}
/**
* @param item
* @return
*/
private int determineDegradingQualityOffset(Item item) {
int qualityOffset = 1;
if(item.sellIn <= 0) {
qualityOffset *=2;
}
if(isConjuredItem(item.name)) {
qualityOffset *= 2;
}
return qualityOffset;
}
/**
* @param sellIn
* @return
*/
private boolean isExpiredSale(int sellIn) {
return sellIn <= 0;
}
/**
* @param sellIn
* @return
*/
private boolean isUrgentSale(int sellIn) {
return sellIn < 6;
}
/**
* @param sellIn
* @return
*/
private boolean isExperingSale(int sellIn) {
return sellIn < 11;
}
}