diff --git a/platform/status/README.md b/platform/status/README.md new file mode 100644 index 0000000000..4d8cb7e6fa --- /dev/null +++ b/platform/status/README.md @@ -0,0 +1,2 @@ +Facilitates tracking states associated with specific domain +objects. diff --git a/platform/status/bundle.json b/platform/status/bundle.json new file mode 100644 index 0000000000..4c117a9d75 --- /dev/null +++ b/platform/status/bundle.json @@ -0,0 +1,23 @@ +{ + "extensions": { + "representers": [ + { + "implementation": "StatusRepresenter.js" + } + ], + "capabilities": [ + { + "key": "status", + "implementation": "StatusCapability.js", + "depends": [ "statusService" ] + } + ], + "services": [ + { + "key": "statusService", + "implementation": "StatusService.js", + "depends": [ "topic" ] + } + ] + } +} diff --git a/platform/status/src/StatusCapability.js b/platform/status/src/StatusCapability.js new file mode 100644 index 0000000000..21e1dda037 --- /dev/null +++ b/platform/status/src/StatusCapability.js @@ -0,0 +1,56 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ + +define( + [], + function () { + 'use strict'; + + function StatusCapability(statusService, domainObject) { + this.statusService = statusService; + this.domainObject = domainObject; + } + + StatusCapability.prototype.get = function () { + return this.statusService.getStatus(this.domainObject.getId()); + }; + + StatusCapability.prototype.set = function (status, state) { + return this.statusService.setStatus( + this.domainObject.getId(), + status, + state + ); + }; + + StatusCapability.prototype.listen = function (callback) { + return this.statusService.listen( + this.domainObject.getId(), + callback + ); + }; + + return StatusCapability; + + } +); diff --git a/platform/status/src/StatusRepresenter.js b/platform/status/src/StatusRepresenter.js new file mode 100644 index 0000000000..8f8187a3ee --- /dev/null +++ b/platform/status/src/StatusRepresenter.js @@ -0,0 +1,71 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ + +define( + [], + function () { + 'use strict'; + + var STATUS_CLASS_PREFIX = "l-status-"; + + function StatusRepresenter(scope, element) { + this.element = element; + this.lastClasses = []; + } + + StatusRepresenter.prototype.represent = function (representation, domainObject) { + var self = this, + statusCapability = domainObject.getCapability('status'); + + function updateStatus(flags) { + var newClasses = flags.map(function (flag) { + return STATUS_CLASS_PREFIX + flag; + }); + + self.lastClasses.forEach(function (c) { + self.element.removeClass(c); + }); + + newClasses.forEach(function (c) { + self.element.addClass(c); + }); + + self.lastClasses = newClasses; + } + + updateStatus(statusCapability.get()); + this.unlisten = statusCapability.listen(updateStatus); + }; + + StatusRepresenter.prototype.destroy = function () { + if (this.unlisten) { + this.unlisten(); + this.unlisten = undefined; + } + }; + + + return StatusRepresenter; + + } +); diff --git a/platform/status/src/StatusService.js b/platform/status/src/StatusService.js new file mode 100644 index 0000000000..ed2c2bca6a --- /dev/null +++ b/platform/status/src/StatusService.js @@ -0,0 +1,62 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ + +define( + [], + function () { + 'use strict'; + + var STATUS_PREFIX = "status:"; + + function StatusService(topic) { + this.statusTable = {}; + this.topic = topic; + } + + /** + * @returns {string[]} an array containing all status flags currently + * applicable to the object with this identifier + */ + StatusService.prototype.getStatus = function (id) { + return this.statusTable[id] || []; + }; + + StatusService.prototype.setStatus = function (id, status, state) { + this.statusTable[id] = this.statusTable[id] || []; + this.statusTable[id] = this.statusTable[id].filter(function (s) { + return s !== status; + }); + if (state) { + this.statusTable[id].push(status); + } + this.topic(STATUS_PREFIX + id).notify(this.statusTable[id]); + }; + + StatusService.prototype.listen = function (id, callback) { + return this.topic(STATUS_PREFIX + id).listen(callback); + }; + + return StatusService; + + } +);