package com.intrbiz.lamplighter.reading.scaling; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import com.intrbiz.gerald.polyakov.Reading; public class ReadingScalers { private ConcurrentMap<String, ReadingScaler> scalers = new ConcurrentHashMap<String, ReadingScaler>(); public ReadingScalers() { super(); // default scalers this.registerScaler(new BytesScaler()); this.registerScaler(new SecondsScaler()); this.registerScaler(new BytesRateScaler()); this.registerScaler(new BitRateScaler()); } public void registerScaler(ReadingScaler scaler) { for (String unit : scaler.getUnits()) { this.scalers.put(unit, scaler); } } public ReadingScaler build(String unit) { return this.scalers.get(unit); } public Reading scale(Reading reading, String toUnit) { if (reading.getUnit() != null) { ReadingScaler scaler = this.build(reading.getUnit()); if (scaler != null) return scaler.scaleReading(reading, toUnit); } return reading; } }