Version 5 Development

Overview

Version 5 code is being introduced into the v4 and v4.5 systems via modules. This document addresses both the issues involved in doing that, and the development conventions and standards for v5 code in general.

Package naming

All new packages will have a prefix of com.partnersoft.v5.* and are always in lowercase. This firmly distinguishes the v5 API from other versions; we will continue this if we ever get to v6 with a v6 designator.

The platform is subdivided into major sub-platforms, which we call “frameworks”. They are as follows:

  • boots - core launching, cog, scripting, logging, Update, Help!, Workbench, etc.
  • kilt - sql, forms, guis, web services, etc.
  • map - rover, publishing, viewing, the Map Viewer
  • haversack - distributed data editing and mapping
  • macleod - hosted server and related services

These are further subdivided by the Java runtime the code will work in. These roughly correspond to operating systems or Java environments:

  • core - any supported Java environment,
  • javase - Java Standard Edition (the full environment used in Windows, Mac OS, etc.),
  • ios - Apple iOS via Google’s j2objc, and
  • android - Google Android.

Note that this isn’t the same as the operating system (OS); operating-system-specific code goes in subpackages named os.FOO where FOO is the operating system name:

  • windows
  • mac
  • linux
  • ios
  • android

Non-framework modules must follow the same rules, but packages go under com.partnersoft.v5.modules.MODULE where MODULE is the name of the module in lowercase.

So - to distill - packages in frameworks follow this naming pattern:

com.partnersoft.v5.FRAMEWORK.RUNTIME.FOO.BAR...

and OS-specific code goes in something like:

com.partnersoft.v5.FRAMEWORK.RUNTIME.os.OPERATINGSYSTEM...

and module code goes in something like:

com.partnersoft.v5.modules.MODULE...

and module OS-specific code goes in:

com.partnersoft.v5.modules.MODULE.os.OPERATINGSYSTEM...

V5.x inclusion in v4.x releases

All code must be written to be compatible with BOTH 4.4 and 4.5 branches.

The v5 in the package naming should prevent any conflicts between class names etc. Third-party code is more problematic; we need to work with the third-party code already standard in v4.x.

Module naming

Module names need to be very predictable. Use these guidelines:

  • strict capitalization by word, not StUDlyCAPs (e.g. DisspatchMobileInterface and not DisSPatchMobileInterface, MysqlSqlDriver not MySQLSQLDriver).
  • FooLibrary - a code library, usually a third-party one, e.g. AntlrLibrary
  • FooBarDriver - a driver for a specific pluggable subsystem, e.g. TrimbleGpsDriver, OracleSqlDriver
  • FooTest - a test module associated with another module, e.g. TrimbleGpsDriverTest
  • Foo - a framework module, e.g. Boots, Kilt, Macleod
  • FooApplication - a module containing an application, which in our system is probably a combination of tools and mapsets - e.g. FieldDesignerApplication
  • FooProduct - product-level stuff; might not have much if any actual code, but instead just define which modules are associated, e.g. FieldDesignerProduct
  • FooDevelopment - design and other developer-type documentation (javadoc, etc.). E.g. BootsPlatformDevelopment
  • FooManual - a user manual, e.g. FieldDesignerProductManual
  • FooService - a module containing documentation and tools for performing a service, e.g. SystemRecoveryService
  • FooInterface - a module containing a software-to-software (not software-to-user) interface, e.g. MultiSpeakAccountingInterface
  • FooMapset - a simple mapset application, not big enough to deserve the Application suffix

We can retain our simple names for modules like Tracing, Gps, etc. Ideally if you look at an alphabetical listing of modules, you should see associated modules next to the modules associated with them - e.g. Gps, GpsMapset, GpsTest, GpsMapsetTest, etc.

Subversion storage

V5 code lives in standard v4-style modules in http://developer.partnersoft.com/modules/branches/5/.

When code is branched for testing, projects, or release, modules are placed in subdirectories based on the original code branch - so e.g.

modules/releases/4.13/5/FOO modules/releases/4.13/5/BAR modules/releases/4.13/4/BAZ modules/releases/4.13/4/WOBBLE

Table Of Contents

Previous topic

Java Coding Style Standards

Next topic

Architecture

This Page