1 24 package org.ofbiz.minilang.method.entityops; 25 26 import java.util.List ; 27 import java.util.Map ; 28 29 import org.ofbiz.base.util.Debug; 30 import org.ofbiz.entity.GenericDelegator; 31 import org.ofbiz.entity.GenericEntityException; 32 import org.ofbiz.entity.condition.EntityCondition; 33 import org.ofbiz.entity.condition.EntityFieldMap; 34 import org.ofbiz.entity.condition.EntityOperator; 35 import org.ofbiz.minilang.SimpleMethod; 36 import org.ofbiz.minilang.method.ContextAccessor; 37 import org.ofbiz.minilang.method.MethodContext; 38 import org.ofbiz.minilang.method.MethodOperation; 39 import org.w3c.dom.Element ; 40 41 48 public class FindByAnd extends MethodOperation { 49 50 public static final String module = FindByAnd.class.getName(); 51 52 ContextAccessor listAcsr; 53 String entityName; 54 ContextAccessor mapAcsr; 55 ContextAccessor orderByListAcsr; 56 String delegatorName; 57 String useCacheStr; 58 String useIteratorStr; 59 60 public FindByAnd(Element element, SimpleMethod simpleMethod) { 61 super(element, simpleMethod); 62 listAcsr = new ContextAccessor(element.getAttribute("list-name")); 63 entityName = element.getAttribute("entity-name"); 64 mapAcsr = new ContextAccessor(element.getAttribute("map-name")); 65 orderByListAcsr = new ContextAccessor(element.getAttribute("order-by-list-name")); 66 delegatorName = element.getAttribute("delegator-name"); 67 68 useCacheStr = element.getAttribute("use-cache"); 69 useIteratorStr = element.getAttribute("use-iterator"); 70 } 71 72 public boolean exec(MethodContext methodContext) { 73 String entityName = methodContext.expandString(this.entityName); 74 String delegatorName = methodContext.expandString(this.delegatorName); 75 String useCacheStr = methodContext.expandString(this.useCacheStr); 76 String useIteratorStr = methodContext.expandString(this.useIteratorStr); 77 78 boolean useCache = "true".equals(useCacheStr); 79 boolean useIterator = "true".equals(useIteratorStr); 80 81 List orderByNames = null; 82 if (!orderByListAcsr.isEmpty()) { 83 orderByNames = (List ) orderByListAcsr.get(methodContext); 84 } 85 86 GenericDelegator delegator = methodContext.getDelegator(); 87 if (delegatorName != null && delegatorName.length() > 0) { 88 delegator = GenericDelegator.getGenericDelegator(delegatorName); 89 } 90 91 try { 92 if (useIterator) { 93 EntityCondition whereCond = null; 94 if (!mapAcsr.isEmpty()) { 95 whereCond = new EntityFieldMap((Map ) mapAcsr.get(methodContext), EntityOperator.AND); 96 } 97 listAcsr.put(methodContext, delegator.findListIteratorByCondition(entityName, whereCond, null, null, orderByNames, null)); 98 } else { 99 if (useCache) { 100 listAcsr.put(methodContext, delegator.findByAndCache(entityName, (Map ) mapAcsr.get(methodContext), orderByNames)); 101 } else { 102 listAcsr.put(methodContext, delegator.findByAnd(entityName, (Map ) mapAcsr.get(methodContext), orderByNames)); 103 } 104 } 105 } catch (GenericEntityException e) { 106 Debug.logError(e, module); 107 String errMsg = "ERROR: Could not complete the " + simpleMethod.getShortDescription() + " process [problem finding the " + entityName + " entity: " + e.getMessage() + "]"; 108 109 if (methodContext.getMethodType() == MethodContext.EVENT) { 110 methodContext.putEnv(simpleMethod.getEventErrorMessageName(), errMsg); 111 methodContext.putEnv(simpleMethod.getEventResponseCodeName(), simpleMethod.getDefaultErrorCode()); 112 } else if (methodContext.getMethodType() == MethodContext.SERVICE) { 113 methodContext.putEnv(simpleMethod.getServiceErrorMessageName(), errMsg); 114 methodContext.putEnv(simpleMethod.getServiceResponseMessageName(), simpleMethod.getDefaultErrorCode()); 115 } 116 return false; 117 } 118 return true; 119 } 120 121 public String rawString() { 122 return "<find-by-and/>"; 124 } 125 public String expandedString(MethodContext methodContext) { 126 return this.rawString(); 128 } 129 } 130 | Popular Tags |