2016-05-10 19:48:24 +00:00
|
|
|
# Open MCT [![license](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)
|
2014-10-31 18:14:31 +00:00
|
|
|
|
2016-05-04 17:08:55 +00:00
|
|
|
Open MCT is a web-based platform for mission operations user interface
|
2014-10-31 18:14:31 +00:00
|
|
|
software.
|
|
|
|
|
|
|
|
## Bundles
|
|
|
|
|
|
|
|
A bundle is a group of software components (including source code, declared
|
|
|
|
as AMD modules, as well as resources such as images and HTML templates)
|
2016-06-14 01:27:28 +00:00
|
|
|
that is intended to be added or removed as a single unit. A plug-in for
|
2016-05-04 17:08:55 +00:00
|
|
|
Open MCT will be expressed as a bundle; platform components are also
|
2014-10-31 18:14:31 +00:00
|
|
|
expressed as bundles.
|
|
|
|
|
|
|
|
A bundle is also just a directory which contains a file `bundle.json`,
|
|
|
|
which declares its contents.
|
|
|
|
|
|
|
|
The file `bundles.json` (note the plural), at the top level of the
|
|
|
|
repository, is a JSON file containing an array of all bundles (expressed as
|
2016-05-04 17:08:55 +00:00
|
|
|
directory names) to include in a running instance of Open MCT. Adding or
|
2014-10-31 18:14:31 +00:00
|
|
|
removing paths from this list will add or remove bundles from the running
|
|
|
|
application.
|
|
|
|
|
|
|
|
## Tests
|
|
|
|
|
2016-01-08 22:55:37 +00:00
|
|
|
Tests are written for [Jasmine 1.3](http://jasmine.github.io/1.3/introduction.html)
|
|
|
|
and run by [Karma](http://karma-runner.github.io). To run:
|
|
|
|
|
|
|
|
`npm test`
|
|
|
|
|
|
|
|
The test suite is configured to load any scripts ending with `Spec.js` found
|
|
|
|
in the `src` hierarchy. Full configuration details are found in
|
|
|
|
`karma.conf.js`. By convention, unit test scripts should be located
|
|
|
|
alongside the units that they test; for example, `src/foo/Bar.js` would be
|
|
|
|
tested by `src/foo/BarSpec.js`. (For legacy reasons, some existing tests may
|
|
|
|
be located in separate `test` folders near the units they test, but the
|
|
|
|
naming convention is otherwise the same.)
|
|
|
|
|
|
|
|
### Test Reporting
|
|
|
|
|
|
|
|
When `npm test` is run, test results will be written as HTML to
|
|
|
|
`target/tests`. Code coverage information is written to `target/coverage`.
|
|
|
|
|
2014-10-31 18:14:31 +00:00
|
|
|
|
2015-08-12 17:27:24 +00:00
|
|
|
### Functional Testing
|
2015-07-30 19:42:50 +00:00
|
|
|
|
|
|
|
The tests described above are all at the unit-level; an additional
|
|
|
|
test suite using [Protractor](https://angular.github.io/protractor/)
|
2015-08-25 11:20:27 +00:00
|
|
|
is under development, in the `protractor` folder.
|
2015-07-30 19:42:50 +00:00
|
|
|
|
|
|
|
To run:
|
|
|
|
|
|
|
|
* Install protractor following the instructions above.
|
2015-08-12 17:27:24 +00:00
|
|
|
* `cd protractor`
|
|
|
|
* `npm install`
|
|
|
|
* `npm run all`
|
2015-07-30 19:42:50 +00:00
|
|
|
|
2014-10-31 18:14:31 +00:00
|
|
|
## Build
|
|
|
|
|
2016-05-04 17:08:55 +00:00
|
|
|
Open MCT is built using [`npm`](http://npmjs.com/)
|
2016-02-03 00:04:17 +00:00
|
|
|
and [`gulp`](http://gulpjs.com/).
|
|
|
|
|
|
|
|
To build:
|
|
|
|
|
|
|
|
`npm run prepublish`
|
|
|
|
|
2016-02-03 00:06:45 +00:00
|
|
|
This will compile and minify JavaScript sources, as well as copy over assets.
|
2016-05-04 17:08:55 +00:00
|
|
|
The contents of the `dist` folder will contain a runnable Open MCT
|
2016-02-03 00:06:45 +00:00
|
|
|
instance (e.g. by starting an HTTP server in that directory), including:
|
|
|
|
|
2016-05-04 17:08:55 +00:00
|
|
|
* A `main.js` file containing Open MCT source code.
|
2016-02-03 00:06:45 +00:00
|
|
|
* Various assets in the `example` and `platform` directories.
|
2016-05-04 17:08:55 +00:00
|
|
|
* An `index.html` that runs Open MCT in its default configuration.
|
2016-02-03 00:06:45 +00:00
|
|
|
|
2016-02-03 00:04:17 +00:00
|
|
|
Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js).
|
2014-11-20 23:15:15 +00:00
|
|
|
|
2015-09-23 20:59:05 +00:00
|
|
|
### Building Documentation
|
|
|
|
|
2016-05-04 17:08:55 +00:00
|
|
|
Open MCT's documentation is generated by an
|
2016-01-15 18:48:48 +00:00
|
|
|
[npm](https://www.npmjs.com/)-based build. It has additional dependencies that
|
|
|
|
may not be available on every platform and thus is not covered in the standard
|
|
|
|
npm install. Ensure your system has [libcairo](http://cairographics.org/)
|
|
|
|
installed and then run the following commands:
|
2015-09-23 20:59:05 +00:00
|
|
|
|
2016-01-15 18:48:48 +00:00
|
|
|
* `npm install`
|
2016-01-21 18:54:49 +00:00
|
|
|
* `npm install canvas nomnoml`
|
2015-09-23 20:59:05 +00:00
|
|
|
* `npm run docs`
|
|
|
|
|
2016-01-15 18:48:48 +00:00
|
|
|
Documentation will be generated in `target/docs`.
|
2015-09-23 20:59:05 +00:00
|
|
|
|
2014-11-20 23:15:15 +00:00
|
|
|
# Glossary
|
|
|
|
|
2016-05-04 17:08:55 +00:00
|
|
|
Certain terms are used throughout Open MCT with consistent meanings
|
2014-11-20 23:15:15 +00:00
|
|
|
or conventions. Any deviations from the below are issues and should be
|
|
|
|
addressed (either by updating this glossary or changing code to reflect
|
2014-11-26 00:53:22 +00:00
|
|
|
correct usage.) Other developer documentation, particularly in-line
|
|
|
|
documentation, may presume an understanding of these terms.
|
2014-11-20 23:15:15 +00:00
|
|
|
|
|
|
|
* _bundle_: A bundle is a removable, reusable grouping of software elements.
|
|
|
|
The application is composed of bundles. Plug-ins are bundles. For more
|
|
|
|
information, refer to framework documentation (under `platform/framework`.)
|
|
|
|
* _capability_: An object which exposes dynamic behavior or non-persistent
|
|
|
|
state associated with a domain object.
|
2014-11-26 00:53:22 +00:00
|
|
|
* _composition_: In the context of a domain object, this refers to the set of
|
|
|
|
other domain objects that compose or are contained by that object. A domain
|
|
|
|
object's composition is the set of domain objects that should appear
|
|
|
|
immediately beneath it in a tree hierarchy. A domain object's composition is
|
|
|
|
described in its model as an array of id's; its composition capability
|
|
|
|
provides a means to retrieve the actual domain object instances associated
|
|
|
|
with these identifiers asynchronously.
|
2014-11-21 00:13:31 +00:00
|
|
|
* _description_: When used as an object property, this refers to the human-readable
|
|
|
|
description of a thing; usually a single sentence or short paragraph.
|
|
|
|
(Most often used in the context of extensions, domain
|
|
|
|
object models, or other similar application-specific objects.)
|
2014-11-20 23:15:15 +00:00
|
|
|
* _domain object_: A meaningful object to the user; a distinct thing in
|
2016-05-04 17:08:55 +00:00
|
|
|
the work support by Open MCT. Anything that appears in the left-hand
|
2014-11-20 23:15:15 +00:00
|
|
|
tree is a domain object.
|
|
|
|
* _extension_: An extension is a unit of functionality exposed to the
|
|
|
|
platform in a declarative fashion by a bundle. For more
|
|
|
|
information, refer to framework documentation (under `platform/framework`.)
|
|
|
|
* _id_: A string which uniquely identifies a domain object.
|
2014-11-21 00:13:31 +00:00
|
|
|
* _key_: When used as an object property, this refers to the machine-readable
|
|
|
|
identifier for a specific thing in a set of things. (Most often used in the
|
|
|
|
context of extensions or other similar application-specific object sets.)
|
2014-11-20 23:15:15 +00:00
|
|
|
* _model_: The persistent state associated with a domain object. A domain
|
|
|
|
object's model is a JavaScript object which can be converted to JSON
|
|
|
|
without losing information (that is, it contains no methods.)
|
2014-11-21 00:13:31 +00:00
|
|
|
* _name_: When used as an object property, this refers to the human-readable
|
|
|
|
name for a thing. (Most often used in the context of extensions, domain
|
|
|
|
object models, or other similar application-specific objects.)
|
2014-11-24 23:42:09 +00:00
|
|
|
* _navigation_: Refers to the current state of the application with respect
|
|
|
|
to the user's expressed interest in a specific domain object; e.g. when
|
|
|
|
a user clicks on a domain object in the tree, they are _navigating_ to
|
|
|
|
it, and it is thereafter considered the _navigated_ object (until the
|
|
|
|
user makes another such choice.)
|
2014-11-20 23:15:15 +00:00
|
|
|
* _space_: A name used to identify a persistence store. Interactions with
|
2016-06-14 01:27:28 +00:00
|
|
|
persistence will generally involve a `space` parameter in some form, to
|
2014-11-20 23:15:15 +00:00
|
|
|
distinguish multiple persistence stores from one another (for cases
|
|
|
|
where there are multiple valid persistence locations available.)
|