summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/java-M1-20060522/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/java-M1-20060522/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java')
-rw-r--r--sca-java-1.x/tags/java-M1-20060522/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java160
1 files changed, 160 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/java-M1-20060522/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java b/sca-java-1.x/tags/java-M1-20060522/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
new file mode 100644
index 0000000000..f9ac2b0559
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-20060522/java/sca/core/src/main/java/org/apache/tuscany/core/loader/StAXUtil.java
@@ -0,0 +1,160 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * 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.core.loader;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.core.config.ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.ConfigurationException;
+import org.apache.tuscany.core.config.ConfigurationLoadException;
+import org.apache.tuscany.core.config.impl.Java5ComponentTypeIntrospector;
+import org.apache.tuscany.core.config.processor.ProcessorUtils;
+import org.apache.tuscany.core.loader.assembly.ComponentLoader;
+import org.apache.tuscany.core.loader.assembly.EntryPointLoader;
+import org.apache.tuscany.core.loader.assembly.InterfaceJavaLoader;
+import org.apache.tuscany.core.loader.assembly.ModuleFragmentLoader;
+import org.apache.tuscany.core.loader.assembly.ModuleLoader;
+import org.apache.tuscany.core.loader.impl.StAXLoaderRegistryImpl;
+import org.apache.tuscany.core.loader.impl.StringParserPropertyFactory;
+import org.apache.tuscany.core.loader.system.SystemBindingLoader;
+import org.apache.tuscany.core.loader.system.SystemImplementationLoader;
+import org.apache.tuscany.core.system.assembly.SystemAssemblyFactory;
+import org.apache.tuscany.core.system.assembly.SystemImplementation;
+import org.apache.tuscany.core.system.assembly.impl.SystemAssemblyFactoryImpl;
+import org.apache.tuscany.model.assembly.AssemblyContext;
+import org.apache.tuscany.model.assembly.Component;
+import org.apache.tuscany.model.assembly.EntryPoint;
+import org.apache.tuscany.model.assembly.Module;
+import org.apache.tuscany.model.assembly.ModuleComponent;
+import org.apache.tuscany.model.assembly.Multiplicity;
+import org.apache.tuscany.model.assembly.OverrideOption;
+import org.apache.tuscany.model.assembly.Scope;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public final class StAXUtil {
+ private static final Map<String, Multiplicity> MULTIPLICITY = new HashMap<String, Multiplicity>(4);
+ private static final Map<String, OverrideOption> OVERRIDE_OPTIONS = new HashMap<String, OverrideOption>(3);
+
+ static {
+ MULTIPLICITY.put("0..1", Multiplicity.ZERO_ONE);
+ MULTIPLICITY.put("1..1", Multiplicity.ONE_ONE);
+ MULTIPLICITY.put("0..n", Multiplicity.ZERO_N);
+ MULTIPLICITY.put("1..n", Multiplicity.ONE_N);
+
+ OVERRIDE_OPTIONS.put("no", OverrideOption.NO);
+ OVERRIDE_OPTIONS.put("may", OverrideOption.MAY);
+ OVERRIDE_OPTIONS.put("must", OverrideOption.MUST);
+ }
+
+ private StAXUtil() {
+ }
+
+ public static void skipToEndElement(XMLStreamReader reader) throws XMLStreamException {
+ int depth = 0;
+ while (true) {
+ int event = reader.next();
+ if (event == XMLStreamConstants.START_ELEMENT) {
+ depth++;
+ } else if (event == XMLStreamConstants.END_ELEMENT) {
+ if (depth == 0) {
+ return;
+ }
+ depth--;
+ }
+ }
+ }
+
+ public static Multiplicity multiplicity(String multiplicity, Multiplicity def) {
+ return multiplicity == null ? def : MULTIPLICITY.get(multiplicity);
+ }
+
+ public static OverrideOption overrideOption(String overrideOption, OverrideOption def) {
+ return overrideOption == null ? def : OVERRIDE_OPTIONS.get(overrideOption);
+ }
+
+ public static ModuleComponent bootstrapLoader(String name, AssemblyContext context) throws ConfigurationLoadException {
+ SystemAssemblyFactory factory = new SystemAssemblyFactoryImpl();
+ ComponentTypeIntrospector introspector = ProcessorUtils.createCoreIntrospector(factory);
+ Module module = factory.createModule();
+ module.setName("org.apache.tuscany.core.system.loader");
+
+ List<Component> components = module.getComponents();
+
+ // bootstrap the minimal set of loaders needed to read the system module files
+ // all others should be defined in the system.module file
+ components.add(bootstrapLoader(factory, introspector, ModuleLoader.class));
+ components.add(bootstrapLoader(factory, introspector, ModuleFragmentLoader.class));
+ Component propFactory = factory.createSystemComponent("org.apache.tuscany.core.system.loader.DefaultPropertyFactory", StAXPropertyFactory.class, StringParserPropertyFactory.class, Scope.MODULE);
+ introspector.introspect(StAXPropertyFactory.class);
+ components.add(propFactory);
+ components.add(bootstrapLoader(factory, introspector, ComponentLoader.class));
+ components.add(bootstrapLoader(factory, introspector, EntryPointLoader.class));
+ components.add(bootstrapLoader(factory, introspector, InterfaceJavaLoader.class));
+ components.add(bootstrapLoader(factory, introspector, SystemImplementationLoader.class));
+ components.add(bootstrapLoader(factory, introspector, SystemBindingLoader.class));
+ // do not add additional loaders above - they should be in the system.module file
+
+ // bootstrap the registries needed by the bootstrap loaders above
+ bootstrapService(factory, introspector, module, StAXLoaderRegistry.class, StAXLoaderRegistryImpl.class);
+ bootstrapService(factory, introspector, module, SystemAssemblyFactory.class, SystemAssemblyFactoryImpl.class);
+ bootstrapService(factory, introspector, module, ComponentTypeIntrospector.class, Java5ComponentTypeIntrospector.class);
+
+ ModuleComponent mc = factory.createModuleComponent();
+ mc.setName(name);
+ mc.setImplementation(module);
+ mc.initialize(context);
+ return mc;
+ }
+
+ private static Component bootstrapLoader(SystemAssemblyFactory factory, ComponentTypeIntrospector introspector, Class<?> loaderClass) {
+ SystemImplementation implementation = factory.createSystemImplementation();
+ implementation.setImplementationClass(loaderClass);
+ try {
+ implementation.setComponentType(introspector.introspect(loaderClass));
+ } catch (ConfigurationException e) {
+ throw (AssertionError) new AssertionError("Invalid bootstrap loader").initCause(e);
+ }
+ Component component = factory.createSimpleComponent();
+ component.setName(loaderClass.getName());
+ component.setImplementation(implementation);
+ return component;
+ }
+
+ private static <T> void bootstrapService(SystemAssemblyFactory factory, ComponentTypeIntrospector introspector, Module module, Class<T> service, Class<? extends T> impl) {
+ String epName = service.getName();
+ String compName = impl.getName();
+
+ Component component = factory.createSystemComponent(compName, service, impl, Scope.MODULE);
+ try {
+ component.getImplementation().setComponentType(introspector.introspect(impl));
+ } catch (ConfigurationException e) {
+ throw (AssertionError) new AssertionError("Invalid bootstrap loader").initCause(e);
+ }
+
+ EntryPoint entryPoint = factory.createSystemEntryPoint(epName, service, compName);
+
+ module.getComponents().add(component);
+ module.getEntryPoints().add(entryPoint);
+ }
+}