package com.vst.webapp.action;
import com.vst.model.CategoryParameter;
import com.vst.model.DefectCategory;
import com.vst.model.Parameter;
import com.vst.service.*;
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 DefectCategoryFormController extends BaseFormController {
private DefectCategoryManager defectCategoryManager = null;
private ParameterManager parameterManager = null;
private DefectTypeManager defectTypeManager = null;
private DefectVarityManager defectVarityManager = null;
private ConstructionTypeManager constructionTypeManager = null;
private DefectZoneManager defectZoneManager = null;
private DefectCategoryNameManager defectCategoryNameManager = null;
public void setDefectCategoryNameManager(DefectCategoryNameManager defectCategoryNameManager) {
this.defectCategoryNameManager = defectCategoryNameManager;
}
public void setConstructionTypeManager(ConstructionTypeManager constructionTypeManager) {
this.constructionTypeManager = constructionTypeManager;
}
public void setDefectZoneManager(DefectZoneManager defectZoneManager) {
this.defectZoneManager = defectZoneManager;
}
public void setDefectVarityManager(DefectVarityManager defectVarityManager) {
this.defectVarityManager = defectVarityManager;
}
public void setDefectTypeManager(DefectTypeManager defectTypeManager) {
this.defectTypeManager = defectTypeManager;
}
public void setParameterManager(ParameterManager parameterManager) {
this.parameterManager = parameterManager;
}
public void setDefectCategoryManager(DefectCategoryManager defectCategoryManager) {
this.defectCategoryManager = defectCategoryManager;
}
public DefectCategoryFormController() {
setCommandName("defectCategory");
setCommandClass(DefectCategory.class);
}
protected Object formBackingObject(HttpServletRequest request)
throws Exception {
String defectCategoryId = request.getParameter("defectCategoryId");
request.setAttribute("defectCategoryNameList", defectCategoryNameManager.getDefectCategoryNames(null));
request.setAttribute("constructionTypeList", constructionTypeManager.getConstructionTypes(null));
request.setAttribute("defectCategoryNameList", defectCategoryNameManager.getDefectCategoryNames(null));
if (request.getAttribute("defectVarityList") == null && StringUtils.isEmpty(defectCategoryId)) {
request.setAttribute("defectVarityList", new ArrayList());
request.setAttribute("emptyVarityList", "true");
}
if (request.getAttribute("defectTypeList") == null && StringUtils.isEmpty(defectCategoryId)) {
request.setAttribute("defectTypeList", new ArrayList());
request.setAttribute("emptyDefectTypeList", "true");
}
if (request.getAttribute("defectZoneList") == null && StringUtils.isEmpty(defectCategoryId)) {
request.setAttribute("defectZoneList", new ArrayList());
request.setAttribute("emptyDefectZoneList", "true");
}
if (!isFormSubmission(request)) {
DefectCategory defectCategory = null;
if (!StringUtils.isEmpty(defectCategoryId)) {
defectCategory = defectCategoryManager.getDefectCategory(defectCategoryId);
request.setAttribute("defectTypeList", defectTypeManager.getDefectTypesByConstructionTypeId(defectCategory.getConstructionType().getConstructionTypeId()));
request.setAttribute("defectVarityList", defectVarityManager.getDefectVaritiesByType(defectCategory.getDefectType().getDefectTypeId().toString()));
request.setAttribute("defectZoneList", defectZoneManager.getDefectZonesByConstructionType(defectCategory.getConstructionType().getConstructionTypeId().toString()));
//System.out.println("defectZonesssssssssss");
// defectCategoryManager.evict(defectCategory);
} else {
defectCategory = new DefectCategory();
}
defectCategoryManager.makeNotNull(defectCategory);
if (request.getParameter("edited") != null) {
request.setAttribute("addition", "?edited=1");
defectCategory.setEdited(true);
}
defectCategory.setDocLocation(request.getParameter("docLocation"));
return defectCategory;
}
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...");
}
DefectCategory defectCategory = (DefectCategory) command;
boolean isNew = (defectCategory.getDefectCategoryId() == null);
Locale locale = request.getLocale();
if (request.getParameter("delete") != null) {
defectCategoryManager.removeDefectCategory(defectCategory.getDefectCategoryId().toString());
saveMessage(request, getText("defectCategory.deleted", locale));
} else {
Integer varityId = defectCategory.getDefectVarity().getVarityId();
if (varityId.equals(new Integer(-1))) {
defectCategory.setDefectVarity(null);
} else {
defectCategory.setDefectVarity(defectVarityManager.getDefectVarity(varityId.toString()));
}
Integer defectZoneId = defectCategory.getDefectZone().getDefectZoneId();
if (!defectZoneId.equals(new Integer(-1))) {
defectCategory.setDefectZone(defectZoneManager.getDefectZone(defectZoneId.toString()));
}
Integer constructionTypeId = defectCategory.getConstructionType().getConstructionTypeId();
if (!constructionTypeId.equals(new Integer(-1))) {
defectCategory.setConstructionType(constructionTypeManager.getConstructionType(constructionTypeId.toString()));
}
Integer defectCategoryNameId = defectCategory.getDefectCategoryName().getDefectCategoryNameId();
if (!defectCategoryNameId.equals(new Integer(-1))) {
defectCategory.setDefectCategoryName(defectCategoryNameManager.getDefectCategoryName(defectCategoryNameId.toString()));
}
List categoryParameters = new ArrayList();
List categoryParametersFromForm = defectCategory.getCategoryParameters();
for (int i = 0; i < categoryParametersFromForm.size(); i++) {
CategoryParameter categoryParameter = (CategoryParameter) categoryParametersFromForm.get(i);
categoryParameter.setParameter(parameterManager.getParameter(categoryParameter.getParameter().getParameterId().toString()));
categoryParameters.add(categoryParameter);
}
defectCategory.setCategoryParameters(categoryParameters);
defectCategoryManager.saveDefectCategory(defectCategory);
String key = (isNew) ? "defectCategory.added" : "defectCategory.updated";
saveMessage(request, getText(key, locale));
if (defectCategory.isEdited()) {
return new ModelAndView("redirect:updating.html?id=" + defectCategory.getDefectCategoryId() + "&fieldId=" + request.getParameter("fieldId"));
}
}
return new ModelAndView("redirect:" + defectCategory.getDocLocation());
}
public ModelAndView processFormSubmission(HttpServletRequest request,
HttpServletResponse response,
Object command,
BindException errors)
throws Exception {
DefectCategory defectCategory = (DefectCategory) command;
request.setAttribute("defectZoneList", new ArrayList());
request.setAttribute("defectVarityList", new ArrayList());
if (!defectCategory.getDefectType().getDefectTypeId().equals(new Integer(-1))) {
// if (defectCategory.getConstructionType().getConstructionTypeId().equals(new Integer(-1)))
// {
//choosing defect varities by one parameter
request.setAttribute("defectVarityList", defectVarityManager.getDefectVaritiesByType(defectCategory.getDefectType().getDefectTypeId().toString()));
// }
// else{
// //choosing defect varities by two parameters
// request.setAttribute("defectVarityList", defectVarityManager.getDefectVaritiesByTypeAndConstruction(defectCategory.getDefectType().getDefectTypeId().toString(),defectCategory.getConstructionType().getConstructionTypeId().toString()));
// }
}
if (!defectCategory.getConstructionType().getConstructionTypeId().equals(new Integer(-1))) {
request.setAttribute("defectZoneList", defectZoneManager.getDefectZonesByConstructionType(defectCategory.getConstructionType().getConstructionTypeId().toString()));
request.setAttribute("defectTypeList", defectTypeManager.getDefectTypesByConstructionTypeId(defectCategory.getConstructionType().getConstructionTypeId()));
}
if (request.getParameter("defectTypeSelect") != null || request.getParameter("constructionTypeSelect") != null) {
return new ModelAndView("defectCategoryForm", "defectCategory", defectCategory);
}
if (request.getParameter("defectVaritySelect") != null) {
List parameterList = parameterManager.getParametersByVarity(defectCategory.getDefectVarity().getVarityId().toString());
for (int i = 0; i < parameterList.size(); i++) {
Parameter parameter = (Parameter) parameterList.get(i);
CategoryParameter categoryParameter = new CategoryParameter();
categoryParameter.setParameter(parameter);
categoryParameter.setParameterValue(0.0f);
defectCategory.getCategoryParameters().add(categoryParameter);
}
return new ModelAndView("defectCategoryForm", "defectCategory", defectCategory);
}
return super.processFormSubmission(request,
response,
command,
errors);
}
}