package org.pentaho.mantle.client.usersettings; import java.util.ArrayList; import java.util.HashMap; import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox; import org.pentaho.mantle.client.messages.Messages; import org.pentaho.mantle.client.service.MantleServiceCache; import com.google.gwt.user.client.rpc.AsyncCallback; public class MantleSettingsManager { private ArrayList<IMantleSettingsListener> listeners = new ArrayList<IMantleSettingsListener>(); private HashMap<String, String> settings; private boolean isAdministrator = false; private static MantleSettingsManager instance; private MantleSettingsManager() { } public static MantleSettingsManager getInstance() { if (instance == null) { instance = new MantleSettingsManager(); } return instance; } public void addMantleSettingsListener(IMantleSettingsListener listener) { listeners.add(listener); if (settings == null) { fetchMantleSettings(true); } } public void removeMantleSettingsListener(IMantleSettingsListener listener) { listeners.remove(listener); } public void fireMantleSettingsFetched() { for (IMantleSettingsListener listener : listeners) { listener.onFetchMantleSettings(settings); } } public void fetchMantleSettings(final boolean forceReload) { if (forceReload || settings == null) { fetchMantleSettings(null); } } public void fetchMantleSettings(final AsyncCallback<HashMap<String, String>> callback, final boolean forceReload) { if (forceReload || settings == null) { fetchMantleSettings(callback); } else { callback.onSuccess(settings); } } public void fetchMantleSettings(final AsyncCallback<HashMap<String, String>> callback) { final AsyncCallback<HashMap<String, String>> internalCallback = new AsyncCallback<HashMap<String, String>>() { 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 HashMap<String, String> settings) { getInstance().settings = settings; settings.put("is-administrator", "" + isAdministrator); if (callback != null) { callback.onSuccess(settings); } fireMantleSettingsFetched(); } }; AsyncCallback<Boolean> isAdministratorCallback = new AsyncCallback<Boolean>() { public void onSuccess(Boolean isAdministrator) { MantleServiceCache.getService().getMantleSettings(internalCallback); MantleSettingsManager.getInstance().isAdministrator = isAdministrator; } public void onFailure(Throwable caught) { MantleServiceCache.getService().getMantleSettings(internalCallback); MantleSettingsManager.getInstance().isAdministrator = false; } }; MantleServiceCache.getService().isAdministrator(isAdministratorCallback); } }