package net.techreadiness.customer.action.task.org.part; import static net.techreadiness.security.CorePermissionCodes.CORE_CUSTOMER_ORG_PART_UPDATE; import java.util.Map; import java.util.Map.Entry; import javax.inject.Inject; import net.techreadiness.annotation.CoreSecured; import net.techreadiness.service.OrgPartService; import net.techreadiness.service.exception.ValidationServiceException; import net.techreadiness.ui.action.task.org.OrgTaskFlowAction; import net.techreadiness.util.MapUtils; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.Preparable; import com.opensymphony.xwork2.util.Element; @Results({ @Result(name = Action.SUCCESS, type = "redirectAction", params = { "namespace", "/task/org/part", "actionName", "edit" }), @Result(name = "invalid", type = "lastAction", params = { "actionName", "edit" }) }) public class SaveAction extends OrgTaskFlowAction implements Preparable { private static final long serialVersionUID = 1L; @Element(String.class) private Map<String, Map<String, String>> participations; @Inject OrgPartService orgPartService; @Override public void prepare() throws Exception { participations = MapUtils.makeComputingMap(); } @Override @CoreSecured({ CORE_CUSTOMER_ORG_PART_UPDATE }) public String execute() { for (Entry<String, Map<String, String>> entry : participations.entrySet()) { Long orgId = Long.valueOf(entry.getKey().toString()); Map<String, String> values = entry.getValue(); String participation = values.get("participation"); Boolean assigned = Boolean.valueOf(participation); values.remove("participation");// not an ext attribute, just a flag if (orgId != null) { try { if (assigned) { orgPartService.createIfNotExists(getServiceContext(), orgId, values); } else { orgPartService.deleteIfExists(getServiceContext(), orgId); } } catch (ValidationServiceException e) { addFieldError("participations['" + orgId + "'].participation", e.getFaultInfo().getMessage()); } } values.put("participation", participation); } if (hasErrors()) { return "invalid"; } return SUCCESS; } public Map<String, Map<String, String>> getParticipations() { return participations; } public void setParticipations(Map<String, Map<String, String>> participations) { this.participations = participations; } }