1 24 package org.ofbiz.minilang.method.entityops; 25 26 import java.net.MalformedURLException ; 27 import java.net.URL ; 28 import java.util.List ; 29 30 import org.ofbiz.base.location.FlexibleLocation; 31 import org.ofbiz.base.util.Debug; 32 import org.ofbiz.base.util.UtilValidate; 33 import org.ofbiz.base.util.string.FlexibleStringExpander; 34 import org.ofbiz.entity.GenericDelegator; 35 import org.ofbiz.entity.util.EntityDataAssert; 36 import org.ofbiz.entity.util.EntitySaxReader; 37 import org.ofbiz.minilang.SimpleMethod; 38 import org.ofbiz.minilang.method.ContextAccessor; 39 import org.ofbiz.minilang.method.MethodContext; 40 import org.ofbiz.minilang.method.MethodOperation; 41 import org.w3c.dom.Element ; 42 43 50 public class EntityData extends MethodOperation { 51 52 public static final String module = EntityData.class.getName(); 53 54 protected FlexibleStringExpander locationExdr; 55 protected FlexibleStringExpander delegatorNameExdr; 56 protected FlexibleStringExpander timeoutExdr; 57 protected ContextAccessor errorListAcsr; 58 protected String mode; 59 60 public EntityData(Element element, SimpleMethod simpleMethod) { 61 super(element, simpleMethod); 62 locationExdr = new FlexibleStringExpander(element.getAttribute("location")); 63 delegatorNameExdr = new FlexibleStringExpander(element.getAttribute("delegator-name")); 64 timeoutExdr = new FlexibleStringExpander(element.getAttribute("timeout")); 65 errorListAcsr = new ContextAccessor(element.getAttribute("error-list-name"), "error_list"); 66 67 mode = element.getAttribute("mode"); 68 if (UtilValidate.isEmpty(mode)) { 69 mode = "load"; 70 } 71 } 72 73 public boolean exec(MethodContext methodContext) { 74 List messages = (List ) errorListAcsr.get(methodContext); 75 String location = this.locationExdr.expandString(methodContext.getEnvMap()); 76 String delegatorName = this.delegatorNameExdr.expandString(methodContext.getEnvMap()); 77 78 GenericDelegator delegator = methodContext.getDelegator(); 79 if (delegatorName != null && delegatorName.length() > 0) { 80 delegator = GenericDelegator.getGenericDelegator(delegatorName); 81 } 82 83 URL dataUrl = null; 84 try { 85 dataUrl = FlexibleLocation.resolveLocation(location, methodContext.getLoader()); 86 } catch (MalformedURLException e) { 87 messages.add("Could not find Entity Data document in resource: " + location + "; error was: " + e.toString()); 88 } 89 if (dataUrl == null) { 90 messages.add("Could not find Entity Data document in resource: " + location); 91 } 92 93 String timeout = this.timeoutExdr.expandString(methodContext.getEnvMap()); 94 int txTimeout = -1; 95 if (UtilValidate.isNotEmpty(timeout)) { 96 try { 97 txTimeout = Integer.parseInt(timeout); 98 } catch (NumberFormatException e) { 99 Debug.logWarning("Timeout not formatted properly in entity-data operation, defaulting to container default", module); 100 } 101 } 102 103 if ("assert".equals(mode)) { 104 EntityDataAssert.assertData(dataUrl, delegator, messages); 106 } else { 107 try { 109 EntitySaxReader reader = null; 110 if (txTimeout > 0) { 111 reader = new EntitySaxReader(delegator, txTimeout); 112 } else { 113 reader = new EntitySaxReader(delegator); 114 } 115 long rowsChanged = reader.parse(dataUrl); 116 } catch (Exception e) { 117 String xmlError = "Error loading XML Resource \"" + dataUrl.toExternalForm() + "\"; Error was: " + e.getMessage(); 118 messages.add(xmlError); 119 Debug.logError(e, xmlError, module); 120 } 121 } 122 return true; 123 } 124 125 public String rawString() { 126 return "<entity-data/>"; 128 } 129 public String expandedString(MethodContext methodContext) { 130 return this.rawString(); 132 } 133 } 134 135 | Popular Tags |