private void parseParameterDsl(ExtensionParameter extensionParameter, ParameterDeclarer parameter) { extensionParameter.getAnnotation(ParameterDsl.class).ifPresent( parameterDsl -> parameter .withDsl(ParameterDslConfiguration.builder() .allowsInlineDefinition(parameterDsl .allowInlineDefinition()) .allowsReferences(parameterDsl.allowReferences()) .build())); }
void addInfrastructureParameters(ExtensionType extensionType, ParameterizedModel model, ExplicitGroup sequence) { model.getAllParameterModels().stream() .filter(p -> p.getModelProperty(InfrastructureParameterModelProperty.class).isPresent()) .sorted(comparing(p -> p.getModelProperty(InfrastructureParameterModelProperty.class).get().getSequence())) .forEach(parameter -> { boolean isParameterRequired = parameter.isRequired() && !parameter.getDslConfiguration().allowsReferences() && !parameter.getDslConfiguration().allowTopLevelDefinition(); parameter.getModelProperty(QNameModelProperty.class) .map(QNameModelProperty::getValue) .ifPresent(qName -> addParameterToSequence(asList(createRefElement(qName, isParameterRequired)), sequence)); if (parameter.getName().equals(TLS_PARAMETER_NAME)) { addTlsSupport(extensionType); } }); }
private ImmutableParameterModel asParameter(ObjectFieldType field) { return new ImmutableParameterModel(field.getKey().getName().getLocalPart(), "", field.getValue(), false, field.isRequired(), false, false, getExpressionSupport(field), getDefaultValue(field).orElse(null), BEHAVIOUR, ParameterDslConfiguration.getDefaultInstance(), null, getLayoutModel(field).orElse(null), null, emptyList(), emptySet(), null); }
private void validateParameterIsPlural(final ParameterModel parameterModel, ParameterizedModel owner, ProblemsReporter problemsReporter) { if (!(owner instanceof FunctionModel || parameterModel.getExpressionSupport().equals(REQUIRED))) { ParameterDslConfiguration dslConfiguration = parameterModel.getDslConfiguration(); if (dslConfiguration.allowsInlineDefinition() || dslConfiguration.allowTopLevelDefinition()) parameterModel.getType().accept(new MetadataTypeVisitor() { @Override public void visitArrayType(ArrayType arrayType) { if (parameterModel.getName().equals(singularize(parameterModel.getName()))) { problemsReporter .addError(new Problem(parameterModel, format("Parameter '%s' in the %s '%s' is a collection and its name should be plural", parameterModel.getName(), getComponentModelTypeName(owner), owner.getName()))); } } }); } } }
@Override public void write(JsonWriter out, ParameterDslConfiguration value) throws IOException { out.beginObject(); out.name(ALLOWS_INLINE_DEFINITION).value(value.allowsInlineDefinition()); out.name(ALLOWS_REFERENCES).value(value.allowsReferences()); out.name(ALLOW_TOP_LEVEL_DEFINITION).value(value.allowTopLevelDefinition()); out.endObject(); }
@Override public void visitObject(ObjectType objectType) { if (model.getDslConfiguration().allowsReferences()) { getHashedGlobal(value).ifPresent(reference::set); } }
@Override public void visitArrayType(ArrayType arrayType) { if (model.getDslConfiguration().allowsReferences()) { getHashedGlobal(value).ifPresent(reference::set); } }
private void validateParameterIsPlural(final ParameterModel parameterModel, ParameterizedModel owner, ProblemsReporter problemsReporter) { if (!(owner instanceof FunctionModel || parameterModel.getExpressionSupport().equals(REQUIRED))) { ParameterDslConfiguration dslConfiguration = parameterModel.getDslConfiguration(); if (dslConfiguration.allowsInlineDefinition() || dslConfiguration.allowTopLevelDefinition()) parameterModel.getType().accept(new MetadataTypeVisitor() { @Override public void visitArrayType(ArrayType arrayType) { if (parameterModel.getName().equals(singularize(parameterModel.getName()))) { problemsReporter .addError(new Problem(parameterModel, format("Parameter '%s' in the %s '%s' is a collection and its name should be plural", parameterModel.getName(), getComponentModelTypeName(owner), owner.getName()))); } } }); } } }
public void isValidNameIfDoesntSupportChildElement() { when(invalidParameterModel.getType()).thenReturn(toMetadataType(List.class)); when(invalidParameterModel.getName()).thenReturn("thing"); when(invalidParameterModel.getDslConfiguration()).thenReturn(ParameterDslConfiguration.builder() .allowsInlineDefinition(false) .allowTopLevelDefinition(false) .build()); mockParameters(operationModel, invalidParameterModel); validate(extensionModel, validator); }
public static boolean acceptsReferences(ParameterModel parameterModel) { return parameterModel.getDslConfiguration().allowsReferences(); } }
private static ParameterModel getParameter() { ParameterModel parameterModel = mock(ParameterModel.class, withSettings().lenient()); when(parameterModel.getModelProperty(any())).thenReturn(Optional.empty()); when(parameterModel.getDslConfiguration()).thenReturn(ParameterDslConfiguration.getDefaultInstance()); when(parameterModel.getRole()).thenReturn(BEHAVIOUR); return parameterModel; }
@Override protected void onSource(SourceDeclaration source) { extractType(source).ifPresent(type -> { if (type.isAssignableTo(PollingSource.class)) { source.setRunsOnPrimaryNodeOnly(true); ParameterDeclaration parameter = new ParameterDeclaration(SCHEDULING_STRATEGY_PARAMETER_NAME); parameter.setDescription(SCHEDULING_STRATEGY_PARAMETER_DESCRIPTION); parameter.setRequired(true); parameter.setType(loader.load(Scheduler.class), false); parameter.setExpressionSupport(NOT_SUPPORTED); parameter.addModelProperty(new InfrastructureParameterModelProperty(10)); parameter.addModelProperty(new QNameModelProperty(new QName(CORE_NAMESPACE, SCHEDULING_STRATEGY_ELEMENT_IDENTIFIER, CORE_PREFIX))); parameter.setDslConfiguration(ParameterDslConfiguration.builder() .allowsInlineDefinition(true) .allowsReferences(false) .allowTopLevelDefinition(false) .build()); thereArePollingSources.set(true); source.getParameterGroup(DEFAULT_GROUP_NAME).addParameter(parameter); } }); } }.walk(extensionDeclarer.getDeclaration());
protected ExtensionType registerParameters(ExtensionType type, List<ParameterModel> parameterModels) { List<TopLevelElement> childElements = new LinkedList<>(); parameterModels.forEach(parameter -> { DslElementSyntax paramDsl = dsl.resolve(parameter); MetadataType parameterType = parameter.getType(); boolean shouldDeclare = true; if (parameter.getModelProperty(QNameModelProperty.class).isPresent() && !parameter.getDslConfiguration().allowsReferences()) { shouldDeclare = false; } if (shouldDeclare) { this.builder.declareAsParameter(parameterType, type, parameter, paramDsl, childElements); } }); appendToSequence(type, childElements); return type; }
@Before public void before() { when(extensionModel.getOperationModels()).thenReturn(asList(operationModel)); mockSubTypes(extensionModel); when(extensionModel.getName()).thenReturn("extensionModel"); when(extensionModel.getImportedTypes()).thenReturn(emptySet()); when(extensionModel.getXmlDslModel()) .thenReturn(XmlDslModel.builder().setPrefix("ns").setNamespace("http://www.mulesoft.org/schema/mule/ns") .setSchemaLocation("http://www.mulesoft.org/schema/mule/heisenberg/current/mule-ns.xsd").build()); when(operationModel.getName()).thenReturn("dummyOperation"); when(validParameterModel.getModelProperty(ParameterGroupModelProperty.class)).thenReturn(Optional.empty()); when(validParameterModel.getModelProperty(QNameModelProperty.class)).thenReturn(Optional.empty()); when(validParameterModel.getModelProperty(InfrastructureParameterModelProperty.class)).thenReturn(Optional.empty()); when(validParameterModel.getModelProperty(OAuthParameterModelProperty.class)).thenReturn(Optional.empty()); when(validParameterModel.getDslConfiguration()).thenReturn(ParameterDslConfiguration.getDefaultInstance()); when(validParameterModel.getRole()).thenReturn(BEHAVIOUR); when(validParameterModel.getLayoutModel()).thenReturn(Optional.empty()); when(invalidParameterModel.getModelProperty(ParameterGroupModelProperty.class)).thenReturn(Optional.empty()); when(invalidParameterModel.getModelProperty(QNameModelProperty.class)).thenReturn(Optional.empty()); when(invalidParameterModel.getModelProperty(InfrastructureParameterModelProperty.class)).thenReturn(Optional.empty()); when(invalidParameterModel.getModelProperty(OAuthParameterModelProperty.class)).thenReturn(Optional.empty()); when(invalidParameterModel.getDslConfiguration()).thenReturn(ParameterDslConfiguration.getDefaultInstance()); when(invalidParameterModel.getRole()).thenReturn(BEHAVIOUR); when(invalidParameterModel.getLayoutModel()).thenReturn(Optional.empty()); when(invalidParameterModel.getExpressionSupport()).thenReturn(SUPPORTED); }
@Override protected void onParameter(ParameterGroupDeclaration parameterGroup, ParameterDeclaration declaration) { ParameterDslConfiguration.Builder builder = ParameterDslConfiguration.builder(); boolean isContent = !declaration.getRole().equals(ParameterRole.BEHAVIOUR); ParameterDslConfiguration dslConfiguration = declaration.getDslConfiguration();
if (paramDsl.allowsReferences() && typeDsl.isPresent() && typeDsl.get().supportsTopLevelDeclaration() && !builder.isImported(type)) {
when(validParameterModel.getModelProperty(InfrastructureParameterModelProperty.class)).thenReturn(Optional.empty()); when(validParameterModel.getModelProperty(OAuthParameterModelProperty.class)).thenReturn(Optional.empty()); when(validParameterModel.getDslConfiguration()).thenReturn(ParameterDslConfiguration.getDefaultInstance()); when(validParameterModel.getRole()).thenReturn(BEHAVIOUR); when(validParameterModel.getLayoutModel()).thenReturn(Optional.empty()); when(invalidParameterModel.getModelProperty(InfrastructureParameterModelProperty.class)).thenReturn(Optional.empty()); when(invalidParameterModel.getModelProperty(OAuthParameterModelProperty.class)).thenReturn(Optional.empty()); when(invalidParameterModel.getDslConfiguration()).thenReturn(ParameterDslConfiguration.getDefaultInstance()); when(invalidParameterModel.getRole()).thenReturn(BEHAVIOUR); when(invalidParameterModel.getLayoutModel()).thenReturn(Optional.empty());
@Override public ParameterDslConfiguration read(JsonReader in) throws IOException { JsonObject json = new JsonParser().parse(in).getAsJsonObject(); return ParameterDslConfiguration.builder() .allowsInlineDefinition(read(json, ALLOWS_INLINE_DEFINITION)) .allowsReferences(read(json, ALLOWS_REFERENCES)) .allowTopLevelDefinition(read(json, ALLOW_TOP_LEVEL_DEFINITION)) .build(); }
private boolean acceptsReferences(ParameterModel parameterModel) { return parameterModel.getDslConfiguration().allowsReferences(); }
private ImmutableParameterModel asParameter(ObjectFieldType field) { return new ImmutableParameterModel(field.getKey().getName().getLocalPart(), "", field.getValue(), false, field.isRequired(), false, getExpressionSupport(field), getDefaultValue(field).orElse(null), BEHAVIOUR, ParameterDslConfiguration.getDefaultInstance(), null, getLayoutModel(field).orElse(null), null, emptyList(), emptySet()); }