From 64d1c6e47989783bcdf905de7e5854043469c6aa Mon Sep 17 00:00:00 2001 From: Markus Grigull Date: Thu, 1 Oct 2015 14:09:27 +0200 Subject: [PATCH] Add context broker backend The context broker is connected via the custom adapter and serializer. At the moment only the entity IDs are shown but the property table is empty. Mirage is disabled. --- app/adapters/application.js | 37 +++++++++ app/components/entities-table.js | 6 ++ app/mirage/factories/property.js | 2 +- app/models/entity.js | 6 ++ app/models/property.js | 7 -- app/router.js | 4 +- app/routes/lab-mashup.js | 4 - app/routes/lab-mashup/entity.js | 7 ++ app/routes/lab-mashup/index.js | 7 ++ app/serializers/application.js | 78 +++++++++++++++++++ app/templates/components/entities-table.hbs | 10 +++ app/templates/components/properties-table.hbs | 2 +- app/templates/lab-mashup.hbs | 2 +- app/templates/lab-mashup/entity.hbs | 5 ++ app/templates/lab-mashup/index.hbs | 1 + app/transforms/property.js | 12 +++ config/environment.js | 14 ++++ package.json | 8 +- 18 files changed, 196 insertions(+), 16 deletions(-) create mode 100644 app/adapters/application.js create mode 100644 app/components/entities-table.js create mode 100644 app/models/entity.js delete mode 100644 app/models/property.js create mode 100644 app/routes/lab-mashup/entity.js create mode 100644 app/routes/lab-mashup/index.js create mode 100644 app/serializers/application.js create mode 100644 app/templates/components/entities-table.hbs create mode 100644 app/templates/lab-mashup/entity.hbs create mode 100644 app/templates/lab-mashup/index.hbs create mode 100644 app/transforms/property.js diff --git a/app/adapters/application.js b/app/adapters/application.js new file mode 100644 index 0000000..98e3b38 --- /dev/null +++ b/app/adapters/application.js @@ -0,0 +1,37 @@ +import DS from 'ember-data'; + +export default DS.RESTAdapter.extend({ + host: 'http://46.101.131.212:80', + namespace: 'ngsi10', + headers: { + Accept: 'application/json' + }, + + findAll: function(store, type, sinceToken) { + var requestBody = { + entities: [ + { + type: 'ElectricalGridMonitoring', + isPattern: true, + id: 'S?_ElectricalGrid' + } + ] + }; + + return this.ajax(this.host + '/' + this.namespace + '/queryContext', 'POST', { data: requestBody }); + }, + + findRecord: function(store, type, id, snapshot) { + var requestBody = { + entities: [ + { + type: 'ElectricalGridMonitoring', + isPattern: false, + id: id + } + ] + }; + + return this.ajax(this.host + '/' + this.namespace + '/queryContext', 'POST', { data: requestBody }); + }, +}); diff --git a/app/components/entities-table.js b/app/components/entities-table.js new file mode 100644 index 0000000..b47b62e --- /dev/null +++ b/app/components/entities-table.js @@ -0,0 +1,6 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + tagName: 'table', + classNames: ['properties-table'] +}); diff --git a/app/mirage/factories/property.js b/app/mirage/factories/property.js index 56d85e7..8ab983f 100644 --- a/app/mirage/factories/property.js +++ b/app/mirage/factories/property.js @@ -3,5 +3,5 @@ import Mirage, {faker} from 'ember-cli-mirage' export default Mirage.Factory.extend({ name(i) { return `Property ${i}`; }, value: faker.list.random(1.23, 2.34, 3.45, 4.56), - unit: faker.list.random('A', 'kV', 'MW') + type: faker.list.random('A', 'kV', 'MW') }); diff --git a/app/models/entity.js b/app/models/entity.js new file mode 100644 index 0000000..29b0c4a --- /dev/null +++ b/app/models/entity.js @@ -0,0 +1,6 @@ +import DS from 'ember-data'; + +export default DS.Model.extend({ + type: DS.attr('string'), + properties: DS.attr() +}); diff --git a/app/models/property.js b/app/models/property.js deleted file mode 100644 index 0f672b9..0000000 --- a/app/models/property.js +++ /dev/null @@ -1,7 +0,0 @@ -import DS from 'ember-data'; - -export default DS.Model.extend({ - name: DS.attr('string'), - value: DS.attr('number'), - unit: DS.attr('string') -}); diff --git a/app/router.js b/app/router.js index b43c911..d4875f9 100644 --- a/app/router.js +++ b/app/router.js @@ -6,7 +6,9 @@ var Router = Ember.Router.extend({ }); Router.map(function() { - this.route('lab-mashup', { path: '/' }, function() {}); + this.route('lab-mashup', { path: '/' }, function() { + this.route('entity', { path: '/:entity_id' }); + }); }); export default Router; diff --git a/app/routes/lab-mashup.js b/app/routes/lab-mashup.js index a7bf346..26d9f31 100644 --- a/app/routes/lab-mashup.js +++ b/app/routes/lab-mashup.js @@ -1,8 +1,4 @@ import Ember from 'ember'; export default Ember.Route.extend({ - model() { - return this.store.findAll('property'); - } }); - diff --git a/app/routes/lab-mashup/entity.js b/app/routes/lab-mashup/entity.js new file mode 100644 index 0000000..5ac36df --- /dev/null +++ b/app/routes/lab-mashup/entity.js @@ -0,0 +1,7 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + model(params) { + return this.store.findRecord('entity', params.entity_id); + } +}); diff --git a/app/routes/lab-mashup/index.js b/app/routes/lab-mashup/index.js new file mode 100644 index 0000000..3ac0567 --- /dev/null +++ b/app/routes/lab-mashup/index.js @@ -0,0 +1,7 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + model() { + return this.store.findAll('entity'); + } +}); diff --git a/app/serializers/application.js b/app/serializers/application.js new file mode 100644 index 0000000..074d7ac --- /dev/null +++ b/app/serializers/application.js @@ -0,0 +1,78 @@ +import DS from 'ember-data'; + +export default DS.RESTSerializer.extend({ + normalizeFindAllResponse: function(store, primaryModelClass, payload, id, requestType) { + var json = { data: [] }; + + // check if payload has context responses + if (payload.contextResponses) { + payload.contextResponses.forEach(function(item) { + // check if item has context element + if (item.contextElement) { + // create new entity object + var entity = { + type: 'entity', + id: item.contextElement.id, + attributes: { + type: item.contextElement.type, + properties: [] + } + } + + item.contextElement.attributes.forEach(function(attribute) { + var property = { + name: attribute.name, + value: attribute.value, + type: attribute.type + } + + entity.attributes.properties.push(property); + }); + + // add entity to data + json.data.push(entity); + } + }); + } + + console.log(json); + + return json; + }, + + normalizeFindRecordResponse: function(store, primaryModelClass, payload, id, requestType) { + var json = { data: {} }; + + // check if payload has context responses + if (payload.contextResponses) { + payload.contextResponses.forEach(function(item) { + // check if item has context element + if (item.contextElement) { + // create new entity object + json.data = { + type: 'entity', + id: item.contextElement.id, + attributes: { + type: item.contextElement.type, + properties: [] + } + } + + item.contextElement.attributes.forEach(function(attribute) { + var property = { + name: attribute.name, + value: attribute.value, + type: attribute.type + } + + json.data.attributes.properties.push(property); + }); + } + }); + } + + console.log(json); + + return json; + } +}); diff --git a/app/templates/components/entities-table.hbs b/app/templates/components/entities-table.hbs new file mode 100644 index 0000000..a1981b0 --- /dev/null +++ b/app/templates/components/entities-table.hbs @@ -0,0 +1,10 @@ + + ID + Type + +{{#each entities as |entity|}} + + {{#link-to 'lab-mashup.entity' entity}}{{entity.id}}{{/link-to}} + {{entity.type}} + +{{/each}} diff --git a/app/templates/components/properties-table.hbs b/app/templates/components/properties-table.hbs index 4e843c4..e39df49 100644 --- a/app/templates/components/properties-table.hbs +++ b/app/templates/components/properties-table.hbs @@ -5,6 +5,6 @@ {{#each properties as |property|}} {{property.name}} - {{property.value}} {{property.unit}} + {{property.value}} {{property.type}} {{/each}} diff --git a/app/templates/lab-mashup.hbs b/app/templates/lab-mashup.hbs index d955b10..405f0a0 100644 --- a/app/templates/lab-mashup.hbs +++ b/app/templates/lab-mashup.hbs @@ -1,3 +1,3 @@
- {{properties-table properties=model}} + {{outlet}}
diff --git a/app/templates/lab-mashup/entity.hbs b/app/templates/lab-mashup/entity.hbs new file mode 100644 index 0000000..9a1e8be --- /dev/null +++ b/app/templates/lab-mashup/entity.hbs @@ -0,0 +1,5 @@ +

+ +{{properties-table}} + +{{#link-to 'lab-mashup'}}Entities{{/link-to}} diff --git a/app/templates/lab-mashup/index.hbs b/app/templates/lab-mashup/index.hbs new file mode 100644 index 0000000..8c43439 --- /dev/null +++ b/app/templates/lab-mashup/index.hbs @@ -0,0 +1 @@ +{{entities-table entities=model}} diff --git a/app/transforms/property.js b/app/transforms/property.js new file mode 100644 index 0000000..2acb7a3 --- /dev/null +++ b/app/transforms/property.js @@ -0,0 +1,12 @@ +import Ember from 'ember'; +import DS from 'ember-data'; + +export default DS.Transform.extend({ + deserialize: function(value) { + return Ember.create({ name: value[0], value: value[1], type: value[2]}); + }, + + serialize: function(value) { + return [value.get('name'), value.get('value'), value.get('type')]; + } +}); diff --git a/config/environment.js b/config/environment.js index b29684b..3fac5b7 100644 --- a/config/environment.js +++ b/config/environment.js @@ -16,6 +16,16 @@ module.exports = function(environment) { APP: { // Here you can pass flags/options to your application instance // when it is created + }, + + contentSecurityPolicy: { + 'default-src': "'none'", + 'script-src': "'self'", + 'font-src': "'self'", + 'connect-src': "'self' localhost:8080 46.101.131.212:1026 46.101.131.212:80", + 'img-src': "'self'", + 'style-src': "'self'", + 'media-src': "'self'" } }; @@ -25,6 +35,10 @@ module.exports = function(environment) { // ENV.APP.LOG_TRANSITIONS = true; // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; // ENV.APP.LOG_VIEW_LOOKUPS = true; + + ENV['ember-cli-mirage'] = { + enabled: false + } } if (environment === 'test') { diff --git a/package.json b/package.json index 1c65920..57170cf 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,12 @@ "ember-data": "1.13.8", "ember-disable-proxy-controllers": "^1.0.0", "ember-export-application-global": "^1.0.3", - "mirage": "0.0.5" + "glob": "^4.5.3", + "http-proxy": "^1.11.2", + "mirage": "0.0.5", + "morgan": "^1.6.1" + }, + "dependencies": { + "ember-cli-cors": "0.0.1" } }