diff --git a/Gruntfile.js b/Gruntfile.js index 73da383..4846eef 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -59,9 +59,18 @@ module.exports = function (grunt) { concat: { dist: { - src: ['src/supported-connectors.js', 'src/factories/dirPagination.js', 'src/app.js', - 'src/**/*-factory.js','src/**/*.factory.js', 'src/**/*.controller.js', 'src/**/**/*.controller.js', - 'src/**/**/**/*.controller.js','src/**/**/**/*.component.js', 'src/**/**/**/*.filter.js','src/**/**/**/*.service.js'], + src: [ + 'src/supported-connectors.js', + 'src/factories/dirPagination.js', + 'src/app.js', + 'src/**/*-factory.js', + 'src/**/*.factory.js', + 'src/**/*.controller.js', + 'src/**/*.component.js', + 'src/**/*.directive.js', + 'src/**/*.filter.js', + 'src/**/*.service.js', + ], dest: 'dist/src/combined.js' } }, diff --git a/index.html b/index.html index ebac4ca..2d7f546 100644 --- a/index.html +++ b/index.html @@ -135,6 +135,8 @@

+ + diff --git a/src/kafka-connect/configuration/editor/configuration-editor-curl.component.js b/src/kafka-connect/configuration/editor/configuration-editor-curl.component.js index 4f703fa..ec2cdbd 100644 --- a/src/kafka-connect/configuration/editor/configuration-editor-curl.component.js +++ b/src/kafka-connect/configuration/editor/configuration-editor-curl.component.js @@ -3,12 +3,12 @@ /** * Renders configuration cURL command - * @param {String} [name] Connector name; denotes edit mode + * @param {String} [connectorName] Connector name; denotes edit mode * @requires ngModel */ angularAPP.component('configurationEditorCurl', { bindings: { - name: ' diff --git a/src/kafka-connect/configuration/validation/configuration-validation-messages.component.js b/src/kafka-connect/configuration/validation/configuration-validation-messages.component.js new file mode 100644 index 0000000..be1fba1 --- /dev/null +++ b/src/kafka-connect/configuration/validation/configuration-validation-messages.component.js @@ -0,0 +1,19 @@ +(function() { + 'use strict'; + + /** + * Configuration validation messages component + * @param {String} connectorClass Connector classname + * @param {Object} form Configuration form + * @param {String} modelName Name of configuration model + */ + angularAPP.component('configurationValidationMessages', { + bindings: { + connectorClass: '<', + form: '<', + modelName: '@', + }, + templateUrl: 'src/kafka-connect/configuration/validation/configuration-validation-messages.html', + }); + +})(); diff --git a/src/kafka-connect/configuration/validation/configuration-validation-messages.html b/src/kafka-connect/configuration/validation/configuration-validation-messages.html new file mode 100644 index 0000000..72fff03 --- /dev/null +++ b/src/kafka-connect/configuration/validation/configuration-validation-messages.html @@ -0,0 +1,8 @@ +
+
+
Invalid syntax
+
+
+
+
+
diff --git a/src/kafka-connect/configuration/validation/validate-configuration-classname.directive.js b/src/kafka-connect/configuration/validation/validate-configuration-classname.directive.js new file mode 100644 index 0000000..ac9bfbf --- /dev/null +++ b/src/kafka-connect/configuration/validation/validate-configuration-classname.directive.js @@ -0,0 +1,48 @@ +(function() { + 'use strict'; + + /** + * Configuration classname validation directive + * @requires ngModel + */ + angularAPP.directive('validateConfigurationClassname', function () { + return { + bindToController: true, + controller: ValidateConfigurationClassnameDirectiveController, + require: { + ngModelController: 'ngModel', + }, + restrict: 'A', + }; + }); + + /** + * Controller for `validateConfigurationClassname` component + * @requires $attrs + * @requires $parse + * @requires $scope + */ + function ValidateConfigurationClassnameDirectiveController($attrs, $parse, $scope) { + var self = this; + + // Methods + self.$onInit = $onInit; + + /** + * Initializes the configuration classname validation directive + */ + function $onInit() { + var classname; + + $scope.$watch($attrs.validateConfigurationClassname, function (clazz) { + classname = clazz; + }); + + self.ngModelController.$validators.classname = function (model) { + return angular.isUndefined(model) || + (classname && angular.isObject(model) && classname === model['connector.class']); + }; + } + } + +})(); diff --git a/src/kafka-connect/create-connector/create-connector.controller.js b/src/kafka-connect/create-connector/create-connector.controller.js index 5d2c97c..36c4b2f 100644 --- a/src/kafka-connect/create-connector/create-connector.controller.js +++ b/src/kafka-connect/create-connector/create-connector.controller.js @@ -47,21 +47,8 @@ angularAPP.controller('CreateConnectorCtrl', function ($scope, $rootScope, $http model = $scope.model; } - // Make sure the 'classname' is a valid one - as it can crash the connect services - var classname = model['connector.class']; - if (classname != $scope.connector.class) { - console.log("error in classname -> " + classname); - var errors = { errors : [ 'Classname "' + $scope.connector.class + '" is not defined' ] }; - errorConfigs.push(errors); - - if(errorConfigs == 0) { - $scope.validConfig = constants.VIEW_MESSAGE_CONNECTOR_VALID; - } - $scope.errorConfigs = errorConfigs; - } - //STEP 1: Validate - KafkaConnectFactory.validateConnectorConfig(classname, model).then( + KafkaConnectFactory.validateConnectorConfig($scope.connector.class, model).then( function success(data) { $log.info('Total validation errors from API => ' + data.error_count); //STEP 2: Get errors if any diff --git a/src/kafka-connect/create-connector/create-connector.html b/src/kafka-connect/create-connector/create-connector.html index eaf5ae3..156abe4 100644 --- a/src/kafka-connect/create-connector/create-connector.html +++ b/src/kafka-connect/create-connector/create-connector.html @@ -39,8 +39,10 @@

+ ng-model-options="{ debounce: 500 }" + validate-configuration-classname="::connector.class">
@@ -70,9 +72,11 @@

There is no extra config

-
-
Invalid syntax
-
+ +
diff --git a/src/kafka-connect/view/connector-view.html b/src/kafka-connect/view/connector-view.html index 9911c58..a84c7d3 100644 --- a/src/kafka-connect/view/connector-view.html +++ b/src/kafka-connect/view/connector-view.html @@ -159,17 +159,21 @@

+ ng-readonly="!isEditing" + validate-configuration-classname="::connectorDetails.config['connector.class']">
-
-
Invalid syntax
-
+ +
- "{{errorConfig.name}}" : {{error}} diff --git a/src/kafka-connect/view/view.controller.js b/src/kafka-connect/view/view.controller.js index e8f5d29..4c05bb9 100644 --- a/src/kafka-connect/view/view.controller.js +++ b/src/kafka-connect/view/view.controller.js @@ -107,7 +107,7 @@ angularAPP.controller('ConnectorDetailCtrl', function ($rootScope, $scope, $rout validationRequest.name = name; KafkaConnectFactory - .validateConnectorConfig(connectorDetails.config["connector.class"], validationRequest) + .validateConnectorConfig(connectorDetails.config['connector.class'], validationRequest) .then(function (data) { var errorConfigs = parseValidationErrors(data);