/* Name: - MeasurementContext Description: - Requires: - Provides: - Part of: ProcessPuzzle Framework, Domain and Business Model Ready Architecture. Provides content, workflow and social networking functionality. http://www.processpuzzle.com ProcessPuzzle - Content and Workflow Management Integration Business Platform Author(s): - Zsolt Zsuffa Copyright: (C) 2011 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.processpuzzle.application.configuration.domain; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.processpuzzle.application.domain.Application; import com.processpuzzle.fundamental_types.quantity.domain.TimeUnit; import com.processpuzzle.fundamental_types.quantity.domain.Unit; import com.processpuzzle.fundamental_types.quantity.domain.Units; import com.processpuzzle.fundamental_types.quantity.money.domain.Currency; public class MeasurementContext extends TransientApplicationContext implements ApplicationContext { private static Log log = LogFactory.getLog( MeasurementContext.class ); private List<Unit> units = new ArrayList<Unit>(); //Constructors public MeasurementContext( Application application ){ super( application ); } //Public accessors public Unit findUnitBySymbol( String symbol ) { for (Iterator<Unit> i=units.iterator();i.hasNext();){ Unit u=(Unit)i.next(); if (u.getSymbol().equals(symbol)) return u; } return null; } public Collection<Unit> findAllUnits() { return units; } //Protected, private helper methods @Override protected void setUpTransientComponents(){ createUnits(); createTimeUnits(); createCurrencies(); createSpecialUnits(); log.info("MeasurementContext.setUp() - finished."); } @Override protected void tearDownTransientComponents() { units.clear(); } private void createTimeUnits() { TimeUnit milliseconds = new TimeUnit("milliseconds", Units.MILLISECONDS); TimeUnit second = new TimeUnit("second", Units.SECOND); TimeUnit minute = new TimeUnit("minute", Units.MINUTE); TimeUnit hour = new TimeUnit("hour", Units.HOUR); TimeUnit day = new TimeUnit("day", Units.DAY); TimeUnit week = new TimeUnit("week", Units.WEEK); TimeUnit month = new TimeUnit("month", Units.MONTH); TimeUnit year = new TimeUnit("year", Units.YEAR); year.addConversionRatio(12d, month); year.addConversionRatio(52d,week); day.addConversionRatio(86400000d, milliseconds); day.addConversionRatio(86400d, second); day.addConversionRatio(1440d, minute); day.addConversionRatio(24d, hour); hour.addConversionRatio(3600000d, milliseconds); hour.addConversionRatio(3600d, second); hour.addConversionRatio(60d, minute); minute.addConversionRatio(60000d, milliseconds); minute.addConversionRatio(60d, second); second.addConversionRatio(1000d, milliseconds); week.addConversionRatio(7d, day); units.add(milliseconds); units.add(second); units.add(minute); units.add(hour); units.add(day); units.add(week); units.add(month); units.add(year); } private void createUnits() { Unit millimetre = new Unit("millimetre", Units.MILLIMETRE); Unit centimetre = new Unit("centimetre", Units.CENTIMETRE); Unit decimetre = new Unit("decimetre", Units.DECIMETRE); Unit metre = new Unit("metre", Units.METRE); Unit kilometre = new Unit("kilometre", Units.KILOMETRE); Unit gramm = new Unit("gramm", Units.GRAMM); Unit dekagramm = new Unit("dekagramm", Units.DEKAGRAMM); Unit kilogramm = new Unit("kilogramm", Units.KILOGRAMM); Unit quintal = new Unit("quintal", Units.QUINTAL); Unit ton = new Unit("ton", Units.TON); kilometre.addConversionRatio(1000000d, millimetre); kilometre.addConversionRatio(100000d, centimetre); kilometre.addConversionRatio(10000d, decimetre); kilometre.addConversionRatio(1000d, metre); metre.addConversionRatio(1000d, millimetre); metre.addConversionRatio(100d, centimetre); metre.addConversionRatio(10d, decimetre); decimetre.addConversionRatio(100d, millimetre); decimetre.addConversionRatio(10d, centimetre); centimetre.addConversionRatio(10d, millimetre); ton.addConversionRatio(1000000d, gramm); ton.addConversionRatio(100000d, dekagramm); ton.addConversionRatio(1000d, kilogramm); ton.addConversionRatio(10d, quintal); quintal.addConversionRatio(100000d, gramm); quintal.addConversionRatio(10000d, dekagramm); quintal.addConversionRatio(100d, kilogramm); kilogramm.addConversionRatio(1000d, gramm); kilogramm.addConversionRatio(100d, dekagramm); dekagramm.addConversionRatio(10d, gramm); units.add(millimetre); units.add(centimetre); units.add(decimetre); units.add(metre); units.add(kilometre); units.add(gramm); units.add(dekagramm); units.add(kilogramm); units.add(quintal); units.add(ton); } private void createCurrencies() { Currency huf = new Currency("Hungarian Forint", "HUF"); Currency usd = new Currency("United States Dollar", "USD"); Currency eur = new Currency("Euro", "EUR"); Currency gbp = new Currency("Pound Sterling", "GBP"); units.add(huf); units.add(usd); units.add(eur); units.add(gbp); } private void createSpecialUnits() { Unit piece = new Unit("piece", Units.PIECE); Unit person = new Unit("person", Units.PERSON); units.add(piece); units.add(person); } }