mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
Base setup for Items upgrade/degrade Quality
This commit is contained in:
parent
a674623c1c
commit
fb969858cb
@ -0,0 +1,8 @@
|
||||
package com.gildedrose.enums;
|
||||
|
||||
public enum AttributeType {
|
||||
|
||||
SELL,
|
||||
QUALITY;
|
||||
|
||||
}
|
||||
9
Java/src/main/java/com/gildedrose/enums/CountType.java
Normal file
9
Java/src/main/java/com/gildedrose/enums/CountType.java
Normal file
@ -0,0 +1,9 @@
|
||||
package com.gildedrose.enums;
|
||||
|
||||
public enum CountType {
|
||||
|
||||
PLUS,
|
||||
MINUS,
|
||||
NONE;
|
||||
|
||||
}
|
||||
32
Java/src/main/java/com/gildedrose/generic/EventHandler.java
Normal file
32
Java/src/main/java/com/gildedrose/generic/EventHandler.java
Normal file
@ -0,0 +1,32 @@
|
||||
package com.gildedrose.generic;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
/***
|
||||
* EventHandler helps to upgrade/degrade the items
|
||||
* @author VIJAY G
|
||||
*
|
||||
*/
|
||||
public interface EventHandler {
|
||||
|
||||
default void increaseQualityByValue(Item item, Integer value) {
|
||||
item.quality += value;
|
||||
}
|
||||
|
||||
default void decreaseQualityByValue(Item item, Integer value) {
|
||||
item.quality -= value;
|
||||
}
|
||||
|
||||
default void increaseSellInByValue(Item item, Integer value) {
|
||||
item.sellIn += value;
|
||||
}
|
||||
|
||||
default void decreaseSellInByValue(Item item, Integer value) {
|
||||
item.sellIn -= value;
|
||||
}
|
||||
|
||||
default void neutralizeQuality(Item item) {
|
||||
item.quality = 0;
|
||||
}
|
||||
|
||||
}
|
||||
49
Java/src/main/java/com/gildedrose/generic/IItemType.java
Normal file
49
Java/src/main/java/com/gildedrose/generic/IItemType.java
Normal file
@ -0,0 +1,49 @@
|
||||
package com.gildedrose.generic;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
import com.gildedrose.enums.CountType;
|
||||
import com.gildedrose.enums.AttributeType;
|
||||
|
||||
/***
|
||||
* IItemType helps to update the quality of the item
|
||||
* on daily basis and type of item invokes
|
||||
* @author VIJAY G
|
||||
*
|
||||
* @param <T> - Type of item
|
||||
*/
|
||||
public interface IItemType<T> extends EventHandler {
|
||||
|
||||
int MIN = 0;
|
||||
int MAX = 50;
|
||||
int INCREMENTOR = 1;
|
||||
|
||||
default void updateQuality(Item item) {
|
||||
if(isValid(item, AttributeType.QUALITY) && CountType.PLUS.equals(getT().getQualityType())) {
|
||||
increaseQualityByValue(item, getIncrementor(item));
|
||||
} else if(isValid(item, AttributeType.QUALITY) && CountType.MINUS.equals(getT().getQualityType())) {
|
||||
decreaseQualityByValue(item, getIncrementor(item));
|
||||
}
|
||||
if(isValid(item, AttributeType.SELL) && CountType.PLUS.equals(getT().getSellType())) {
|
||||
increaseSellInByValue(item, getIncrementor(item));
|
||||
} else if(isValid(item, AttributeType.SELL) && CountType.MINUS.equals(getT().getSellType())) {
|
||||
decreaseSellInByValue(item, getIncrementor(item));
|
||||
}
|
||||
|
||||
if(isNeutralized(item)) {
|
||||
neutralizeQuality(item);
|
||||
}
|
||||
}
|
||||
|
||||
default int getIncrementor(Item item) {
|
||||
return INCREMENTOR;
|
||||
}
|
||||
|
||||
default boolean isNeutralized(Item item) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean isValid(Item item, AttributeType dayType);
|
||||
|
||||
ItemType<T> getT();
|
||||
|
||||
}
|
||||
60
Java/src/main/java/com/gildedrose/generic/ItemType.java
Normal file
60
Java/src/main/java/com/gildedrose/generic/ItemType.java
Normal file
@ -0,0 +1,60 @@
|
||||
package com.gildedrose.generic;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
import com.gildedrose.enums.CountType;
|
||||
import com.gildedrose.enums.AttributeType;
|
||||
|
||||
/***
|
||||
* ItemType provides as a template for all types of items,
|
||||
* which can be appendable/detachable to the system at any time.
|
||||
* @author VIJAY G
|
||||
*
|
||||
* @param <T>
|
||||
*/
|
||||
public abstract class ItemType<T> implements IItemType<T> {
|
||||
|
||||
private boolean validationRequired;
|
||||
private CountType sellType;
|
||||
private CountType qualityType;
|
||||
|
||||
protected ItemType(boolean validationRequired, CountType sellType, CountType qualityType) {
|
||||
this.validationRequired = validationRequired;
|
||||
this.sellType = sellType;
|
||||
this.qualityType = qualityType;
|
||||
}
|
||||
|
||||
public boolean isValid(Item item, AttributeType dayType) {
|
||||
boolean validationRequired = getT().isValidationRequired();
|
||||
if(!validationRequired) {
|
||||
return true;
|
||||
}
|
||||
if(dayType.equals(AttributeType.QUALITY) && CountType.PLUS.equals(getT().getQualityType())) {
|
||||
return item.quality < MAX;
|
||||
} else if(dayType.equals(AttributeType.QUALITY) && CountType.MINUS.equals(getT().getQualityType())) {
|
||||
return item.quality > MIN;
|
||||
}
|
||||
if(dayType.equals(AttributeType.SELL) && CountType.PLUS.equals(getT().getQualityType())) {
|
||||
return item.sellIn < MAX;
|
||||
} else if(dayType.equals(AttributeType.SELL) && CountType.MINUS.equals(getT().getQualityType())) {
|
||||
return item.sellIn > MIN;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public ItemType<T> getT() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public CountType getSellType() {
|
||||
return sellType;
|
||||
}
|
||||
|
||||
public CountType getQualityType() {
|
||||
return qualityType;
|
||||
}
|
||||
|
||||
public boolean isValidationRequired() {
|
||||
return validationRequired;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user