package net.i2p.router.web;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import net.i2p.data.DataHelper;
/**
* Simple summary bar configuration.
*
* @since 0.9.1
*/
public class ConfigSummaryHandler extends FormHandler {
@Override
protected void processForm() {
if (_action == null) return;
String group = getJettyString("group");
boolean deleting = _action.equals(_t("Delete selected"));
boolean adding = _action.equals(_t("Add item"));
boolean saving = _action.equals(_t("Save order"));
boolean moving = _action.startsWith("move_");
if (_action.equals(_t("Save")) && "0".equals(group)) {
try {
int refreshInterval = Integer.parseInt(getJettyString("refreshInterval"));
if (refreshInterval >= CSSHelper.MIN_REFRESH) {
_context.router().saveConfig(CSSHelper.PROP_REFRESH, "" + refreshInterval);
addFormNotice(_t("Refresh interval changed"));
} else
addFormError(_t("Refresh interval must be at least {0} seconds", CSSHelper.MIN_REFRESH));
} catch (java.lang.NumberFormatException e) {
addFormError(_t("Refresh interval must be a number"));
return;
}
} else if (_action.equals(_t("Restore full default"))) {
_context.router().saveConfig(SummaryHelper.PROP_SUMMARYBAR + "default", SummaryHelper.DEFAULT_FULL);
addFormNotice(_t("Full summary bar default restored.") + " " +
_t("Summary bar will refresh shortly."));
} else if (_action.equals(_t("Restore minimal default"))) {
_context.router().saveConfig(SummaryHelper.PROP_SUMMARYBAR + "default", SummaryHelper.DEFAULT_MINIMAL);
addFormNotice(_t("Minimal summary bar default restored.") + " " +
_t("Summary bar will refresh shortly."));
} else if (adding || deleting || saving || moving) {
Map<Integer, String> sections = new TreeMap<Integer, String>();
for (Object o : _settings.keySet()) {
if (!(o instanceof String))
continue;
String k = (String) o;
if (!k.startsWith("order_"))
continue;
String v = getJettyString(k);
k = k.substring(6);
k = k.substring(k.indexOf('_') + 1);
try {
int order = Integer.parseInt(v);
sections.put(order, k);
} catch (java.lang.NumberFormatException e) {
addFormError(_t("Order must be an integer"));
return;
}
}
if (adding) {
String name = getJettyString("name");
if (name == null || name.length() <= 0) {
addFormError(_t("No section selected"));
return;
}
String order = getJettyString("order");
if (order == null || order.length() <= 0) {
addFormError(_t("No order entered"));
return;
}
name = DataHelper.escapeHTML(name).replace(",", ",");
order = DataHelper.escapeHTML(order).replace(",", ",");
try {
int ki = Integer.parseInt(order);
sections.put(ki, name);
addFormNotice(_t("Added") + ": " + name);
} catch (java.lang.NumberFormatException e) {
addFormError(_t("Order must be an integer"));
return;
}
} else if (deleting) {
Set<Integer> toDelete = new HashSet<Integer>();
for (Object o : _settings.keySet()) {
if (!(o instanceof String))
continue;
String k = (String) o;
if (!k.startsWith("delete_"))
continue;
k = k.substring(7);
try {
int ki = Integer.parseInt(k);
toDelete.add(ki);
} catch (java.lang.NumberFormatException e) {
continue;
}
}
for (Iterator<Integer> iter = sections.keySet().iterator(); iter.hasNext(); ) {
int i = iter.next();
if (toDelete.contains(i)) {
String removedName = sections.get(i);
iter.remove();
addFormNotice(_t("Removed") + ": " + removedName);
}
}
} else if (moving) {
String parts[] = DataHelper.split(_action, "_");
try {
int from = Integer.parseInt(parts[1]);
int to = 0;
if ("up".equals(parts[2]))
to = from - 1;
if ("down".equals(parts[2]))
to = from + 1;
if ("bottom".equals(parts[2]))
to = sections.size() - 1;
int n = -1;
if ("down".equals(parts[2]) || "bottom".equals(parts[2]))
n = 1;
for (int i = from; n * i < n * to; i += n) {
String temp = sections.get(i + n);
sections.put(i + n, sections.get(i));
sections.put(i, temp);
}
addFormNotice(_t("Moved") + ": " + sections.get(to));
} catch (java.lang.NumberFormatException e) {
addFormError(_t("Order must be an integer"));
return;
}
}
SummaryHelper.saveSummaryBarSections(_context, "default", sections);
addFormNotice(_t("Saved order of sections.") + " " +
_t("Summary bar will refresh shortly."));
} else {
//addFormError(_t("Unsupported"));
}
}
public void setMovingAction() {
for (Object o : _settings.keySet()) {
if (!(o instanceof String))
continue;
String k = (String) o;
if (k.startsWith("move_") && k.endsWith(".x") && _settings.get(k) != null) {
_action = k.substring(0, k.length() - 2);
break;
}
}
}
}