001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.animation;
003
004import java.util.Calendar;
005import java.util.Date;
006import java.util.GregorianCalendar;
007
008import org.openstreetmap.josm.data.preferences.BooleanProperty;
009
010/**
011 * Animation extension manager. Copied from Icedtea-Web.
012 * @author Jiri Vanek (Red Hat)
013 * @see <a href="http://icedtea.classpath.org/hg/icedtea-web/rev/87d3081ab573">Initial commit</a>
014 * @since 14578
015 */
016public final class AnimationExtensionManager {
017
018    private static volatile AnimationExtension currentExtension;
019    private static final BooleanProperty PROP_ANIMATION = new BooleanProperty("gui.start.animation", true);
020
021    private AnimationExtensionManager() {
022        // Hide default constructor for utility classes
023    }
024
025    /**
026     * Returns the current animation extension.
027     * @return the current animation extension
028     */
029    public static AnimationExtension getExtension() {
030        if (currentExtension == null) {
031            currentExtension = Boolean.TRUE.equals(PROP_ANIMATION.get()) && isChristmas() ? new ChristmasExtension()
032                    : new NoExtension();
033        }
034        return currentExtension;
035    }
036
037    private static boolean isChristmas() {
038        Calendar c = new GregorianCalendar();
039        c.setTime(new Date());
040        return c.get(Calendar.DAY_OF_YEAR) > 350;
041    }
042}