diff --git a/example/imagery/bundle.json b/example/imagery/bundle.json new file mode 100644 index 0000000000..1adcf4758d --- /dev/null +++ b/example/imagery/bundle.json @@ -0,0 +1,42 @@ +{ + "name": "Imagery", + "description": "Example of a component that produces image telemetry.", + "extensions": { + "components": [ + { + "implementation": "ImageTelemetryProvider.js", + "type": "provider", + "provides": "telemetryService", + "depends": [ "$q", "$timeout" ] + } + ], + "types": [ + { + "key": "imagery", + "name": "Example Imagery", + "glyph": "T", + "features": "creation", + "model": { + "telemetry": {} + }, + "telemetry": { + "source": "imagery", + "domains": [ + { + "name": "Time", + "key": "time", + "format": "timestamp" + } + ], + "ranges": [ + { + "name": "Image", + "key": "url", + "format": "imageUrl" + } + ] + } + } + ] + } +} diff --git a/example/imagery/src/ImageTelemetry.js b/example/imagery/src/ImageTelemetry.js new file mode 100644 index 0000000000..447ddcbaa8 --- /dev/null +++ b/example/imagery/src/ImageTelemetry.js @@ -0,0 +1,66 @@ +/***************************************************************************** + * 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,Promise*/ + +/** + * Module defining SinewaveTelemetry. Created by vwoeltje on 11/12/14. + */ +define( + [], + function () { + "use strict"; + + var firstObservedTime = Date.now(), + images = [ + "http://www.nasa.gov/393811main_Palomar_ao_bouchez_10s_after_impact_4x3_946-710.png", + "http://www.nasa.gov/393821main_Palomar_ao_bouchez_15s_after_impact_4x3_946-710.png", + "http://www.nasa.gov/images/content/393801main_CfhtVeillet2_4x3_516-387.jpg", + "http://www.nasa.gov/images/content/392790main_1024_768_GeminiNorth_NightBeforeImpact_946-710.jpg" + ].map(function (url, index) { + return { + timestamp: firstObservedTime + 1000 * index, + url: url + }; + }); + + + /** + * + * @constructor + */ + function ImageTelemetry() { + return { + getPointCount: function () { + return Math.floor((Date.now() - firstObservedTime) / 1000); + }, + getDomainValue: function (i, domain) { + return images[i % images.length].timestamp; + }, + getRangeValue: function (i, range) { + return images[i % images.length].url; + } + }; + } + + return ImageTelemetry; + } +); diff --git a/example/imagery/src/ImageTelemetryProvider.js b/example/imagery/src/ImageTelemetryProvider.js new file mode 100644 index 0000000000..5dcd1e3e70 --- /dev/null +++ b/example/imagery/src/ImageTelemetryProvider.js @@ -0,0 +1,115 @@ +/***************************************************************************** + * 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,Promise*/ + +/** + * Module defining SinewaveTelemetryProvider. Created by vwoeltje on 11/12/14. + */ +define( + ["./ImageTelemetry"], + function (ImageTelemetry) { + "use strict"; + + /** + * + * @constructor + */ + function ImageTelemetryProvider($q, $timeout) { + var subscriptions = []; + + // + function matchesSource(request) { + return request.source === "imagery"; + } + + // Used internally; this will be repacked by doPackage + function generateData(request) { + return { + key: request.key, + telemetry: new ImageTelemetry() + }; + } + + // + function doPackage(results) { + var packaged = {}; + results.forEach(function (result) { + packaged[result.key] = result.telemetry; + }); + // Format as expected (sources -> keys -> telemetry) + return { imagery: packaged }; + } + + function requestTelemetry(requests) { + return $timeout(function () { + return doPackage(requests.filter(matchesSource).map(generateData)); + }, 0); + } + + function handleSubscriptions() { + subscriptions.forEach(function (subscription) { + var requests = subscription.requests; + subscription.callback(doPackage( + requests.filter(matchesSource).map(generateData) + )); + }); + } + + function startGenerating() { + $timeout(function () { + handleSubscriptions(); + if (subscriptions.length > 0) { + startGenerating(); + } + }, 1000); + } + + function subscribe(callback, requests) { + var subscription = { + callback: callback, + requests: requests + }; + + function unsubscribe() { + subscriptions = subscriptions.filter(function (s) { + return s !== subscription; + }); + } + + subscriptions.push(subscription); + + if (subscriptions.length === 1) { + startGenerating(); + } + + return unsubscribe; + } + + return { + requestTelemetry: requestTelemetry, + subscribe: subscribe + }; + } + + return ImageTelemetryProvider; + } +);