Search in sources :

Example 1 with ServiceJarXmlLoader

use of org.apache.openejb.config.provider.ServiceJarXmlLoader in project tomee by apache.

the class ProviderGenerator method main.

public static void main(final String[] args) throws Exception {
    final ProviderManager manager = new ProviderManager(new ServiceJarXmlLoader());
    final Set<String> seen = new HashSet<>();
    final List<ServiceProvider> providers = manager.load("org.apache.tomee");
    for (final ServiceProvider provider : providers) {
        final List<String> types = provider.getTypes();
        final String name = guessBuilder(types);
        final String builder = name + "Builder";
        if (seen.contains(builder)) {
            continue;
        }
        seen.add(builder);
        final String service = provider.getService();
        final File file = new File("/Users/dblevins/work/all/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/typed/" + builder + ".java");
        final OutputStream write = IO.write(file);
        final PrintStream out = new PrintStream(write);
        out.println("/*\n" + " * Licensed to the Apache Software Foundation (ASF) under one or more\n" + " * contributor license agreements.  See the NOTICE file distributed with\n" + " * this work for additional information regarding copyright ownership.\n" + " * The ASF licenses this file to You under the Apache License, Version 2.0\n" + " * (the \"License\"); you may not use this file except in compliance with\n" + " * the License.  You may obtain a copy of the License at\n" + " *\n" + " *     http://www.apache.org/licenses/LICENSE-2.0\n" + " *\n" + " *  Unless required by applicable law or agreed to in writing, software\n" + " *  distributed under the License is distributed on an \"AS IS\" BASIS,\n" + " *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" + " *  See the License for the specific language governing permissions and\n" + " *  limitations under the License.\n" + " */");
        out.println("package org.apache.openejb.config.typed;");
        out.println();
        out.println("import org.apache.openejb.config.typed.util.*;");
        out.println("import org.apache.openejb.config.sys.*;");
        out.println("import javax.xml.bind.annotation.*;");
        out.println("import " + Duration.class.getName() + ";");
        out.println("import java.util.*;");
        out.println("import java.util.concurrent.*;");
        out.println("import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;");
        out.println();
        out.println(template("@XmlAccessorType(XmlAccessType.FIELD)\n" + "@XmlRootElement(name = \"${name}\")\n" + "public class ${builder} extends ${service} {\n").apply("builder", builder, "service", service, "name", name));
        for (final Map.Entry<Object, Object> entry : provider.getProperties().entrySet()) {
            final String key = Strings.lcfirst(entry.getKey().toString());
            final String value = entry.getValue().toString();
            final String type = guessType(key, value);
            if (Duration.class.getName().endsWith(type)) {
                out.println("    @XmlJavaTypeAdapter(DurationAdapter.class)");
            }
            out.println(template("    @XmlAttribute\n" + "    private ${type} ${key} = ${value};").apply("builder", builder, "key", key, "value", asValue(type, value), "type", type));
        }
        out.println();
        // Constructor
        out.println(template("    public ${builder}() {\n" + "        setClassName(\"${className}\");\n" + "        setType(\"${type}\");\n" + "        setId(\"${name}\");\n").apply("builder", builder, "className", String.valueOf(provider.getClassName()), "type", types.get(0), "name", name));
        if (provider.getConstructor() != null) {
            out.println(template("        setConstructor(\"${constructor}\");\n").apply("constructor", fixConstructor(provider)));
        }
        if (provider.getFactoryName() != null) {
            out.println(template("        setFactoryName(\"${factoryName}\");\n").apply("factoryName", provider.getFactoryName()));
        }
        out.println("    }\n");
        // Setters
        out.println(template("    public ${builder} id(String id) {\n" + "        setId(id);\n" + "        return this;\n" + "    }\n").apply("builder", builder));
        for (final Map.Entry<Object, Object> entry : provider.getProperties().entrySet()) {
            final String lcFirstKey = Strings.lcfirst(entry.getKey().toString());
            final String ucFirstKey = Strings.ucfirst(lcFirstKey);
            final String value = entry.getValue().toString();
            final String type = guessType(lcFirstKey, value);
            // builder method
            out.println(template("    public ${builder} with${Key}(${type} ${key}) {\n" + "        this.${key} = ${key};\n" + "        return this;\n" + "    }\n").apply("builder", builder, "key", lcFirstKey, "Key", ucFirstKey, "value", value, "type", type));
            // setter
            out.println(template("    public void set${Key}(${type} ${key}) {\n" + "        this.${key} = ${key};\n" + "    }\n").apply("key", lcFirstKey, "Key", ucFirstKey, "value", value, "type", type));
            // getter
            out.println(template("    public ${type} get${Key}() {\n" + "        return ${key};\n" + "    }\n").apply("key", lcFirstKey, "Key", ucFirstKey, "value", value, "type", type));
            if (Duration.class.getName().equals(type)) {
                out.println(template("    public ${builder} with${Key}(long time, TimeUnit unit) {\n" + "        return with${Key}(new Duration(time, unit));\n" + "    }\n").apply("builder", builder, "key", lcFirstKey, "Key", ucFirstKey, "value", value, "type", type));
                out.println(template("    public void set${Key}(long time, TimeUnit unit) {\n" + "        set${Key}(new Duration(time, unit));\n" + "    }\n").apply("key", lcFirstKey, "Key", ucFirstKey, "value", value, "type", type));
            }
            final String s = lcFirstKey.toLowerCase(Locale.ENGLISH);
            if ("long".equals(type) && s.contains("time")) {
                TimeUnit unit = null;
                if (s.endsWith("millis")) {
                    unit = TimeUnit.MILLISECONDS;
                } else if (s.endsWith("milliseconds")) {
                    unit = TimeUnit.MILLISECONDS;
                } else if (s.endsWith("seconds")) {
                    unit = TimeUnit.SECONDS;
                } else if (s.endsWith("minutes")) {
                    unit = TimeUnit.MINUTES;
                } else if (s.endsWith("hours")) {
                    unit = TimeUnit.HOURS;
                }
                if (unit == null) {
                    continue;
                }
                final Pattern pattern = Pattern.compile("(millis(econds)?|seconds|minutes|hours)", Pattern.CASE_INSENSITIVE);
                final String lcFirstKey2 = pattern.matcher(lcFirstKey).replaceAll("");
                final String ucFirstKey2 = pattern.matcher(ucFirstKey).replaceAll("");
                out.println(template("    public ${builder} with${Key2}(long time, TimeUnit unit) {\n" + "        return with${Key}(TimeUnit.${unit}.convert(time, unit));\n" + "    }\n").apply("builder", builder, "key2", lcFirstKey2, "Key2", ucFirstKey2, "key", lcFirstKey, "Key", ucFirstKey, "value", value, "unit", unit.name(), "type", type));
                out.println(template("    public void set${Key2}(long time, TimeUnit unit) {\n" + "        set${Key}(TimeUnit.${unit}.convert(time, unit));\n" + "    }\n").apply("key2", lcFirstKey2, "Key2", ucFirstKey2, "key", lcFirstKey, "Key", ucFirstKey, "value", value, "unit", unit.name(), "type", type));
            }
        }
        out.println("    public Properties getProperties() {\n" + "        return Builders.getProperties(this);\n" + "    }\n");
        out.println("}");
        out.flush();
        out.close();
    }
}
Also used : PrintStream(java.io.PrintStream) Pattern(java.util.regex.Pattern) OutputStream(java.io.OutputStream) Duration(org.apache.openejb.util.Duration) ProviderManager(org.apache.openejb.config.provider.ProviderManager) ServiceProvider(org.apache.openejb.config.sys.ServiceProvider) TimeUnit(java.util.concurrent.TimeUnit) ServiceJarXmlLoader(org.apache.openejb.config.provider.ServiceJarXmlLoader) File(java.io.File) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet)

