package scrum.client.core;
import ilarkesto.core.base.Str;
import ilarkesto.core.base.Utl;
import ilarkesto.core.scope.Scope;
import ilarkesto.gwt.client.AViewEditWidget;
import ilarkesto.gwt.client.AViewEditWidget.ModeSwitchHandler;
import ilarkesto.gwt.client.editor.RichtextEditorWidget;
import scrum.client.admin.ProjectUserConfig;
import com.google.gwt.user.client.Timer;
public class RichtextAutosaver extends GRichtextAutosaver implements ApplicationStartedHandler {
public static final int SAVE_INTERVAL_IN_SECONDS = 10;
@Override
public void onApplicationStarted(ApplicationStartedEvent event) {
new Timer() {
@Override
public void run() {
autosave();
}
}.scheduleRepeating(SAVE_INTERVAL_IN_SECONDS * 1000);
AViewEditWidget.setGlobalModeSwitchHandler(new ModeSwitchHandler() {
@Override
public void onViewerActivated(AViewEditWidget widget) {
if (widget instanceof RichtextEditorWidget) {
RichtextEditorWidget editor = (RichtextEditorWidget) widget;
clearText(editor.getId());
}
}
@Override
public void onEditorActivated(AViewEditWidget widget) {
if (widget instanceof RichtextEditorWidget) {
RichtextEditorWidget editor = (RichtextEditorWidget) widget;
String text = getText(editor.getId());
if (!Str.isBlank(text)) {
editor.setRestoreText(text);
}
}
}
});
}
public String getText(String field) {
ProjectUserConfig config = Scope.get().getComponent(ProjectUserConfig.class);
return config == null || !config.isRichtextAutosaveField(field) ? null : config.getRichtextAutosaveText();
}
public void clearText(String field) {
ProjectUserConfig config = Scope.get().getComponent(ProjectUserConfig.class);
if (config == null || !config.isRichtextAutosaveField(field)) return;
config.setRichtextAutosaveText(null);
config.setRichtextAutosaveField(null);
}
public void autosave() {
AViewEditWidget currentEditor = RichtextEditorWidget.getCurrentEditor();
if (currentEditor == null) return;
ProjectUserConfig config = Scope.get().getComponent(ProjectUserConfig.class);
if (config == null) return;
if (!(currentEditor instanceof RichtextEditorWidget)) return;
RichtextEditorWidget editor = (RichtextEditorWidget) currentEditor;
if (!editor.isEditMode()) return;
String text = editor.getEditorText();
if (Str.isBlank(text)) return;
if (text == null || text.length() < 3) return;
if (Utl.equals(text, editor.getModel().getValue())) return;
config.setRichtextAutosaveText(text);
config.setRichtextAutosaveField(editor.getId());
}
}