package org.freeplane.plugin.script.proxy;
import java.util.Date;
import org.freeplane.features.map.NodeModel;
import org.freeplane.features.mode.Controller;
import org.freeplane.plugin.script.ScriptContext;
import org.freeplane.view.swing.features.time.mindmapmode.ReminderExtension;
import org.freeplane.view.swing.features.time.mindmapmode.ReminderHook;
public class ReminderProxy extends AbstractProxy<NodeModel> implements Proxy.Reminder {
ReminderProxy(final NodeModel delegate, final ScriptContext scriptContext) {
super(delegate, scriptContext);
}
// ReminderRO
public Date getRemindAt() {
final ReminderExtension extension = getDelegate().getExtension(ReminderExtension.class);
if (extension == null)
return null;
return new Date(extension.getRemindUserAt());
}
// ReminderRO
public String getPeriodUnit() {
final ReminderExtension extension = getDelegate().getExtension(ReminderExtension.class);
if (extension == null || extension.getPeriodUnit() == null)
return null;
return extension.getPeriodUnitAsString();
}
// ReminderRO
public Integer getPeriod() {
final ReminderExtension extension = getDelegate().getExtension(ReminderExtension.class);
if (extension == null)
return null;
return extension.getPeriod();
}
// ReminderRO
public String getScript() {
final ReminderExtension extension = getDelegate().getExtension(ReminderExtension.class);
if (extension == null)
return null;
return extension.getScript();
}
// // Reminder
// public void createOrReplace(Date remindAt) {
// final ReminderHook reminderHook = Controller.getCurrentModeController().getExtension(ReminderHook.class);
// removeOldReminder(reminderHook);
// final ReminderExtension reminder = newReminder(remindAt);
// reminderHook.add(getDelegate(), reminder);
// }
private void removeOldReminder(final ReminderHook reminderHook) {
final ReminderExtension oldReminder = getDelegate().getExtension(ReminderExtension.class);
if (oldReminder != null) {
reminderHook.remove(getDelegate(), oldReminder);
}
}
// Reminder
public void createOrReplace(Date remindAt, String periodUnit, Integer period) {
final ReminderHook reminderHook = Controller.getCurrentModeController().getExtension(ReminderHook.class);
removeOldReminder(reminderHook);
final ReminderExtension reminder = newReminder(remindAt);
reminder.setPeriodUnitAsString(periodUnit);
reminder.setPeriod(period);
reminderHook.add(getDelegate(), reminder);
}
private ReminderExtension newReminder(Date remindAt) {
final ReminderExtension reminder = new ReminderExtension(getDelegate());
reminder.setRemindUserAt(remindAt.getTime());
return reminder;
}
// Reminder
public void setScript(String scriptSource) {
final ReminderExtension reminder = getDelegate().getExtension(ReminderExtension.class);
if (reminder == null)
throw new NullPointerException("no reminder defined for node " + this);
reminder.setScript(scriptSource);
}
// Reminder
public void remove() {
final ReminderHook reminderHook = Controller.getCurrentModeController().getExtension(ReminderHook.class);
removeOldReminder(reminderHook);
}
/** make <code>if (node.reminder) println "has reminder"</code> work. */
public boolean asBoolean() {
return getDelegate().getExtension(ReminderExtension.class) != null;
}
@Override
public String toString() {
final ReminderExtension reminder = getDelegate().getExtension(ReminderExtension.class);
if (reminder == null) {
return "no reminder";
}
else {
return "periodic reminder fires at " + reminder.getRemindUserAt() + " and then every "
+ reminder.getPeriod() + " " + reminder.getPeriodUnit();
}
}
}