package com.vst.webapp.action;
import com.vst.model.ConstructionType;
import com.vst.model.DefectType;
import com.vst.model.DefectVarity;
import com.vst.model.Material;
import com.vst.service.ConstructionTypeManager;
import com.vst.service.DefectTypeManager;
import com.vst.service.DefectVarityManager;
import com.vst.service.MaterialManager;
import org.apache.commons.lang.StringUtils;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class DefectTypeFormController extends BaseFormController {
private DefectTypeManager defectTypeManager = null;
private DefectVarityManager defectVarityManager = null;
private MaterialManager materialManager = null;
private ConstructionTypeManager constructionTypeManager = null;
public void setConstructionTypeManager(ConstructionTypeManager constructionTypeManager) {
this.constructionTypeManager = constructionTypeManager;
}
public void setDefectVarityManager(DefectVarityManager defectVarityManager) {
this.defectVarityManager = defectVarityManager;
}
public void setMaterialManager(MaterialManager materialManager) {
this.materialManager = materialManager;
}
public void setDefectTypeManager(DefectTypeManager defectTypeManager) {
this.defectTypeManager = defectTypeManager;
}
public DefectTypeFormController() {
setCommandName("defectType");
setCommandClass(DefectType.class);
}
protected Object formBackingObject(HttpServletRequest request)
throws Exception {
request.setAttribute("varityList", defectVarityManager.getDefectVaritys(null));
request.setAttribute("materialList", materialManager.getMaterials(null));
request.setAttribute("constructionTypeList", constructionTypeManager.getConstructionTypes(null));
if (!isFormSubmission(request)) {
String defectTypeId = request.getParameter("defectTypeId");
DefectType defectType = null;
if (!StringUtils.isEmpty(defectTypeId)) {
defectType = defectTypeManager.getDefectType(defectTypeId);
defectTypeManager.evict(defectType);
} else {
defectType = new DefectType();
}
if (request.getParameter("edited") != null) {
request.setAttribute("addition", "?edited=1");
defectType.setEdited(true);
}
defectType.setDocLocation(request.getParameter("docLocation"));
return defectType;
}
return super.formBackingObject(request);
}
public ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command,
BindException errors)
throws Exception {
if (log.isDebugEnabled()) {
log.debug("entering 'onSubmit' method...");
}
DefectType defectType = (DefectType) command;
boolean isNew = (defectType.getDefectTypeId() == null);
Locale locale = request.getLocale();
if (request.getParameter("delete") != null) {
defectTypeManager.removeDefectType(defectType.getDefectTypeId().toString());
saveMessage(request, getText("defectType.deleted", locale));
} else {
List defectVarities = new ArrayList();
List defectVaritiesFromForm = defectType.getVarities();
for (int i = 0; i < defectVaritiesFromForm.size(); i++) {
DefectVarity defectVarity = (DefectVarity) defectVaritiesFromForm.get(i);
defectTypeManager.evict(defectVarity);
defectVarities.add(defectVarityManager.getDefectVarity(defectVarity.getVarityId().toString()));
}
defectType.setVarities(defectVarities);
List defectMaterials = new ArrayList();
List defectMaterialsFromForm = defectType.getMaterials();
for (int i = 0; i < defectMaterialsFromForm.size(); i++) {
Material defectMaterial = (Material) defectMaterialsFromForm.get(i);
defectTypeManager.evict(defectMaterial);
defectMaterials.add(materialManager.getMaterial(defectMaterial.getMaterialId().toString()));
}
defectType.setMaterials(defectMaterials);
defectTypeManager.saveDefectType(defectType);
String key = (isNew) ? "defectType.added" : "defectType.updated";
saveMessage(request, getText(key, locale));
if (defectType.isEdited()) {
return new ModelAndView("redirect:updating.html?id=" + defectType.getDefectTypeId() + "&fieldId=" + request.getParameter("fieldId"));
}
}
return new ModelAndView("redirect:" + defectType.getDocLocation());
}
public ModelAndView processFormSubmission(HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors)
throws Exception {
DefectType defectType = (DefectType) command;
if (request.getParameter("addMaterial") != null) {
defectType.getMaterials().add(new Material());
return new ModelAndView("defectTypeForm", "defectType", defectType);
}
if (request.getParameter("deleteMaterial") != null) {
defectType.getMaterials().remove(defectType.getMaterialNumber());
return new ModelAndView("defectTypeForm", "defectType", defectType);
}
if (request.getParameter("addConstructionType") != null) {
defectType.getConstructionTypes().add(new ConstructionType());
return new ModelAndView("defectTypeForm", "defectType", defectType);
}
if (request.getParameter("deleteConstructionType") != null) {
defectType.getConstructionTypes().remove(defectType.getConstructionTypeNumber());
return new ModelAndView("defectTypeForm", "defectType", defectType);
}
if (request.getParameter("addVarity") != null) {
defectType.getVarities().add(new DefectVarity());
return new ModelAndView("defectTypeForm", "defectType", defectType);
}
if (request.getParameter("deleteVarity") != null) {
defectType.getVarities().remove(defectType.getVarityNumber());
return new ModelAndView("defectTypeForm", "defectType", defectType);
}
return super.processFormSubmission(request,
response,
command,
errors);
}
}