Skip to content

Commit bbff268

Browse files
authored
Merge pull request eclipsesource#434 from eneufeld/fix_change_validator
Change validator to ajv
2 parents 63d4d95 + a8d97e7 commit bbff268

File tree

6 files changed

+40
-30
lines changed

6 files changed

+40
-30
lines changed

examples/app/masterdetail/masterdetail.controller.js

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
2424
"definitions": {
2525
"folder": {
2626
"type": "object",
27+
"id": "#folder_array",
2728
"properties": {
28-
"id": "folder",
2929
"name": {
3030
"type": "string",
3131
"minLength": 3
@@ -50,8 +50,8 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
5050
},
5151
"file": {
5252
"type": "object",
53+
"id": "#file_array",
5354
"properties": {
54-
"id": "file",
5555
"name": {
5656
"type": "string",
5757
"minLength": 3
@@ -61,8 +61,8 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
6161
},
6262
"drive": {
6363
"type": "object",
64+
"id": "#drive_array",
6465
"properties": {
65-
"id": "drive",
6666
"name": {
6767
"type": "string",
6868
"minLength": 3
@@ -86,6 +86,7 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
8686
}
8787
},
8888
"type":"array",
89+
"id": "drives#",
8990
"items":
9091
{
9192
"$ref": "#/definitions/drive"
@@ -97,8 +98,22 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
9798
"$ref": "#"
9899
},
99100
"options":{
100-
"labelProvider":{"drive":"name","folder":"name","file":"name"},
101-
"imageProvider":{"folder":"app/masterdetail/icons/folder.png","file":"app/masterdetail/icons/page.png","drive":"app/masterdetail/icons/drive.png"}
101+
"labelProvider":{
102+
"#drive_array":"name",
103+
"#folder_array":"name",
104+
"#file_array":"name",
105+
"#drive_object":"name",
106+
"#folder_object":"name",
107+
"#file_object":"name"
108+
},
109+
"imageProvider":{
110+
"#folder_array":"app/masterdetail/icons/folder.png",
111+
"#file_array":"app/masterdetail/icons/page.png",
112+
"#drive_array":"app/masterdetail/icons/drive.png",
113+
"#folder_object":"app/masterdetail/icons/folder.png",
114+
"#file_object":"app/masterdetail/icons/page.png",
115+
"#drive_object":"app/masterdetail/icons/drive.png"
116+
}
102117
}
103118
};
104119

@@ -185,8 +200,8 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
185200
"definitions": {
186201
"folder": {
187202
"type": "object",
203+
"id": "#folder_object",
188204
"properties": {
189-
"id": "folder",
190205
"name": {
191206
"type": "string",
192207
"minLength": 3
@@ -211,8 +226,8 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
211226
},
212227
"file": {
213228
"type": "object",
229+
"id": "#file_object",
214230
"properties": {
215-
"id": "file",
216231
"name": {
217232
"type": "string",
218233
"minLength": 3
@@ -222,8 +237,8 @@ angular.module('makeithappen').controller('MasterDetailController', function() {
222237
}
223238
},
224239
"type": "object",
240+
"id": "drive_object#",
225241
"properties": {
226-
"id": "drive",
227242
"name": {
228243
"type": "string",
229244
"minLength": 3

examples/app/person/person.controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ angular.module('makeithappen').controller('PersonController', function() {
77
var vm = this;
88
vm.schema = {
99
"type": "object",
10+
"id": "user.json",
1011
"properties": {
11-
"id": "user.json",
1212
"name": {
1313
"type": "string",
1414
"minLength": 3

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@
3939
"json-refs": "2.1.5",
4040
"lodash": "4.0.1",
4141
"pluralize": "3.0.0",
42-
"tv4": "^1.2.7",
43-
"tv4-formats": "2.2.0"
42+
"ajv": "4.7.7"
4443
},
4544
"devDependencies": {
4645
"angular-mocks": "1.5.0",

src/components/renderers/layouts/masterdetail/masterdetail.directive.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ describe('MasterDetail', () => {
9292
'type': 'array',
9393
'items': {
9494
'type': 'object',
95+
'id': 'a',
9596
'properties': {
96-
'id': 'a',
9797
'custom': {
9898
'type': 'string'
9999
},
@@ -104,8 +104,8 @@ describe('MasterDetail', () => {
104104
'type': 'array',
105105
'items': {
106106
'type': 'object',
107+
'id': 'c',
107108
'properties': {
108-
'id': 'c',
109109
'custom': {
110110
'type': 'string'
111111
},

src/components/renderers/layouts/masterdetail/masterdetail.directives.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,14 @@ class MasterDetailCollectionController {
102102
return _.keys(this.getArraySubSchemas(dataSchema.items)).length !== 0;
103103
}
104104
public getLabel(data, dataSchema): string {
105-
let labelProperty = this.labelProvider[dataSchema.items.properties.id];
105+
let labelProperty = this.labelProvider[dataSchema.items.id];
106106
if (labelProperty !== undefined) {
107107
return data[labelProperty];
108108
}
109109
return data.name || data.id || JSON.stringify(data);
110110
}
111111
public getImage(dataSchema): string {
112-
let imageUrl = this.imageProvider[dataSchema.items.properties.id];
112+
let imageUrl = this.imageProvider[dataSchema.items.id];
113113
if (imageUrl !== undefined) {
114114
return imageUrl;
115115
}

src/components/services/services.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,8 @@ import {IUISchemaElement} from '../../uischema';
33
import {PathUtil} from './pathutil';
44

55
// TODO: replace
6-
let tv4 = require('tv4');
7-
let formats = require('tv4-formats');
8-
let validator;
9-
if (tv4 != null) {
10-
validator = tv4.freshApi();
11-
if (formats != null) {
12-
validator.addFormat(formats);
13-
}
14-
}
6+
let Ajv = require('ajv');
7+
let ajv = new Ajv({allErrors: true, jsonPointers: true});
158
// TODO: remove
169
class HashTable {
1710

@@ -99,20 +92,23 @@ export class ValidationService implements IValidationService {
9992

10093
validate(instance: any, schema: SchemaElement): void {
10194

102-
if (validator === undefined) {
95+
if (ajv === undefined) {
10396
return;
10497
}
10598

10699
this.convertAllDates(instance);
107100
this.checkObjects = [];
108101
this.clear(instance);
109102
// TODO
110-
let results = validator.validateMultiple(instance, schema);
111-
112-
results['errors'].forEach((error) => {
103+
let valid = ajv.validate(schema, instance);
104+
if (valid) {
105+
this.validationResults.put(instance, undefined);
106+
return;
107+
}
108+
ajv['errors'].forEach((error) => {
113109
if (error['schemaPath'].indexOf('required') !== -1) {
114-
let propName = error['dataPath'] + '/' + error['params']['key'];
115-
this.validationResults.get(instance)[propName] = `${PathUtil.beautifiedLastFragment(error['params']['key'])} is a required field`;
110+
let propName = error['dataPath'] + '/' + error['params']['missingProperty'];
111+
this.validationResults.get(instance)[propName] = error['message'];
116112
} else {
117113
this.validationResults.get(instance)[error['dataPath']] = error['message'];
118114
}

0 commit comments

Comments
 (0)