- Isolated all CSS classes used to generate HTML.  This allows the JSON editor to be used in other modes, as it no longer modifies td, tr, table, th styles directly.
- Column IDs are now axisName-pos.  If axisName contains an invalid character, the id is then SHA1(axisName)-pos.
- Cell IDs are now AxisName1-pos_AxisName2-pos ...  If an axisName contains an invalid HTML id character, then for that axis, it uses SHA1(axisName).
- These changes make the HTML ids much smaller and more readable, as axis names are usually safe identifiers.
- added .sha1() to n-cube.  This is in preparation for optimistic locking.  Whenever an n-cube is saved, the sha1 will be calculated and stored with it.  Before an n-cube is updated, the stored sha1 will be checked against the inboud sha1 (retrieved when loaded) to determine if the persisted n-cube changed while it was being edited.   This is very much like CVS, Git, etc and eliminates the need to actively locking and unlocking n-cubes.
- Merged Ken's changes in
- sha1() added to n-cube (used for optimistic locking strategy)
- added concurrency test back in
1. n-cube .equals() needs to take MetaProps on n-cube, axis, and column into account
2. n-cube sha1() needed to clear the cell coordinate each iteration.
Merged changes