[Time Conductor] Add bundle for time handling

This commit is contained in:
Victor Woeltjen 2015-10-22 15:20:12 -07:00
parent 4ff03b081d
commit 552435b009
4 changed files with 204 additions and 0 deletions

18
platform/time/bundle.json Normal file
View File

@ -0,0 +1,18 @@
{
"name": "Time services bundle",
"description": "Defines interfaces and provides default implementations for handling different time systems.",
"extensions": {
"components": [
{
"provides": "timeService",
"type": "aggregator",
"implementation": "TimeAggregator.js"
},
{
"provides": "timeService",
"type": "provider",
"implementation": "UTCTimeProvider.js"
}
]
}
}

View File

@ -0,0 +1,57 @@
/*****************************************************************************
* 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 TimeAggregator(timeProviders) {
var systemMap = {},
systemKeys = [];
timeProviders.forEach(function (provider) {
provider.systems().forEach(function (key) {
if (!systemMap[key]) {
systemMap[key] = provider.system(key);
systemKeys.push(key);
}
});
});
this.systemMap = systemMap;
this.systemKeys = systemKeys;
}
TimeAggregator.prototype.systems = function () {
return this.systemKeys;
};
TimeAggregator.prototype.system = function (key) {
return this.systemMap[key || 'utc'];
};
return TimeAggregator;
});

View File

@ -0,0 +1,44 @@
/*****************************************************************************
* 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([
'./UTCTimeSystem'
], function (
UTCTimeSystem
) {
"use strict";
function UTCTimeProvider(now) {
this.utcTimeSystem = new UTCTimeSystem(now);
}
UTCTimeProvider.prototype.systems = function () {
return [ 'utc' ];
};
UTCTimeProvider.prototype.system = function (key) {
return key === 'utc' ? this.utcTimeSystem : undefined;
};
return UTCTimeProvider;
});

View File

@ -0,0 +1,85 @@
/*****************************************************************************
* 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([
'moment'
], function (
moment
) {
"use strict";
var DATE_FORMAT = "YYYY-MM-DD HH:mm:ss",
DATE_FORMATS = [
DATE_FORMAT,
"YYYY-MM-DD HH:mm:ss",
"YYYY-MM-DD HH:mm",
"YYYY-MM-DD"
],
SECOND = 1000,
MINUTE = 60 * SECOND,
HOUR = 60 * MINUTE,
DAY = 24 * HOUR,
WEEK = 7 * DAY,
MONTH_APPROX = 30 * DAY,
YEAR = 365 * DAY,
INCREMENTS = [
SECOND,
MINUTE,
HOUR,
DAY,
WEEK,
MONTH_APPROX,
YEAR
],
DEFAULT_INCREMENT = 3;
function UTCTimeSystem(now) {
this.nowFn = now;
}
UTCTimeSystem.prototype.format = function (value) {
return moment.utc(value).format(DATE_FORMAT);
};
UTCTimeSystem.prototype.parse = function (text) {
return moment.utc(text, DATE_FORMATS).valueOf();
};
UTCTimeSystem.prototype.validate = function (text) {
return moment.utc(text, DATE_FORMATS).isValid();
};
UTCTimeSystem.prototype.now = function () {
return this.nowFn();
};
UTCTimeSystem.prototype.increment = function (scale) {
var index = (scale || 0) + DEFAULT_INCREMENT;
index = Math.max(index, 0);
index = Math.min(index, INCREMENTS.length - 1);
return INCREMENTS[index];
};
return UTCTimeSystem;
});