@Override protected void onConnectionProvider(ConnectedDeclaration owner, ConnectionProviderDeclaration declaration) { if (owner instanceof ConfigurationDeclaration) { walkDeclaration(modelProperty, declaration.getAllParameters()); } }
@Override protected void onConnectionProvider(ConnectedDeclaration owner, ConnectionProviderDeclaration declaration) { final StereotypeModel defaultStereotype = createStereotype(declaration.getName(), CONNECTION); ifPresent(declaration.getModelProperty(ExtensionTypeDescriptorModelProperty.class) .map(ExtensionTypeDescriptorModelProperty::getType), type -> resolveStereotype(type, declaration, defaultStereotype), () -> declaration.withStereotype(defaultStereotype)); }
private void enrichCallbackValues(ConnectionProviderDeclaration declaration, Class type) { Map<Field, String> values = getAnnotatedFields(type, OAuthCallbackValue.class).stream() .collect(toMap(identity(), field -> field.getAnnotation(OAuthCallbackValue.class).expression())); if (!values.isEmpty()) { declaration.addModelProperty(new OAuthCallbackValuesModelProperty(values)); } }
@Override protected void onConnectionProvider(ConnectedDeclaration owner, ConnectionProviderDeclaration declaration) { final StereotypeModel defaultStereotype = createStereotype(declaration.getName(), CONNECTION); declaration.withStereotype(defaultStereotype); }
private void assertTestModuleConnectionProviders(ExtensionDeclaration extensionDeclaration) throws Exception { assertThat(extensionDeclaration.getConnectionProviders(), hasSize(2)); ConnectionProviderDeclaration connectionProvider = extensionDeclaration.getConnectionProviders().get(0); assertThat(connectionProvider.getName(), is(DEFAULT_CONNECTION_PROVIDER_NAME)); List<ParameterDeclaration> parameters = connectionProvider.getAllParameters(); assertThat(parameters, hasSize(3)); assertParameter(parameters, "saulPhoneNumber", "", STRING_TYPE, false, SUPPORTED, SAUL_OFFICE_NUMBER); ImplementingTypeModelProperty typeModelProperty = connectionProvider.getModelProperty(ImplementingTypeModelProperty.class).get(); assertThat(typeModelProperty.getType(), equalTo(HeisenbergConnectionProvider.class)); parameters = extensionDeclaration.getConnectionProviders().get(1).getAllParameters(); assertParameter(parameters, TLS_PARAMETER_NAME, "", toMetadataType(TlsContextFactory.class), true, NOT_SUPPORTED, null); }
private Optional<ConnectionProviderDeclaration> findMatchingProvider(ConnectedDeclaration<?> declaration, Element element) { Optional<String> alias = getAlias(element); String defaultNaming = hyphenize(element.getSimpleName().toString().replace("Provider", "")); return declaration.getConnectionProviders().stream() .filter(provider -> { String name = provider.getName(); if (alias.isPresent()) { return name.equals(alias.get()); } else { return name.equals(defaultNaming) || name.equals(DEFAULT_CONNECTION_PROVIDER_NAME); } }) .findAny(); }
@Override protected void onConnectionProvider(ConnectedDeclaration owner, ConnectionProviderDeclaration declaration) { if (!visitedProviders.add(new Reference<>(declaration))) { return; } if (declaration.getModelProperty(OAuthModelProperty.class).isPresent()) { if (owner instanceof ExtensionDeclaration) { oauthGloballySupported.set(true); stop(); } else if (owner instanceof ConfigurationDeclaration) { oauthConfigs.add(new Reference<>((ConfigurationDeclaration) owner)); } enrichOAuthParameters(declaration); extractImplementingType(declaration).ifPresent(type -> enrichCallbackValues(declaration, type)); } } }.walk(extensionDeclaration);
public void documentConnectionProviders(ConnectedDeclaration<?> declaration, TypeElement element) { getConnectionProviderClasses(processingEnv, element) .forEach(providerElement -> findMatchingProvider(declaration, providerElement) .ifPresent(provider -> { provider.setDescription(processor.getJavaDocSummary(processingEnv, providerElement)); parameterDeclarer.document(provider, providerElement); })); }
@Test public void deprecatedConnectionProviderTestCase() { ExtensionDeclaration extensionDeclaration = getEnrichedExtensionDeclaration(DeprecatedExtension.class); ConfigurationDeclaration configurationDeclaration = extensionDeclaration.getConfigurations().get(1); ConnectionProviderDeclaration connectionProviderDeclaration = configurationDeclaration.getConnectionProviders().get(0); assertTrue(connectionProviderDeclaration.getDeprecation().isPresent()); assertThat(connectionProviderDeclaration.getDeprecation().get().getMessage(), is("You should use the new connection provider")); assertThat(connectionProviderDeclaration.getDeprecation().get().getDeprecatedSince(), is("1.4.0")); assertTrue(connectionProviderDeclaration.getDeprecation().get().getToRemoveIn().isPresent()); assertThat(connectionProviderDeclaration.getDeprecation().get().getToRemoveIn().get(), is("2.0.0")); }
private void validateExpressionSupport(ConnectionProviderDeclaration provider, ParameterDeclaration parameter, Field field) { Expression expression = field.getAnnotation(Expression.class); if (expression != null && expression.value() != NOT_SUPPORTED) { throw new IllegalConnectionProviderModelDefinitionException( format( "Parameter '%s' in Connection Provider '%s' is marked as supporting expressions. Expressions are not supported " + "in OAuth parameters", parameter.getName(), provider.getName())); } }
@Override protected void onConnectionProvider(ConnectedDeclaration owner, ConnectionProviderDeclaration declaration) { if (!visitedProviders.add(new Reference<>(declaration))) { return; } if (declaration.getModelProperty(OAuthModelProperty.class).isPresent()) { if (owner instanceof ExtensionDeclaration) { oauthGloballySupported.set(true); stop(); } else if (owner instanceof ConfigurationDeclaration) { oauthConfigs.add(new Reference<>((ConfigurationDeclaration) owner)); } enrichOAuthParameters(declaration); extractImplementingType(declaration).ifPresent(type -> enrichCallbackValues(declaration, type)); } } }.walk(extensionDeclaration);
public void documentConnectionProviders(ConnectedDeclaration<?> declaration, TypeElement element) { getConnectionProviderClasses(processingEnv, element) .forEach(providerElement -> findMatchingProvider(declaration, providerElement) .ifPresent(provider -> { provider.setDescription(processor.getJavaDocSummary(processingEnv, providerElement)); parameterDeclarer.document(provider, providerElement); })); }
@Test public void nonDeprecatedConnectionProviderTestCase() { ExtensionDeclaration extensionDeclaration = getEnrichedExtensionDeclaration(DeprecatedExtension.class); ConfigurationDeclaration configurationDeclaration = extensionDeclaration.getConfigurations().get(1); ConnectionProviderDeclaration connectionProviderDeclaration = configurationDeclaration.getConnectionProviders().get(1); assertFalse(connectionProviderDeclaration.getDeprecation().isPresent()); }
@Override protected void onConnectionProvider(ConnectedDeclaration owner, ConnectionProviderDeclaration declaration) { final StereotypeModel defaultConnectionStereotype = newStereotype(declaration.getName(), namespace) .withParent(CONNECTION).build(); ifPresent( declaration.getModelProperty(ExtensionTypeDescriptorModelProperty.class) .map(ExtensionTypeDescriptorModelProperty::getType), type -> new ClassStereotypeResolver(type, declaration, namespace, defaultConnectionStereotype, stereotypes).resolveStereotype(), () -> declaration.withStereotype(defaultConnectionStereotype)); }
private ConnectionProviderDeclaration findProviderByName(ConnectedDeclaration<?> declaration, String name) { return declaration.getConnectionProviders().stream().filter(c -> c.getName().equals(name)).findAny().get(); }
private void enrichOAuthParameters(ConnectionProviderDeclaration declaration) { declaration.getAllParameters().forEach(p -> p.getModelProperty(DeclaringMemberModelProperty.class) .map(DeclaringMemberModelProperty::getDeclaringField) .ifPresent(field -> { OAuthParameter annotation = field.getAnnotation(OAuthParameter.class); if (annotation != null) { validateExpressionSupport(declaration, p, field); p.setExpressionSupport(NOT_SUPPORTED); p.addModelProperty(new OAuthParameterModelProperty(annotation.requestAlias())); } })); }
@Test public void connectionWithOutRequiredForMetadataParameterDontGetsEnriched() { enrichDeclaration(connectionProviderDeclaration, false); verify(connectionProviderDeclaration, never()).addModelProperty(any(RequiredForMetadataModelProperty.class)); }
private Optional<ConnectionProviderDeclaration> findMatchingProvider(ConnectedDeclaration<?> declaration, Element element) { Optional<String> alias = getAlias(element); String defaultNaming = hyphenize(element.getSimpleName().toString().replace("Provider", "")); return declaration.getConnectionProviders().stream() .filter(provider -> { String name = provider.getName(); if (alias.isPresent()) { return name.equals(alias.get()); } else { return name.equals(defaultNaming) || name.equals(DEFAULT_CONNECTION_PROVIDER_NAME); } }) .findAny(); }
@Test public void parsePathParameterThatIsDirectory() { ExtensionDeclaration declaration = marvelDeclarer.getDeclaration(); ConfigurationDeclaration config = findConfigByName(declaration, IronMan.CONFIG_NAME); ConnectionProviderDeclaration missileProvider = findProviderByName(config, MissileProvider.NAME); List<ParameterDeclaration> params = missileProvider.getAllParameters(); assertThat(params, hasSize(1)); ParameterDeclaration pathParam = params.get(0); Optional<PathModel> pathModel = pathParam.getDisplayModel().getPathModel(); assertThat(pathModel.isPresent(), is(true)); assertThat(pathModel.get().getType(), is(DIRECTORY)); assertThat(pathModel.get().acceptsUrls(), is(false)); assertThat(pathModel.get().getFileExtensions(), empty()); }
@Test public void connectionProviderWithRequiredForMetadataParameterGetsEnriched() { enrichDeclaration(connectionProviderDeclaration, true); verify(connectionProviderDeclaration).addModelProperty(argumentCaptor.capture()); RequiredForMetadataModelProperty value = argumentCaptor.getValue(); assertThat(value.getRequiredParameters(), is(hasItem(REQUIRED_PARAM))); }