/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.plugin.scripting.component; import org.mule.runtime.core.api.registry.Registry; import java.util.Collection; import java.util.Map; import java.util.Set; import javax.script.Bindings; /** * This class will attempt to lookup up objects inside the registry in case they don't exist in the delegate binding. This makes * it possible to reference named objects inside of Mule (such as a Spring bean) from a script with no extra work. */ public class RegistryLookupBindings implements Bindings { private final Bindings delegate; private final Registry registry; public RegistryLookupBindings(Registry registry, Bindings delegate) { this.registry = registry; this.delegate = delegate; } public Object put(String name, Object value) { return delegate.put(name, value); } public void putAll(Map<? extends String, ? extends Object> toMerge) { delegate.putAll(toMerge); } public boolean containsKey(Object key) { boolean containsKey = delegate.containsKey(key); if (!containsKey) { return registry.lookupObject(key.toString()) != null; } return containsKey; } public Object get(Object key) { Object object = delegate.get(key); if (object == null) { object = registry.lookupObject(key.toString()); } return object; } public Object remove(Object key) { return delegate.remove(key); } public int size() { return delegate.size(); } public boolean isEmpty() { return delegate.isEmpty(); } public boolean containsValue(Object value) { return delegate.containsValue(value); } public void clear() { delegate.clear(); } public Set<String> keySet() { return delegate.keySet(); } public Collection<Object> values() { return delegate.values(); } public Set<java.util.Map.Entry<String, Object>> entrySet() { return delegate.entrySet(); } public boolean equals(Object o) { return delegate.equals(o); } public int hashCode() { return delegate.hashCode(); } }