This is actually minor: shouldn't the JavaScriptTest.js and 
GroovyServiceTest.groovy files go into the org/ofbiz/common/test folder?

Jacopo


On Mar 14, 2012, at 5:38 AM, Scott Gray wrote:

> 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