private ErrorModel getErrorModel(ErrorTypeDefinition<?> errorTypeDef, Set<ErrorModel> errors, ComponentDeclaration component) { return errors .stream() .filter(e -> !e.getNamespace().equals(CORE_NAMESPACE_NAME) && e.getType().equals(errorTypeDef.getType())) .findFirst() .orElseThrow(() -> new IllegalModelDefinitionException(format(ERROR_MASK, errorTypeDef, component.getName()))); } }
private boolean isAllowedError(ErrorType errorType) { return allowedErrorTypes .stream() .anyMatch(errorModel -> { boolean isAllowed = false; ErrorType currentError = errorType; while (currentError != null && !isAllowed) { isAllowed = errorModel.getType().equals(currentError.getIdentifier()) && errorModel.getNamespace().equals(currentError.getNamespace()); currentError = currentError.getParentErrorType(); } return isAllowed; }); }
private ErrorType getErrorType(ErrorModel errorModel, ExtensionModel extensionModel) { ComponentIdentifier identifier = createIdentifier(errorModel.getType(), errorModel.getNamespace()); Optional<ErrorType> optionalError = errorTypeRepository.getErrorType(identifier); return optionalError.orElseGet(() -> createErrorType(errorModel, identifier, extensionModel)); }
@Test public void orphanErrorsUsesAnyAsParent() { extensionModel = loadExtension(HeisenbergWithOrphanErrors.class); ErrorModel errorModel = extensionModel.getErrorModels().stream().filter(error -> error.getType().equals("HEALTH")).findFirst().get(); assertThat(errorModel.getNamespace(), is(HEISENBERG)); Optional<ErrorModel> anyExtensionError = errorModel.getParent(); assertThat(anyExtensionError.isPresent(), is(true)); assertThat(anyExtensionError.get().getType(), is(ANY.getType())); assertThat(anyExtensionError.get().getNamespace(), is(MULE_NAMESPACE)); }
@Test public void operationThrowsOverridesExtensionThrows() { extensionModel = loadExtension(HeisenbergWithOperationThrows.class); OperationModel someOperation = extensionModel.getOperationModel("someOperation").get(); Optional<ErrorModel> operationError = someOperation.getErrorModels().stream() .filter(errorModel -> errorModel.getType().equals(OPERATION.getType())).findFirst(); assertThat(operationError.isPresent(), is(true)); }
@Test public void operationInheritsExtensionErrorThrows() { extensionModel = loadExtension(HeisenbergWithExtensionThrows.class); OperationModel someOperation = extensionModel.getOperationModel("someOperation").get(); Optional<ErrorModel> operationError = someOperation.getErrorModels().stream() .filter(errorModel -> errorModel.getType().equals(EXTENSION.getType())).findFirst(); assertThat(operationError.isPresent(), is(true)); }
private ComponentIdentifier getIdentifier(ErrorModel parent) { return buildFromStringRepresentation(parent.getNamespace() + ":" + parent.getType()); } }
@Test public void extensionErrorsInheritFromMuleErrors() { extensionModel = loadExtension(HeisenbergExtension.class); OperationModel cureCancer = getNamedObject(extensionModel.getOperationModels(), "cureCancer"); assertThat(cureCancer.getErrorModels(), hasItem(hasProperty(TYPE, is(HEALTH.getType())))); Optional<ErrorModel> healthError = extensionModel.getErrorModels().stream() .filter(errorModel -> errorModel.getType().equals(HEALTH.getType())).findFirst(); assertThat(healthError.isPresent(), is(true)); Optional<ErrorModel> optConnectivityError = healthError.get().getParent(); assertThat(optConnectivityError.isPresent(), is(true)); ErrorModel connectivityError = optConnectivityError.get(); assertThat(connectivityError.getType(), is(CONNECTIVITY_ERROR_IDENTIFIER)); assertThat(connectivityError.getNamespace(), is(HEISENBERG)); Optional<ErrorModel> optMuleConnectivityError = connectivityError.getParent(); assertThat(optMuleConnectivityError.isPresent(), is(true)); ErrorModel muleConnectivityError = optMuleConnectivityError.get(); assertThat(muleConnectivityError.getType(), is(CONNECTIVITY_ERROR_IDENTIFIER)); assertThat(muleConnectivityError.getNamespace(), is(MULE_NAMESPACE)); }
@Test public void lookupErrorsForOperation() { when(extensionModel.getErrorModels()).thenReturn(singleton(extensionConnectivityError)); errorsRegistrant.registerErrors(extensionModel); ErrorType errorType = typeLocator.lookupComponentErrorType(OPERATION_IDENTIFIER, ConnectionException.class); assertThat(errorType.getIdentifier(), is(CONNECTIVITY_ERROR_IDENTIFIER)); assertThat(errorType.getNamespace(), is(EXTENSION_PREFIX.toUpperCase())); ErrorType muleConnectivityError = errorType.getParentErrorType(); assertThat(muleConnectivityError.getNamespace(), is(MULE_CONNECTIVITY_ERROR.getNamespace())); assertThat(muleConnectivityError.getIdentifier(), is(MULE_CONNECTIVITY_ERROR.getType())); ErrorType anyErrorType = muleConnectivityError.getParentErrorType(); assertThat(anyErrorType.getNamespace(), is(MULE)); assertThat(anyErrorType.getIdentifier(), is(ANY)); assertThat(anyErrorType.getParentErrorType(), is(nullValue())); }
/** * Serializes an {@link ErrorModel} to the following structure: {@code nameSpace:errorType} * * @param errorModel Error to serialize * @return Serialized error */ public static String serialize(ErrorModel errorModel) { return errorModel.getNamespace() + ":" + errorModel.getType(); }
private ErrorModel getErrorModel(ErrorTypeDefinition<?> errorTypeDef, Set<ErrorModel> errors, ComponentDeclaration component) { return errors .stream() .filter(e -> !e.getNamespace().equals(CORE_NAMESPACE_NAME) && e.getType().equals(errorTypeDef.getType())) .findFirst() .orElseThrow(() -> new IllegalModelDefinitionException(format(ERROR_MASK, errorTypeDef, component.getName()))); } }
private boolean isAllowedError(ErrorType errorType) { return allowedErrorTypes .stream() .anyMatch(errorModel -> { boolean isAllowed = false; ErrorType currentError = errorType; while (currentError != null && !isAllowed) { isAllowed = errorModel.getType().equals(currentError.getIdentifier()) && errorModel.getNamespace().equals(currentError.getNamespace()); currentError = currentError.getParentErrorType(); } return isAllowed; }); }
private ErrorType getErrorType(ErrorModel errorModel, ExtensionModel extensionModel) { ComponentIdentifier identifier = createIdentifier(errorModel.getType(), errorModel.getNamespace()); Optional<ErrorType> optionalError = errorTypeRepository.getErrorType(identifier); return optionalError.orElseGet(() -> createErrorType(errorModel, identifier, extensionModel)); }