package org.moskito.demo.burgershop.burgershopspring.service.stats; import net.anotheria.moskito.core.decorators.DecoratorRegistryFactory; import net.anotheria.moskito.core.predefined.Constants; import net.anotheria.moskito.core.producers.AbstractStats; import net.anotheria.moskito.core.stats.StatValue; import net.anotheria.moskito.core.stats.TimeUnit; import net.anotheria.moskito.core.stats.impl.StatValueFactory; import java.util.ArrayList; import java.util.List; /** * TODO comment this class * * @author lrosenberg * @since 12.12.13 13:01 */ public class SalesStats extends AbstractStats{ public static enum StatDef { NUMBER("Number"), VOLUME("Volume"); private String statName; private StatDef(final String aStatName) { statName = aStatName; } public String getStatName() { return statName; } public static List<String> getStatNames() { List<String> ret = new ArrayList<String>(StatDef.values().length); for (StatDef value : StatDef.values()) { ret.add(value.getStatName()); } return ret; } public static StatDef getValueByName(String statName) { for (StatDef value : StatDef.values()) { if (value.getStatName().equals(statName)) { return value; } } throw new IllegalArgumentException("No such value with name: " + statName); } } static{ DecoratorRegistryFactory.getDecoratorRegistry().addDecorator(SalesStats.class, new SalesStatsDecorator()); } /** * The number of sales. */ private StatValue number; /** * The volume of sales. */ private StatValue volume; public SalesStats(String name) { super(name); number = StatValueFactory.createStatValue(Long.valueOf(0), StatDef.NUMBER.getStatName(), Constants.getDefaultIntervals()); volume = StatValueFactory.createStatValue(Long.valueOf(0), StatDef.VOLUME.getStatName(), Constants.getDefaultIntervals()); } public void addSale(int priceInCents){ number.increase(); volume.increaseByInt(priceInCents); } public long getNumber(String intervalName){ return number.getValueAsLong(intervalName); } public long getVolume(String intervalName){ return volume.getValueAsLong(intervalName); } public double getAverageVolume(String intervalName){ return (double)getVolume(intervalName) / getNumber(intervalName); } @Override public String toStatsString(String s, TimeUnit timeUnit) { return null; } @Override public String getValueByNameAsString(String valueName, String intervalName, TimeUnit timeUnit) { StatDef statDef = StatDef.getValueByName(valueName); switch (statDef) { case NUMBER: return number.getValueAsString(intervalName); case VOLUME: return volume.getValueAsString(intervalName); default: return super.getValueByNameAsString(valueName, intervalName, timeUnit); } } @Override public List<String> getAvailableValueNames() { return StatDef.getStatNames(); } public void setNumber(int aNumber){ number.setValueAsInt(aNumber); } }