Java tutorial
/* * Copyright 2007-2010 JadaSite. * This file is part of JadaSite. * JadaSite is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * JadaSite is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with JadaSite. If not, see <http://www.gnu.org/licenses/>. */ package com.jada.admin.customAttribute; import org.apache.commons.beanutils.PropertyUtils; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import org.apache.struts.util.MessageResources; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.persistence.Query; import javax.persistence.EntityManager; import com.jada.util.JSONEscapeObject; import com.jada.admin.AdminBean; import com.jada.admin.AdminLookupDispatchAction; import com.jada.dao.CustomAttributeGroupDAO; import com.jada.jpa.connection.JpaConnection; import com.jada.jpa.entity.CustomAttribute; import com.jada.jpa.entity.CustomAttributeDetail; import com.jada.jpa.entity.CustomAttributeGroup; import com.jada.jpa.entity.Site; import com.jada.util.Constants; import com.jada.util.Format; import com.jada.util.Utility; import fr.improve.struts.taglib.layout.util.FormUtils; import java.util.Date; import java.util.Iterator; import java.util.Map; import java.util.HashMap; import java.util.Vector; public class CustomAttributeGroupMaintAction extends AdminLookupDispatchAction { public ActionForward create(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; Site site = getAdminBean(request).getSite(); initSiteProfiles(form, site); CustomAttributeGroup customAttributeGroup = new CustomAttributeGroup(); PropertyUtils.copyProperties(form, customAttributeGroup); form.setMode("C"); FormUtils.setFormDisplayMode(request, form, FormUtils.CREATE_MODE); ActionForward actionForward = actionMapping.findForward("success"); return actionForward; } public ActionForward edit(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { Site site = getAdminBean(request).getSite(); CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; initSiteProfiles(form, site); String customAttribGroupId = request.getParameter("customAttribGroupId"); CustomAttributeGroup customAttributeGroup = new CustomAttributeGroup(); customAttributeGroup = CustomAttributeGroupDAO.load(site.getSiteId(), Format.getLong(customAttribGroupId)); form.setMode("U"); copyProperties(form, customAttributeGroup); FormUtils.setFormDisplayMode(request, form, FormUtils.EDIT_MODE); ActionForward actionForward = actionMapping.findForward("success"); return actionForward; } public ActionForward remove(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { Site site = getAdminBean(request).getSite(); EntityManager em = JpaConnection.getInstance().getCurrentEntityManager(); CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; try { CustomAttributeGroup customAttributeGroup = CustomAttributeGroupDAO.load(site.getSiteId(), Format.getLong(form.getCustomAttribGroupId())); em.remove(customAttributeGroup); em.getTransaction().commit(); } catch (Exception e) { if (Utility.isConstraintViolation(e)) { ActionMessages errors = new ActionMessages(); errors.add("error", new ActionMessage("error.remove.customAttributeGroup.constraint")); saveMessages(request, errors); return actionMapping.findForward("error"); } throw e; } ActionForward actionForward = actionMapping.findForward("removeSuccess"); return actionForward; } public ActionForward save(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { EntityManager em = JpaConnection.getInstance().getCurrentEntityManager(); boolean insertMode = false; CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; if (form.getMode().equals("C")) { insertMode = true; } AdminBean adminBean = getAdminBean(request); Site site = adminBean.getSite(); initSiteProfiles(form, site); CustomAttributeGroup customAttributeGroup = new CustomAttributeGroup(); if (!insertMode) { customAttributeGroup = CustomAttributeGroupDAO.load(site.getSiteId(), Format.getLong(form.getCustomAttribGroupId())); } ActionMessages errors = validate(form, site.getSiteId()); if (errors.size() != 0) { saveMessages(request, errors); return mapping.findForward("error"); } if (insertMode) { customAttributeGroup.setRecCreateBy(adminBean.getUser().getUserId()); customAttributeGroup.setRecCreateDatetime(new Date(System.currentTimeMillis())); } customAttributeGroup.setCustomAttribGroupName(form.getCustomAttribGroupName()); customAttributeGroup.setSite(site); customAttributeGroup.setRecUpdateBy(adminBean.getUser().getUserId()); customAttributeGroup.setRecUpdateDatetime(new Date(System.currentTimeMillis())); if (insertMode) { em.persist(customAttributeGroup); } else { // em.update(customAttributeGroup); } form.setMode("U"); form.setCustomAttribGroupId(customAttributeGroup.getCustomAttribGroupId().toString()); FormUtils.setFormDisplayMode(request, form, FormUtils.EDIT_MODE); return mapping.findForward("success"); } private String getJSONCustomAttributeDetails(CustomAttributeGroup customAttributeGroup) throws Exception { JSONEscapeObject jsonResult = new JSONEscapeObject(); jsonResult.put("status", Constants.WEBSERVICE_STATUS_SUCCESS); jsonResult.put("customAttributeGroupId", customAttributeGroup.getCustomAttribGroupId()); jsonResult.put("customAttributeGroupName", customAttributeGroup.getCustomAttribGroupName()); Vector<JSONEscapeObject> vector = new Vector<JSONEscapeObject>(); Iterator<?> iterator = customAttributeGroup.getCustomAttributeDetails().iterator(); while (iterator.hasNext()) { CustomAttributeDetail customAttributeDetail = (CustomAttributeDetail) iterator.next(); JSONEscapeObject detail = new JSONEscapeObject(); detail.put("customAttribDetailId", customAttributeDetail.getCustomAttribDetailId()); detail.put("seqNum", customAttributeDetail.getSeqNum().toString()); detail.put("customAttribName", customAttributeDetail.getCustomAttribute().getCustomAttribName()); vector.add(detail); } jsonResult.put("customAttributeDetails", vector); return jsonResult.toHtmlString(); } public ActionForward getCustomAttributeDetails(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; AdminBean adminBean = getAdminBean(request); Site site = adminBean.getSite(); Long customAttribGroupId = Format.getLong(form.getCustomAttribGroupId()); CustomAttributeGroup customAttributeGroup = CustomAttributeGroupDAO.load(site.getSiteId(), customAttribGroupId); streamWebService(response, getJSONCustomAttributeDetails(customAttributeGroup)); return null; } public ActionForward removeCustomAttributeDetails(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { EntityManager em = JpaConnection.getInstance().getCurrentEntityManager(); CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; AdminBean adminBean = getAdminBean(request); Site site = adminBean.getSite(); JSONEscapeObject jsonResult = new JSONEscapeObject(); jsonResult.put("status", Constants.WEBSERVICE_STATUS_SUCCESS); Long customAttribGroupId = Format.getLong(form.getCustomAttribGroupId()); CustomAttributeGroup customAttributeGroup = CustomAttributeGroupDAO.load(site.getSiteId(), customAttribGroupId); String customAttribDetailIds[] = form.getCustomAttribDetailIds(); if (customAttribDetailIds != null) { for (int i = 0; i < customAttribDetailIds.length; i++) { CustomAttributeDetail customAttributeDetail = (CustomAttributeDetail) em .find(CustomAttributeDetail.class, Format.getLong(customAttribDetailIds[i])); if (customAttributeDetail.getCustomAttribute() .getCustomAttribTypeCode() == Constants.CUSTOM_ATTRIBUTE_TYPE_SKU_MAKEUP) { String sql = "select count(*) " + "from ItemAttributeDetail itemAttributeDetail " + "where itemAttributeDetail.customAttributeDetail = :customAttributeDetail " + "and itemAttributeDetail.item.itemTypeCd = :itemTypeCd"; Query query = em.createQuery(sql); query.setParameter("customAttributeDetail", customAttributeDetail); query.setParameter("itemTypeCd", Constants.ITEM_TYPE_SKU); Long count = (Long) query.getSingleResult(); if (count.intValue() > 0) { jsonResult.put("status", Constants.WEBSERVICE_STATUS_FAILED); jsonResult.put("reason", Constants.WEBSERVICE_REASON_INUSE); streamWebService(response, jsonResult.toHtmlString()); return null; } } String sql = "delete " + "from ItemAttributeDetail itemAttributeDetail " + "where itemAttributeDetail.customAttributeDetail = :customAttributeDetail "; Query query = em.createQuery(sql); query.setParameter("customAttributeDetail", customAttributeDetail); query.executeUpdate(); customAttributeGroup.getCustomAttributeDetails().remove(customAttributeDetail); em.remove(customAttributeDetail); } } streamWebService(response, jsonResult.toHtmlString()); return null; } public ActionForward addCustomAttributeDetail(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { EntityManager em = JpaConnection.getInstance().getCurrentEntityManager(); CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; AdminBean adminBean = getAdminBean(request); JSONEscapeObject jsonResult = new JSONEscapeObject(); jsonResult.put("status", Constants.WEBSERVICE_STATUS_SUCCESS); Long customAttribId = Format.getLong(form.getCustomAttribId()); CustomAttribute customAttribute = (CustomAttribute) em.find(CustomAttribute.class, customAttribId); Long customAttribGroupId = Format.getLong(form.getCustomAttribGroupId()); CustomAttributeGroup customAttributeGroup = (CustomAttributeGroup) em.find(CustomAttributeGroup.class, customAttribGroupId); int seqNum = 0; Iterator<?> iterator = customAttributeGroup.getCustomAttributeDetails().iterator(); boolean found = false; while (iterator.hasNext()) { CustomAttributeDetail customAttributeDetail = (CustomAttributeDetail) iterator.next(); if (customAttributeDetail.getCustomAttribute().getCustomAttribId() .equals(customAttribute.getCustomAttribId())) { found = true; } if (customAttributeDetail.getSeqNum().intValue() >= seqNum) { seqNum = customAttributeDetail.getSeqNum() + 1; } } if (!found) { CustomAttributeDetail customAttributeDetail = new CustomAttributeDetail(); customAttributeDetail.setCustomAttribute(customAttribute); customAttributeDetail.setSeqNum(seqNum); customAttributeDetail.setRecUpdateBy(adminBean.getUser().getUserId()); customAttributeDetail.setRecUpdateDatetime(new Date(System.currentTimeMillis())); customAttributeDetail.setRecCreateBy(adminBean.getUser().getUserId()); customAttributeDetail.setRecCreateDatetime(new Date(System.currentTimeMillis())); customAttributeGroup.getCustomAttributeDetails().add(customAttributeDetail); em.persist(customAttributeDetail); } streamWebService(response, jsonResult.toHtmlString()); return null; } public ActionForward resequence(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Throwable { EntityManager em = JpaConnection.getInstance().getCurrentEntityManager(); CustomAttributeGroupMaintActionForm form = (CustomAttributeGroupMaintActionForm) actionForm; JSONEscapeObject jsonResult = new JSONEscapeObject(); jsonResult.put("status", Constants.WEBSERVICE_STATUS_SUCCESS); MessageResources resources = this.getResources(request); Vector<JSONEscapeObject> errors = new Vector<JSONEscapeObject>(); String seqNums[] = form.getSeqNums(); if (seqNums != null) { String customAttribDetailIds[] = form.getCustomAttribDetailIds(); for (int i = 0; i < seqNums.length; i++) { if (!Format.isInt(seqNums[i])) { JSONEscapeObject object = new JSONEscapeObject(); object.put("customAttribDetailId", customAttribDetailIds[i]); object.put("error", resources.getMessage("error.int.invalid")); errors.add(object); } } if (errors.size() > 0) { jsonResult.put("validations", errors); streamWebService(response, jsonResult.toHtmlString()); return null; } for (int i = 0; i < customAttribDetailIds.length; i++) { CustomAttributeDetail customAttributeDetail = (CustomAttributeDetail) em .find(CustomAttributeDetail.class, Format.getLong(customAttribDetailIds[i])); customAttributeDetail.setSeqNum(Format.getInt(seqNums[i])); em.persist(customAttributeDetail); } } streamWebService(response, jsonResult.toHtmlString()); return null; } private void copyProperties(CustomAttributeGroupMaintActionForm form, CustomAttributeGroup customAttributeGroup) { form.setCustomAttribGroupId(Format.getLong(customAttributeGroup.getCustomAttribGroupId())); form.setCustomAttribGroupName(customAttributeGroup.getCustomAttribGroupName()); } public ActionMessages validate(CustomAttributeGroupMaintActionForm form, String siteId) throws Exception { ActionMessages errors = new ActionMessages(); boolean insertMode = false; if (form.getMode().equals("C")) { insertMode = true; } if (Format.isNullOrEmpty(form.getCustomAttribGroupName())) { errors.add("customAttribName", new ActionMessage("error.string.required")); } EntityManager em = JpaConnection.getInstance().getCurrentEntityManager(); String sql = "from CustomAttributeGroup " + "where siteId = :siteId " + "and customAttribGroupName = :customAttribGroupName "; if (!insertMode) { sql += "and customAttribGroupId != :customAttribGroupId"; } Query query = em.createQuery(sql); query.setParameter("siteId", siteId); query.setParameter("customAttribGroupName", form.getCustomAttribGroupName()); if (!insertMode) { query.setParameter("customAttribGroupId", Long.valueOf(form.getCustomAttribGroupId())); } if (query.getResultList().size() > 0) { errors.add("customAttribGroupName", new ActionMessage("error.customAttributeGroup.exist")); } return errors; } protected java.util.Map<String, String> getKeyMethodMap() { Map<String, String> map = new HashMap<String, String>(); map.put("save", "save"); map.put("edit", "edit"); map.put("create", "create"); map.put("remove", "remove"); map.put("language", "language"); map.put("translate", "translate"); map.put("addCustomAttributeDetail", "addCustomAttributeDetail"); map.put("removeCustomAttributeDetails", "removeCustomAttributeDetails"); map.put("getCustomAttributeDetails", "getCustomAttributeDetails"); map.put("resequence", "resequence"); return map; } }