Thanks Adrian!

Regards
Scott

On 14/03/2012, at 5:21 PM, Adrian Crum wrote:

> Oops. Good catch - will do!
> 
> -Adrian
> 
> On 3/14/2012 2:09 AM, Scott Gray wrote:
>> Hi Adrian,
>> 
>> Your test references an application entity, could you switch it to using one 
>> of the example entities?
>> 
>> Thanks
>> Scott
>> 
>> On 13/03/2012, at 12:20 PM, adri...@apache.org wrote:
>> 
>>> Author: adrianc
>>> Date: Mon Mar 12 23:20:55 2012
>>> New Revision: 1299924
>>> 
>>> URL: http://svn.apache.org/viewvc?rev=1299924&view=rev
>>> Log:
>>> More JSR-223 work - added a ScriptHelper object to the bindings. Also added 
>>> a demonstration to the JavaScript test service.
>>> 
>>> Added:
>>>    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelper.java   
>>> (with props)
>>>    
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelperFactory.java 
>>>   (with props)
>>>    
>>> ofbiz/trunk/framework/common/src/META-INF/services/org.ofbiz.base.util.ScriptHelperFactory
>>>    ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/
>>>    
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ContextHelper.java
>>>    (with props)
>>>    
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperFactoryImpl.java
>>>    (with props)
>>>    
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperImpl.java
>>>    (with props)
>>> Modified:
>>>    
>>> ofbiz/trunk/framework/base/src/META-INF/services/javax.script.ScriptEngineFactory
>>>    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java
>>>    ofbiz/trunk/framework/common/script/org/ofbiz/common/JavaScriptTest.js
>>>    ofbiz/trunk/framework/common/servicedef/services_test.xml
>>> 
>>> Modified: 
>>> ofbiz/trunk/framework/base/src/META-INF/services/javax.script.ScriptEngineFactory
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/META-INF/services/javax.script.ScriptEngineFactory?rev=1299924&r1=1299923&r2=1299924&view=diff
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/base/src/META-INF/services/javax.script.ScriptEngineFactory
>>>  (original)
>>> +++ 
>>> ofbiz/trunk/framework/base/src/META-INF/services/javax.script.ScriptEngineFactory
>>>  Mon Mar 12 23:20:55 2012
>>> @@ -1 +1,18 @@
>>> +# 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.
>>> +
>>> bsh.engine.BshScriptEngineFactory
>>> 
>>> Added: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelper.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelper.java?rev=1299924&view=auto
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelper.java 
>>> (added)
>>> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelper.java 
>>> Mon Mar 12 23:20:55 2012
>>> @@ -0,0 +1,166 @@
>>> +/*******************************************************************************
>>> + * 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.ofbiz.base.util;
>>> +
>>> +import java.util.List;
>>> +import java.util.Map;
>>> +
>>> +import javax.script.ScriptException;
>>> +
>>> +/**
>>> + * A script helper object. The OFBiz scripting framework will include an 
>>> instance of this class in the script's bindings.
>>> + *<p>The scripting language will determine how the helper is used. Most 
>>> languages will access it as a variable:<br />
>>> + *<code>partyValue = ofbiz.findOne("Party");</code><br />
>>> + * while other languages might access it as a native method or 
>>> function:<br />
>>> + *<code>partyValue = findOne("Party");</code></p>
>>> + */
>>> +public interface ScriptHelper {
>>> +
>>> +    /**
>>> +     * Extracts service IN parameters from<code>inputMap</code>  and 
>>> returns them in a new<code>Map</code>.
>>> +     *
>>> +     * @param serviceName
>>> +     * @param inputMap
>>> +     * @return The matching service parameters
>>> +     * @throws ScriptException
>>> +     */
>>> +    Map<String, ? extends Object>  createServiceMap(String serviceName, 
>>> Map<String, ? extends Object>  inputMap) throws ScriptException;
>>> +
>>> +    /**
>>> +     * Sets the event/service status to error status.
>>> +     *
>>> +     * @param message
>>> +     */
>>> +    void error(String message);
>>> +
>>> +    /**
>>> +     * Evaluates a<code>String</code>  and returns the result.
>>> +     *
>>> +     * @param original
>>> +     * @return
>>> +     */
>>> +    String evalString(String original);
>>> +
>>> +    /**
>>> +     * Sets the event/service status to failure status.
>>> +     *
>>> +     * @param message
>>> +     */
>>> +    void failure(String message);
>>> +
>>> +    /**
>>> +     * Returns a<code>List</code>  of<code>GenericValue</code>s.
>>> +     * @param entityName
>>> +     * @param fields
>>> +     * @return
>>> +     * @throws ScriptException
>>> +     */
>>> +    List<Map<String, Object>>  findList(String entityName, Map<String, ? 
>>> extends Object>  fields) throws ScriptException;
>>> +
>>> +    /**
>>> +     * Finds a<code>GenericValue</code>  by primary key. The helper will 
>>> construct a primary key from existing variables.
>>> +     * @param entityName
>>> +     * @return
>>> +     * @throws ScriptException
>>> +     */
>>> +    Map<String, Object>  findOne(String entityName) throws ScriptException;
>>> +
>>> +    /**
>>> +     * Finds a<code>GenericValue</code>  by primary key. The helper will 
>>> construct a primary key from existing variables
>>> +     * and/or<code>fields</code>.
>>> +     * @param entityName
>>> +     * @param fields
>>> +     * @param args
>>> +     * @return
>>> +     * @throws ScriptException
>>> +     */
>>> +    Map<String, Object>  findOne(String entityName, Map<String, ? extends 
>>> Object>  fields, Map<String, ? extends Object>  args) throws 
>>> ScriptException;
>>> +
>>> +    /**
>>> +     * Logs an error message.
>>> +     *
>>> +     * @param message
>>> +     */
>>> +    void logError(String message);
>>> +
>>> +    /**
>>> +     * Logs an info message.
>>> +     *
>>> +     * @param message
>>> +     */
>>> +    void logInfo(String message);
>>> +
>>> +    /**
>>> +     * Logs a warning message.
>>> +     *
>>> +     * @param message
>>> +     */
>>> +    void logWarning(String message);
>>> +
>>> +    /**
>>> +     * Creates a new, empty<code>GenericValue</code>.
>>> +     * @param entityName
>>> +     * @return
>>> +     * @throws ScriptException
>>> +     */
>>> +    Map<String, Object>  makeValue(String entityName) throws 
>>> ScriptException;
>>> +
>>> +    /**
>>> +     * Creates a new, empty<code>GenericValue</code>.
>>> +     *
>>> +     * @param entityName
>>> +     * @param fields
>>> +     * @return
>>> +     * @throws ScriptException
>>> +     */
>>> +    Map<String, Object>  makeValue(String entityName, Map<String, Object>  
>>> fields) throws ScriptException;
>>> +
>>> +    /**
>>> +     * Runs a service synchronously.
>>> +     *
>>> +     * @param serviceName
>>> +     * @param inputMap
>>> +     * @return
>>> +     * @throws ScriptException
>>> +     */
>>> +    Map<String, ? extends Object>  runService(String serviceName, 
>>> Map<String, ? extends Object>  inputMap) throws ScriptException;
>>> +
>>> +    /**
>>> +     * Runs a service synchronously.
>>> +     *
>>> +     * @param serviceName
>>> +     * @param inputMap
>>> +     * @param args
>>> +     * @return
>>> +     * @throws ScriptException
>>> +     */
>>> +    Map<String, ? extends Object>  runService(String serviceName, 
>>> Map<String, ? extends Object>  inputMap, Map<String, ? extends Object>  
>>> args) throws ScriptException;
>>> +
>>> +    /**
>>> +     * Sets the event/service status to success status.
>>> +     */
>>> +    void success();
>>> +
>>> +    /**
>>> +     * Sets the event/service status to success status.
>>> +     *
>>> +     * @param message
>>> +     */
>>> +    void success(String message);
>>> +}
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelper.java
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelper.java
>>> ------------------------------------------------------------------------------
>>>    svn:keywords = Author Date Id Rev URL
>>> 
>>> Added: 
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelperFactory.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelperFactory.java?rev=1299924&view=auto
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelperFactory.java 
>>> (added)
>>> +++ 
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelperFactory.java 
>>> Mon Mar 12 23:20:55 2012
>>> @@ -0,0 +1,31 @@
>>> +/*******************************************************************************
>>> + * 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.ofbiz.base.util;
>>> +
>>> +import javax.script.ScriptContext;
>>> +
>>> +import org.ofbiz.base.lang.Factory;
>>> +
>>> +/**
>>> + * A<code>ScriptHelper</code>  factory.
>>> + */
>>> +public interface ScriptHelperFactory extends Factory<ScriptHelper, 
>>> ScriptContext>  {
>>> +
>>> +    ScriptHelper getInstance(ScriptContext context);
>>> +}
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelperFactory.java
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptHelperFactory.java
>>> ------------------------------------------------------------------------------
>>>    svn:keywords = Author Date Id Rev URL
>>> 
>>> Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java?rev=1299924&r1=1299923&r2=1299924&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java 
>>> (original)
>>> +++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/ScriptUtil.java Mon 
>>> Mar 12 23:20:55 2012
>>> @@ -25,8 +25,10 @@ import java.net.MalformedURLException;
>>> import java.net.URL;
>>> import java.util.Collection;
>>> import java.util.Collections;
>>> +import java.util.Iterator;
>>> import java.util.List;
>>> import java.util.Map;
>>> +import java.util.ServiceLoader;
>>> import java.util.Set;
>>> 
>>> import javax.script.Bindings;
>>> @@ -62,8 +64,11 @@ public final class ScriptUtil {
>>>     public static final String PARAMETERS_KEY = "parameters";
>>>     /** The result map bindings key. */
>>>     public static final String RESULT_KEY = "result";
>>> +    /** The<code>ScriptHelper</code>  key. */
>>> +    public static final String SCRIPT_HELPER_KEY = "ofbiz";
>>>     private static final UtilCache<String, CompiledScript>  parsedScripts = 
>>> UtilCache.createUtilCache("script.ParsedScripts", 0, 0, false);
>>>     private static final Object[] EMPTY_ARGS = {};
>>> +    private static ScriptHelperFactory helperFactory = null;
>>> 
>>>     static {
>>>         if (Debug.infoOn()) {
>>> @@ -94,6 +99,15 @@ public final class ScriptUtil {
>>>                 }
>>>             }
>>>         }
>>> +        Iterator<ScriptHelperFactory>  iter = 
>>> ServiceLoader.load(ScriptHelperFactory.class).iterator();
>>> +        if (iter.hasNext()) {
>>> +            helperFactory = iter.next();
>>> +            if (Debug.verboseOn()) {
>>> +                Debug.logVerbose("ScriptHelper factory set to " + 
>>> helperFactory.getClass().getName(), module);
>>> +            }
>>> +        } else {
>>> +            Debug.logWarning("ScriptHelper factory not found", module);
>>> +        }
>>>     }
>>> 
>>>     /**
>>> @@ -186,6 +200,10 @@ public final class ScriptUtil {
>>>         context.put(WIDGET_CONTEXT_KEY, context);
>>>         context.put("context", context);
>>>         ScriptContext scriptContext = new SimpleScriptContext();
>>> +        ScriptHelper helper = createScriptHelper(scriptContext);
>>> +        if (helper != null) {
>>> +            context.put(SCRIPT_HELPER_KEY, helper);
>>> +        }
>>>         Bindings bindings = new SimpleBindings(context);
>>>         scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
>>>         return scriptContext;
>>> @@ -206,12 +224,23 @@ public final class ScriptUtil {
>>>         context.put(WIDGET_CONTEXT_KEY, context);
>>>         context.put("context", context);
>>>         ScriptContext scriptContext = new SimpleScriptContext();
>>> +        ScriptHelper helper = createScriptHelper(scriptContext);
>>> +        if (helper != null) {
>>> +            context.put(SCRIPT_HELPER_KEY, helper);
>>> +        }
>>>         Bindings bindings = new ProtectedBindings(context, 
>>> Collections.unmodifiableSet(protectedKeys));
>>>         scriptContext.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
>>>         return scriptContext;
>>>     }
>>> 
>>> -    /**
>>> +    public static ScriptHelper createScriptHelper(ScriptContext context) {
>>> +        if (helperFactory != null) {
>>> +            return helperFactory.getInstance(context);
>>> +        }
>>> +        return null;
>>> +    }
>>> +
>>> +     /**
>>>      * Executes a script<code>String</code>  and returns the result.
>>>      *
>>>      * @param language
>>> 
>>> Modified: 
>>> ofbiz/trunk/framework/common/script/org/ofbiz/common/JavaScriptTest.js
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/script/org/ofbiz/common/JavaScriptTest.js?rev=1299924&r1=1299923&r2=1299924&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/common/script/org/ofbiz/common/JavaScriptTest.js 
>>> (original)
>>> +++ ofbiz/trunk/framework/common/script/org/ofbiz/common/JavaScriptTest.js 
>>> Mon Mar 12 23:20:55 2012
>>> @@ -25,6 +25,17 @@ if (message) {
>>>     var result = "[no message received]";
>>> }
>>> 
>>> +if (ofbiz) {
>>> +    var partyValue = ofbiz.findOne("PartyNameView");
>>> +    if (partyValue) {
>>> +        var foundMessage = ofbiz.evalString(" Found Party 
>>> ${partyValue.groupName}${partyValue.firstName} ${partyValue.lastName}");
>>> +        successMessage = successMessage + foundMessage;
>>> +        ofbiz.logInfo(successMessage);
>>> +    } else {
>>> +        ofbiz.logInfo("Party not found with partyId 
>>> ${parameters.partyId}");
>>> +    }
>>> +}
>>> +
>>> function testFunction(context) {
>>>     if (message) {
>>>         var successMessage = "Got message [" + message + "] and finished 
>>> fine";
>>> 
>>> Modified: ofbiz/trunk/framework/common/servicedef/services_test.xml
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/servicedef/services_test.xml?rev=1299924&r1=1299923&r2=1299924&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/common/servicedef/services_test.xml (original)
>>> +++ ofbiz/trunk/framework/common/servicedef/services_test.xml Mon Mar 12 
>>> 23:20:55 2012
>>> @@ -199,6 +199,7 @@ under the License.
>>>     <service name="testScriptEngineJavaScript" engine="script" 
>>> location="component://common/script/org/ofbiz/common/JavaScriptTest.js" 
>>> invoke="">
>>>         <description>Test Script Engine With JavaScript</description>
>>>         <attribute name="message" type="String" mode="IN" optional="true"/>
>>> +<attribute name="partyId" type="String" mode="IN" optional="true"/>
>>>         <attribute name="result" type="String" mode="OUT"/>
>>>     </service>
>>> 
>>> 
>>> Added: 
>>> ofbiz/trunk/framework/common/src/META-INF/services/org.ofbiz.base.util.ScriptHelperFactory
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/META-INF/services/org.ofbiz.base.util.ScriptHelperFactory?rev=1299924&view=auto
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/common/src/META-INF/services/org.ofbiz.base.util.ScriptHelperFactory
>>>  (added)
>>> +++ 
>>> ofbiz/trunk/framework/common/src/META-INF/services/org.ofbiz.base.util.ScriptHelperFactory
>>>  Mon Mar 12 23:20:55 2012
>>> @@ -0,0 +1,18 @@
>>> +# 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.
>>> +
>>> +org.ofbiz.common.scripting.ScriptHelperFactoryImpl
>>> 
>>> Added: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ContextHelper.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ContextHelper.java?rev=1299924&view=auto
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ContextHelper.java
>>>  (added)
>>> +++ 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ContextHelper.java
>>>  Mon Mar 12 23:20:55 2012
>>> @@ -0,0 +1,268 @@
>>> +/*******************************************************************************
>>> + * 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.ofbiz.common.scripting;
>>> +
>>> +import java.util.HashMap;
>>> +import java.util.Iterator;
>>> +import java.util.Locale;
>>> +import java.util.Map;
>>> +import java.util.TimeZone;
>>> +
>>> +import javax.script.ScriptContext;
>>> +import javax.script.ScriptEngine;
>>> +import javax.servlet.http.HttpServletRequest;
>>> +import javax.servlet.http.HttpServletResponse;
>>> +
>>> +import org.ofbiz.base.util.Assert;
>>> +import org.ofbiz.base.util.ScriptUtil;
>>> +import org.ofbiz.base.util.collections.FlexibleMapAccessor;
>>> +import org.ofbiz.base.util.string.FlexibleStringExpander;
>>> +import org.ofbiz.entity.Delegator;
>>> +import org.ofbiz.entity.GenericValue;
>>> +import org.ofbiz.security.Security;
>>> +import org.ofbiz.security.authz.Authorization;
>>> +import org.ofbiz.service.LocalDispatcher;
>>> +
>>> +/**
>>> + * A set of<code>ScriptContext</code>  convenience methods for scripting 
>>> engines.
>>> + */
>>> +public final class ContextHelper {
>>> +
>>> +    public static final String module = ContextHelper.class.getName();
>>> +    private static final int EVENT = 1;
>>> +    private static final int SERVICE = 2;
>>> +    private static final int UNKNOWN = 3;
>>> +
>>> +    private final ScriptContext context;
>>> +    private final int scriptType;
>>> +
>>> +    public ContextHelper(ScriptContext context) {
>>> +        Assert.notNull("context", context);
>>> +        this.context = context;
>>> +        if (context.getAttribute("request") != null) {
>>> +            this.scriptType = EVENT;
>>> +        } else if (context.getAttribute("dctx") != null) {
>>> +            this.scriptType = SERVICE;
>>> +        } else {
>>> +            this.scriptType = UNKNOWN;
>>> +        }
>>> +    }
>>> +
>>> +    public Object addBinding(String key, Object value) {
>>> +        return getBindings().put(key, value);
>>> +    }
>>> +
>>> +    /** Expands environment variables delimited with ${} */
>>> +    public String expandString(String original) {
>>> +        return FlexibleStringExpander.expandString(original, 
>>> getBindings());
>>> +    }
>>> +
>>> +    public Authorization getAuthz() {
>>> +        return (Authorization) this.context.getAttribute("authz");
>>> +    }
>>> +
>>> +    public Map<String, Object>  getBindings() {
>>> +        return this.context.getBindings(ScriptContext.ENGINE_SCOPE);
>>> +    }
>>> +
>>> +    public Delegator getDelegator() {
>>> +        return (Delegator) this.context.getAttribute("delegator");
>>> +    }
>>> +
>>> +    public LocalDispatcher getDispatcher() {
>>> +        return (LocalDispatcher) this.context.getAttribute("dispatcher");
>>> +    }
>>> +
>>> +    public<T>  T getEnv(FlexibleMapAccessor<T>  fma) {
>>> +        return fma.get(getBindings());
>>> +    }
>>> +
>>> +    /**
>>> +     * Gets the named value from the environment. Supports the "." (dot) 
>>> syntax to access
>>> +     * Map members and the "[]" (bracket) syntax to access List entries. 
>>> This value is
>>> +     * expanded, supporting the insertion of other environment values 
>>> using the "${}"
>>> +     * notation.
>>> +     *
>>> +     * @param key
>>> +     *            The name of the environment value to get. Can contain 
>>> "." and "[]"
>>> +     *            syntax elements as described above.
>>> +     * @return The environment value if found, otherwise null.
>>> +     */
>>> +    public<T>  T getEnv(String key) {
>>> +        String ekey = this.expandString(key);
>>> +        FlexibleMapAccessor<T>  fma = 
>>> FlexibleMapAccessor.getInstance(ekey);
>>> +        return getEnv(fma);
>>> +    }
>>> +
>>> +    public Iterator<Map.Entry<String, Object>>  getEnvEntryIterator() {
>>> +        return getBindings().entrySet().iterator();
>>> +    }
>>> +
>>> +    public Locale getLocale() {
>>> +        return (Locale) this.context.getAttribute("locale");
>>> +    }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public Object getParameter(String key) {
>>> +        Map<?, ?>  parameters = (Map) 
>>> this.context.getAttribute(ScriptUtil.PARAMETERS_KEY);
>>> +        return parameters != null ? parameters.get(key) : null;
>>> +    }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public Map<String, Object>  getParameters() {
>>> +        return (Map<String, Object>) 
>>> this.context.getAttribute(ScriptUtil.PARAMETERS_KEY);
>>> +    }
>>> +
>>> +    public HttpServletRequest getRequest() {
>>> +        return (HttpServletRequest) this.context.getAttribute("request");
>>> +    }
>>> +
>>> +    public HttpServletResponse getResponse() {
>>> +        return (HttpServletResponse) this.context.getAttribute("response");
>>> +    }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public Object getResult(String key) {
>>> +        Map<?, ?>  results = (Map) 
>>> this.context.getAttribute(ScriptUtil.RESULT_KEY);
>>> +        return results != null ? results.get(key) : null;
>>> +    }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public Map<String, Object>  getResults() {
>>> +        return (Map<String, Object>) 
>>> this.context.getAttribute(ScriptUtil.RESULT_KEY);
>>> +    }
>>> +
>>> +    public String getScriptName() {
>>> +        String scriptName = (String) 
>>> this.context.getAttribute(ScriptEngine.FILENAME);
>>> +        return scriptName != null ? scriptName : "Unknown";
>>> +    }
>>> +
>>> +    public Security getSecurity() {
>>> +        return (Security) this.context.getAttribute("security");
>>> +    }
>>> +
>>> +    public TimeZone getTimeZone() {
>>> +        return (TimeZone) this.context.getAttribute("timeZone");
>>> +    }
>>> +
>>> +    public GenericValue getUserLogin() {
>>> +        return (GenericValue) this.context.getAttribute("userLogin");
>>> +    }
>>> +
>>> +    public boolean isEvent() {
>>> +        return this.scriptType == EVENT;
>>> +    }
>>> +
>>> +    public boolean isService() {
>>> +        return this.scriptType == SERVICE;
>>> +    }
>>> +
>>> +    /**
>>> +     * Calls putEnv for each entry in the Map, thus allowing for the 
>>> additional
>>> +     * flexibility in naming supported in that method.
>>> +     */
>>> +    public void putAllEnv(Map<String, ? extends Object>  values) {
>>> +        for (Map.Entry<String, ? extends Object>  entry : 
>>> values.entrySet()) {
>>> +            this.putEnv(entry.getKey(), entry.getValue());
>>> +        }
>>> +    }
>>> +
>>> +    public<T>  void putEnv(FlexibleMapAccessor<T>  fma, T value) {
>>> +        fma.put(getBindings(), value);
>>> +    }
>>> +
>>> +    /**
>>> +     * Puts the named value in the environment. Supports the "." (dot) 
>>> syntax to access
>>> +     * Map members and the "[]" (bracket) syntax to access List entries. 
>>> If the brackets
>>> +     * for a list are empty the value will be appended to end of the list, 
>>> otherwise the
>>> +     * value will be set in the position of the number in the brackets. If 
>>> a "+" (plus
>>> +     * sign) is included inside the square brackets before the index 
>>> number the value will
>>> +     * inserted/added at that index instead of set at that index. This 
>>> value is expanded,
>>> +     * supporting the insertion of other environment values using the 
>>> "${}" notation.
>>> +     *
>>> +     * @param key
>>> +     *            The name of the environment value to get. Can contain 
>>> "." syntax
>>> +     *            elements as described above.
>>> +     * @param value
>>> +     *            The value to set in the named environment location.
>>> +     */
>>> +    public<T>  void putEnv(String key, T value) {
>>> +        String ekey = this.expandString(key);
>>> +        FlexibleMapAccessor<T>  fma = 
>>> FlexibleMapAccessor.getInstance(ekey);
>>> +        this.putEnv(fma, value);
>>> +    }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public void putParameter(String key, Object value) {
>>> +        Map<String, Object>  parameters = (Map) 
>>> this.context.getAttribute(ScriptUtil.PARAMETERS_KEY);
>>> +        if (parameters == null) {
>>> +            parameters = new HashMap<String, Object>();
>>> +            this.context.setAttribute(ScriptUtil.PARAMETERS_KEY, 
>>> parameters, ScriptContext.ENGINE_SCOPE);
>>> +        }
>>> +        parameters.put(key, value);
>>> +    }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public void putResult(String key, Object value) {
>>> +        Map<String, Object>  results = (Map) 
>>> this.context.getAttribute(ScriptUtil.RESULT_KEY);
>>> +        if (results == null) {
>>> +            results = new HashMap<String, Object>();
>>> +            this.context.setAttribute(ScriptUtil.RESULT_KEY, results, 
>>> ScriptContext.ENGINE_SCOPE);
>>> +        }
>>> +        results.put(key, value);
>>> +    }
>>> +
>>> +    @SuppressWarnings("unchecked")
>>> +    public void putResults(Map<String, Object>  results) {
>>> +        Map<String, Object>  existingResults = (Map) 
>>> this.context.getAttribute(ScriptUtil.RESULT_KEY);
>>> +        if (existingResults == null) {
>>> +            existingResults = new HashMap<String, Object>();
>>> +            this.context.setAttribute(ScriptUtil.RESULT_KEY, results, 
>>> ScriptContext.ENGINE_SCOPE);
>>> +        }
>>> +        existingResults.putAll(results);
>>> +    }
>>> +
>>> +    public Object removeBinding(String key) {
>>> +        return getBindings().remove(key);
>>> +    }
>>> +
>>> +    public<T>  T removeEnv(FlexibleMapAccessor<T>  fma) {
>>> +        return fma.remove(getBindings());
>>> +    }
>>> +
>>> +    /**
>>> +     * Removes the named value from the environment. Supports the "." 
>>> (dot) syntax to
>>> +     * access Map members and the "[]" (bracket) syntax to access List 
>>> entries. This value
>>> +     * is expanded, supporting the insertion of other environment values 
>>> using the "${}"
>>> +     * notation.
>>> +     *
>>> +     * @param key
>>> +     *            The name of the environment value to get. Can contain 
>>> "." syntax
>>> +     *            elements as described above.
>>> +     */
>>> +    public<T>  T removeEnv(String key) {
>>> +        String ekey = this.expandString(key);
>>> +        FlexibleMapAccessor<T>  fma = 
>>> FlexibleMapAccessor.getInstance(ekey);
>>> +        return removeEnv(fma);
>>> +    }
>>> +
>>> +    public void setUserLogin(GenericValue userLogin, String 
>>> userLoginEnvName) {
>>> +        putEnv(userLoginEnvName, userLogin);
>>> +    }
>>> +}
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ContextHelper.java
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ContextHelper.java
>>> ------------------------------------------------------------------------------
>>>    svn:keywords = Author Date Id Rev URL
>>> 
>>> Added: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperFactoryImpl.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperFactoryImpl.java?rev=1299924&view=auto
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperFactoryImpl.java
>>>  (added)
>>> +++ 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperFactoryImpl.java
>>>  Mon Mar 12 23:20:55 2012
>>> @@ -0,0 +1,35 @@
>>> +/*******************************************************************************
>>> + * 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.ofbiz.common.scripting;
>>> +
>>> +import javax.script.ScriptContext;
>>> +
>>> +import org.ofbiz.base.util.ScriptHelper;
>>> +import org.ofbiz.base.util.ScriptHelperFactory;
>>> +
>>> +/**
>>> + * An implementation of the<code>ScriptHelperFactory</code>  interface.
>>> + */
>>> +public final class ScriptHelperFactoryImpl implements ScriptHelperFactory {
>>> +
>>> +    @Override
>>> +    public ScriptHelper getInstance(ScriptContext context) {
>>> +        return new ScriptHelperImpl(context);
>>> +    }
>>> +}
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperFactoryImpl.java
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperFactoryImpl.java
>>> ------------------------------------------------------------------------------
>>>    svn:keywords = Author Date Id Rev URL
>>> 
>>> Added: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperImpl.java
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperImpl.java?rev=1299924&view=auto
>>> ==============================================================================
>>> --- 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperImpl.java
>>>  (added)
>>> +++ 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperImpl.java
>>>  Mon Mar 12 23:20:55 2012
>>> @@ -0,0 +1,283 @@
>>> +/*******************************************************************************
>>> + * 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.ofbiz.common.scripting;
>>> +
>>> +import java.util.Collections;
>>> +import java.util.HashMap;
>>> +import java.util.HashSet;
>>> +import java.util.List;
>>> +import java.util.Map;
>>> +import java.util.Set;
>>> +
>>> +import javax.script.ScriptContext;
>>> +import javax.script.ScriptException;
>>> +
>>> +import org.ofbiz.base.util.Assert;
>>> +import org.ofbiz.base.util.Debug;
>>> +import org.ofbiz.base.util.ScriptHelper;
>>> +import org.ofbiz.base.util.UtilGenerics;
>>> +import org.ofbiz.base.util.UtilValidate;
>>> +import org.ofbiz.entity.Delegator;
>>> +import org.ofbiz.entity.GenericEntityException;
>>> +import org.ofbiz.entity.GenericPK;
>>> +import org.ofbiz.entity.GenericValue;
>>> +import org.ofbiz.entity.model.ModelEntity;
>>> +import org.ofbiz.service.GenericServiceException;
>>> +import org.ofbiz.service.ModelService;
>>> +import org.ofbiz.service.ServiceUtil;
>>> +
>>> +/**
>>> + * An implementation of the<code>ScriptHelper</code>  interface.
>>> + */
>>> +public final class ScriptHelperImpl implements ScriptHelper {
>>> +
>>> +    public static final String module = ScriptHelperImpl.class.getName();
>>> +    private static final Map<String, ? extends Object>  EMPTY_ARGS = 
>>> Collections.unmodifiableMap(new HashMap<String, Object>());
>>> +
>>> +    private static GenericValue runFindByPrimaryKey(ModelEntity 
>>> modelEntity, ContextHelper ctxHelper, boolean useCache, boolean 
>>> autoFieldMap,
>>> +            Map<String, ? extends Object>  fieldMap, List<String>  
>>> selectFieldList) throws ScriptException {
>>> +        Map<String, Object>  entityContext = new HashMap<String, Object>();
>>> +        Delegator delegator = ctxHelper.getDelegator();
>>> +        Map<String, Object>  context = ctxHelper.getBindings();
>>> +        if (autoFieldMap) {
>>> +            GenericValue tempVal = 
>>> delegator.makeValue(modelEntity.getEntityName());
>>> +            Object parametersObj = context.get("parameters");
>>> +            if (parametersObj != null&&  parametersObj instanceof Map<?, 
>>> ?>) {
>>> +                tempVal.setAllFields(UtilGenerics.checkMap(parametersObj), 
>>> true, null, Boolean.TRUE);
>>> +            }
>>> +            tempVal.setAllFields(context, true, null, Boolean.TRUE);
>>> +            entityContext.putAll(tempVal);
>>> +        }
>>> +        if (fieldMap != null) {
>>> +            entityContext.putAll(fieldMap);
>>> +        }
>>> +        entityContext.put("locale", context.get("locale"));
>>> +        entityContext.put("timeZone", context.get("timeZone"));
>>> +        modelEntity.convertFieldMapInPlace(entityContext, delegator);
>>> +        entityContext.remove("locale");
>>> +        entityContext.remove("timeZone");
>>> +        Set<String>  fieldsToSelect = null;
>>> +        if (selectFieldList != null) {
>>> +            fieldsToSelect = new HashSet<String>(selectFieldList);
>>> +        }
>>> +        if (fieldsToSelect != null&&  useCache) {
>>> +            String errMsg = "Error running script " + 
>>> ctxHelper.getScriptName() + ": Problem invoking the findOne method: Cannot 
>>> specify selectFieldList argument when useCache is set to true ";
>>> +            Debug.logWarning(errMsg, module);
>>> +            throw new ScriptException(errMsg);
>>> +        }
>>> +        GenericValue valueOut = null;
>>> +        GenericPK entityPK = delegator.makePK(modelEntity.getEntityName(), 
>>> entityContext);
>>> +        if (entityPK.containsPrimaryKey(true)) {
>>> +            try {
>>> +                if (useCache) {
>>> +                    valueOut = delegator.findOne(entityPK.getEntityName(), 
>>> entityPK, true);
>>> +                } else {
>>> +                    if (fieldsToSelect != null) {
>>> +                        valueOut = 
>>> delegator.findByPrimaryKeyPartial(entityPK, fieldsToSelect);
>>> +                    } else {
>>> +                        valueOut = 
>>> delegator.findOne(entityPK.getEntityName(), entityPK, false);
>>> +                    }
>>> +                }
>>> +            } catch (GenericEntityException e) {
>>> +                String errMsg = "Error running script " + 
>>> ctxHelper.getScriptName() + ": Problem invoking the findOne method: " + 
>>> e.getMessage();
>>> +                Debug.logWarning(e, errMsg, module);
>>> +                throw new ScriptException(errMsg);
>>> +            }
>>> +        } else {
>>> +            if (Debug.warningOn()) {
>>> +                Debug.logWarning("Error running script " + 
>>> ctxHelper.getScriptName() + ": Returning null because found incomplete 
>>> primary key in find: " + entityPK, module);
>>> +            }
>>> +        }
>>> +        return valueOut;
>>> +    }
>>> +
>>> +    private final ContextHelper ctxHelper;
>>> +
>>> +    public ScriptHelperImpl(ScriptContext context) {
>>> +        this.ctxHelper = new ContextHelper(context);
>>> +    }
>>> +
>>> +    public Map<String, ? extends Object>  createServiceMap(String 
>>> serviceName, Map<String, ? extends Object>  inputMap) throws 
>>> ScriptException {
>>> +        Assert.notNull("serviceName", serviceName, "inputMap", inputMap);
>>> +        Map<String, Object>  toMap = new HashMap<String, Object>();
>>> +        ModelService modelService = null;
>>> +        try {
>>> +            modelService = 
>>> ctxHelper.getDispatcher().getDispatchContext().getModelService(serviceName);
>>> +        } catch (GenericServiceException e) {
>>> +            String errMsg = "Error running script " + 
>>> ctxHelper.getScriptName() + ": Problem invoking the createServiceMap 
>>> method: get service definition for service name [" + serviceName + "]: " + 
>>> e.getMessage();
>>> +            Debug.logWarning(e, errMsg, module);
>>> +            throw new ScriptException(errMsg);
>>> +        }
>>> +        toMap.putAll(modelService.makeValid(inputMap, "IN", true, null, 
>>> ctxHelper.getTimeZone(), ctxHelper.getLocale()));
>>> +        return toMap;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void error(String message) {
>>> +        if (ctxHelper.isEvent()) {
>>> +            ctxHelper.putResult("_error_message_", 
>>> ctxHelper.expandString(message));
>>> +            ctxHelper.putResult("_response_code_", "error");
>>> +        } else if (ctxHelper.isService()) {
>>> +            
>>> ctxHelper.putResults(ServiceUtil.returnError(ctxHelper.expandString(message)));
>>> +        }
>>> +    }
>>> +
>>> +    @Override
>>> +    public String evalString(String original) {
>>> +        return ctxHelper.expandString(original);
>>> +    }
>>> +
>>> +    @Override
>>> +    public void failure(String message) {
>>> +        if (ctxHelper.isEvent()) {
>>> +            ctxHelper.putResult("_error_message_", 
>>> ctxHelper.expandString(message));
>>> +            ctxHelper.putResult("_response_code_", "fail");
>>> +        } else if (ctxHelper.isService()) {
>>> +            
>>> ctxHelper.putResults(ServiceUtil.returnFailure(ctxHelper.expandString(message)));
>>> +        }
>>> +    }
>>> +
>>> +    public List<Map<String, Object>>  findList(String entityName, 
>>> Map<String, ? extends Object>  fields) throws ScriptException {
>>> +        try {
>>> +            return 
>>> UtilGenerics.checkList(ctxHelper.getDelegator().findByAnd(entityName, 
>>> fields));
>>> +        } catch (GenericEntityException e) {
>>> +            String errMsg = "Error running script " + 
>>> ctxHelper.getScriptName() + ": Problem invoking the findList method: " + 
>>> e.getMessage();
>>> +            Debug.logWarning(e, errMsg, module);
>>> +            throw new ScriptException(errMsg);
>>> +        }
>>> +    }
>>> +
>>> +    public Map<String, Object>  findOne(String entityName) throws 
>>> ScriptException {
>>> +        return findOne(entityName, null, EMPTY_ARGS);
>>> +    }
>>> +
>>> +    public Map<String, Object>  findOne(String entityName, Map<String, ? 
>>> extends Object>  fields, Map<String, ? extends Object>  args) throws 
>>> ScriptException {
>>> +        Assert.notNull("entityName", entityName);
>>> +        if (args == null) {
>>> +            args = EMPTY_ARGS;
>>> +        }
>>> +        boolean useCache = "true".equals(args.get("useCache"));
>>> +        boolean autoFieldMap = !"false".equals(args.get("autoFieldMap"));
>>> +        List<String>  selectFieldList = 
>>> UtilGenerics.checkList(args.get("selectFieldList"));
>>> +        ModelEntity modelEntity = 
>>> ctxHelper.getDelegator().getModelEntity(entityName);
>>> +        if (modelEntity == null) {
>>> +            throw new ScriptException("Error running script " + 
>>> ctxHelper.getScriptName() + " - no entity definition found for entity name 
>>> [" + entityName + "]");
>>> +        }
>>> +        return runFindByPrimaryKey(modelEntity, ctxHelper, useCache, 
>>> autoFieldMap, fields, selectFieldList);
>>> +    }
>>> +
>>> +    public void logError(String message) {
>>> +        String expandedMessage = ctxHelper.expandString(message);
>>> +        Debug.logError("[".concat(ctxHelper.getScriptName()).concat("] 
>>> ").concat(expandedMessage), module);
>>> +    }
>>> +
>>> +    public void logInfo(String message) {
>>> +        String expandedMessage = ctxHelper.expandString(message);
>>> +        Debug.logInfo("[".concat(ctxHelper.getScriptName()).concat("] 
>>> ").concat(expandedMessage), module);
>>> +    }
>>> +
>>> +    public void logWarning(String message) {
>>> +        String expandedMessage = ctxHelper.expandString(message);
>>> +        Debug.logWarning("[".concat(ctxHelper.getScriptName()).concat("] 
>>> ").concat(expandedMessage), module);
>>> +    }
>>> +
>>> +    public Map<String, Object>  makeValue(String entityName) throws 
>>> ScriptException {
>>> +        return ctxHelper.getDelegator().makeValidValue(entityName);
>>> +    }
>>> +
>>> +    public Map<String, Object>  makeValue(String entityName, Map<String, 
>>> Object>  fields) throws ScriptException {
>>> +        return ctxHelper.getDelegator().makeValidValue(entityName, fields);
>>> +    }
>>> +
>>> +    public Map<String, ? extends Object>  runService(String serviceName, 
>>> Map<String, ? extends Object>  inputMap) throws ScriptException {
>>> +        return runService(serviceName, inputMap, EMPTY_ARGS);
>>> +    }
>>> +
>>> +    public Map<String, ? extends Object>  runService(String serviceName, 
>>> Map<String, ? extends Object>  inputMap, Map<String, ? extends Object>  
>>> args) throws ScriptException {
>>> +        Assert.notNull("serviceName", serviceName, "args", args);
>>> +        boolean includeUserLogin = 
>>> !"false".equals(args.get("includeUserLoginStr"));
>>> +        String requireNewTransactionStr = (String) 
>>> args.get("requireNewTransaction");
>>> +        int transactionTimeout = -1;
>>> +        if (UtilValidate.isNotEmpty(requireNewTransactionStr)) {
>>> +            String timeoutStr = (String) args.get("transactionTimout");
>>> +            if (!UtilValidate.isEmpty(timeoutStr)) {
>>> +                try {
>>> +                    transactionTimeout = Integer.parseInt(timeoutStr);
>>> +                } catch (NumberFormatException e) {
>>> +                    Debug.logWarning(e, "Setting timeout to 0 (default)", 
>>> module);
>>> +                    transactionTimeout = 0;
>>> +                }
>>> +            }
>>> +        }
>>> +        Map<String, Object>  inMap = new HashMap<String, Object>(inputMap);
>>> +        if (includeUserLogin&&  !inMap.containsKey("userLogin")) {
>>> +            GenericValue userLogin = ctxHelper.getUserLogin();
>>> +            if (userLogin != null) {
>>> +                inMap.put("userLogin", userLogin);
>>> +            }
>>> +        }
>>> +        if (!inMap.containsKey("locale")&&  ctxHelper.getLocale() != null) 
>>> {
>>> +            inMap.put("locale", ctxHelper.getLocale());
>>> +        }
>>> +        if (!inMap.containsKey("timeZone")&&  ctxHelper.getTimeZone() != 
>>> null) {
>>> +            inMap.put("timeZone", ctxHelper.getTimeZone());
>>> +        }
>>> +        Map<String, Object>  result = null;
>>> +        try {
>>> +            if (UtilValidate.isEmpty(requireNewTransactionStr)&&  
>>> transactionTimeout<  0) {
>>> +                result = ctxHelper.getDispatcher().runSync(serviceName, 
>>> inMap);
>>> +            } else {
>>> +                ModelService modelService = 
>>> ctxHelper.getDispatcher().getDispatchContext().getModelService(serviceName);
>>> +                boolean requireNewTransaction = 
>>> modelService.requireNewTransaction;
>>> +                int timeout = modelService.transactionTimeout;
>>> +                if (UtilValidate.isNotEmpty(requireNewTransactionStr)) {
>>> +                    requireNewTransaction = 
>>> "true".equals(requireNewTransactionStr);
>>> +                }
>>> +                if (transactionTimeout>= 0) {
>>> +                    timeout = transactionTimeout;
>>> +                }
>>> +                result = ctxHelper.getDispatcher().runSync(serviceName, 
>>> inMap, timeout, requireNewTransaction);
>>> +            }
>>> +        } catch (GenericServiceException e) {
>>> +            String errMsg = "Error running script " + 
>>> ctxHelper.getScriptName() + " [problem invoking the [" + serviceName + "] 
>>> service: " + e.getMessage();
>>> +            Debug.logWarning(e, errMsg, module);
>>> +            throw new ScriptException(errMsg);
>>> +        }
>>> +        return result;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void success() {
>>> +        if (ctxHelper.isEvent()) {
>>> +            ctxHelper.putResult("_response_code_", "success");
>>> +        } else if (ctxHelper.isService()) {
>>> +            ctxHelper.putResults(ServiceUtil.returnSuccess());
>>> +        }
>>> +    }
>>> +
>>> +    @Override
>>> +    public void success(String message) {
>>> +        if (ctxHelper.isEvent()) {
>>> +            ctxHelper.putResult("_event_message_", 
>>> ctxHelper.expandString(message));
>>> +            ctxHelper.putResult("_response_code_", "success");
>>> +        } else if (ctxHelper.isService()) {
>>> +            
>>> ctxHelper.putResults(ServiceUtil.returnSuccess(ctxHelper.expandString(message)));
>>> +        }
>>> +    }
>>> +}
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperImpl.java
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>> 
>>> Propchange: 
>>> ofbiz/trunk/framework/common/src/org/ofbiz/common/scripting/ScriptHelperImpl.java
>>> ------------------------------------------------------------------------------
>>>    svn:keywords = Author Date Id Rev URL
>>> 
>>> 

Reply via email to