Designed and created all of the Universal Flash Viewer plug-ins including all the graphics art work. They were all implemented in pure ActionScript 3 without the use of the main timeline. All ActionScript code was contained in separate source files. All plug-ins followed a standard design pattern:
- Each plug-in had a plug-in class which managed the plug-in's lifetime and initialization. The plug-in class also defined its direct dependents only and worked with the dependency-injection framework to dynamically load all the plug-ins it directly and indirectly depended on.
- Each plug-in had two interfaces, one was a public interface that exposed the properties, methods and events that could be accessed by other plug-ins and the other interface was only accessed by a plug-in management class for lifetime management.
- Each plug-in had a main class that implemented the properties, methods and events of both interfaces mostly through delegation to other hidden classes within the plug-in's code tree.
- Each plug-in had its own set of hierarchal configuration files (with overrides) based on the standard ISO 639 language-country-variant localization pattern. The variant part was associated with individual customers in some cases.
All of FlyteComm's major web products used the same Viewer code with customizations provided by different sets of plug-ins and associated configuration files. FlyteComm had given me permission to discuss only two of these products. One product was FlyteTrax III which is an aviation tracking application. It contained a Viewer plug-in that displays buttons with the same style and behavior as the buttons on the HTML page surrounding the Viewer. For example, the Legend and Undock buttons are part of the surrounding HTML page while the bar of buttons under it were displayed by the Flash Viewer for a seamless look.
Image courtesy of FlyteComm, Inc.. Used by permission.
Image courtesy of FlyteComm, Inc..Used by permission.
I had created a number of plug-ins over the lifetime of the various products. Here is a summary.
- 4 interchangeable control-panel plug-ins which display the button bar (if any), status bar (if any) and other "heads-up" display information. There is one for FlyteTrax III, one for Guardian, one for another surface logistics product and one for Santa.
- 1 dialog plug-in which displays various dialogs including the Layer Control dialog.
- 2 interchangeable base map plus-ins.
- 2 optional web services plug-ins that exchange data with the servers (in JSON) and manage the real-time data models. These plug-ins have no UI. In the true spirit of MVC, these plug-ins have no knowledge of any of the other plug-ins. They simple post events when something in the data model changes and it's up to the other plug-ins to register an interest in those events.
- 1 optional pushpin plug-in that displays, positions and updates the interactive pushpins in real time.
- 1 optional pathline plug-in that renders most of the line drawing.
- 1 optional data-tag plug-in that displays and updates the data-tags in real-time.
- 2 optional static overlay plug-ins that render the map overlays (except weather).
- 1 optional weather plug-in which displays animated weather in near real-time.
- 1 very small viewer plug-in who's only purpose was to provide a starting place for launching the Viewer. It contains just enough dependency information to get the other plug-ins loaded but it did not do anything itself other than provide access to a repository of global string resources shared will all the other plug-ins.
- And finally, 9 icon run-time modules which were actually loaded by the pushpins plug-in. These displayed different sets of interactive pushpin icons such as aviation, incidents, vehicles, infrastructure, operations, Santa'a sleigh and reindeer and so forth. Like plug-ins, they were interchangeable and could be used in various combinations but they didn't require the same degree of lifetime management as "true" plug-ins.
Some of the plug-in features with screen shots are discussed in the pages below.