package org.pentaho.mantle.client.usersettings; import java.util.ArrayList; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.service.MantleServiceCache; import org.pentaho.platform.api.usersettings.pojo.IUserSetting; import com.google.gwt.user.client.rpc.AsyncCallback; public class UserSettingsManager { private ArrayList<IUserSettingsListener> listeners = new ArrayList<IUserSettingsListener>(); private ArrayList<IUserSetting> settings; private static UserSettingsManager instance; private UserSettingsManager() { } public static UserSettingsManager getInstance() { if (instance == null) { instance = new UserSettingsManager(); } return instance; } public void addUserSettingsListener(IUserSettingsListener listener) { listeners.add(listener); if (settings == null) { fetchUserSettings(true); } } public void removeUserSettingsListener(IUserSettingsListener listener) { listeners.remove(listener); } public void fireUserSettingsFetched() { for (IUserSettingsListener listener : listeners) { listener.onFetchUserSettings(settings); } } public void fetchUserSettings(final boolean forceReload) { if (forceReload || settings == null) { fetchUserSettings(null); } } public void fetchUserSettings(final AsyncCallback<ArrayList<IUserSetting>> callback, final boolean forceReload) { if (forceReload || settings == null) { fetchUserSettings(callback); } else { callback.onSuccess(settings); } } public void fetchUserSettings(final AsyncCallback<ArrayList<IUserSetting>> callback) { AsyncCallback<ArrayList<IUserSetting>> internalCallback = new AsyncCallback<ArrayList<IUserSetting>>() { public void onFailure(Throwable caught) { MessageDialogBox dialog = new MessageDialogBox(Messages.getString("error"), Messages.getString("couldNotGetUserSettings"), true, false, true); //$NON-NLS-1$ //$NON-NLS-2$ dialog.center(); } public void onSuccess(final ArrayList<IUserSetting> settings) { getInstance().settings = settings; if (callback != null) { callback.onSuccess(settings); } fireUserSettingsFetched(); } }; MantleServiceCache.getService().getUserSettings(internalCallback); } }