package freenet.clients.http.wizardsteps;
import freenet.clients.http.FirstTimeWizardToadlet;
import freenet.support.Fields;
import freenet.support.api.HTTPRequest;
/**
* Handles fields that should be persisted, making them available through public properties.
* Able to parse these fields from an HTTPRequest.
*/
public class PersistFields {
public final FirstTimeWizardToadlet.WIZARD_PRESET preset;
public final boolean opennet;
/**
* @param request Parsed for persistence fields, checking parameters (GET) first, then parts (POST).
*/
public PersistFields(HTTPRequest request) {
this.preset = parsePreset(request);
this.opennet = parseOpennet(request);
}
/**
* @param opennet Set manually
* @param request Parsed for remaining fields. (preset)
*/
public PersistFields(boolean opennet, HTTPRequest request) {
this.preset = parsePreset(request);
this.opennet = opennet;
}
/**
* @param preset Set manually
* @param request Parsed for remaining fields. (opennet)
*/
public PersistFields(FirstTimeWizardToadlet.WIZARD_PRESET preset, HTTPRequest request) {
this.preset = preset;
this.opennet = parseOpennet(request);
}
private FirstTimeWizardToadlet.WIZARD_PRESET parsePreset(HTTPRequest request) {
String presetRaw;
FirstTimeWizardToadlet.WIZARD_PRESET preset;
if (request.hasParameters()) {
presetRaw = request.getParam("preset");
} else {
presetRaw = request.getPartAsStringFailsafe("preset", 4);
}
try {
preset = FirstTimeWizardToadlet.WIZARD_PRESET.valueOf(presetRaw);
} catch (IllegalArgumentException e) {
preset = null;
}
return preset;
}
private boolean parseOpennet(HTTPRequest request) {
String opennetRaw;
if (request.hasParameters()) {
opennetRaw = request.getParam("opennet", "false");
} else {
opennetRaw = request.getPartAsStringFailsafe("opennet", 5);
}
return Fields.stringToBool(opennetRaw, false);
}
public boolean isUsingPreset() {
return preset != null;
}
/**
* Appends any defined persistence fields to the given URL.
* @param baseURL The URL to append fields to.
* @return URL with persistence fields included.
*/
public String appendTo(String baseURL) {
StringBuilder url = new StringBuilder(baseURL).append("&opennet=").append(opennet);
if (isUsingPreset()) {
url.append("&preset=").append(preset);
}
return url.toString();
}
}