Example 2 with ServiceJarXmlLoader

use of org.apache.openejb.config.provider.ServiceJarXmlLoader in project tomee by apache.

the class ServiceUtils method getManager.

public static ProviderManager getManager() {
    final ProviderManager manager = SystemInstance.get().getComponent(ProviderManager.class);
    if (manager != null) {
        return manager;
    }
    SystemInstance.get().setComponent(ProviderManager.class, new ProviderManager(new ServiceJarXmlLoader()));
    return getManager();
}
Also used : ProviderManager(org.apache.openejb.config.provider.ProviderManager) ServiceJarXmlLoader(org.apache.openejb.config.provider.ServiceJarXmlLoader)

Example 3 with ServiceJarXmlLoader

use of org.apache.openejb.config.provider.ServiceJarXmlLoader in project tomee by apache.

the class ServiceProviderInheritanceTest method test.

public void test() throws Exception {
    SystemInstance.get().setComponent(ProviderManager.class, new ProviderManager(new ProviderLoader() {

        final ProviderLoader loader = new ServiceJarXmlLoader();

        @Override
        public ServiceProvider load(final ID id) {
            {
                // try the regular loader
                final ServiceProvider provider = loader.load(id);
                if (provider != null)
                    return provider;
            }
            if ("color".equalsIgnoreCase(id.getName())) {
                final ServiceProvider color = new ServiceProvider(Color.class, "Color", "Resource");
                color.getProperties().setProperty("red", "0");
                color.getProperties().setProperty("green", "0");
                color.getProperties().setProperty("blue", "0");
                color.getTypes().add(Color.class.getName());
                return color;
            }
            if ("red".equalsIgnoreCase(id.getName())) {
                final ServiceProvider red = new ServiceProvider();
                red.setId("Red");
                red.setParent("Color");
                red.getProperties().setProperty("red", "255");
                return red;
            }
            if ("orange".equalsIgnoreCase(id.getName())) {
                final ServiceProvider orange = new ServiceProvider();
                orange.setId("Orange");
                orange.setParent("Red");
                orange.getProperties().setProperty("green", "200");
                return orange;
            }
            throw new IllegalStateException(id.toString());
        }

        @Override
        public List<ServiceProvider> load(final String namespace) {
            final List<ServiceProvider> list = loader.load(namespace);
            list.add(load(new ID(namespace, "color")));
            list.add(load(new ID(namespace, "red")));
            list.add(load(new ID(namespace, "orange")));
            return list;
        }
    }));
    final ConfigurationFactory factory = new ConfigurationFactory();
    final Assembler assembler = new Assembler();
    assembler.createSecurityService(factory.configureService(SecurityServiceInfo.class));
    assembler.createTransactionManager(factory.configureService(TransactionServiceInfo.class));
    {
        final Resource orange = new Resource("Orange", Color.class.getName(), "Orange");
        final ResourceInfo resourceInfo = factory.configureService(orange, ResourceInfo.class);
        assertEquals(Color.class.getName(), resourceInfo.className);
        assertEquals("Orange", resourceInfo.id);
        assertEquals(3, resourceInfo.properties.size());
        assertEquals("255", resourceInfo.properties.get("red"));
        assertEquals("200", resourceInfo.properties.get("green"));
        assertEquals("0", resourceInfo.properties.get("blue"));
        assembler.createResource(resourceInfo);
    }
    {
        final EjbJar ejbJar = new EjbJar();
        ejbJar.addEnterpriseBean(new SingletonBean(MyBean.class));
        final AppContext application = assembler.createApplication(factory.configureApplication(new EjbModule(ejbJar)));
        final MyBean myBean = (MyBean) application.getBeanContexts().get(0).getBusinessLocalBeanHome().create();
        final Color color = myBean.getColor();
        assertNotNull(color);
        assertEquals(255, color.getRed());
        assertEquals(200, color.getGreen());
        assertEquals(0, color.getBlue());
    }
}
Also used : ResourceInfo(org.apache.openejb.assembler.classic.ResourceInfo) AppContext(org.apache.openejb.AppContext) EjbModule(org.apache.openejb.config.EjbModule) ProviderLoader(org.apache.openejb.config.provider.ProviderLoader) SingletonBean(org.apache.openejb.jee.SingletonBean) TransactionServiceInfo(org.apache.openejb.assembler.classic.TransactionServiceInfo) ProviderManager(org.apache.openejb.config.provider.ProviderManager) ConfigurationFactory(org.apache.openejb.config.ConfigurationFactory) ID(org.apache.openejb.config.provider.ID) Assembler(org.apache.openejb.assembler.classic.Assembler) ServiceJarXmlLoader(org.apache.openejb.config.provider.ServiceJarXmlLoader) SecurityServiceInfo(org.apache.openejb.assembler.classic.SecurityServiceInfo) EjbJar(org.apache.openejb.jee.EjbJar)

Aggregations

ProviderManager (org.apache.openejb.config.provider.ProviderManager)3 ServiceJarXmlLoader (org.apache.openejb.config.provider.ServiceJarXmlLoader)3 File (java.io.File)1 OutputStream (java.io.OutputStream)1 PrintStream (java.io.PrintStream)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 TimeUnit (java.util.concurrent.TimeUnit)1 Pattern (java.util.regex.Pattern)1 AppContext (org.apache.openejb.AppContext)1 Assembler (org.apache.openejb.assembler.classic.Assembler)1 ResourceInfo (org.apache.openejb.assembler.classic.ResourceInfo)1 SecurityServiceInfo (org.apache.openejb.assembler.classic.SecurityServiceInfo)1 TransactionServiceInfo (org.apache.openejb.assembler.classic.TransactionServiceInfo)1 ConfigurationFactory (org.apache.openejb.config.ConfigurationFactory)1 EjbModule (org.apache.openejb.config.EjbModule)1 ID (org.apache.openejb.config.provider.ID)1 ProviderLoader (org.apache.openejb.config.provider.ProviderLoader)1 ServiceProvider (org.apache.openejb.config.sys.ServiceProvider)1