| /******************************************************************************* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| *******************************************************************************/ |
| |
| package org.apache.ofbiz.party.contact; |
| |
| import java.io.UnsupportedEncodingException; |
| import java.net.URLEncoder; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.LinkedList; |
| import java.util.List; |
| import java.util.Map; |
| |
| import javax.servlet.ServletRequest; |
| |
| import org.apache.ofbiz.base.util.Assert; |
| import org.apache.ofbiz.base.util.Debug; |
| import org.apache.ofbiz.base.util.UtilMisc; |
| import org.apache.ofbiz.base.util.UtilValidate; |
| import org.apache.ofbiz.entity.Delegator; |
| import org.apache.ofbiz.entity.GenericEntityException; |
| import org.apache.ofbiz.entity.GenericValue; |
| import org.apache.ofbiz.entity.condition.EntityCondition; |
| import org.apache.ofbiz.entity.util.EntityQuery; |
| import org.apache.ofbiz.entity.util.EntityUtil; |
| import org.apache.ofbiz.entity.util.EntityUtilProperties; |
| |
| /** |
| * Worker methods for Contact Mechanisms |
| */ |
| public class ContactMechWorker { |
| |
| public static final String module = ContactMechWorker.class.getName(); |
| |
| private ContactMechWorker() {} |
| |
| public static List<Map<String, Object>> getPartyContactMechValueMaps(Delegator delegator, String partyId, boolean showOld) { |
| return getPartyContactMechValueMaps(delegator, partyId, showOld, null); |
| } |
| |
| public static List<Map<String, Object>> getPartyContactMechValueMaps(Delegator delegator, String partyId, boolean showOld, String contactMechTypeId) { |
| List<Map<String, Object>> partyContactMechValueMaps = new LinkedList<Map<String,Object>>(); |
| |
| List<GenericValue> allPartyContactMechs = null; |
| |
| try { |
| List<GenericValue> tempCol = EntityQuery.use(delegator).from("PartyContactMech").where("partyId", partyId).queryList(); |
| if (contactMechTypeId != null) { |
| List<GenericValue> tempColTemp = new LinkedList<GenericValue>(); |
| for (GenericValue partyContactMech: tempCol) { |
| GenericValue contactMech = delegator.getRelatedOne("ContactMech", partyContactMech, false); |
| if (contactMech != null && contactMechTypeId.equals(contactMech.getString("contactMechTypeId"))) { |
| tempColTemp.add(partyContactMech); |
| } |
| |
| } |
| tempCol = tempColTemp; |
| } |
| if (!showOld) tempCol = EntityUtil.filterByDate(tempCol, true); |
| allPartyContactMechs = tempCol; |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| if (allPartyContactMechs == null) return partyContactMechValueMaps; |
| |
| for (GenericValue partyContactMech: allPartyContactMechs) { |
| GenericValue contactMech = null; |
| |
| try { |
| contactMech = partyContactMech.getRelatedOne("ContactMech", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (contactMech != null) { |
| Map<String, Object> partyContactMechValueMap = new HashMap<String, Object>(); |
| |
| partyContactMechValueMaps.add(partyContactMechValueMap); |
| partyContactMechValueMap.put("contactMech", contactMech); |
| partyContactMechValueMap.put("partyContactMech", partyContactMech); |
| |
| try { |
| partyContactMechValueMap.put("contactMechType", contactMech.getRelatedOne("ContactMechType", true)); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| List<GenericValue> partyContactMechPurposes = partyContactMech.getRelated("PartyContactMechPurpose", null, null, false); |
| |
| if (!showOld) partyContactMechPurposes = EntityUtil.filterByDate(partyContactMechPurposes, true); |
| partyContactMechValueMap.put("partyContactMechPurposes", partyContactMechPurposes); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| if ("POSTAL_ADDRESS".equals(contactMech.getString("contactMechTypeId"))) { |
| partyContactMechValueMap.put("postalAddress", contactMech.getRelatedOne("PostalAddress", false)); |
| } else if ("TELECOM_NUMBER".equals(contactMech.getString("contactMechTypeId"))) { |
| partyContactMechValueMap.put("telecomNumber", contactMech.getRelatedOne("TelecomNumber", false)); |
| } |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| } |
| |
| return partyContactMechValueMaps; |
| } |
| |
| public static List<Map<String, Object>> getFacilityContactMechValueMaps(Delegator delegator, String facilityId, boolean showOld, String contactMechTypeId) { |
| List<Map<String, Object>> facilityContactMechValueMaps = new LinkedList<Map<String,Object>>(); |
| |
| List<GenericValue> allFacilityContactMechs = null; |
| |
| try { |
| List<GenericValue> tempCol = EntityQuery.use(delegator).from("FacilityContactMech").where("facilityId", facilityId).queryList(); |
| if (contactMechTypeId != null) { |
| List<GenericValue> tempColTemp = new LinkedList<GenericValue>(); |
| for (GenericValue partyContactMech: tempCol) { |
| GenericValue contactMech = delegator.getRelatedOne("ContactMech", partyContactMech, false); |
| if (contactMech != null && contactMechTypeId.equals(contactMech.getString("contactMechTypeId"))) { |
| tempColTemp.add(partyContactMech); |
| } |
| |
| } |
| tempCol = tempColTemp; |
| } |
| if (!showOld) tempCol = EntityUtil.filterByDate(tempCol, true); |
| allFacilityContactMechs = tempCol; |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| if (allFacilityContactMechs == null) return facilityContactMechValueMaps; |
| |
| for (GenericValue facilityContactMech: allFacilityContactMechs) { |
| GenericValue contactMech = null; |
| |
| try { |
| contactMech = facilityContactMech.getRelatedOne("ContactMech", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (contactMech != null) { |
| Map<String, Object> facilityContactMechValueMap = new HashMap<String, Object>(); |
| |
| facilityContactMechValueMaps.add(facilityContactMechValueMap); |
| facilityContactMechValueMap.put("contactMech", contactMech); |
| facilityContactMechValueMap.put("facilityContactMech", facilityContactMech); |
| |
| try { |
| facilityContactMechValueMap.put("contactMechType", contactMech.getRelatedOne("ContactMechType", true)); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| List<GenericValue> facilityContactMechPurposes = facilityContactMech.getRelated("FacilityContactMechPurpose", null, null, false); |
| |
| if (!showOld) facilityContactMechPurposes = EntityUtil.filterByDate(facilityContactMechPurposes, true); |
| facilityContactMechValueMap.put("facilityContactMechPurposes", facilityContactMechPurposes); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| if ("POSTAL_ADDRESS".equals(contactMech.getString("contactMechTypeId"))) { |
| facilityContactMechValueMap.put("postalAddress", contactMech.getRelatedOne("PostalAddress", false)); |
| } else if ("TELECOM_NUMBER".equals(contactMech.getString("contactMechTypeId"))) { |
| facilityContactMechValueMap.put("telecomNumber", contactMech.getRelatedOne("TelecomNumber", false)); |
| } |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| } |
| |
| return facilityContactMechValueMaps; |
| } |
| |
| |
| public static List<Map<String, GenericValue>> getOrderContactMechValueMaps(Delegator delegator, String orderId) { |
| List<Map<String, GenericValue>> orderContactMechValueMaps = new LinkedList<Map<String,GenericValue>>(); |
| |
| List<GenericValue> allOrderContactMechs = null; |
| |
| try { |
| allOrderContactMechs = EntityQuery.use(delegator).from("OrderContactMech") |
| .where("orderId", orderId) |
| .orderBy("contactMechPurposeTypeId") |
| .queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| if (allOrderContactMechs == null) return orderContactMechValueMaps; |
| |
| for (GenericValue orderContactMech: allOrderContactMechs) { |
| GenericValue contactMech = null; |
| |
| try { |
| contactMech = orderContactMech.getRelatedOne("ContactMech", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (contactMech != null) { |
| Map<String, GenericValue> orderContactMechValueMap = new HashMap<String, GenericValue>(); |
| |
| orderContactMechValueMaps.add(orderContactMechValueMap); |
| orderContactMechValueMap.put("contactMech", contactMech); |
| orderContactMechValueMap.put("orderContactMech", orderContactMech); |
| |
| try { |
| orderContactMechValueMap.put("contactMechType", contactMech.getRelatedOne("ContactMechType", true)); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| GenericValue contactMechPurposeType = orderContactMech.getRelatedOne("ContactMechPurposeType", false); |
| |
| orderContactMechValueMap.put("contactMechPurposeType", contactMechPurposeType); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| if ("POSTAL_ADDRESS".equals(contactMech.getString("contactMechTypeId"))) { |
| orderContactMechValueMap.put("postalAddress", contactMech.getRelatedOne("PostalAddress", false)); |
| } else if ("TELECOM_NUMBER".equals(contactMech.getString("contactMechTypeId"))) { |
| orderContactMechValueMap.put("telecomNumber", contactMech.getRelatedOne("TelecomNumber", false)); |
| } |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| } |
| |
| return orderContactMechValueMaps; |
| } |
| |
| public static Collection<Map<String, GenericValue>> getWorkEffortContactMechValueMaps(Delegator delegator, String workEffortId) { |
| Collection<Map<String, GenericValue>> workEffortContactMechValueMaps = new LinkedList<Map<String,GenericValue>>(); |
| |
| List<GenericValue> allWorkEffortContactMechs = null; |
| |
| try { |
| allWorkEffortContactMechs = EntityQuery.use(delegator).from("WorkEffortContactMech") |
| .where("workEffortId", workEffortId) |
| .filterByDate() |
| .queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| if (allWorkEffortContactMechs == null) return null; |
| |
| for (GenericValue workEffortContactMech: allWorkEffortContactMechs) { |
| GenericValue contactMech = null; |
| |
| try { |
| contactMech = workEffortContactMech.getRelatedOne("ContactMech", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (contactMech != null) { |
| Map<String, GenericValue> workEffortContactMechValueMap = new HashMap<String, GenericValue>(); |
| |
| workEffortContactMechValueMaps.add(workEffortContactMechValueMap); |
| workEffortContactMechValueMap.put("contactMech", contactMech); |
| workEffortContactMechValueMap.put("workEffortContactMech", workEffortContactMech); |
| |
| try { |
| workEffortContactMechValueMap.put("contactMechType", contactMech.getRelatedOne("ContactMechType", true)); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| if ("POSTAL_ADDRESS".equals(contactMech.getString("contactMechTypeId"))) { |
| workEffortContactMechValueMap.put("postalAddress", contactMech.getRelatedOne("PostalAddress", false)); |
| } else if ("TELECOM_NUMBER".equals(contactMech.getString("contactMechTypeId"))) { |
| workEffortContactMechValueMap.put("telecomNumber", contactMech.getRelatedOne("TelecomNumber", false)); |
| } |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| } |
| |
| return workEffortContactMechValueMaps.size() > 0 ? workEffortContactMechValueMaps : null; |
| } |
| |
| public static void getContactMechAndRelated(ServletRequest request, String partyId, Map<String, Object> target) { |
| Delegator delegator = (Delegator) request.getAttribute("delegator"); |
| |
| boolean tryEntity = true; |
| if (request.getAttribute("_ERROR_MESSAGE_") != null) tryEntity = false; |
| if ("true".equals(request.getParameter("tryEntity"))) tryEntity = true; |
| |
| String donePage = request.getParameter("DONE_PAGE"); |
| if (donePage == null) donePage = (String) request.getAttribute("DONE_PAGE"); |
| if (UtilValidate.isEmpty(donePage)) donePage = "viewprofile"; |
| target.put("donePage", donePage); |
| |
| String contactMechTypeId = request.getParameter("preContactMechTypeId"); |
| |
| if (contactMechTypeId == null) contactMechTypeId = (String) request.getAttribute("preContactMechTypeId"); |
| if (contactMechTypeId != null) |
| tryEntity = false; |
| |
| String contactMechId = request.getParameter("contactMechId"); |
| |
| if (request.getAttribute("contactMechId") != null) |
| contactMechId = (String) request.getAttribute("contactMechId"); |
| |
| GenericValue contactMech = null; |
| |
| if (contactMechId != null) { |
| target.put("contactMechId", contactMechId); |
| |
| // try to find a PartyContactMech with a valid date range |
| List<GenericValue> partyContactMechs = null; |
| |
| try { |
| partyContactMechs = EntityQuery.use(delegator).from("PartyContactMech") |
| .where("partyId", partyId, "contactMechId", contactMechId) |
| .filterByDate() |
| .queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| GenericValue partyContactMech = EntityUtil.getFirst(partyContactMechs); |
| |
| if (partyContactMech != null) { |
| target.put("partyContactMech", partyContactMech); |
| |
| Collection<GenericValue> partyContactMechPurposes = null; |
| |
| try { |
| partyContactMechPurposes = EntityUtil.filterByDate(partyContactMech.getRelated("PartyContactMechPurpose", null, null, false), true); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (UtilValidate.isNotEmpty(partyContactMechPurposes)) |
| target.put("partyContactMechPurposes", partyContactMechPurposes); |
| } |
| |
| try { |
| contactMech = EntityQuery.use(delegator).from("ContactMech").where("contactMechId", contactMechId).queryOne(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| if (contactMech != null) { |
| target.put("contactMech", contactMech); |
| contactMechTypeId = contactMech.getString("contactMechTypeId"); |
| } |
| } |
| |
| if (contactMechTypeId != null) { |
| target.put("contactMechTypeId", contactMechTypeId); |
| |
| try { |
| GenericValue contactMechType = EntityQuery.use(delegator).from("ContactMechType").where("contactMechTypeId", contactMechTypeId).queryOne(); |
| |
| if (contactMechType != null) |
| target.put("contactMechType", contactMechType); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| Collection<GenericValue> purposeTypes = new LinkedList<GenericValue>(); |
| Iterator<GenericValue> typePurposes = null; |
| |
| try { |
| typePurposes = UtilMisc.toIterator(EntityQuery.use(delegator).from("ContactMechTypePurpose") |
| .where("contactMechTypeId", contactMechTypeId) |
| .queryList()); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| while (typePurposes != null && typePurposes.hasNext()) { |
| GenericValue contactMechTypePurpose = typePurposes.next(); |
| GenericValue contactMechPurposeType = null; |
| |
| try { |
| contactMechPurposeType = contactMechTypePurpose.getRelatedOne("ContactMechPurposeType", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (contactMechPurposeType != null) { |
| purposeTypes.add(contactMechPurposeType); |
| } |
| } |
| if (purposeTypes.size() > 0) |
| target.put("purposeTypes", purposeTypes); |
| } |
| |
| String requestName; |
| |
| if (contactMech == null) { |
| // create |
| if ("POSTAL_ADDRESS".equals(contactMechTypeId)) { |
| if (request.getParameter("contactMechPurposeTypeId") != null || request.getAttribute("contactMechPurposeTypeId") != null) { |
| requestName = "createPostalAddressAndPurpose"; |
| } else { |
| requestName = "createPostalAddress"; |
| } |
| } else if ("TELECOM_NUMBER".equals(contactMechTypeId)) { |
| requestName = "createTelecomNumber"; |
| } else if ("EMAIL_ADDRESS".equals(contactMechTypeId)) { |
| requestName = "createEmailAddress"; |
| } else { |
| requestName = "createContactMech"; |
| } |
| } else { |
| // update |
| if ("POSTAL_ADDRESS".equals(contactMechTypeId)) { |
| requestName = "updatePostalAddress"; |
| } else if ("TELECOM_NUMBER".equals(contactMechTypeId)) { |
| requestName = "updateTelecomNumber"; |
| } else if ("EMAIL_ADDRESS".equals(contactMechTypeId)) { |
| requestName = "updateEmailAddress"; |
| } else { |
| requestName = "updateContactMech"; |
| } |
| } |
| target.put("requestName", requestName); |
| |
| if ("POSTAL_ADDRESS".equals(contactMechTypeId)) { |
| GenericValue postalAddress = null; |
| |
| try { |
| if (contactMech != null) postalAddress = contactMech.getRelatedOne("PostalAddress", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (postalAddress != null) target.put("postalAddress", postalAddress); |
| } else if ("TELECOM_NUMBER".equals(contactMechTypeId)) { |
| GenericValue telecomNumber = null; |
| |
| try { |
| if (contactMech != null) telecomNumber = contactMech.getRelatedOne("TelecomNumber", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (telecomNumber != null) target.put("telecomNumber", telecomNumber); |
| } |
| |
| if ("true".equals(request.getParameter("useValues"))) tryEntity = true; |
| target.put("tryEntity", Boolean.valueOf(tryEntity)); |
| |
| try { |
| Collection<GenericValue> contactMechTypes = EntityQuery.use(delegator).from("ContactMechType").cache(true).queryList(); |
| |
| if (contactMechTypes != null) { |
| target.put("contactMechTypes", contactMechTypes); |
| } |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| |
| /** Returns the first valid FacilityContactMech found based on the given facilityId and a prioritized list of purposes |
| * @param delegator the delegator |
| * @param facilityId the facility id |
| * @param purposeTypes a List of ContactMechPurposeType ids which will be checked one at a time until a valid contact mech is found |
| * @return returns the first valid FacilityContactMech found based on the given facilityId and a prioritized list of purposes |
| */ |
| public static GenericValue getFacilityContactMechByPurpose(Delegator delegator, String facilityId, List<String> purposeTypes) { |
| if (UtilValidate.isEmpty(facilityId)) return null; |
| if (UtilValidate.isEmpty(purposeTypes)) return null; |
| |
| for (String purposeType: purposeTypes) { |
| List<GenericValue> facilityContactMechPurposes = null; |
| List<EntityCondition> conditionList = new LinkedList<EntityCondition>(); |
| conditionList.add(EntityCondition.makeCondition("facilityId", facilityId)); |
| conditionList.add(EntityCondition.makeCondition("contactMechPurposeTypeId", purposeType)); |
| EntityCondition entityCondition = EntityCondition.makeCondition(conditionList); |
| try { |
| facilityContactMechPurposes = EntityQuery.use(delegator).from("FacilityContactMechPurpose") |
| .where(entityCondition) |
| .orderBy("-fromDate") |
| .cache(true) |
| .filterByDate() |
| .queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| continue; |
| } |
| for (GenericValue facilityContactMechPurpose: facilityContactMechPurposes) { |
| String contactMechId = facilityContactMechPurpose.getString("contactMechId"); |
| List<GenericValue> facilityContactMechs = null; |
| conditionList = new LinkedList<EntityCondition>(); |
| conditionList.add(EntityCondition.makeCondition("facilityId", facilityId)); |
| conditionList.add(EntityCondition.makeCondition("contactMechId", contactMechId)); |
| entityCondition = EntityCondition.makeCondition(conditionList); |
| try { |
| facilityContactMechs = EntityQuery.use(delegator).from("FacilityContactMech") |
| .where(entityCondition) |
| .orderBy("-fromDate") |
| .cache(true) |
| .filterByDate() |
| .queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (UtilValidate.isNotEmpty(facilityContactMechs)) { |
| return EntityUtil.getFirst(facilityContactMechs); |
| } |
| } |
| |
| } |
| return null; |
| } |
| |
| public static void getFacilityContactMechAndRelated(ServletRequest request, String facilityId, Map<String, Object> target) { |
| Delegator delegator = (Delegator) request.getAttribute("delegator"); |
| |
| boolean tryEntity = true; |
| if (request.getAttribute("_ERROR_MESSAGE") != null) tryEntity = false; |
| if ("true".equals(request.getParameter("tryEntity"))) tryEntity = true; |
| |
| String donePage = request.getParameter("DONE_PAGE"); |
| if (donePage == null) donePage = (String) request.getAttribute("DONE_PAGE"); |
| if (UtilValidate.isEmpty(donePage)) donePage = "viewprofile"; |
| target.put("donePage", donePage); |
| |
| String contactMechTypeId = request.getParameter("preContactMechTypeId"); |
| |
| if (contactMechTypeId == null) contactMechTypeId = (String) request.getAttribute("preContactMechTypeId"); |
| if (contactMechTypeId != null) |
| tryEntity = false; |
| |
| String contactMechId = request.getParameter("contactMechId"); |
| |
| if (request.getAttribute("contactMechId") != null) |
| contactMechId = (String) request.getAttribute("contactMechId"); |
| |
| GenericValue contactMech = null; |
| |
| if (contactMechId != null) { |
| target.put("contactMechId", contactMechId); |
| |
| // try to find a PartyContactMech with a valid date range |
| List<GenericValue> facilityContactMechs = null; |
| |
| try { |
| facilityContactMechs = EntityQuery.use(delegator).from("FacilityContactMech") |
| .where("facilityId", facilityId, "contactMechId", contactMechId) |
| .filterByDate() |
| .queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| GenericValue facilityContactMech = EntityUtil.getFirst(facilityContactMechs); |
| |
| if (facilityContactMech != null) { |
| target.put("facilityContactMech", facilityContactMech); |
| |
| Collection<GenericValue> facilityContactMechPurposes = null; |
| |
| try { |
| facilityContactMechPurposes = EntityUtil.filterByDate(facilityContactMech.getRelated("FacilityContactMechPurpose", null, null, false), true); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (UtilValidate.isNotEmpty(facilityContactMechPurposes)) |
| target.put("facilityContactMechPurposes", facilityContactMechPurposes); |
| } |
| |
| try { |
| contactMech = EntityQuery.use(delegator).from("ContactMech").where("contactMechId", contactMechId).queryOne(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| if (contactMech != null) { |
| target.put("contactMech", contactMech); |
| contactMechTypeId = contactMech.getString("contactMechTypeId"); |
| } |
| } |
| |
| if (contactMechTypeId != null) { |
| target.put("contactMechTypeId", contactMechTypeId); |
| |
| try { |
| GenericValue contactMechType = EntityQuery.use(delegator).from("ContactMechType").where("contactMechTypeId", contactMechTypeId).queryOne(); |
| |
| if (contactMechType != null) |
| target.put("contactMechType", contactMechType); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| Collection<GenericValue> purposeTypes = new LinkedList<GenericValue>(); |
| Iterator<GenericValue> typePurposes = null; |
| |
| try { |
| typePurposes = UtilMisc.toIterator(EntityQuery.use(delegator).from("ContactMechTypePurpose") |
| .where("contactMechTypeId", contactMechTypeId) |
| .queryList()); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| while (typePurposes != null && typePurposes.hasNext()) { |
| GenericValue contactMechTypePurpose = typePurposes.next(); |
| GenericValue contactMechPurposeType = null; |
| |
| try { |
| contactMechPurposeType = contactMechTypePurpose.getRelatedOne("ContactMechPurposeType", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (contactMechPurposeType != null) { |
| purposeTypes.add(contactMechPurposeType); |
| } |
| } |
| if (purposeTypes.size() > 0) |
| target.put("purposeTypes", purposeTypes); |
| } |
| |
| String requestName; |
| |
| if (contactMech == null) { |
| // create |
| if ("POSTAL_ADDRESS".equals(contactMechTypeId)) { |
| if (request.getParameter("contactMechPurposeTypeId") != null || request.getAttribute("contactMechPurposeTypeId") != null) { |
| requestName = "createPostalAddressAndPurpose"; |
| } else { |
| requestName = "createPostalAddress"; |
| } |
| } else if ("TELECOM_NUMBER".equals(contactMechTypeId)) { |
| requestName = "createTelecomNumber"; |
| } else if ("EMAIL_ADDRESS".equals(contactMechTypeId)) { |
| requestName = "createEmailAddress"; |
| } else { |
| requestName = "createContactMech"; |
| } |
| } else { |
| // update |
| if ("POSTAL_ADDRESS".equals(contactMechTypeId)) { |
| requestName = "updatePostalAddress"; |
| } else if ("TELECOM_NUMBER".equals(contactMechTypeId)) { |
| requestName = "updateTelecomNumber"; |
| } else if ("EMAIL_ADDRESS".equals(contactMechTypeId)) { |
| requestName = "updateEmailAddress"; |
| } else { |
| requestName = "updateContactMech"; |
| } |
| } |
| target.put("requestName", requestName); |
| |
| if ("POSTAL_ADDRESS".equals(contactMechTypeId)) { |
| GenericValue postalAddress = null; |
| |
| try { |
| if (contactMech != null) postalAddress = contactMech.getRelatedOne("PostalAddress", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (postalAddress != null) target.put("postalAddress", postalAddress); |
| } else if ("TELECOM_NUMBER".equals(contactMechTypeId)) { |
| GenericValue telecomNumber = null; |
| |
| try { |
| if (contactMech != null) telecomNumber = contactMech.getRelatedOne("TelecomNumber", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (telecomNumber != null) target.put("telecomNumber", telecomNumber); |
| } |
| |
| if ("true".equals(request.getParameter("useValues"))) tryEntity = true; |
| target.put("tryEntity", Boolean.valueOf(tryEntity)); |
| |
| try { |
| Collection<GenericValue> contactMechTypes = EntityQuery.use(delegator).from("ContactMechType").cache(true).queryList(); |
| |
| if (contactMechTypes != null) { |
| target.put("contactMechTypes", contactMechTypes); |
| } |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| |
| public static List<Map<String, Object>> getPartyPostalAddresses(ServletRequest request, String partyId, String curContactMechId) { |
| Delegator delegator = (Delegator) request.getAttribute("delegator"); |
| List<Map<String, Object>> postalAddressInfos = new LinkedList<Map<String,Object>>(); |
| |
| List<GenericValue> allPartyContactMechs = null; |
| |
| try { |
| allPartyContactMechs = EntityQuery.use(delegator).from("PartyContactMech").where("partyId", partyId).filterByDate().queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| if (allPartyContactMechs == null) return postalAddressInfos; |
| |
| for (GenericValue partyContactMech: allPartyContactMechs) { |
| GenericValue contactMech = null; |
| |
| try { |
| contactMech = partyContactMech.getRelatedOne("ContactMech", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| if (contactMech != null && "POSTAL_ADDRESS".equals(contactMech.getString("contactMechTypeId")) && !contactMech.getString("contactMechId").equals(curContactMechId)) { |
| Map<String, Object> postalAddressInfo = new HashMap<String, Object>(); |
| |
| postalAddressInfos.add(postalAddressInfo); |
| postalAddressInfo.put("contactMech", contactMech); |
| postalAddressInfo.put("partyContactMech", partyContactMech); |
| |
| try { |
| GenericValue postalAddress = contactMech.getRelatedOne("PostalAddress", false); |
| postalAddressInfo.put("postalAddress", postalAddress); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| try { |
| List<GenericValue> partyContactMechPurposes = EntityUtil.filterByDate(partyContactMech.getRelated("PartyContactMechPurpose", null, null, false), true); |
| postalAddressInfo.put("partyContactMechPurposes", partyContactMechPurposes); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| } |
| |
| return postalAddressInfos; |
| } |
| |
| public static Map<String, Object> getCurrentPostalAddress(ServletRequest request, String partyId, String curContactMechId) { |
| Delegator delegator = (Delegator) request.getAttribute("delegator"); |
| Map<String, Object> results = new HashMap<String, Object>(); |
| |
| if (curContactMechId != null) { |
| List<GenericValue> partyContactMechs = null; |
| |
| try { |
| partyContactMechs = EntityQuery.use(delegator).from("PartyContactMech") |
| .where("partyId", partyId, "contactMechId", curContactMechId) |
| .filterByDate() |
| .queryList(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| GenericValue curPartyContactMech = EntityUtil.getFirst(partyContactMechs); |
| results.put("curPartyContactMech", curPartyContactMech); |
| |
| GenericValue curContactMech = null; |
| if (curPartyContactMech != null) { |
| try { |
| curContactMech = curPartyContactMech.getRelatedOne("ContactMech", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| |
| Collection<GenericValue> curPartyContactMechPurposes = null; |
| try { |
| curPartyContactMechPurposes = EntityUtil.filterByDate(curPartyContactMech.getRelated("PartyContactMechPurpose", null, null, false), true); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| results.put("curPartyContactMechPurposes", curPartyContactMechPurposes); |
| } |
| results.put("curContactMech", curContactMech); |
| |
| GenericValue curPostalAddress = null; |
| if (curContactMech != null) { |
| try { |
| curPostalAddress = curContactMech.getRelatedOne("PostalAddress", false); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| } |
| } |
| |
| results.put("curPostalAddress", curPostalAddress); |
| } |
| return results; |
| } |
| |
| public static boolean isUspsAddress(GenericValue postalAddress) { |
| if (postalAddress == null) { |
| // null postal address is not a USPS address |
| return false; |
| } |
| if (!"PostalAddress".equals(postalAddress.getEntityName())) { |
| // not a postal address not a USPS address |
| return false; |
| } |
| |
| // get and clean the address strings |
| String addr1 = postalAddress.getString("address1"); |
| String addr2 = postalAddress.getString("address2"); |
| |
| // get the matching string from general.properties |
| String matcher = EntityUtilProperties.getPropertyValue("general", "usps.address.match", postalAddress.getDelegator()); |
| if (UtilValidate.isNotEmpty(matcher)) { |
| if (addr1 != null && addr1.toLowerCase().matches(matcher)) { |
| return true; |
| } |
| if (addr2 != null && addr2.toLowerCase().matches(matcher)) { |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| public static boolean isCompanyAddress(GenericValue postalAddress, String companyPartyId) { |
| if (postalAddress == null) { |
| // null postal address is not an internal address |
| return false; |
| } |
| if (!"PostalAddress".equals(postalAddress.getEntityName())) { |
| // not a postal address not an internal address |
| return false; |
| } |
| if (companyPartyId == null) { |
| // no partyId not an internal address |
| return false; |
| } |
| |
| String state = postalAddress.getString("stateProvinceGeoId"); |
| String addr1 = postalAddress.getString("address1"); |
| String addr2 = postalAddress.getString("address2"); |
| if (state != null) { |
| state = state.replaceAll("\\W", "").toLowerCase(); |
| } else { |
| state = ""; |
| } |
| if (addr1 != null) { |
| addr1 = addr1.replaceAll("\\W", "").toLowerCase(); |
| } else { |
| addr1 = ""; |
| } |
| if (addr2 != null) { |
| addr2 = addr2.replaceAll("\\W", "").toLowerCase(); |
| } else { |
| addr2 = ""; |
| } |
| |
| // get all company addresses |
| Delegator delegator = postalAddress.getDelegator(); |
| List<GenericValue> postalAddresses = new LinkedList<GenericValue>(); |
| try { |
| List<GenericValue> partyContactMechs = EntityQuery.use(delegator).from("PartyContactMech") |
| .where("partyId", companyPartyId) |
| .filterByDate() |
| .queryList(); |
| if (partyContactMechs != null) { |
| for (GenericValue pcm: partyContactMechs) { |
| GenericValue addr = pcm.getRelatedOne("PostalAddress", false); |
| if (addr != null) { |
| postalAddresses.add(addr); |
| } |
| } |
| } |
| } catch (GenericEntityException e) { |
| Debug.logError(e, "Unable to get party postal addresses", module); |
| } |
| |
| if (postalAddresses != null) { |
| for (GenericValue addr: postalAddresses) { |
| String thisAddr1 = addr.getString("address1"); |
| String thisAddr2 = addr.getString("address2"); |
| String thisState = addr.getString("stateProvinceGeoId"); |
| if (thisState != null) { |
| thisState = thisState.replaceAll("\\W", "").toLowerCase(); |
| } else { |
| thisState = ""; |
| } |
| if (thisAddr1 != null) { |
| thisAddr1 = thisAddr1.replaceAll("\\W", "").toLowerCase(); |
| } else { |
| thisAddr1 = ""; |
| } |
| if (thisAddr2 != null) { |
| thisAddr2 = thisAddr2.replaceAll("\\W", "").toLowerCase(); |
| } else { |
| thisAddr2 = ""; |
| } |
| if (thisAddr1.equals(addr1) && thisAddr2.equals(addr2) && thisState.equals(state)) { |
| return true; |
| } |
| } |
| } |
| |
| return false; |
| } |
| |
| public static String getContactMechAttribute(Delegator delegator, String contactMechId, String attrName) { |
| GenericValue attr = null; |
| try { |
| attr = EntityQuery.use(delegator).from("ContactMechAttribute").where("contactMechId", contactMechId, "attrName", attrName).queryOne(); |
| } catch (GenericEntityException e) { |
| Debug.logError(e, module); |
| } |
| if (attr == null) { |
| return null; |
| } else { |
| return attr.getString("attrValue"); |
| } |
| } |
| |
| public static String getPostalAddressPostalCodeGeoId(GenericValue postalAddress, Delegator delegator) throws GenericEntityException { |
| // if postalCodeGeoId not empty use that |
| if (UtilValidate.isNotEmpty(postalAddress.getString("postalCodeGeoId"))) { |
| return postalAddress.getString("postalCodeGeoId"); |
| } |
| |
| // no postalCodeGeoId, see if there is a Geo record matching the countryGeoId and postalCode fields |
| if (UtilValidate.isNotEmpty(postalAddress.getString("countryGeoId")) && UtilValidate.isNotEmpty(postalAddress.getString("postalCode"))) { |
| // first try the shortcut with the geoId convention for "{countryGeoId}-{postalCode}" |
| GenericValue geo = EntityQuery.use(delegator).from("Geo").where("geoId", postalAddress.getString("countryGeoId") + "-" + postalAddress.getString("postalCode")).cache().queryOne(); |
| if (geo != null) { |
| // save the value to the database for quicker future reference |
| if (postalAddress.isMutable()) { |
| postalAddress.set("postalCodeGeoId", geo.getString("geoId")); |
| postalAddress.store(); |
| } else { |
| GenericValue mutablePostalAddress = EntityQuery.use(delegator).from("PostalAddress").where("contactMechId", postalAddress.getString("contactMechId")).queryOne(); |
| mutablePostalAddress.set("postalCodeGeoId", geo.getString("geoId")); |
| mutablePostalAddress.store(); |
| } |
| |
| return geo.getString("geoId"); |
| } |
| |
| // no shortcut, try the longcut to see if there is something with a geoCode associated to the countryGeoId |
| GenericValue geoAssocAndGeoTo = EntityQuery.use(delegator).from("GeoAssocAndGeoTo") |
| .where("geoIdFrom", postalAddress.getString("countryGeoId"), "geoCode", postalAddress.getString("postalCode"), "geoAssocTypeId", "REGIONS") |
| .cache(true) |
| .queryFirst(); |
| if (geoAssocAndGeoTo != null) { |
| // save the value to the database for quicker future reference |
| if (postalAddress.isMutable()) { |
| postalAddress.set("postalCodeGeoId", geoAssocAndGeoTo.getString("geoId")); |
| postalAddress.store(); |
| } else { |
| GenericValue mutablePostalAddress = EntityQuery.use(delegator).from("PostalAddress").where("contactMechId", postalAddress.getString("contactMechId")).queryOne(); |
| mutablePostalAddress.set("postalCodeGeoId", geoAssocAndGeoTo.getString("geoId")); |
| mutablePostalAddress.store(); |
| } |
| |
| return geoAssocAndGeoTo.getString("geoId"); |
| } |
| } |
| |
| // nothing found, return null |
| return null; |
| } |
| |
| /** |
| * Returns a <b>PostalAddress</b> <code>GenericValue</code> as a URL encoded <code>String</code>. |
| * |
| * @param postalAddress A <b>PostalAddress</b> <code>GenericValue</code>. |
| * @return A URL encoded <code>String</code>. |
| * @throws GenericEntityException |
| * @throws UnsupportedEncodingException |
| */ |
| public static String urlEncodePostalAddress(GenericValue postalAddress) throws GenericEntityException, UnsupportedEncodingException { |
| Assert.notNull("postalAddress", postalAddress); |
| if (!"PostalAddress".equals(postalAddress.getEntityName())) { |
| throw new IllegalArgumentException("postalAddress argument is not a PostalAddress entity"); |
| } |
| StringBuilder sb = new StringBuilder(); |
| if (postalAddress.get("address1") != null) { |
| sb.append(postalAddress.get("address1")); |
| } |
| if (postalAddress.get("address2") != null) { |
| sb.append(", ").append(postalAddress.get("address2")); |
| } |
| if (postalAddress.get("city") != null) { |
| sb.append(", ").append(postalAddress.get("city")); |
| } |
| if (postalAddress.get("stateProvinceGeoId") != null) { |
| GenericValue geoValue = postalAddress.getRelatedOne("StateProvinceGeo", false); |
| if (geoValue != null) { |
| sb.append(", ").append(geoValue.get("geoName")); |
| } |
| } else if (postalAddress.get("countyGeoId") != null) { |
| GenericValue geoValue = postalAddress.getRelatedOne("CountyGeo", false); |
| if (geoValue != null) { |
| sb.append(", ").append(geoValue.get("geoName")); |
| } |
| } |
| if (postalAddress.get("postalCode") != null) { |
| sb.append(", ").append(postalAddress.get("postalCode")); |
| } |
| if (postalAddress.get("countryGeoId") != null) { |
| GenericValue geoValue = postalAddress.getRelatedOne("CountryGeo", false); |
| if (geoValue != null) { |
| sb.append(", ").append(geoValue.get("geoName")); |
| } |
| } |
| String postalAddressString = sb.toString().trim(); |
| while (postalAddressString.contains(" ")) { |
| postalAddressString = postalAddressString.replace(" ", " "); |
| } |
| return URLEncoder.encode(postalAddressString, "UTF-8"); |
| } |
| } |