@Test public void enrichOnlyOnceWhenFlyweight() throws Exception { when(extensionDeclaration.getOperations()).thenReturn(asList(connectedOperation, connectedOperation, notConnectedOperation)); enricher.enrich(extensionLoadingContext); verify(connectedOperation, times(1)).addModelProperty(isA(InterceptorsModelProperty.class)); }
@Test public void skipNotConnectedOperation() throws Exception { enricher.enrich(extensionLoadingContext); verify(notConnectedOperation, never()).addModelProperty(isA(InterceptorsModelProperty.class)); } }
@Override public void enrich(ExtensionLoadingContext extensionLoadingContext) { extensionLoadingContext.getExtensionDeclarer().getDeclaration().getOperations().stream() .filter(o -> o.getName().equals("doSomethingAsync")) .findFirst() .ifPresent(operation -> operation.addModelProperty( new ComponentExecutorModelProperty((model, params) -> new PrivilegedNonBlockingComponentExecutor()))); } }
@Test public void enrichConnectedOperation() throws Exception { enricher.enrich(extensionLoadingContext); verify(connectedOperation).addModelProperty(isA(InterceptorsModelProperty.class)); InterceptorsModelProperty interceptors = connectedOperation.getModelProperty(InterceptorsModelProperty.class).get(); assertThat(interceptors.getInterceptorFactories(), hasSize(2)); assertThat(interceptors.getInterceptorFactories().get(0).createInterceptor(), is(instanceOf(ConnectionInterceptor.class))); assertThat(interceptors.getInterceptorFactories().get(1).createInterceptor(), is(instanceOf(CursorResetInterceptor.class))); }
private void enrichWithDsql(OperationDeclaration declaration, MethodElement method) { Query query = method.getAnnotation(Query.class).get(); declaration.addModelProperty(new MetadataResolverFactoryModelProperty(() -> new QueryMetadataResolverFactory( query .nativeOutputResolver(), query .entityResolver()))); addQueryModelProperties(declaration, query); declareDynamicType(declaration.getOutput()); declareMetadataKeyId(declaration, null); enrichMetadataKeyParameters(declaration, nullMetadataResolver); }
private OperationDeclaration buildUnauthorizeOperation() { OperationDeclaration operation = new OperationDeclaration(UNAUTHORIZE_OPERATION_NAME); operation.setDescription("Deletes all the access token information of a given resource owner id so that it's impossible to " + "execute any operation for that user without doing the authorization dance again"); operation.setBlocking(true); operation.setExecutionType(BLOCKING); operation.setOutput(toDeclaration(voidType)); operation.setOutputAttributes(toDeclaration(voidType)); operation.setRequiresConnection(false); operation.setSupportsStreaming(false); operation.setTransactional(false); operation.addModelProperty(new ComponentExecutorModelProperty((model, params) -> new UnauthorizeOperationExecutor())); ParameterGroupDeclaration group = operation.getParameterGroup(DEFAULT_GROUP_NAME); group.showInDsl(false); ParameterDeclaration parameter = new ParameterDeclaration(RESOURCE_OWNER_ID_PARAMETER_NAME); parameter.setDescription("The id of the resource owner which access should be invalidated"); parameter.setExpressionSupport(SUPPORTED); parameter.setLayoutModel(LayoutModel.builder().build()); parameter.setRequired(false); parameter.setParameterRole(BEHAVIOUR); parameter.setType(stringType, false); group.addParameter(parameter); return operation; }
private void enrichWithDsql(OperationDeclaration declaration, MethodElement method) { Query query = method.getAnnotation(Query.class).get(); declaration.addModelProperty(new MetadataResolverFactoryModelProperty(() -> new QueryMetadataResolverFactory( query .nativeOutputResolver(), query .entityResolver()))); addQueryModelProperties(declaration, query); declareDynamicType(declaration.getOutput()); declareMetadataKeyId(declaration, () -> nullMetadataResolver); enrichMetadataKeyParameters(declaration, nullMetadataResolver); }
private OperationDeclaration buildUnauthorizeOperation() { OperationDeclaration operation = new OperationDeclaration(UNAUTHORIZE_OPERATION_NAME); operation.setDescription("Deletes all the access token information of a given resource owner id so that it's impossible to " + "execute any operation for that user without doing the authorization dance again"); operation.setBlocking(true); operation.setExecutionType(BLOCKING); operation.setOutput(toDeclaration(voidType)); operation.setOutputAttributes(toDeclaration(voidType)); operation.setRequiresConnection(false); operation.setSupportsStreaming(false); operation.setTransactional(false); operation.addModelProperty(new ComponentExecutorModelProperty((model, params) -> new UnauthorizeOperationExecutor())); ParameterGroupDeclaration group = operation.getParameterGroup(DEFAULT_GROUP_NAME); group.showInDsl(false); ParameterDeclaration parameter = new ParameterDeclaration(RESOURCE_OWNER_ID_PARAMETER_NAME); parameter.setDescription("The id of the resource owner which access should be invalidated"); parameter.setExpressionSupport(SUPPORTED); parameter.setLayoutModel(LayoutModel.builder().build()); parameter.setRequired(false); parameter.setParameterRole(BEHAVIOUR); parameter.setType(stringType, false); group.addParameter(parameter); return operation; }