/** * * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. * * Licensed 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.apache.tuscany.container.rhino.config; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.tuscany.container.rhino.context.JavaScriptComponentContext; import org.apache.tuscany.container.rhino.rhino.RhinoScript; import org.apache.tuscany.core.builder.ContextCreationException; import org.apache.tuscany.core.builder.ContextFactory; import org.apache.tuscany.core.builder.ContextResolver; import org.apache.tuscany.core.context.AtomicContext; import org.apache.tuscany.core.context.CompositeContext; import org.apache.tuscany.core.wire.SourceWireFactory; import org.apache.tuscany.core.wire.TargetWireFactory; import org.apache.tuscany.model.assembly.Scope; /** * Creates instance contexts for JavaScript component types * * @version $Rev$ $Date$ */ public class JavaScriptContextFactory implements ContextFactory, ContextResolver { private Scope scope; private String name; private Map targetProxyFactories = new HashMap(); private List sourceProxyFactories = new ArrayList(); private Map services; private Map properties; private RhinoScript invoker; private CompositeContext parentContext; public JavaScriptContextFactory(String name, Scope scope, Map services, Map properties, RhinoScript invoker) { this.name = name; this.scope = scope; this.services = services; this.properties = properties; this.invoker = invoker; } public AtomicContext createContext() throws ContextCreationException { return new JavaScriptComponentContext(name, services, properties, sourceProxyFactories, targetProxyFactories, invoker.copy()); } public Scope getScope() { return scope; } public String getName() { return name; } public void addProperty(String propertyName, Object value) { properties.put(propertyName, value); } public void addTargetWireFactory(String serviceName, TargetWireFactory factory) { targetProxyFactories.put(serviceName, factory); } public TargetWireFactory getTargetWireFactory(String serviceName) { return targetProxyFactories.get(serviceName); } public Map getTargetWireFactories() { return targetProxyFactories; } public void addSourceWireFactory(String referenceName, SourceWireFactory factory) { sourceProxyFactories.add(factory); } public void addSourceWireFactories(String referenceName, Class referenceInterface, List factories, boolean multiplicity) { sourceProxyFactories.addAll(factories); } public List getSourceWireFactories() { return sourceProxyFactories; } public void prepare(CompositeContext parent) { parentContext = parent; } public CompositeContext getCurrentContext() { return parentContext; } }