package org.ovirt.engine.ui.webadmin.widget.table.refresh; import java.util.Collections; import java.util.Date; import java.util.LinkedHashSet; import java.util.Set; import org.ovirt.engine.ui.uicommonweb.models.GridController; import org.ovirt.engine.ui.uicommonweb.models.GridTimer; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.Cookies; /** * Manages the Refresh Rate for a {@link GridController} */ public class RefreshManager { private static final Integer DEFAULT_REFRESH_RATE = GridTimer.DEFAULT_NORMAL_RATE; private static final String REFRESH_RATE_COOKIE_NAME = "GridRefreshRate"; private static final Set<Integer> REFRESH_RATES = new LinkedHashSet<Integer>(); static { REFRESH_RATES.add(DEFAULT_REFRESH_RATE); REFRESH_RATES.add(10000); REFRESH_RATES.add(20000); REFRESH_RATES.add(30000); } /** * the acceptable Refresh Rates * */ public static Set<Integer> getRefreshRates() { return Collections.unmodifiableSet(REFRESH_RATES); } private final GridController controller; private final RefreshPanel refreshPanel; /** * Create a Manager for the specified {@link GridController} * */ public RefreshManager(GridController controller) { this.controller = controller; controller.setRefreshRate(readRefreshRateCookie()); controller.getTimer().addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { RefreshManager.this.refreshPanel.showStatus(event.getValue()); } }); refreshPanel = new RefreshPanel(this); } public int getCurrentRefreshRate() { return controller.getRefreshRate(); } public RefreshPanel getRefreshPanel() { return refreshPanel; } /** * Called when the Grid becomes hidden */ public void onBlur() { controller.toBackground(); } /** * Called when the Grid becomes visible */ public void onFocus() { controller.toForground(); } public void setCurrentRefreshRate(int newRefreshRate) { controller.setRefreshRate(newRefreshRate); saveRefreshRateCookie(); } // Return refresh rate value from the cookie - if exists; Otherwise, return default refresh rate private int readRefreshRateCookie() { String refreshRate = Cookies.getCookie(REFRESH_RATE_COOKIE_NAME + "_" + controller.getId()); try { return new Integer(refreshRate).intValue(); } catch (NumberFormatException e) { return DEFAULT_REFRESH_RATE; } } // Save refresh rate value to a cookie and set expire date to fifty years from now private void saveRefreshRateCookie() { long expire = new Date().getTime() + 1000 * 60 * 60 * 24 * 365 * 50; // fifty years Cookies.setCookie(REFRESH_RATE_COOKIE_NAME + "_" + controller.getId(), String.valueOf(getCurrentRefreshRate()), new Date(expire)); } }