0,0 → 1,221 |
package ak.kickup.core.action; |
|
import java.util.List; |
import java.util.Collections; |
import java.util.ArrayList; |
|
import javax.servlet.http.HttpServletRequest; |
import javax.servlet.http.HttpServletResponse; |
|
import org.apache.struts.action.Action; |
import org.apache.struts.action.ActionMapping; |
import org.apache.struts.action.ActionForm; |
import org.apache.struts.action.DynaActionForm; |
import org.apache.struts.action.ActionForward; |
import org.apache.struts.action.ActionMessages; |
import org.apache.struts.action.ActionErrors; |
import org.apache.struts.action.ActionError; |
|
import ak.strutsx.RequestUtilsX; |
import ak.strutsx.ErrorHandlerX; |
import ak.backpath.BackPath; |
|
import ak.kickup.util.StringConverter; |
import ak.kickup.util.UserException; |
import ak.kickup.core.model.Event; |
import ak.kickup.core.model.EventManager; |
import ak.kickup.core.model.EventAct; |
import ak.kickup.core.model.EventApartment; |
import ak.kickup.core.model.Act; |
import ak.kickup.core.model.ActManager; |
import ak.kickup.core.model.Apartment; |
import ak.kickup.core.model.ApartmentManager; |
import ak.kickup.core.form.EventActBean; |
import ak.kickup.core.form.EventApartmentBean; |
|
public final class AdminEventAction |
extends Action |
implements ErrorHandlerX |
{ |
public void handleErrors(ActionMapping mapping, ActionForm form, |
HttpServletRequest request, HttpServletResponse response) |
throws Exception |
{ |
if("submit".equals(mapping.getParameter())) { |
initLists(request); // FIXME: if a list is changed between "edit" and "submit" then indicies are wrong |
} |
} |
|
public ActionForward execute(ActionMapping mapping, ActionForm form, |
HttpServletRequest request, HttpServletResponse response) |
throws Exception |
{ |
if("list".equals(mapping.getParameter())) { |
List list = new ArrayList(EventManager.getInstance().listEvents(false)); |
Collections.sort(list, EventManager.START_COMPARATOR); |
request.setAttribute("events", list); |
return mapping.findForward("default"); |
} |
else if("edit".equals(mapping.getParameter())) { |
DynaActionForm theForm = (DynaActionForm)form; |
Long eventId = StringConverter.parseLong(theForm.get("id")); |
Event event; |
List acts = new ArrayList(ActManager.getInstance().listActs()); |
List apartments = new ArrayList(ApartmentManager.getInstance().listApartments()); |
DynaActionForm showForm = (DynaActionForm)RequestUtilsX.populateActionForm( |
this, request, "EventEditForm"); |
|
if(eventId == null) { |
event = EventManager.getInstance().create(); |
showForm.set("enabled", Boolean.TRUE); |
} |
else { |
event = EventManager.getInstance().get(eventId); |
showForm.set("name", event.getName()); |
showForm.set("place", event.getPlace()); |
showForm.set("address", event.getAddress()); |
showForm.set("transport", event.getTransportDesc()); |
showForm.set("start", StringConverter.toDate(event.getStart())); |
showForm.set("stop", StringConverter.toDate(event.getStop())); |
showForm.set("lastreg", StringConverter.toDate(event.getLastRegister())); |
showForm.set("lastunreg", StringConverter.toDate(event.getLastUnregister())); |
showForm.set("price", StringConverter.toCurrency(event.getPrice())); |
showForm.set("account", event.getMoneyAccount()); |
showForm.set("enabled", event.getEnabled()); |
showForm.set("comment", event.getComment()); |
} |
|
// acts |
EventActBean[] a = new EventActBean[acts.size()]; |
Collections.sort(acts, ActManager.NAME_COMPARATOR); |
for(int i = 0; i < acts.size(); i++) { |
Act act = (Act)acts.get(i); |
a[i] = new EventActBean(act, (event == null) ? null : event.getAct(act.getId())); |
} |
showForm.set("acts", a); |
|
// apartments |
EventApartmentBean[] ap = new EventApartmentBean[apartments.size()]; |
Collections.sort(apartments, ApartmentManager.NAME_COMPARATOR); |
for(int i = 0; i < apartments.size(); i++) { |
Apartment apartment = (Apartment)apartments.get(i); |
ap[i] = new EventApartmentBean(apartment, (event == null) |
? null : event.getApartment(apartment.getId())); |
} |
showForm.set("apartments", ap); |
|
initLists(request); |
return mapping.findForward("default"); |
} |
else if("delete".equals(mapping.getParameter())) { |
DynaActionForm theForm = (DynaActionForm)form; |
Long eventId = StringConverter.parseLong(theForm.get("id")); |
Event event = EventManager.getInstance().get(eventId); |
|
EventManager.getInstance().delete(event); |
response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl()); |
return null; |
} |
else if("submit".equals(mapping.getParameter())) { |
DynaActionForm theForm = (DynaActionForm)form; |
Long eventId = StringConverter.parseLong(theForm.get("id")); |
Event event; |
|
if(eventId == null) { |
event = EventManager.getInstance().create(); |
} |
else { |
event = EventManager.getInstance().get(eventId); |
} |
|
// acts |
EventActBean[] acts = (EventActBean[])theForm.get("acts"); |
for(int i = 0; i < acts.length; i++) { |
// FIXME: validate act id |
|
// get bean |
Long actId = StringConverter.parseLong(acts[i].getActId()); |
Act act = ActManager.getInstance().get(actId); |
EventAct eventAct = event.getAct(actId); |
|
if(acts[i].getSelected() == null || !acts[i].getSelected().booleanValue()) { |
if(eventAct != null) event.removeAct(eventAct); |
} |
else { |
if(eventAct == null) { |
eventAct = EventManager.getInstance().createAct(); |
eventAct.setEvent(event); |
eventAct.setAct(act); |
event.addAct(eventAct); |
} |
eventAct.setComment(acts[i].getComment()); |
} |
} |
|
// apartments |
EventApartmentBean[] apartments = (EventApartmentBean[])theForm.get("apartments"); |
for(int i = 0; i < apartments.length; i++) { |
// FIXME: validate apartment id, distance |
|
// get bean |
Long apartmentId = StringConverter.parseLong(apartments[i].getApartmentId()); |
Apartment apartment = ApartmentManager.getInstance().get(apartmentId); |
EventApartment eventApartment = event.getApartment(apartmentId); |
|
if(apartments[i].getSelected() == null || !apartments[i].getSelected().booleanValue()) { |
if(eventApartment != null) event.removeApartment(eventApartment); |
} |
else { |
if(eventApartment == null) { |
eventApartment = EventManager.getInstance().createApartment(); |
eventApartment.setEvent(event); |
eventApartment.setApartment(apartment); |
event.addApartment(eventApartment); |
} |
eventApartment.setDistance(StringConverter.parseNumber(apartments[i].getDistance())); |
eventApartment.setComment(apartments[i].getComment()); |
} |
} |
|
// name |
String name = (String)theForm.get("name"); |
if(EventManager.getInstance().nameExists(event, name)) { |
throw new UserException("ak.kickup.core.event.name.nonunique"); |
} |
event.setName(name); |
|
// others |
event.setPlace((String)theForm.get("place")); |
event.setAddress((String)theForm.get("address")); |
event.setTransportDesc((String)theForm.get("transport")); |
event.setStart(StringConverter.parseDate(theForm.get("start"))); |
event.setStop(StringConverter.parseDate(theForm.get("stop"))); |
event.setLastRegister(StringConverter.parseDate(theForm.get("lastreg"))); |
event.setLastUnregister(StringConverter.parseDate(theForm.get("lastunreg"))); |
event.setPrice(StringConverter.parseCurrency(theForm.get("price"))); |
event.setMoneyAccount((String)theForm.get("account")); |
event.setEnabled((Boolean)theForm.get("enabled")); |
event.setComment((String)theForm.get("comment")); |
|
// save |
EventManager.getInstance().save(event); |
response.sendRedirect(BackPath.findBackPath(request).getBackwardUrl()); |
return null; |
} |
else { |
throw new Exception("unknown mapping parameter"); |
} |
} |
|
private void initLists(HttpServletRequest request) |
throws Exception |
{ |
List acts = new ArrayList(ActManager.getInstance().listActs()); |
List apartments = new ArrayList(ApartmentManager.getInstance().listApartments()); |
|
Collections.sort(acts, ActManager.NAME_COMPARATOR); |
request.setAttribute("actList", new ObjectList(acts)); |
Collections.sort(apartments, ApartmentManager.NAME_COMPARATOR); |
request.setAttribute("apartmentList", new ObjectList(apartments)); |
} |
} |