blob: 01cadee716c4326c3829c1b6708a2222865a56db [file] [log] [blame]
/*******************************************************************************
* 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");
}
}