17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2007-2010, International Business Machines Corporation and   *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                               *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl.duration;
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Collection;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.duration.impl.PeriodFormatterDataService;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.duration.impl.ResourceBasedPeriodFormatterDataService;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * An implementation of PeriodFormatterService that constructs a
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * BasicPeriodFormatterFactory.
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class BasicPeriodFormatterService implements PeriodFormatterService {
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static BasicPeriodFormatterService instance;
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private PeriodFormatterDataService ds;
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Return the default service instance. This uses the default data service.
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @return an BasicPeriodFormatterService
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static BasicPeriodFormatterService getInstance() {
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (instance == null) {
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            PeriodFormatterDataService ds = ResourceBasedPeriodFormatterDataService
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    .getInstance();
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            instance = new BasicPeriodFormatterService(ds);
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return instance;
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Construct a BasicPeriodFormatterService using the given
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * PeriodFormatterDataService.
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @param ds the data service to use
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public BasicPeriodFormatterService(PeriodFormatterDataService ds) {
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        this.ds = ds;
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public DurationFormatterFactory newDurationFormatterFactory() {
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return new BasicDurationFormatterFactory(this);
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public PeriodFormatterFactory newPeriodFormatterFactory() {
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return new BasicPeriodFormatterFactory(ds);
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public PeriodBuilderFactory newPeriodBuilderFactory() {
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return new BasicPeriodBuilderFactory(ds);
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public Collection<String> getAvailableLocaleNames() {
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return ds.getAvailableLocales();
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
63