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 2018/09/26 14:58:30 UTC
[1/4] brooklyn-ui git commit: pass the model to config filters
Repository: brooklyn-ui
Updated Branches:
refs/heads/master de857cfec -> a32e8f1eb
pass the model to config filters
and for "required" include all which have issues recorded against them
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/eeb17a0e
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/eeb17a0e
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/eeb17a0e
Branch: refs/heads/master
Commit: eeb17a0ec2ae622201f97928212cf106b0fd2e4a
Parents: de857cf
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Sep 21 16:42:52 2018 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Sep 21 16:42:52 2018 +0100
----------------------------------------------------------------------
.../components/spec-editor/spec-editor.directive.js | 15 ++++++++-------
.../components/spec-editor/spec-editor.template.html | 2 +-
2 files changed, 9 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/eeb17a0e/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.directive.js
----------------------------------------------------------------------
diff --git a/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.directive.js b/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.directive.js
index a6b19e8..858e167 100644
--- a/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.directive.js
+++ b/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.directive.js
@@ -50,15 +50,16 @@ export const CONFIG_FILTERS = [
{
id: 'required',
label: 'Required',
- filter: (item)=> {
- return item.constraints && item.constraints.required;
+ filter: (item, model)=> {
+ return (item.constraints && item.constraints.required) ||
+ (model && model.issues && model.issues.some((issue)=>(issue.group === 'config' && issue.ref === item.name)) );
}
},
{
id: 'inuse',
label: 'In Use',
- filter: (item, currentConfig)=> {
- return currentConfig.has(item.name);
+ filter: (item, model)=> {
+ return model && model.config && model.config.has(item.name);
}
},
{
@@ -601,7 +602,7 @@ export function specEditorDirective($rootScope, $templateCache, $injector, $sani
if (!angular.isArray(scope.model.miscData.get('config'))) {
return [];
}
- let filteredConfig = $filter('specEditorConfig')(scope.model.miscData.get('config'), scope.state.config.filter.values, scope.model.config);
+ let filteredConfig = $filter('specEditorConfig')(scope.model.miscData.get('config'), scope.state.config.filter.values, scope.model);
return scope.model.miscData.get('config').map((config)=> {
config.isHidden = scope.model.miscData.get('config').indexOf(config) > -1 ? filteredConfig.indexOf(config) === -1 : false;
return config;
@@ -827,7 +828,7 @@ export function specEditorDirective($rootScope, $templateCache, $injector, $sani
}
export function specEditorConfigFilter() {
- return function (input, filtersMapById, currentConfig) {
+ return function (input, filtersMapById, model) {
let filters = [];
Object.keys(filtersMapById).forEach( (k) => { if (filtersMapById[k]) filters.push(k); } );
@@ -838,7 +839,7 @@ export function specEditorConfigFilter() {
return input;
}
return input.filter((item)=> {
- return filters.some(filterId => CONFIG_FILTERS.find(filter => filter.id === filterId).filter(item, currentConfig));
+ return filters.some(filterId => CONFIG_FILTERS.find(filter => filter.id === filterId).filter(item, model));
});
}
}
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/eeb17a0e/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.template.html
----------------------------------------------------------------------
diff --git a/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.template.html b/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.template.html
index 04ffdfc..713da93 100644
--- a/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.template.html
+++ b/ui-modules/blueprint-composer/app/components/spec-editor/spec-editor.template.html
@@ -126,7 +126,7 @@
</div>
<form name="formSpecConfig" novalidate class="lightweight">
- <div ng-repeat="item in (filteredItems = (model.miscData.get('config') | specEditorConfig:state.config.filter.values:model.config | filter:{name:state.config.search} | orderBy:+priority)) track by item.name ">
+ <div ng-repeat="item in (filteredItems = (model.miscData.get('config') | specEditorConfig:state.config.filter.values:model | filter:{name:state.config.search} | orderBy:+priority)) track by item.name ">
<div class="form-group" ng-class="{'has-error': (model.issues | filter:{ref: item.name}:true).length > 0, 'used': config[item.name] !== undefined}"
ng-switch="getConfigWidgetMode(item)"
tabindex="1"
[4/4] brooklyn-ui git commit: This closes #72
Posted by he...@apache.org.
This closes #72
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/a32e8f1e
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/a32e8f1e
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/a32e8f1e
Branch: refs/heads/master
Commit: a32e8f1eb3e8ff31f7bc8c1bcda9ab2e1c6625e1
Parents: de857cf 4310fbd
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed Sep 26 15:56:56 2018 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Sep 26 15:56:56 2018 +0100
----------------------------------------------------------------------
.../providers/blueprint-service.provider.js | 75 +++++++++++++-------
.../spec-editor/spec-editor.directive.js | 15 ++--
.../spec-editor/spec-editor.template.html | 2 +-
3 files changed, 57 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
[2/4] brooklyn-ui git commit: add {forbidden, required}{If,
Unless} constraints
Posted by he...@apache.org.
add {forbidden,required}{If,Unless} constraints
also keep constraints as a list, not a map (eg if multiple forbiddenIfs), and update checks to expect json
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/bd41dce2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/bd41dce2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/bd41dce2
Branch: refs/heads/master
Commit: bd41dce23e38194e6134ae9c5379c513a7e0a25f
Parents: eeb17a0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Sat Sep 22 01:27:36 2018 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Sat Sep 22 01:27:36 2018 +0100
----------------------------------------------------------------------
.../providers/blueprint-service.provider.js | 69 ++++++++++++--------
1 file changed, 43 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/bd41dce2/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
----------------------------------------------------------------------
diff --git a/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js b/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
index 3a0dd78..b7ed6be 100644
--- a/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
+++ b/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
@@ -236,8 +236,8 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
promise.then((data)=> {
deferred.resolve(populateEntityFromApiSuccess(entity, data));
- }).catch(function () {
- deferred.resolve(populateEntityFromApiError(entity));
+ }).catch(function (error) {
+ deferred.resolve(populateEntityFromApiError(entity, error));
});
} else if (entity.parent) {
entity.clearIssues({group: 'type'}).addIssue(Issue.builder().group('type').message('Entity needs a type').level(ISSUE_LEVEL.WARN).build());
@@ -275,10 +275,20 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
return $q((resolve) => {
if (entity.miscData.has('config')) {
entity.miscData.get('config')
- .filter(config => config.constraints && Object.keys(config.constraints).length > 0)
+ .filter(config => config.constraints && config.constraints.length > 0)
.forEach(config => {
- for (let [key, constraint] of Object.entries(config.constraints) ) {
+ for (let constraintO of config.constraints) {
let message = null;
+ let key = null, args = null;
+ if (constraintO instanceof String) {
+ key = constraintO;
+ } else if (Object.keys(constraintO).length==1) {
+ key = Object.keys(constraintO)[0];
+ args = constraintO[key];
+ } else {
+ $log.warn("Unknown constraint object", constraintO);
+ key = constraintO;
+ }
switch (key) {
case 'Predicates.notNull()':
case 'required':
@@ -287,8 +297,28 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
}
break;
case 'regex':
- if (!entity.config.has(config.name) || !angular.isDefined(entity.config.get(config.name)) || !(new RegExp(constraint).test(entity.config.get(config.name)))) {
- message = `<samp>${config.name}</samp> does not match the required format: <samp>${config.constraints.regex}</samp>`;
+ if (entity.config.has(config.name) && angular.isDefined(entity.config.get(config.name)) && !(new RegExp(args).test(entity.config.get(config.name)))) {
+ message = `<samp>${config.name}</samp> does not match the required format: <samp>${args}</samp>`;
+ }
+ break;
+ case 'forbiddenIf':
+ if (entity.config.get(config.name) && entity.config.get(args)) {
+ message = `<samp>${config.name}</samp> cannot be set when <samp>${args}</samp> is set`;
+ }
+ break;
+ case 'forbiddenUnless':
+ if (entity.config.get(config.name) && !entity.config.get(args)) {
+ message = `<samp>${config.name}</samp> cannot be set unless <samp>${args}</samp> is set`;
+ }
+ break;
+ case 'requiredIf':
+ if (!entity.config.get(config.name) && entity.config.get(args)) {
+ message = `<samp>${config.name}</samp> is required when <samp>${args}</samp> is set`;
+ }
+ break;
+ case 'requiredUnless':
+ if (!entity.config.get(config.name) && !entity.config.get(args)) {
+ message = `<samp>${config.name}</samp> is required when <samp>${args}</samp> is not set`;
}
break;
}
@@ -321,8 +351,8 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
paletteApi.getType(policy.type, policy.version).then((data)=> {
deferred.resolve(populateEntityFromApiSuccess(policy, data));
- }).catch(function () {
- deferred.resolve(populateEntityFromApiError(policy));
+ }).catch(function (error) {
+ deferred.resolve(populateEntityFromApiError(policy, error));
}).finally(()=> {
policy.miscData.set('loading', false);
});
@@ -340,8 +370,8 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
paletteApi.getType(enricher.type, enricher.version).then((data)=> {
deferred.resolve(populateEntityFromApiSuccess(enricher, data));
- }).catch(function () {
- deferred.resolve(populateEntityFromApiError(enricher));
+ }).catch(function (error) {
+ deferred.resolve(populateEntityFromApiError(enricher, error));
}).finally(()=> {
enricher.miscData.set('loading', false);
});
@@ -482,21 +512,7 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
version: data.containingBundle.split(':')[1]
});
entity.miscData.set('typeName', data.displayName || data.symbolicName);
- entity.miscData.set('config', (data.config || []).map(config => {
- if (config.constraints) {
- config.constraints = config.constraints.reduce((map, constraint) => {
- if (constraint.startsWith('matchesRegex')) {
- map.regex = constraint.replace(/matchesRegex\(([^)]*)\)/, '$1');
- } else {
- // The constraint "required" falls back into this case. Good enough for now as we only support
- // 2 types of constraints.
- map[constraint] = true;
- }
- return map;
- }, {});
- }
- return config;
- }));
+ entity.miscData.set('config', data.config || []);
entity.miscData.set('sensors', data.sensors || []);
entity.miscData.set('traits', data.supertypes || []);
entity.miscData.set('tags', data.tags || []);
@@ -520,7 +536,8 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
return dst;
}
- function populateEntityFromApiError(entity) {
+ function populateEntityFromApiError(entity, error) {
+ $log.warn("Error loading/populating type, data will be incomplete.", entity, error);
entity.clearIssues({group: 'type'});
entity.addIssue(Issue.builder().group('type').message($sce.trustAsHtml(`Type <samp>${entity.type + (entity.hasVersion ? ':' + entity.version : '')}</samp> does not exist`)).build());
entity.miscData.set('typeName', entity.type || '');
[3/4] brooklyn-ui git commit: tidy constraint evaluation logic
Posted by he...@apache.org.
tidy constraint evaluation logic
make tighter around things like `false` values and empty string
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/commit/4310fbdd
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/tree/4310fbdd
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-ui/diff/4310fbdd
Branch: refs/heads/master
Commit: 4310fbdddb6d31ca81433603608f3fdf2ef655af
Parents: bd41dce
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Sep 24 15:39:46 2018 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Sep 24 15:39:46 2018 +0100
----------------------------------------------------------------------
.../providers/blueprint-service.provider.js | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-ui/blob/4310fbdd/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
----------------------------------------------------------------------
diff --git a/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js b/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
index b7ed6be..069fb3c 100644
--- a/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
+++ b/ui-modules/blueprint-composer/app/components/providers/blueprint-service.provider.js
@@ -289,35 +289,39 @@ function BlueprintService($log, $q, $sce, paletteApi, iconGenerator, dslService)
$log.warn("Unknown constraint object", constraintO);
key = constraintO;
}
+ let val = (k) => entity.config.get(k || config.name);
+ let isSet = (k) => entity.config.has(k || config.name) && angular.isDefined(val(k));
+ let hasDefault = () => angular.isDefined(config.defaultValue);
switch (key) {
case 'Predicates.notNull()':
case 'required':
- if (!angular.isDefined(config.defaultValue) && (!entity.config.has(config.name) || !angular.isDefined(entity.config.get(config.name)))) {
+ if (!isSet() && !hasDefault() && val()!='') {
+ // "required" also means that it must not be the empty string
message = `<samp>${config.name}</samp> is required`;
}
break;
case 'regex':
- if (entity.config.has(config.name) && angular.isDefined(entity.config.get(config.name)) && !(new RegExp(args).test(entity.config.get(config.name)))) {
+ if (isSet() && !(new RegExp(args).test(val))) {
message = `<samp>${config.name}</samp> does not match the required format: <samp>${args}</samp>`;
}
break;
case 'forbiddenIf':
- if (entity.config.get(config.name) && entity.config.get(args)) {
+ if (isSet() && isSet(args)) {
message = `<samp>${config.name}</samp> cannot be set when <samp>${args}</samp> is set`;
}
break;
case 'forbiddenUnless':
- if (entity.config.get(config.name) && !entity.config.get(args)) {
+ if (isSet() && !isSet(args)) {
message = `<samp>${config.name}</samp> cannot be set unless <samp>${args}</samp> is set`;
}
break;
case 'requiredIf':
- if (!entity.config.get(config.name) && entity.config.get(args)) {
+ if (!isSet() && isSet(args)) {
message = `<samp>${config.name}</samp> is required when <samp>${args}</samp> is set`;
}
break;
case 'requiredUnless':
- if (!entity.config.get(config.name) && !entity.config.get(args)) {
+ if (!isSet() && !isSet(args)) {
message = `<samp>${config.name}</samp> is required when <samp>${args}</samp> is not set`;
}
break;