/** * * 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.ruby.loader; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamReader; import org.apache.tuscany.container.extension.loader.AbstractImplementationLoader; import org.apache.tuscany.container.ruby.assembly.RubyImplementation; import org.apache.tuscany.core.config.MissingResourceException; import org.apache.tuscany.core.loader.LoaderContext; import org.osoa.sca.annotations.Destroy; import org.osoa.sca.annotations.Init; import org.osoa.sca.annotations.Scope; /** * Ruby implementation loader. * */ @Scope("MODULE") public class RubyImplementationLoader extends AbstractImplementationLoader { // Qualified name for the Ruby implementation. public static final QName NAME = new QName("http://org.apache.tuscany/xmlns/ruby/0.9", "implementation.ruby"); /** * Lifecycle method registers the implementation loader. * */ @Init(eager = true) public void start() { registry.registerLoader(NAME, this); } /** * Lifecycle method deregisters the implementation loader. * */ @Destroy public void stop() { registry.unregisterLoader(NAME, this); } /** * Required to be implemented by the concrete classes. * @return Implementation object. */ protected RubyImplementation getAssemblyObject(XMLStreamReader reader, LoaderContext loaderContext) { RubyImplementation rubyImplementation = new RubyImplementation(); String script = reader.getAttributeValue(null, "script"); rubyImplementation.setScript(script); rubyImplementation.setResourceLoader(loaderContext.getResourceLoader()); return rubyImplementation; } /** * Gets the side file. * * @param reader Reader for the module file. * @param loaderContext Loader context. * @return Side file Url. * @throws MissingResourceException */ protected URL getSideFile(XMLStreamReader reader, LoaderContext loaderContext) throws MissingResourceException { String script = reader.getAttributeValue(null, "script"); String sidefile = script.substring(0, script.lastIndexOf('.')) + ".componentType"; URL componentTypeFile = loaderContext.getResourceLoader().getResource(sidefile); if (componentTypeFile == null) { throw new MissingResourceException(sidefile); } return componentTypeFile; } }