package scrum.client.admin;
import ilarkesto.core.scope.Scope;
import ilarkesto.gwt.client.DateAndTime;
import ilarkesto.gwt.client.Gwt;
import ilarkesto.gwt.client.TimePeriod;
import scrum.client.common.AScrumWidget;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
public class SystemMessageWidget extends AScrumWidget {
private SystemMessageManager systemMessageManager;
private SimplePanel panel;
private Label text = new Label();
private Label expires = new Label();
@Override
protected Widget onInitialization() {
systemMessageManager = Scope.get().getComponent(SystemMessageManager.class);
expires.setStyleName("SystemMessageWidget-box-time");
FlowPanel content = new FlowPanel();
content.add(Gwt.createDiv("SystemMessageWidget-box-title", "Message from Admin"));
content.add(text);
content.add(expires);
panel = Gwt.createDiv("SystemMessageWidget-box", content);
panel.setVisible(false);
return panel;
}
@Override
protected void onUpdate() {
SystemMessage message = systemMessageManager.getSystemMessage();
if (message.isActive()) {
text.setText(message.getText());
expires.setText(message.getExpiresAsString());
panel.setVisible(true);
DateAndTime expiration = message.getExpires();
if (updater == null) {
if (expiration != null) {
TimePeriod period = expiration.getPeriodFromNow();
if (period.isPositive()) {
updater = new Updater();
Gwt
.runLater(period.toMillis() > TimePeriod.MINUTE ? TimePeriod.SECOND * 10
: TimePeriod.SECOND, updater);
}
}
}
} else {
panel.setVisible(false);
}
}
private Updater updater;
private class Updater implements Runnable {
public void run() {
updater = null;
update();
}
}
}