mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-17 07:21:31 +00:00
120 lines
2.6 KiB
Java
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;
|
|
}
|
|
} |