/************************************************************************** OmegaT - Computer Assisted Translation (CAT) tool with fuzzy matching, translation memory, keyword search, glossaries, and translation leveraging into updated projects. Copyright (C) 2016 Aaron Madlon-Kay Home page: http://www.omegat.org/ Support center: http://groups.yahoo.com/group/OmegaT/ This file is part of OmegaT. OmegaT 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. OmegaT 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 org.omegat.gui.preferences; import java.util.concurrent.CopyOnWriteArrayList; import org.omegat.util.Preferences; /** * A base preferences controller implementation. * * @author Aaron Madlon-Kay */ public abstract class BasePreferencesController implements IPreferencesController { private CopyOnWriteArrayList<FurtherActionListener> listeners = new CopyOnWriteArrayList<>(); private boolean restartRequired = false; private boolean reloadRequired = false; @Override public void addFurtherActionListener(FurtherActionListener listener) { if (!listeners.contains(listener)) { listeners.add(listener); } } @Override public void removeFurtherActionListener(FurtherActionListener listener) { listeners.remove(listener); } protected boolean valueIsDifferent(String prefsKey, Object newValue) { String oldValue = Preferences.getPreference(prefsKey); return !oldValue.equals(newValue.toString()); } protected void fireRestartRequired() { for (FurtherActionListener listener : listeners) { listener.setRestartRequired(restartRequired); } } protected void fireReloadRequired() { for (FurtherActionListener listener : listeners) { listener.setReloadRequired(reloadRequired); } } public void setRestartRequired(boolean restartRequired) { this.restartRequired = restartRequired; fireRestartRequired(); } public void setReloadRequired(boolean reloadRequired) { this.reloadRequired = reloadRequired; fireReloadRequired(); } @Override public boolean isRestartRequired() { return restartRequired; } @Override public boolean isReloadRequired() { return reloadRequired; } @Override public void undoChanges() { initFromPrefs(); setReloadRequired(false); setRestartRequired(false); } /** * Apply current user preferences to the GUI. */ protected abstract void initFromPrefs(); // Re-declared as abstract here to ensure that subclasses override // with a meaningful return value @Override public abstract String toString(); }