From 8ce79fc8a6328b3a6e439d60fe59ad7a4644eb12 Mon Sep 17 00:00:00 2001 From: codistmonk Date: Fri, 25 Jun 2010 07:08:23 +0000 Subject: [PATCH] Updated Translator to extend AbstractObservable. git-svn-id: https://aprog.svn.sourceforge.net/svnroot/aprog/trunk@17 7cbf5e2b-b55d-4b93-acdd-c0d7b961df51 --- .../aprog/events/AbstractObservable.java | 6 +- .../src/net/sourceforge/aprog/i18n/Translator.java | 93 ++++++++++++---------- 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/Aprog/src/net/sourceforge/aprog/events/AbstractObservable.java b/Aprog/src/net/sourceforge/aprog/events/AbstractObservable.java index 669ed11..38fa76c 100644 --- a/Aprog/src/net/sourceforge/aprog/events/AbstractObservable.java +++ b/Aprog/src/net/sourceforge/aprog/events/AbstractObservable.java @@ -46,17 +46,17 @@ public abstract class AbstractObservable implements Observable { } @Override - public final void addListener(final L listener) { + public final synchronized void addListener(final L listener) { this.listeners.add(listener); } @Override - public final void removeListener(final L listener) { + public final synchronized void removeListener(final L listener) { this.listeners.remove(listener); } @Override - public final Iterable getListeners() { + public final synchronized Iterable getListeners() { return new ArrayList(this.listeners); } diff --git a/Aprog/src/net/sourceforge/aprog/i18n/Translator.java b/Aprog/src/net/sourceforge/aprog/i18n/Translator.java index 9c91c78..3eb3123 100644 --- a/Aprog/src/net/sourceforge/aprog/i18n/Translator.java +++ b/Aprog/src/net/sourceforge/aprog/i18n/Translator.java @@ -38,6 +38,7 @@ import java.util.MissingResourceException; import java.util.ResourceBundle; import java.util.Set; import java.util.logging.Level; +import net.sourceforge.aprog.events.AbstractObservable; import net.sourceforge.aprog.tools.Tools; @@ -51,9 +52,7 @@ import net.sourceforge.aprog.tools.Tools; * @author codistmonk (2010-05-11) * */ -public class Translator { - - private final Collection listeners; +public class Translator extends AbstractObservable { private final Set autotranslators; @@ -64,7 +63,6 @@ public class Translator { private boolean autoCollectingLocales; public Translator() { - this.listeners = new ArrayList(); this.autotranslators = new HashSet(); this.availableLocales = new HashSet(); this.locale = Locale.getDefault(); @@ -73,25 +71,6 @@ public class Translator { /** * - * @param listener - *
Should not be null - *
Shared parameter - */ - public final synchronized void addTranslatorListener(final Listener listener) { - this.listeners.add(listener); - } - - /** - * - * @param listener - *
Can be null - */ - public final synchronized void removeTranslatorListener(final Listener listener) { - this.listeners.remove(listener); - } - - /** - * * @return {@code true} if {@link #collectAvailableLocales(String)} is called automatically each time a translation is performed */ public final boolean isAutoCollectingLocales() { @@ -108,16 +87,6 @@ public class Translator { /** * - * @return - *
A non-null value - *
A new value - */ - public final synchronized Listener[] getTranslatorListeners() { - return this.listeners.toArray(new Listener[this.listeners.size()]); - } - - /** - * * TODO doc * @param the actual type of {@code object} * @param object @@ -200,7 +169,7 @@ public class Translator { */ public final synchronized void setLocale(final Locale locale) { if (!this.getLocale().equals(locale)) { - final Locale oldLocale = this.getLocale(); + final LocaleChangedEvent event = this.new LocaleChangedEvent(this.getLocale(), locale); this.locale = locale; @@ -208,9 +177,7 @@ public class Translator { autotranslator.translate(); } - for (final Listener listener : this.getTranslatorListeners()) { - listener.localeChanged(oldLocale, this.getLocale()); - } + event.fire(); } } @@ -514,14 +481,58 @@ public class Translator { * Called whenever the translator's locale has been changed, and after the registered * objects have been translated. * + * @param event + *
Not null + */ + public abstract void localeChanged(LocaleChangedEvent event); + + } + + public final class LocaleChangedEvent extends AbstractEvent { + + private final Locale oldLocale; + + private final Locale newLocale; + + /** + * * @param oldLocale - *
Should not be null + *
Not null + *
Shared * @param newLocale - *
Should not be null - *
Shared parameter + *
Not null + *
Shared + */ + public LocaleChangedEvent(final Locale oldLocale, final Locale newLocale) { + this.oldLocale = oldLocale; + this.newLocale = newLocale; + } + + /** + * + * @return + *
Not null + *
Shared + */ + public final Locale getNewLocale() { + return this.newLocale; + } + + /** + * + * @return + *
Not null + *
Shared */ - public abstract void localeChanged(Locale oldLocale, Locale newLocale); + public final Locale getOldLocale() { + return this.oldLocale; + } + @Override + protected final void notifyListener(final Listener listener) { + listener.localeChanged(this); + } + } } -- 2.11.4.GIT