package vlove.web.vms.wizard;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.extensions.wizard.WizardStep;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import vlove.VirtException;
import vlove.service.VirtManager;
public class Step3Network extends WizardStep {
transient final Logger log = LoggerFactory.getLogger(getClass());
@SpringBean
VirtManager vm;
public Step3Network() {
List<String> networks = new ArrayList<>();
try {
networks.add("manual");
networks.addAll(vm.getNetworks());
} catch (VirtException ve) {
log.error("Could not retrieve networks.", ve);
// TODO bomb out properly
}
final WebMarkupContainer bridgeCont = new WebMarkupContainer("bridgeContainer");
add(bridgeCont.setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true).setVisible(false));
bridgeCont.add(new RequiredTextField<String>("bridge"));
final DropDownChoice<String> ddNetworks = new DropDownChoice<>("networks", networks, new IChoiceRenderer<String>() {
@Override
public Object getDisplayValue(String object) {
return object;
}
@Override
public String getIdValue(String object, int index) {
return object;
}
});
ddNetworks.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
try {
final String network = getFormComponent().getValue();
if (network == null || network.length() == 0) { return; }
if (network.equalsIgnoreCase("manual")) {
// Pop up the text field asking for the bridge
target.add(bridgeCont.setVisible(true));
} else {
target.add(bridgeCont.setVisible(false));
String bridgeName = vm.getNetwork(network);
log.debug("Bridge name: {}", bridgeName);
}
} catch (Exception ex) {
log.error("Could not process selected network.", ex);
// TODO bomb out
}
}
});
add(ddNetworks.setRequired(true));
}
}