You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2021/05/31 15:17:15 UTC
[brooklyn-ui] 01/04: Allow downstream to configure edit.dsl
controller
This is an automated email from the ASF dual-hosted git repository.
heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-ui.git
commit 5167b68645ea5655a8d92cbc66c2bb19b67781d2
Author: Mykola Mandra <my...@cloudsoftcorp.com>
AuthorDate: Fri May 28 18:35:55 2021 +0100
Allow downstream to configure edit.dsl controller
Signed-off-by: Mykola Mandra <my...@cloudsoftcorp.com>
---
.../main/graphical/edit/dsl/edit.dsl.controller.js | 77 +++++++++++++++++-----
1 file changed, 62 insertions(+), 15 deletions(-)
diff --git a/ui-modules/blueprint-composer/app/views/main/graphical/edit/dsl/edit.dsl.controller.js b/ui-modules/blueprint-composer/app/views/main/graphical/edit/dsl/edit.dsl.controller.js
index fe94cd7..c29e8d4 100644
--- a/ui-modules/blueprint-composer/app/views/main/graphical/edit/dsl/edit.dsl.controller.js
+++ b/ui-modules/blueprint-composer/app/views/main/graphical/edit/dsl/edit.dsl.controller.js
@@ -45,11 +45,7 @@ function EditDslController($scope, $state, $stateParams, objectCache, state) {
updateRootDsl(data.dsl);
if ($scope.state.levels.length === 0) {
- if ($stateParams.index) {
- $scope.state.entity.config.get($stateParams.for)[$stateParams.index] = $scope.state.rootDsl;
- } else {
- $scope.state.entity.addConfig($stateParams.for, $scope.state.rootDsl);
- }
+ $scope.state.setRootDsl($stateParams, $scope.state.entity, $scope.state.rootDsl);
objectCache.removeAll();
viewName = $scope.state.view.name;
viewParams = $scope.state.view.params;
@@ -131,27 +127,31 @@ export const graphicalEditDslState = {
index: {
value: '',
squash: true
- }
+ },
+ isConfig: true // This flag identifies whether DSL edit is for configuration or something else. Configuration is a default.
},
template: template,
controller: ['$scope', '$state', '$stateParams', 'objectCache', 'state', EditDslController],
controllerAs: 'vm',
resolve: {
- state: ['$state', '$stateParams', 'entity', 'brSnackbar', 'objectCache', ($state, $stateParams, entity, brSnackbar, objectCache) => {
- let definition = entity.miscData.get('config').find(config => config.name === $stateParams.for);
+ state: ['$state', '$stateParams', 'entity', 'brSnackbar', 'objectCache', 'composerOverrides', ($state, $stateParams, entity, brSnackbar, objectCache, composerOverrides) => {
+
+ // Initialize dsl-edit helpers
+ $state.getDefinition = getConfigDefinition;
+ $state.getRootDsl = getConfigRootDsl;
+ $state.setRootDsl = setConfigRootDsl;
+
+ // Allow downstream to configure this controller and override helpers defined above, when required.
+ (composerOverrides.configureDslEdit || function () {})($state);
+
+ let definition = $state.getDefinition($stateParams, entity);
if (!definition) {
brSnackbar.create(`Config key ${$stateParams.for} does not exist.`);
}
let rootDsl = objectCache.get(`${definition.name}.dsl`);
if (!rootDsl) {
- let config = entity.config.get(definition.name);
- if ($stateParams.index) {
- config = config[$stateParams.index];
- }
- rootDsl = config instanceof Dsl
- ? config.clone()
- : new Dsl(KIND.STRING, '');
+ rootDsl = $state.getRootDsl($stateParams, entity, definition);
objectCache.put(`${definition.name}.dsl`, rootDsl);
}
@@ -181,7 +181,54 @@ export const graphicalEditDslState = {
state.definition.type = '.*';
}
+ // This step enables $state.setRootDsl override in the controller.
+ state.setRootDsl = $state.setRootDsl;
+
return state;
}]
}
};
+
+/**
+ * Gets configuration definition.
+ *
+ * @param {Object} stateParams The state parameters to get name of the configuration definition to look for.
+ * @param {Entity} entity The entity to get configuration definition from.
+ * @returns {Object} The configuration definition.
+ */
+function getConfigDefinition(stateParams, entity) {
+ return entity.miscData.get('config').find(config => config.name === stateParams.for);
+}
+
+/**
+ * Gets root DSL model from the entity configuration, creates a new one if it does not exist.
+ *
+ * @param {Object} stateParams The state parameters to get index of the configuration definition to look for.
+ * @param {Entity} entity The entity to get configuration definition from.
+ * @param {Object} definition The configuration definition.
+ * @returns {Dsl} The root DSL model.
+ */
+function getConfigRootDsl(stateParams, entity, definition) {
+ let config = entity.config.get(definition.name);
+ if (stateParams.index) {
+ config = config[stateParams.index];
+ }
+ return config instanceof Dsl
+ ? config.clone()
+ : new Dsl(KIND.STRING, '');
+}
+
+/**
+ * Sets root DSL model in the entity configuration.
+ *
+ * @param {Object} stateParams The state parameters to get index and name of the configuration definition to set.
+ * @param {Entity} entity The entity to update root DSL model with.
+ * @param {Dsl} rootDsl The root DSL model to set.
+ */
+function setConfigRootDsl(stateParams, entity, rootDsl) {
+ if (stateParams.index) {
+ entity.config.get(stateParams.for)[stateParams.index] = rootDsl;
+ } else {
+ entity.addConfig(stateParams.for, rootDsl);
+ }
+}