use of org.mule.runtime.api.meta.model.declaration.fluent.SourceDeclarer in project mule by mulesoft.
the class SourceModelLoaderDelegate method declareMessageSource.
void declareMessageSource(ExtensionDeclarer extensionDeclarer, HasSourceDeclarer declarer, SourceElement sourceType, boolean supportsConfig) {
// TODO: MULE-9220 - Add a syntax validator which checks that the sourceType doesn't implement
if (isLifecycle(sourceType)) {
throw new IllegalSourceModelDefinitionException(format("Source class '%s' implements a lifecycle interface. Sources are not allowed to", sourceType.getName()));
}
final Optional<ExtensionParameter> configParameter = loader.getConfigParameter(sourceType);
final Optional<ExtensionParameter> connectionParameter = loader.getConnectionParameter(sourceType);
if (loader.isInvalidConfigSupport(supportsConfig, configParameter, connectionParameter)) {
throw new IllegalSourceModelDefinitionException(format("Source '%s' is defined at the extension level but it requires a config parameter. " + "Remove such parameter or move the source to the proper config", sourceType.getName()));
}
HasSourceDeclarer actualDeclarer = (HasSourceDeclarer) loader.selectDeclarerBasedOnConfig(extensionDeclarer, (Declarer) declarer, configParameter, connectionParameter);
SourceDeclarer existingDeclarer = sourceDeclarers.get(sourceType);
if (existingDeclarer != null) {
actualDeclarer.withMessageSource(existingDeclarer);
return;
}
SourceDeclarer sourceDeclarer = actualDeclarer.withMessageSource(sourceType.getAlias());
sourceDeclarer.withModelProperty(new ExtensionTypeDescriptorModelProperty(sourceType));
List<Type> sourceGenerics = sourceType.getSuperClassGenerics();
if (sourceGenerics.size() != 2) {
// TODO: MULE-9220: Add a syntax validator for this
throw new IllegalModelDefinitionException(format("Message source class '%s' was expected to have 2 generic types " + "(one for the Payload type and another for the Attributes type) but %d were found", sourceType.getName(), sourceGenerics.size()));
}
sourceDeclarer.hasResponse(sourceType.isAnnotatedWith(EmitsResponse.class)).requiresConnection(connectionParameter.isPresent());
sourceType.getDeclaringClass().ifPresent(clazz -> sourceDeclarer.withModelProperty(new SourceFactoryModelProperty(new DefaultSourceFactory((Class<? extends Source>) clazz))).withModelProperty(new ImplementingTypeModelProperty(clazz)));
processMimeType(sourceDeclarer, sourceType);
processComponentConnectivity(sourceDeclarer, sourceType, sourceType);
resolveOutputTypes(sourceDeclarer, sourceType);
loader.addExceptionEnricher(sourceType, sourceDeclarer);
declareSourceParameters(sourceType, sourceDeclarer);
declareSourceCallback(sourceType, sourceDeclarer);
sourceDeclarers.put(sourceType, sourceDeclarer);
}
use of org.mule.runtime.api.meta.model.declaration.fluent.SourceDeclarer in project mule by mulesoft.
the class MuleExtensionModelDeclarer method declareScheduler.
private void declareScheduler(ExtensionDeclarer extensionDeclarer, ClassTypeLoader typeLoader) {
SourceDeclarer scheduler = extensionDeclarer.withMessageSource("scheduler").hasResponse(false).describedAs("Source that schedules periodic execution of a flow.");
scheduler.withOutput().ofType(typeLoader.load(Object.class));
scheduler.withOutputAttributes().ofType(typeLoader.load(Object.class));
MetadataType baseSchedulingStrategy = typeLoader.load(Scheduler.class);
scheduler.onDefaultParameterGroup().withRequiredParameter("schedulingStrategy").ofType(baseSchedulingStrategy).withExpressionSupport(NOT_SUPPORTED);
MetadataType fixedFrequencyScheduler = typeLoader.load(FixedFrequencyScheduler.class);
MetadataType cronScheduler = typeLoader.load(CronScheduler.class);
extensionDeclarer.withSubType(baseSchedulingStrategy, fixedFrequencyScheduler);
extensionDeclarer.withSubType(baseSchedulingStrategy, cronScheduler);
// workaround for an "org.mule.runtime" package and still export the type in the extension model
extensionDeclarer.getDeclaration().addType((ObjectType) baseSchedulingStrategy);
extensionDeclarer.getDeclaration().addType((ObjectType) fixedFrequencyScheduler);
extensionDeclarer.getDeclaration().addType((ObjectType) cronScheduler);
}
Aggregations