package de.flower.rmt.ui.page.venues.manager;
import de.flower.common.ui.ajax.event.AjaxEventSender;
import de.flower.common.ui.panel.BasePanel;
import de.flower.common.util.geo.LatLng;
import de.flower.rmt.model.db.entity.Venue;
import de.flower.rmt.security.ISecurityService;
import de.flower.rmt.service.IVenueManager;
import de.flower.rmt.service.geocoding.GeocodingResult;
import de.flower.rmt.ui.markup.html.form.CancelableEntityForm;
import de.flower.rmt.ui.markup.html.form.EntityForm;
import de.flower.rmt.ui.markup.html.form.field.TextAreaPanel;
import de.flower.rmt.ui.markup.html.form.field.TextFieldPanel;
import de.flower.rmt.ui.page.venues.manager.geocode.GeocodePanel;
import de.flower.rmt.ui.page.venues.manager.map.VenueMapFormComponent;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
/**
* @author flowerrrr
*/
public class VenueEditPanel extends BasePanel {
@SpringBean
private IVenueManager venueManager;
@SpringBean
private ISecurityService securityService;
public VenueEditPanel(final IModel<Venue> model) {
super(model);
final EntityForm<Venue> form = new CancelableEntityForm<Venue>("form", model) {
@Override
protected void onSubmit(final AjaxRequestTarget target, final Form<Venue> form) {
venueManager.save(form.getModelObject());
AjaxEventSender.entityEvent(this, Venue.class);
onClose(target);
}
};
add(form);
form.add(new TextFieldPanel("name"));
final TextAreaPanel address;
form.add(address = new AddressTextAreaPanel("address") {
@Override
protected boolean isInstantValidationEnabled() {
// collides with clicking on the geocode button.
return false;
}
});
final VenueMapFormComponent latLng;
form.add(latLng = new VenueMapFormComponent("latLng", new PropertyModel<LatLng>(model, "latLng"), securityService.getUser().getClub().getLatLng()));
form.add(new GeocodePanel() {
@Override
protected String getAddress() {
return address.getFormComponent().getValue();
}
@Override
protected void onSelect(final AjaxRequestTarget target, final GeocodingResult result) {
// update marker in venue map and in address field
address.getFormComponent().setModelObject(result.getAddress());
latLng.setModelObject(result.getLatLng());
target.add(address);
target.add(latLng);
}
/**
* Search button is placed outside the geocode panel.
*/
@Override
protected MarkupContainer getGeocodeButtonParent() {
return address;
}
}.setVisible(false).setOutputMarkupPlaceholderTag(true));
}
}