/* * 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.runtime.module.extension.internal.config.dsl.parameter; import static org.mule.metadata.java.api.utils.JavaTypeUtils.getType; import static org.mule.runtime.core.util.ClassUtils.withContextClassLoader; import org.mule.metadata.api.model.ObjectType; import org.mule.runtime.core.api.Event; import org.mule.runtime.core.api.MuleContext; import org.mule.runtime.module.extension.internal.config.dsl.AbstractExtensionObjectFactory; import org.mule.runtime.module.extension.internal.runtime.objectbuilder.DefaultObjectBuilder; import org.mule.runtime.module.extension.internal.runtime.resolver.ObjectBuilderValueResolver; import org.mule.runtime.module.extension.internal.runtime.resolver.ValueResolver; /** * An {@link AbstractExtensionObjectFactory} to resolve extension objects that can be defined as named top level elements and be * placed in the mule registry. * <p> * The objects are parsed as a {@link ValueResolver}. If that resolver is not static, then a value is obtained using a default * {@link Event} and that value is returned. Otherwise, the dynamic {@link ValueResolver} is returned instead. * * @since 4.0 */ public class InlineParameterGroupObjectFactory extends AbstractExtensionObjectFactory<Object> { private DefaultObjectBuilder builder; private Class<Object> objectClass; private final ObjectType objectType; private final ClassLoader classLoader; public InlineParameterGroupObjectFactory(ObjectType type, ClassLoader classLoader, MuleContext muleContext) { super(muleContext); this.classLoader = classLoader; this.objectType = type; withContextClassLoader(classLoader, () -> { objectClass = getType(type); builder = new DefaultObjectBuilder(objectClass); }); } @Override public Object doGetObject() throws Exception { return withContextClassLoader(classLoader, () -> { // TODO MULE-10919 - This logic is similar to that of the resolverset object builder and should // be generalized resolveParameters(objectType, builder); resolveParameterGroups(objectType, builder); return new ObjectBuilderValueResolver<>(builder, muleContext); }, Exception.class, exception -> { throw exception; }); } }