protected QName getSubstitutionGroup(ComponentModel componentModel, QName fallback) { return componentModel.getModelProperty(CustomStereotypeModelProperty.class) .map(mp -> getSubstitutionGroup(componentModel.getStereotype())) .orElse(fallback); } }
private MetadataKeyIdModelProperty findMetadataKeyIdModelProperty(ComponentModel component) throws MetadataResolvingException { return component.getModelProperty(MetadataKeyIdModelProperty.class) .orElseThrow(() -> buildException(format("Component '%s' doesn't have a MetadataKeyId " + "parameter associated", component.getName()))); }
private Optional<MetadataCacheId> resolveCategoryId(DslElementModel<?> elementModel) { if (!(elementModel.getModel() instanceof ComponentModel)) { return empty(); } return ((ComponentModel) elementModel.getModel()).getModelProperty(MetadataKeyIdModelProperty.class) .map(mp -> mp.getCategoryName().orElse(null)) .map(name -> new MetadataCacheId(name.hashCode(), "category:" + name)); }
private Optional<MetadataCacheId> resolveMetadataKeyParts(DslElementModel<?> elementModel, ComponentModel componentModel, boolean includeAllKeys) { if (!includeAllKeys) { boolean isMultilevel = componentModel.getModelProperty(MetadataKeyIdModelProperty.class) .map(MetadataKeyIdModelProperty::getType) .map(t -> t instanceof ObjectType) .orElse(false); boolean isPartialFetching = componentModel.getModelProperty(MetadataResolverFactoryModelProperty.class) .map(mp -> mp.getMetadataResolverFactory().getKeyResolver()) .map(resolver -> resolver instanceof PartialTypeKeysResolver) .orElse(false); if (!isMultilevel || !isPartialFetching) { return empty(); } } List<MetadataCacheId> parts = new ArrayList<>(); componentModel.getAllParameterModels().stream() .filter(p -> p.getModelProperty(MetadataKeyPartModelProperty.class).isPresent()) .map(metadataKeyPart -> elementModel.findElement(metadataKeyPart.getName())) .filter(Optional::isPresent) .map(Optional::get) .filter(partElement -> partElement.getValue().isPresent()) .forEach(partElement -> resolveKeyFromSimpleValue(partElement).ifPresent(parts::add)); return parts.isEmpty() ? empty() : of(new MetadataCacheId(parts, "metadataKey")); }
/** * This method returns a default {@link MediaType} given a {@link ComponentModel}. * * The first that applies will happen: * - If the component has a {@link MediaTypeModelProperty}, and this property has a MediaType, this one will be returned. * - If the compenent has an Output, a MediaType acording to this output will be returned. * - Otherwise, the ANY MediaType will be returned. * * @param componentModel {@link ComponentModel} that we want to get the defaultMediaType from. * @return the default {@link MediaType} according to the componentModel. */ public static MediaType getDefaultMediaType(ComponentModel componentModel) { Optional<MediaTypeModelProperty> mediaTypeModelProperty = componentModel.getModelProperty(MediaTypeModelProperty.class); if (mediaTypeModelProperty.isPresent() && mediaTypeModelProperty.get().getMediaType().isPresent()) { return mediaTypeModelProperty.get().getMediaType().get(); } if (componentModel instanceof HasOutputModel) { MetadataType output = ((HasOutputModel) componentModel).getOutput().getType(); return JAVA.equals(output.getMetadataFormat()) && output instanceof ObjectType ? MediaType.APPLICATION_JAVA : getMediaTypeFromMetadataType(output); } return ANY; }
public MetadataMediator(T componentModel) { this.component = componentModel; this.metadataKeyParts = getMetadataKeyParts(componentModel); this.keysDelegate = new MetadataKeysDelegate(componentModel, metadataKeyParts); this.keyIdObjectResolver = new MetadataKeyIdObjectResolver(component); this.outputDelegate = new MetadataOutputDelegate(componentModel); this.inputDelegate = new MetadataInputDelegate(componentModel); componentModel.getModelProperty(MetadataKeyIdModelProperty.class) .ifPresent(keyIdMP -> keyContainerName = keyIdMP.getParameterName()); }
private void setMetadataKeyIdModelProperty(Class<?> type) { when(componentModel.getModelProperty(MetadataKeyIdModelProperty.class)) .thenReturn(of(new MetadataKeyIdModelProperty(new JavaTypeLoader(this.getClass().getClassLoader()).load(type), EMPTY))); }
private void validateMetadataKeyId(ComponentModel model, MetadataResolverFactory resolverFactory, ProblemsReporter problemsReporter) { final String modelTypeName = capitalize(getComponentModelTypeName(model)); Optional<MetadataKeyIdModelProperty> keyId = model.getModelProperty(MetadataKeyIdModelProperty.class); if (keyId.isPresent()) {
/** * Makes sure that the operation is valid by invoking {@link #validateOperationConfiguration(ConfigurationProvider)} and then * delegates on {@link #doInitialise()} for custom initialisation * * @throws InitialisationException if a fatal error occurs causing the Mule instance to shutdown */ @Override public final void initialise() throws InitialisationException { if (cursorProviderFactory == null) { cursorProviderFactory = componentModel.getModelProperty(PagedOperationModelProperty.class) .map(p -> (CursorProviderFactory) streamingManager.forObjects().getDefaultCursorProviderFactory()) .orElseGet(() -> streamingManager.forBytes().getDefaultCursorProviderFactory()); } withContextClassLoader(classLoader, () -> { validateConfigurationProviderIsNotExpression(); findConfigurationProvider().ifPresent(this::validateOperationConfiguration); doInitialise(); return null; }, InitialisationException.class, e -> { throw new InitialisationException(e, this); }); setCacheIdGenerator(); }
@Test public void failToResolveWithOutMetadataKeyId() throws MetadataResolvingException { exception.expect(MetadataResolvingException.class); exception.expectMessage(is("Component 'SomeOperation' doesn't have a MetadataKeyId parameter associated")); setParameters(continentParam, countryParam, cityParam); when(componentModel.getModelProperty(MetadataKeyIdModelProperty.class)).thenReturn(empty()); keyIdObjectResolver = new MetadataKeyIdObjectResolver(componentModel); keyIdObjectResolver.resolve(MULTILEVEL_KEY); }
/** * Adds a {@code Connection} as a parameter in the {@code operationContext}, following the considerations in this type's * javadoc. * * @param executionContext the {@link ExecutionContext} for the operation to be executed * @throws IllegalArgumentException if the {@code operationContext} already contains a parameter of key * {@link ExtensionProperties#CONNECTION_PARAM} */ @Override public void before(ExecutionContext<ComponentModel> executionContext) throws Exception { final ComponentModel componentModel = executionContext.getComponentModel(); if (componentModel.getModelProperty(PagedOperationModelProperty.class).isPresent()) { return; } ExecutionContextAdapter<OperationModel> context = (ExecutionContextAdapter) executionContext; checkArgument(context.getVariable(CONNECTION_PARAM) == null, "A connection was already set for this operation context"); context.setVariable(CONNECTION_PARAM, getConnection(context)); if (!supportsStreaming(componentModel)) { setCloseCommand(executionContext, () -> release(executionContext)); } }
@Before public void before() throws MuleException { expressionManager = muleContext.getExpressionManager(); event = eventBuilder(muleContext).message(Message.builder().value("").attributesValue(attributes).build()).build(); when(operationContext.getEvent()).thenReturn(event); when(operationContext.getMuleContext()).thenReturn(muleContext); when(componentModel.getModelProperty(MediaTypeModelProperty.class)).thenReturn(empty()); }
@Test public void operationTargetMessageWithDefaultMimeType() { when(componentModel.getModelProperty(MediaTypeModelProperty.class)).thenReturn(of( new MediaTypeModelProperty(APPLICATION_JSON .toRfcString(), true))); delegate = createDelegate("#[message]"); CoreEvent result = delegate.asReturnValue(payload, operationContext); assertMessage(result.getMessage()); assertThat(result.getVariables().get(TARGET).getValue(), is(instanceOf(Message.class))); Message message = (Message) result.getVariables().get(TARGET).getValue(); assertThat(message.getPayload().getValue(), is(payload)); assertThat(message.getPayload().getDataType().getMediaType().toRfcString(), containsString(APPLICATION_JSON.toRfcString())); }
private MetadataKeyIdModelProperty findMetadataKeyIdModelProperty(ComponentModel component) throws MetadataResolvingException { return component.getModelProperty(MetadataKeyIdModelProperty.class) .orElseThrow(() -> buildException(format("Component '%s' doesn't have a MetadataKeyId " + "parameter associated", component.getName()))); }
public MetadataMediator(T componentModel) { this.component = componentModel; this.metadataKeyParts = getMetadataKeyParts(componentModel); this.keysDelegate = new MetadataKeysDelegate(componentModel, metadataKeyParts); this.keyIdObjectResolver = new MetadataKeyIdObjectResolver(component); this.outputDelegate = new MetadataOutputDelegate(componentModel); this.inputDelegate = new MetadataInputDelegate(componentModel); componentModel.getModelProperty(MetadataKeyIdModelProperty.class) .ifPresent(keyIdMP -> keyContainerName = keyIdMP.getParameterName()); }
private void validateMetadataKeyId(ComponentModel model, MetadataResolverFactory resolverFactory, ProblemsReporter problemsReporter) { Optional<MetadataKeyIdModelProperty> keyId = model.getModelProperty(MetadataKeyIdModelProperty.class); if (keyId.isPresent()) {
/** * Makes sure that the operation is valid by invoking {@link #validateOperationConfiguration(ConfigurationProvider)} and then * delegates on {@link #doInitialise()} for custom initialisation * * @throws InitialisationException if a fatal error occurs causing the Mule instance to shutdown */ @Override public final void initialise() throws InitialisationException { if (cursorProviderFactory == null) { cursorProviderFactory = componentModel.getModelProperty(PagedOperationModelProperty.class) .map(p -> (CursorProviderFactory) streamingManager.forObjects().getDefaultCursorProviderFactory()) .orElseGet(() -> streamingManager.forBytes().getDefaultCursorProviderFactory()); } withContextClassLoader(classLoader, () -> { validateConfigurationProviderIsNotExpression(); findConfigurationProvider().ifPresent(this::validateOperationConfiguration); doInitialise(); return null; }, InitialisationException.class, e -> { throw new InitialisationException(e, this); }); }
/** * Adds a {@code Connection} as a parameter in the {@code operationContext}, following the considerations in this type's * javadoc. * * @param executionContext the {@link ExecutionContext} for the operation to be executed * @throws IllegalArgumentException if the {@code operationContext} already contains a parameter of key * {@link ExtensionProperties#CONNECTION_PARAM} */ @Override public void before(ExecutionContext<ComponentModel> executionContext) throws Exception { if (executionContext.getComponentModel().getModelProperty(PagedOperationModelProperty.class).isPresent()) { return; } ExecutionContextAdapter<OperationModel> context = (ExecutionContextAdapter) executionContext; checkArgument(context.getVariable(CONNECTION_PARAM) == null, "A connection was already set for this operation context"); context.setVariable(CONNECTION_PARAM, getConnection(context)); setCloseCommand(executionContext, () -> release(executionContext)); }
defaultMediaType = componentModel.getModelProperty(MediaTypeModelProperty.class) .map(MediaTypeModelProperty::getMediaType) .orElseGet(() -> {