mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-18 07:51:29 +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