MSS Code Factory 2.6 Release History

2016.04.03 MSS Code Factory 2.6.13626 Adjusted Digits specifications of CFBam 2.7 model to maximum 31

CFLib 2.7.13625 reduces CFLibBigDecimal.MAX_DIGITS to 31 in compliance with DB/2 LUW's restrictions. The CFBam 2.8 model now specified Digits="31" instead of Digits="38" as a result (previously 38 was the most restrictive limit, imposed by Oracle XE.)

2016.04.02 MSS Code Factory 2.6.13622 CFBam 2.8 model backported with fixes required by Oracle

Installing CFBam 2.8 to Oracle XE mandated a number of changes to the model in order to eliminate critical errors and get rid of warnings in the stored procedures. The model changes have been back-ported to the CFBam 2.7 model.

2016.04.01 MSS Code Factory 2.6.13617 Adjusted Digits specifications of CFBam 2.7 model to maximum 38

CFLib 2.7.13616 reduces CFLibBigDecimal.MAX_DIGITS to 38 in compliance with Oracle's restrictions. The CFBam 2.8 model now specified Digits="38" instead of Digits="65" as a result (previously 65 was the most restrictive limit, imposed by MySQL.)

2016.03.27 MSS Code Factory 2.6.13611 Restore relation database names to CFBam 2.7 model

The database names for the relationships were lost during earlier testing. I discovered this while trying to create the database for CFAccounting 1.1.

2016.03.27 MSS Code Factory 2.6.13609 Back port CFBam 2.7 model from SP2 CFBam 2.8 model

The CFBam 2.7 model has been back ported from the CFBam 2.8 model shipped with MSS Code Factory 2.7.13608-SP2 Service Pack 2.

2016.03.25 MSS Code Factory 2.6.13600 Rework qualified object names

The qualified object names have been reworked because they weren't being calculated unless they were defined by a base class, which is incorrect behaviour. This was showing up as fully qualified names from the tenant on down in the CFBam 2.7 Editor where I was expecting to see names qualified by the BaseProject or by the SchemaDef.

2016.03.23 MSS Code Factory 2.6.13584 Remove CFBam.UuidGen.Dispenser relationship and attributes

UUID generators can't really be dispensed by tables -- they're programmatic.

2016.03.20 MSS Code Factory 2.6.13557 My new model validator for 2.7 caught some design flaws in the CFBam model

There were some design flaws in the CFBam model detected by the new model validator for 2.7. These have been corrected and back-ported.

2016.03.19 MSS Code Factory 2.6.13554 Stripped unused attributes from CFBam 2.7 model

The DataScope, VAccFreq, EAccFreq, VAccSec, and EAccSec attributes have been stripped from the CFBam 2.7 model. The EnumCol table has also been removed, as you have to define Enum types as Schema types that are shared, not locally to a table.

This was done because I decided the CFBam 2.7 Editor was kind of cluttered with all of those fields that were for editing attributes I don't use in the rule base.

2016.03.17 MSS Code Factory 2.6.13538 Add a bunch of labels to the CFBam model

The CFBam model now has labels on most of the columns that don't participate in relationships, and on the relationships themselves. Just so the default manufactured JavaFX forms look a little better and don't need as much cleanup as I did for the 2.7 CFBam Editor.

2016.03.17 MSS Code Factory 2.6.13534 Clean up formatting of the JavaFX code

The formatting of the attribute and list panes has been tidied up. The code worked, but it was ugly to look at. I hate ugly code.

2016.03.15 MSS Code Factory 2.6.13507 Scope.Cont container relationship removed from CFBam 2.7

With the fixes I implemented for other problems, it became possible to remove the Scope.Cont container relationship from CFBam 2.7. The same change has been made to CFBam 2.8.

Doing so corrects the missing variable names in the database creation scripts for 2.8, without causing any problems for the other code, including the custom CFBam Editor code for 2.7.

Oh happy day! This was a brain fart I am GLAD I woke up with! :D

2016.03.15 MSS Code Factory 2.6.13504 Reduce MAX_DIGITS for numbers from 100 to 65

MySql only supports a maximum of 65 digits for numbers.

2016.03.14 MSS Code Factory 2.6.13501 Stripped down to the essentials required to manufacture 2.7

All of the database rules and XMsg support cartridges have been stripped.

2016.03.14 MSS Code Factory 2.6.13497 Add CFBam.SchemaRef.Prev/Next to support a Chain

A Prev/Next Chain has been added to the SchemaRef object because the sorting of those objects is important to the behaviour of the factory itself. The references have to be listed from the bottom up, so you can't just arbitrarily process them in the order that they were created in the GUI -- you have to let the user control the order.

2016.03.13 MSS Code Factory 2.6.13490 WOOHOO!!! RAM DELETES WORK!!!

This has been one hell of a long night because this is the first time I ever tried to delete a complex object from the RAM database, so there was a LOT of debugging to be done. But eventually I did wrestle the beast known as the "CFBam Editor" into submission. :)

2016.03.12 MSS Code Factory 2.6.13488 ClearSubObjectLookups coded for RAM deletes

Functionally equivalent code to the ClearSubObjectLookups sections of the stored procedures for the various databases has been added to the RAM delete implementations.

2016.03.12 Programmer's Notes on DelDeps

The DelDeps and ClearDeps are processed in reverse order by the factory. So you specify them in top-down order from most general object to the lowest sub-objects, not from the bottom up.

2016.03.12 MSS Code Factory 2.6.13486 My CPU is coming along nicely -- it implements ClearDeps for RAM deletes now

The ClearDeps now build clean for the RAM deletes. There are two more pieces of delete code to be converted from SQL to Java for the in-memory database.

2016.03.12 MSS Code Factory 2.6.13483 Lots of rule fixes and a huge model change for CFBam 2.7

The CFBam 2.7 model now specifies Chains for ordering the ClearDeps and DelDeps of a Table. This uncovered a lot of problems with the rules that had to be corrected and debugged.

Unfortunately, that includes changes to database stored procedures that I can't test to see if they're valid because I no longer have Windows box to run those servers on. I wasn't even able to test it properly for PostgreSQL or MySql yet, because I got rid of the audit tables in the 2.7 models, but didn't update the 2.6 rules to reflect that fact (primarily because I never intended to create database instances for 2.7.)

I've ported the rule changes forward to 2.7. I can test PostgreSQL and MySql with the 2.8 version of CFBam after I've remanufactured and built it. But for now, 2.6 works well enough to produce valid (but untested) code for 2.7.

2016.03.12 MSS Code Factory 2.6.13481 Chain handling code for RAM deletes implemented and tested

The chain handling code to rewire the Prev and Next elements of the Cur element to each other before proceeding with the deletion has been implemented. This does not necessarily mean that all deletes will work, as I have yet to implement the cascading deletes, the ClearDeps, and the DelDeps. But once I have finished with all of that, the RAM database should be functionally equivalent to a real database, save for the fact that it can get corrupted if there are transaction errors because it has no ACID integrity support.

2016.03.11 MSS Code Factory 2.6.13478 Back out the forgetRelationships() implementation

The problems I was having turned out to be bugs in the RAM implementation of moveBuffUp() and moveBuffDown(). The code was already forgetting the relationships when a buffer is applied to the object, which happens during the propagation of the result sets or a read in the "realize" code for objects.

2016.03.11 MSS Code Factory 2.6.13475 RAM implementations of moveBuffUp()/moveBuffDown() PROPERLY debugged this time

I neglected to test the class hierarchy versions of moveBuffUp() and moveBuffDown() before my initial check-in (I had only tested with the IndexCol implementation, which has no class hierarchy.

This oversight has been corrected. The implementation now works for all data.

2016.03.11 MSS Code Factory 2.6.13473 RAM implementations of moveBuffUp()/moveBuffDown() implemented and debugged

The in-memory RAM database implementations of moveBuffUp() and moveBuffDown() have been implemented and debugged. You can now sort data in the CFBam 2.7 Editor.

2016.03.11 MSS Code Factory 2.6.13469 Added forgetRelationships() method to objects

It is necessary to forget relationship linkages when realizing an object, even if the current instance from the persistent store is being kept. Otherwise things like the prev/next links can cause you to go into infinite loops in the CFBam Editor, causing Java to run out of heap.

2016.03.10 MSS Code Factory 2.6.13466 Corrected utility scripts

The utility scripts used to work with the 2.7 code have been tweaked to my preferences.

2016.03.10 MSS Code Factory 2.6.13463 Migrate SwitchCFLib and SwitchCFCore scripts from 2.5

Those scripts are kind of handy. I don't know why I didn't migrate them earlier.

2016.03.10 MSS Code Factory 2.6.13458 Reduce ShowLines to 10 for CFBam

Twenty lines wouldn't fit on a 720p screen, which is my minimum required for running the CFBam editor. 10 should do nicely.

2016.03.10 MSS Code Factory 2.6.13456 Calculate widget height based on ShowLines

The widget height for text editors was not being adjusted based on the ShowLines values.

2016.03.10 MSS Code Factory 2.6.13454 Increased ShowLines in CFBam from 5 to 20

I want bigger text editors for the customization attributes of the SchemaDef and Table.

2016.03.10 MSS Code Factory 2.6.31442 Added missing DefSchema relationship to CFBam.ClearDep

The PopDep and DelDep specifications already had the DefSchema relationship in place, but it was missing for the ClearDeps. I also back-ported the database naming changes from the 2.8 model.

2016.03.08 MSS Code Factory 2.6.13423 Add CFBam.Table.PageData attribute

The PageData attribute was missing because I took my copy of the model before I'd made that change to the 2.6 models.

2016.03.08 MSS Code Factory 2.6.13421 Clean build of manufactured application code

This release produces clean builds of CFCore, CFSecurity, CFInternet, and CFBam 2.7.

2016.03.08 MSS Code Factory CFAll 2.6.13420 Tokin' that CFLib 2.5.13417

Toke if you got 'em! (I'm a medical cannabis user.)

CFLib 2.5.13417 corrects an error in the implementation of CFLibBigDecimalUtil that was incorrectly comparing argDigits to MAX_PRECISION instead of comparing argPrecis.

All of the projects, including MSS Code Factory 2.6, have been repackaged with the corrected jar.

2016.03.08 MSS Code Factory 2.6.13416 Fleshed out the remaining command scripts

The remaining command scripts for doing the batch manufacturing and builds for the 2.7 projects have been migrated and modified from the 2.5 versions.

2016.03.08 MSS Code Factory 2.6.13414 Correction to use Enums for AuditActions

The AuditAction table has been eliminated from the 2.7 CFSecurity model, and the new Enums are now used throughout the code for both CFCore and regular applications.

2016.03.08 MSS Code Factory 2.6.13412 Models and rules corrected to produce valid CFCore 2.7

The models and rules have been updated in order to produce a valid build of CFCore 2.7.

2016.03.08 MSS Code Factory 2.6.13410 Clean manufacturing runs

MSS Code Factory 2.6 now produces clean manufacturing runs after some judicious editing of the rule base it uses.

Next I need to migrate CFLib 2.5 to CFLib 2.7, manufacture CFCore 2.7, build CFCore 2.7, and then I can manufacture the remaining 2.7 projects.

Note that MSS Code Factory 2.6 is for internal use only -- its sole purpose is to create the 2.7 code base, which will be the next version that should be used for production applications. The releases of 2.6 are only provided for the use of people who are working with the MSS Code Factory code itself, not general application developers.

2016.03.08 MSS Code Factory 2.6.13409 Rebuilt with dual-GPLv3 version of CFBam

As I intend to integrate the custom code of the MSS Code Factory engine for use by the BAM Editor, the license of the CFBam 2.6 code has been changed to a dual commercial/GPLv3 license. You are no longer allowed to use the CFBam source code under the terms of the Eclipse License.

2016.03.08 MSS Code Factory CFBam 2.6.13408 License changed to Dual-GPLv3

As I intend to integrate the custom code of the MSS Code Factory engine for use by the BAM Editor, the license of the CFBam 2.6 code has been changed to a dual commercial/GPLv3 license. You are no longer allowed to use the source code under the terms of the Eclipse License.

2016.03.08 MSS Code Factory CFBam 2.6.13406 Initial BAM editor created

A skeleton of the BAM editor with a BAM Hierarchy browser over an empty in-memory RAM persistent store has been created, along with scripts for launching the editor. You can't really use it for much, as the RAM database really only supports inserts and updates right now, not deletes. Nor have I moved the BAM parser from the command line interface and glued it in to the editor for loading a model, much less started the code for saving a model.

Still, I accomplished a great deal today. I am content with my progress.

2016.03.08 MSS Code Factory 2.6.13405 Clean build and it runs, although with errors

The initial port of CFBam from 2.5 to 2.6 builds now. However, it does not run properly as the rule base has not been updated. I was surprised to see it succesfully load the rules at all. It even tries to generate incorrect file names.

Perhaps this won't be as painful a process as I'd feared.

2016.03.08 MSS Code Factory CFBam 2.6.13404 The CFBam 2.6 model was missing Table.PageData

The Table.PageData boolean has been added to the CFBam 2.6 model. That is the cause of the last remaining build error for the initial 2.6 migration effort.

Kind of fitting for a "404" build, eh? :)

2016.03.08 MSS Code Factory 2.6.13402 The mssbamcf package clean compiles

The mssbamcf package now clean compiles. That was the first one in the build.xml, so I tackled it first.

2016.03.08 MSS Code Factory 2.6.13401 First round of edits complete

The rough edits to coordinate the license headers, switch the package names, and reference the new version of imports has been completed. It is time to create an Eclipse project and start fixing problems in the code.

The first package that I'll tackle is cfbamxmlloader -- the BAM parser.

2016.03.07 MSS Code Factory 2.6.13400 Project initialized

The MSS Code Factory 2.6 project has been initialized. I have decided I am going to shift to the 2.6 code base rather than working on the CFAccounting application any more right now.

That CFBam editor idea of mine sounds far more appealing.

Note that the code checked in is no where near being build-ready. It is just a quick and dirty copy of the 2.5 code right now, suitably renamed but not edited.

2016.03.07 MSS Code Factory CFBam 2.6.13399 Reworked to take advantage of EnumTypes

The CFBam 2.6 model has been reworked to remove the lookup tables in favour of the recently supported Enum types. The custom code fragments have also been updated to use the enums defined in the schema interfaces instead of the lookup tables, greatly simplifying the code and improving the readability.

This effort has resulted in the elimination of 7,559 CFBam 2.6 source files and reduced the code base by 1,667,751 lines of code to 11,138,622 lines.

MSS Code Factory CFBam 2.6 Project Sizes
Project Database Java Total
Name Files Lines Files Lines Files Lines
2016.02.21 38,453 5,300,040 11,754 7,245,567 50,304 12,806,373
2016.03.07 31,947 4,480,715 10,701 6,422,767 42,745 11,138,622
Size Reduction 6,506 819,325 1,053 822,800 7,559 1,667,751

2016.03.07 MSS Code Factory CFAcc 2.6.13397 POItems now adjust number of digits based on VendorUnit

Selecting a VendorUnit (or clearing it) while adding or editing a POItem now adjusts the NumberEditor for the form to display the correct number of fractional digits for the vendor unit.

This cannot be done for the list boxes, however, because each line item can reference a different vendor unit, so the default 20.5 displays are used instead.

2016.03.07 MSS Code Factory CFAcc 2.6.13396 Repackaged with CFLib 2.5.13394

I am going to need the setDigitsAndPrecision() method added to the CFNumberEditor for the next pieces of customization of the CFAccounting package, so the prep work has been done.

The other projects have been updated in git, but will not be repackaged and republished at this time as they don't use the new routine and won't unless I modify the factory's rule base to use it.

2016.03.07 MSS Code Factory CFAcc 2.6.13393 Added relationships

Relationships between a BillItem and a PurchaseOrder and POItem have been established, with appropriate DelDeps added as well. You can also locate the BillItems that reference a PurchaseOrder or POItem from those objects via Children relationships (the BillItem uses Lookup relationships so that pickers are available when editing the relationships.) How detailed you wish to make your tracking of the relationship between BillItems and the PurchaseOrders/POItems is entirely up to the user; you are not required to establish those relationships.

2016.03.07 Programmer's Notes for CFBam

I've decided what my *next* project is going to be. I'm going to take CFBam 2.6, and build an editor for MSS Code Factory models out of it. It is close to the 2.5 BAM used by the engine, though not a perfect match.

Still, it is close enough that I should be able to use the 2.5 BAM parser with little modification to read models. I'll then need to code something for writing model files, after which I'll have to do some heavy modification of the GUI to ensure that people can only modify the current model, not the imported/referenced models.

Last but not least, I might even port the engine itself to run at the press of a button from the editor. It is going to be a fun project.

That one should also take about 6 months to a year to finish. So between CFAccounting and this new project, I've got my work cut out for a couple of years. Something to keep me entertained and busy in my disability retirement. :)

2016.03.07 MSS Code Factory CFAcc 2.6.13391 Adjust order of DelDeps and ClearDeps

The objects of an account are interdependent, so they need to be cleared and deleted in the correct sequence to minimize problems.

You can no longer delete finalized PurchaseOrders.

2016.03.07 MSS Code Factory CFAll 2.6.13389 AddForm instantiated after new instance initialization, Purchase Orders customized

The AddForms are now instantiated after the new instance is initialized so that there are fewer problems with null references while customizing the forms. This wasn't causing a problem for the manufactured code, but I got tired of having to remember to make the edit when copy-paste-editing the manufactured code for custom forms and panes.

The CFAccounting PurchaseOrder and POItem forms and panes have been customized. Once you finalize a PurchaseOrder, you can no longer edit it nor its items. You can delete the PurchaseOrder, but not the individual line items. The currency of the Account is used to configure the ApprovedAmount of the PurchaseOrder. There is also code in place ready to use should I ever add individual pricing to the POItems, though that code isn't really needed right now.

I'm quite happy with how the PurchaseOrders came together. There is still a lot of customization to be done in the future, but it is a start. (Specifically, I want to use a "Finalize Order" button in the PurchaseOrder View/Edit pane to set the flag, rather than relying on the user checking off the box and saving the form. The button will trigger a back-end server process rather than editing the objects on the client side, and refresh the PurchaseOrder with the result set of the remote procedure.)

2016.03.06 MSS Code Factory CFAll 2.6.13387 Rebuilt with CFLib 2.5.13385, SMTPS fix rolled out

CFLib 2.5.13385 changes the user feedback of the JavaFX ReferenceEditor to grey out the text edit component when setCustomDisable() is invoked with "true".

The SMTPS fix implemented yesterday is rolled out with this release.

Specifically for CFAccounting with this release:

You are now forced to choose a currency and a timezone for AccountConfig.

When you create a Contact, the default timezone from the AccountConfig is automatically applied as an initial value.

You are forced to choose a Currency and set the AccountCode of an Account at creation time. You can not change the Currency of an Account after it has been created.

During creation, the Balance field of an Account uses 50.5 formatting no matter what currency is chosen. This behavior changes during subsequent editing of the Account, when the Balance changes to use the Currency configured by the Account.

2016.03.06 MSS Code Factory CFAcc 2.6.13384 Apply fix for SMTP authentication issue

A friend has been testing MSS Code Factory manufactured code, and encountered a problem with using secure SMTP connections to send emails from the Security Management HTTPS server. I've taken their fix and integrated it with the code produced by MSS Code Factory.

You should add a variable named "CFAcc26SmtpEnableSMTPS" and set it to "false" initially. If you can't get a connection to your email server with that setting, try changing the variable to "true" -- that enables an alternative way of using the Java EMail Transport object that worked for my friend.

The other 2.6 projects will have the fix applied the next time I do a full refresh.

2016.03.06 MSS Code Factory CFAcc 2.6.13382 Remove contact list selections from AccountConfig

The contact list filtering is a bad idea, because it doesn't match 1:1 with the account types, so I've removed that feature. I have, however, added a default timezone selection option.

I have made the DefaultCurrency selection active for adding the initial AccountConfig only; you can not change the default currency after setting it. You can, however, change the default timezone.

2016.03.05 MSS Code Factory CFAcc 2.6.13380 Customized Tax forms for currency displays

The various Tax forms have been customized to display fees with the proper digits and precision for the default currency configured for the tenant in the AccountConfig.

2016.03.05 MSS Code Factory CFAll 2.6.13379 Remanufactured by Service Pack 9

The interpretation of Digits and Precision for Number columns and types has been corrected by MSS Code Factory 2.5.13378 Service Pack 9, which was used to remanufacture all of the 2.6 projects. They have also been rebuilt and packaged with CFLib 2.5.13377, which provides the new CFLibBigDecimalUtil class that is used to implement the fixes.

2016.03.05 MSS Code Factory CFAcc 2.6.13373 Digits have to be greater than precision for numeric types

The number of digits has to be greater than the precision for numeric types. Digits is the total number of digits including the precision.

2016.03.05 MSS Code Factory CFAcc 2.6.13371 Add Tax, AccountTaxId, InvoiceTax, and BillTax objects

The Tax object is owned by a Tenant and allows configuration of fixed fee and percentage based taxes.

The AccountTaxId object is a join between an Account and a Tax that lets you specify a tax id code for the combination when that kind of tax is applied for the Account (for example, a GST number.)

The InvoiceTax and BillTax objects join an InvoiceItem or a BillItem to a Tax so that the finalization process knows to calculate those taxes for those line items, and to create line items with the total for that particular type of tax.

This should complete the object set for CFAccounting. Taxes were the only thing I hadn't dealt with (at least to some degree) up to now.

That brings the project up to 2.2 million lines of code.

Db files: 8395
Db lines: 637974
Java files: 3559
Java lines: 1467161
Total files: 12053
Total lines: 2208848

2016.03.05 Programmer's Notes for CFAccounting

I've been giving some thought to taxation. There are two key types of taxes and fees: percentage based and fixed. But they don't apply to everything in a system, so the only way I can think of allowing entry of them is to create a generic Tax object that can be referenced by InvoiceTaxApplied and BillTaxApplied sub-elements of the respective detail items. Because taxes are a generic type of thing, they'd be owned by the Tenant, not the individual accounts.

I don't want to limit the number of taxes that can be applied to line items by making the references part of the line items themselves. In the US in particular, it is not uncommon to have city, county, state, and federal taxes apply to something; and sometimes more than one at a given level of government. So doing something like assuming you'd only need to apply a maximum of three taxes would be a mistake.

That is going to result in a rather clumsy interface, but I can't think of any way around it. Unless maybe I do something like "hide" those new sub-objects behind a list of checkboxes on the InvoiceItem and BillItem, populating that list of checkboxes dynamically based on the contents of the Tax objects entered for the Tenant.

The calculation of the taxes would be automatic based on either the fee or the interest value entered in the configuration of the tax.

I think I would also want to add an optional TaxNumber object as an element of the account so you could create a join with a particular type of Tax and the TaxNumber, specifiying the tax id code for that account. (For example, a GST number.)

The more I re-read these notes and think further about it, the more comfortable I am with this design approach. I think I'll get this modelled later today, maybe even before I go back to bed (it is 04h35 right now -- I'm a night owl -- what can I say, eh?)

2016.03.05 MSS Code Factory CFAcc, CFCrm 2.6.13369 Remove Account component Currency specifications

The Currency specifications for PurchaseOrder, Bill, Invoice, Payment, Cheque, and Deposit have been removed. All transactions should be in the currency of the Account, entered after the conversion and fees have been applied for the conversion. This is an accounting application, not a banking system.

Also cleaned up obsolete internet XSDs for CFCrm 2.6.

2016.03.04 MSS Code Factory CFAcc 2.6.13367 Add EFT flags

An IsEFT flag has been added for Cheques and Deposits. In the case of a Cheque, that means a ChequeNumber doesn't get consumed automatically when it is issued. I also added a ChequeAlwaysEFT flag to the Account object, so that if you create an account for a credit card, you won't have to keep ticking off the EFT checkbox in the GUI.

2016.03.04 MSS Code Factory CFAcc 2.6.13365 Add Fee and FeeDetail

Ok. That has GOT to be it save for tax support, and I'm not sure how I'm going to tackle that yet. After all, the project is now nearly 2.1 million lines of code!

Db files: 7982
Db lines: 602290
Java files: 3315
Java lines: 1374617
Total files: 11396
Total lines: 2077667

2016.03.04 MSS Code Factory CFAcc 2.6.13363 Add Deposit and DepositDetail

With the addition of the Deposit and DepositDetail objects I am now reasonably certain I have the object hierarchy laid out for CFAccounting. I could be wrong, and I know the details of the objects will change as I work through the implementation, but this is at least a solid starting point.

2016.03.04 MSS Code Factory CFAcc 2.6.13361 Debugged new AccountType tab limits

The new AccountType visible EltTabPane limits for the Account have been implemented and tested. Debugging this also made me realize I need a Deposit object to offset the Cheques.

2016.03.04 MSS Code Factory CFAcc 2.6.13360 Change AccountTypeEnum

Change the account types to:

General - a generic account, usually a rollup
Bank - an account from which cheques can be issued
Payable - an account which issues purchase orders and receives bills
Receivable - an account to which invoices are issued and payments received

Payroll and internal business/departmental accounting are beyond the scope of general accounting. I don't need to complicate things more than they already are.

2016.03.04 MSS Code Factory CFAll 2.6.13356 Rebuilt with CFLib 2.5.13353, CFCore 2.5.13354

The latest versions of CFCore and CFLib have been updated to 2016 licensing, as have the 2.6 projects themselves.

2016.03.04 MSS Code Factory CFAll 2.6.13352 Source code licenses updated for 2016

The source code licenses for the MSS Code Factory 2.6 projects have been updated for 2016.

2016.03.04 MSS Code Factory CFAcc 2.6.13350 Add the ChequeDetail and PaymentDetail

The ChequeDetail and PaymentDetail are used to support what are commonly known as "splits", which let you apply a cheque to more than one bill with full or partial payment of each bill, for example. Similarly, payments received can be applied to one or more full or partial invoices.

This completes the basic object set for CFAccounting, though there are likely to be changes made to the objects over time. I might also add some form of template objects or specific support for taxation at some point. For now, I'm just planning on treating taxes as regular line items.

CFAcc 2.6 now weighs in at nearly 1.9 million lines of code.

Db files: 7322
Db lines: 545357
Java files: 2989
Java lines: 1240698
Total files: 10414
Total lines: 1898595

I started working on CFAcc 2.6 in earnest on 2016.02.12. Until then, it was just a shell of a model, a place holder for something I wanted to work on some day. So realistically, I've created 1,898,595 lines of code in 21 days, on top of everything else I've done in that time with MSS Code Factory itself. That works out to 90,409 lines per day. My best productivity yet.

2016.03.04 MSS Code Factory CFAcc 2.6.13348 Add the BillItem and InvoiceItem

The BillItem and InvoiceItem have been added. Things get a little more different for the remaining PaymentDetail, and ChequeDetail objects that I still have to add, as those are not listing actual items, but reference the objects that they apply to instead.

2016.03.04 MSS Code Factory CFAcc 2.6.13346 Add VendorUnit and POItem

The details for the purchase orders have been somewhat fleshed out with the addition of a VendorUnit object as a component of an Account, and the POItem as children of the PurchaseOrder. Note that each vendor has its own VendorUnits; they are not shared throughout the whole tenant. This allows one vendor to specify that when they are measuring grams on a purchase order, they are referring to full grams (0 digits), while another vendor may mean hundredths of a gram (2 digits.)

2016.03.03 MSS Code Factory CFAll 2.6.13344 Cleaned up user interfaces

I changed the workflows for the Add and View/Edit forms. They now have the buttons Edit, Save, Close, and Cancel (Save isn't visible for all forms, because sometimes you don't want the new behaviour enabled, particularly for the hierarchy browser object adds.)

Edit takes you into edit mode for a form, enabling the Save and Close buttons as well as Cancel (Cancel is always enabled.)

Save for an Add form will save the object and replace the form with a View/Edit form over the new object in View mode so you can start working with its component objects right away. Save for a View/Edit form saves the current changes and puts the form back in View mode.

Close is the old Save behaviour where the object would be saved and the form closed.

Cancel abandons changes and closes the form, but does NOT undo the changes if you issued a Save previously.

2016.02.28 MSS Code Factory CFAll 2.6.13341 Use CFReferenceEditor.setCustomDisable()

The CFReferenceEditor.setCustomDisable() method does not disable the whole pane of the custom widget, but only the Pick button. You should always be able to View the selected object and be able to select-copy-paste the text of the selected object's name.

2016.02.28 MSS Code Factory CFAll 2.6.13338 Finished locking down form modes, fixed reference editors

Instead of displaying a ViewEditForm when you try to View the target of a ReferenceEditor, the JavaFX code now instantiates an Add form in View mode.

With this most recent set of changes, I now have the edit mode coordination locked down to a "safe" implementation that should prevent the user from hanging themselves by creating conflicting or inconsistent data states.

See the release notes for MSS Code Factory 2.5.13337 for details.

2016.02.27 MSS Code Factory CFAll 2.6.13336 Adjust enable state of ListPane buttons

The list buttons should only be enabled for a list when the form is NOT in edit mode. If you are editing the containing object, you must save or cancel that edit before manipulating the details.

The Account hierarchy browser for CFAcc now properly brings up the ViewEdit pane instead of the Add form when you re-open an Account after the initial add. The erroneous behaviour was a holdover from the copy-paste-edit of the Internet Hierarchy browser.

2016.02.27 MSS Code Factory CFAcc 2.6.13334 Account object fleshed out

I think I have finished adding all the attributes and sub-objects that an Account will need. This release adds Next[Cheque/Invoice/PurchaseOrder]Number and [Cheque/Invoice/PurchaseOrder]Digits attributes so that the creation of those sub-objects can auto-generate a sequence number.

I can't think of anything else an Account needs to have as an attribute.

2016.02.27 MSS Code Factory CFAcc 2.6.13332 Add index over AccountType

There is now an index over the AccountType that also includes the IsRollupAccount flag column. This will make it possible to generate lists of allowed "real" accounts in the user interface when selecting an account to issue a cheque for paying a bill, for example.

2016.02.26 MSS Code Factory CFAcc 2.6.13330 Add CFAcc.Account.AccountType

The AccountType is used to restrict and configure the actions and views that an account can actually present and use. As with the IsRollupAccount attribute, you can only specify the value when Adding an Account, not in the AccountViewEdit form.

Budget - An account used for managing project or departmental budgets that cannot issue purchase orders, but which can have money transferred to and from it. The sole purpose is to provide a means of tracking the department's spending and budget, not to handle chequing functions and such. You can pay an Expense bill out of a Budget. You can issue an Invoice to another Budget. You can also issue PurchaseOrderes to another Budget. Basically, the Budget account is a do-anything account that is restricted to dealing with other Budgets instead of Vendors, Customers, or "real" money.

Chequing - A corporate bank chequing account that can be used to pay bills

Customer - A customer account that can have invoices issued to it and from which payments can be received. Essentially an Accounts Receivable type of account.

Payroll - A special chequing account that can only issue cheques to employee contacts.

Saving - A corporate bank savings account that cannot be used to pay bills or issue cheques.

Vendor - You can issue purchase orders to vendors and receive bills from them, but you have to pay them from a corporate Chequing account.

2016.02.26 MSS Code Factory CFAcc 2.6.13328 Add Payment object

After you have issued an Invoice, you will eventually receive Payment of that Invoice. At least in an ideal world. The tab for the custom AccountEltTabPane is therefore after the Invoice tab.

2016.02.26 MSS Code Factory CFAcc 2.6.13326 Add Bill object

The Bill object is created when a purchase order is filled and invoiced; the purchase order itself should not have a Ledger entry, so that relationship has been removed. Instead, you would enter the purchase order id in the bill information. Though I think I only defined a field for the billing code, which I intend to receive the invoice id from the vendor.

The custom AccountEltTabPane has been updated to include the Bill object list, and has had it's tabs resequenced according to the order you would normally be filling out data. Account Contacts first, followed by Invoices, Purchase Orders, Bills for the Purchase Orders or other bill types, Cheques to pay the bills, and finally what will eventually be a read-only view of the Ledger entries.

My plan is that all your manipulation of the Ledger should happen through other interface forms, rather than letting you mess with the core data of the accounting system.

2016.02.26 MSS Code Factory CFAcc 2.6.13324 Account object locks out dangerous functionality

The JavaFX Account object interface now locks out dangerous functionality and eliminates the SubAcct list from the EltTabPane.

2016.02.26 MSS Code Factory CFAcc 2.6.13323 Added Cheque, Invoice, and PurchaseOrder objects

CFAccounting now includes Cheque, Invoice, and PurchaseOrder objects, which will still need to be fleshed out with their details. However, this fleshes out the object set I need in order to be able to lock down the Account object itself, as the members for these objects have been defined as well.

That means I can now customize the Account Add and ViewEdit forms so that the user can no longer make dangerous changes to the data when they access those forms from the Account Hierarchy browser.

2016.02.25 MSS Code Factory CFAll 2.6.13321 Critical bugs fixed by emergency Service Pack 7

Critical bugs in the XMsg implementations have been corrected by MSS Code Factory 2.5.13320 Emergency Service Pack 7.

The CFAcc custom JavaFX code now includes an Account Hierarchy brower, which has been thoroughly tested. You should not use the EltTabPane of the Account View/Edit form to add sub-accounts; use the browser instead. I won't be replacing the Account forms with custom versions that hide the "bad" manufactured functionality until I am satisfied that I have stabilized the design of the Account objects. Once I've done so, I'll implement the necessary customization to ensure that the user is not able to perform bad actions like adding sub-accounts through the EltTabPane or changing the value of the Rollup Account in the Account forms. For now, you can quite easily hang yourself.

2016.02.25 MSS Code Factory CFAcc 2.6.13319 Completed changes for Account list in custom ContactEltTabPane

The CFAccounting model was erroneously restricting the AccountContact to there being only one contact for an account, when the intent was to model a many-to-many relationship, as it is quite normal to have multiple contacts for corporate accounts. Even if I were dealing with bank accounts, there would be joint accounts to consider.

That means you can now create account contact entries, as there is now a list being presented in the AccountEltTabPane for the AccountContacts, rather than an AttrPane for a singleton.

This allowed me to test the Account list I added to the custom ContactEltTabPane. It works as intended, though I did tweak things a bit to provide descriptions as well as the account codes that the lookup reference itself displays.

2016.02.25 MSS Code Factory CFAcc 2.6.13317 Wired Account list to a custom ContactEltTabPane

The customized ContactEltTabPane populates a list of AccountContact, but displays the ContainerAccount instead of the ParentContact like the regular AccountContactList does.

Unfortunately, I haven't been able to populate test data because I forgot this is that one special case in the whole system where an Attr pane gets displayed under the Account instead of a list of sub-objects, because there is a 1:1 relationship between an AccountContact and both its ContainerAccount and its ParentContact. (i.e. AccountContact is a join table.)

I'm tempted to just use custom code to deal with the situation, but join tables are actually quite common in systems design, so I guess I had best revisit the JavaFX rule base and work up a generic solution to the problem.

Every time I think I'm "done" I find yet another "gotcha" to bung up the works...

2016.02.24 MSS Code Factory CFAcc 2.6.13316 Account Configuration now takes you straight to the Add/ViewEdit forms

As Account Configuration is a tenant singleton (1:0,1 relationship), the custom Facet pane for CFAccounting has been modified to determine if the instance has been created and route you to the Add form over a new instance if necessary, or the ViewEdit form for the object instead. This results in a cleaner and easier to use interface, as there is no intervening Finder form to be navigated through, and you can't try to create a second instance (which always results in exceptions because the database ensures a singleton is enforced.)

2016.02.24 MSS Code Factory CFAcc 2.6.13315 Integrate Contact List finder with CFAcc

The Contact List button has been moved from the separate CFCrm tab in CFAccounting, and the CFCrm tab removed. The focus of this application is security and accounting, not customer management. A cleaner, simpler interface is always a better one.

2016.02.24 MSS Code Factory CFCrm, CFAcc 2.6.13314 Remove Tag object from CFCrm

I don't like the Tag implementation I did. It was a hack. It is ugly, it is clumsy, it is crude, and it is GONE.

2016.02.24 MSS Code Factory CFAll 2.6.13312 Remanufactured by Service Pack 6

All of the 2.6 projects have been remanufactured using MSS Code Factory 2.5.13311 Service Pack 6. This release is the culmination of several years of intensive work, and provides full functionality for the three core 2.6 projects on which users base their project work: CFSecurity, CFInternet, and CFCrm.

I will be focusing on CFAccounting for the next while. The other projects can wait; I never did intend to take all of them to the state of being "real" applications in the first place. With the exception of CFBam, which provides the core model used by MSS Code Factory itself, the 2.6 projects have existed primarily to provide test data for the development of MSS Code Factory itself.

However, you are free to use the non-core projects within the confines of GPLv3 licensing. I wouldn't recommend relying on CFAcc 2.6 to remain stable, though, as I am just getting started on the development of that project and am likely to change my mind about my underlying data model quite frequently.

Please. Enjoy. Have fun.

2016.02.24 MSS Code Factory CFCrm, CFAcc 2.6.13310 The three core projects are now done

The three core projects (CFSecurity, CFInternet, and CFCrm) now have their custom code completed. I have some optimization ideas for the CFInternet hierarchy brower, but it is not necessary to optimize code just yet. It works. Good enough.

The Attachment and Memo editors for CFCrm have been thoroughly tested.

Note that the Memo editor always loads and saves files as UTF-8. You have no choice in this from the user interface unless you take a copy and customize it further for your application. All of my systems run UTF-8 as their default character set, so it just works.

2016.02.23 MSS Code Factory CFCrm, CFAcc 2.6.13308 AttachmentData is now supported by the client

The client custom code has been reworked to support the AttachmentData in the CFCrm forms. The manufactured code will work for the Memos, but it is a clumsy interface so I will replace that with a copy-paste-edit of the Attachment custom forms later tonight or some time tomorrow.

The Attachments have been thoroughly tested, though, so it is a good code base for building the Memo support.

2016.02.23 Programmers Notes for CFCrm

I've come up with a better way of dealing with the loading issues for attachment data. What I'm going to do is create an AttachmentData object that just has the same primary Key as an Attachment and move the data BLOB to that object. So when you open a Contact, only the Attachment information will be downloaded, not the Attachments themselves. When you open an Attachment window, the data still won't be downloaded, because I'm going to use custom forms to hide the EltTabPane containing the data that would normally be part of the window.

Instead, when you select Save, you'll choose your file as per usual, then the AttachmentData will be force-loaded from the server while a "Downloading attachment data..." message is displayed in CFConsole. Once the download is complete, the normal save process will occur, writing to the file.

When you close the Attachment form, I'll tell the cache to Forget the AttachmentData object, so that memory doesn't get sucked up on the client.

This will also resolve the issue of large numbers or sizes of attachments causing the messaging system to overflow a Java StringBuffer. With this change in place, I can also easily increase the size of the AttachmentData to 1GB instead of 16MB.

I'll do the same thing for the Memo fields, so that you can paste really big text documents as Memo fields. Maybe I'll even add Load/Save buttons so you can load and save the Memos as text files.

I might start working on it later tonight, but not right now. More likely I'll work on it tomorrow.

Once these enhancements are done, the implementation of CFCrm will be complete.

2016.02.23 MSS Code Factory CFCrm, CFAcc 2.6.13305 Implement attachment file load/save

The Load and Save functions for the Attachment objects have been implemented.

I haven't implemented the deferred loading of the Attachment objects yet, so every time you open a Contact, all of its Attachments are automatically loaded, which will slow down the system a bit and increase network traffic substantially -- especially if you have a lot of Attachments.

I also realized it doesn't make sense to restrict the user to 64 Attachments, as the odds are most of the attachments will be much smaller than 16MB (things like photos are often no more than 1MB in size.)

It isn't fancy, but it works.

2016.02.23 Programmer's Notes

I feel totally burnt out after last night's efforts. I'll get around to working on the binary file load/save support when I feel more functional. It isn't like I am behind schedule, as I have no schedule. :)

2016.02.23 MSS Code Factory CFAll 2.6.13303 Critical JavaFX bugs corrected

There were class-cast exceptions being thrown when populating the fields of an AttrPane due to lookup and parent references failing to use the EffSchemaName of the target of the reference instead of the current manufacturing SchemaName.

The ListPanes were still wrapping their DataTables in a ScrollPane. That is not the correct way to code scrolling for DataTables -- they provide their own scrolling support without having to be wrapped in a scrolling object such as had to be done with Swing.

I have also copy-paste-edited the forms for CFCrm that are going to have to be customized to support the Attachment BLOBs, but haven't started coding those changes yet. I got distracted by the problems above. I'll deal with the BLOBs tomorrow.

The CFCrm and CFAcc projects will be getting refreshed tomorrow, but the others should stay stable unless I find more show-stopper bugs while working on those two projects.

2016.02.22 MSS Code Factory CFAll 2.6.13300 CFCrm.Attachment now specifies a 16MB BLOB attachment

The Attachment data has been changed from a text file to a BLOB to allow images and other such information to be stored. The client will need customization to allow the user to Load and Save the attachment data, as BLOB fields are not directly supported by manufactured code (as the engine has no idea what kind of attachment is involved.) A limit of 63 attachments will also be enforced to avoid running into Java's 32-bit string size limitations when querying the attachments from the XMsg server. That should limit the size of the actual message string to no more than about 1.5GB -- well below the actual 2GB limit of a signed 32-bit integer.

Dynamic JDBC is used by some of the databases when BLOB data is in place. Errors in the engine rules were uncovered by this change, and have been corrected. As this affects low-level code, all of the 2.6 projects have been completely remanufactured, rebuilt, and repackaged to make sure the changes are applied across the board.

2016.02.22 MSS Code Factory 2.5.13298 CFCrm and CFAcc no longer depend on CFInternet

The dependencies on CFInternet have been removed from CFCrm and CFAcc. Only those two projects are affected by this change, as only CFAcc references CFCrm. All other projects save for CFSecurity reference CFInternet instead. The Attachments have been made into BLOBs with a maximum size of 16MB each. A limit of 63 attachments per customer will be imposed to prevent running into the limits of Java string sizes used for the Base64 communications.

2016.02.22 Programmer's Notes for CFCrm

Before I proceed with working on CFAccounting, there is a little task I need to take care of for CFCrm. It needs a bit of customization for the Attachment editors to support loading and saving binary file data as the attachment. That probably won't take long; I might even get it done tonight. But it doesn't make sense to have an attachment object with no way to manipulate the attachment, does it?

2016.02.22 MSS Code Factory CFAll 2.6.13297 Remove dependency on CFInternet from CFCrm and CFAcc

CFCrm and CFAccounting no longer depend on CFInternet.

2016.02.22 MSS Code Factory CFAll 2.6.13295 Use CFConsole.message() instead of Alerts

I don't like the JavaFX Alert implementation -- it doesn't deal with multi-line text properly. So rather than work up my own alerts that do it properly, I just switched all alerts to CFConsole messaging.

The CFAcc 2.6 release is completely incompatible with earlier releases as I've been busy restructuring the objects and databases. You really shouldn't be relying on CFAccounting to remain stable while I'm developing the application. Give me a few months; maybe even a couple of years. Treat CFAccounting as a work in progress, not something to rely on.

2016.02.22 MSS Code Factory CFAcc 2.6.13293 Clean build of reworked code

This version of CFAccounting is 100% incompatible with previous releases as I've done some major refactoring and enhancements. Even the AccountEntry has been renamed Ledger.

2016.02.22 Programmer's Notes for CFAccounting

I have been giving some thought to CFAccounting over the past few days, and come up with some user interface design points and features I want to implement.

The first feature I want to implement is an AccountHierarchy browser to be used instead of the manufactured account finder forms. If an Account is a rollup account, it will not be allowed to have Ledger entries (I haven't defined the Ledger yet.) If an account has Ledger entries, it won't be allowed to convert to a rollup account.

A rollup account is the only type that can be broken into sub-accounts. Unlike the domain hierarchies, I can't restrict the number of levels of accounts, so you'll have to walk the account tree in code rather than through database queries.

I have some ideas on how to optimize the account retrievals and processing for the hierarchy browser, primarily by retrieving the set of all accounts for a Tenant, and then using some glue code to auto-populate the various filtered query data in the cache rather than requiring the browser to hit the database/server back-end for each sub-query. So the hierarchy browser will still perform per-node queries, but it will be hitting up the data cache instead of hitting the back end server to process those queries. This is going to be a bit of fun to code, but it should run rather fast when I'm done. I'm going to enjoy working on this piece of code -- it will actually require some thinking and probably a fair bit of debugging.

Notice that accounts can each specify a different currency. That is going to make it challenging to calculate rollups. Rollups won't be stored as a running balance in the database, but will be dynamically calculated at the client by totalling the account balances of the various ledger accounts under a given rollup. The ledger accounts will, however, keep a running balance, so you'll be able to calculate the rollup without having to query the Ledger.

The transactions against the Ledgers will all be performed by customized server-side procedures, so that more than one sub-ledger can be hit at a time to perform account transfers atomically. That means custom forms on the client side, of course, rather than the usual editing of ledger entries.

Ledger entries are going to be insert-only, so there will be no history associated with a Ledger -- the Ledger itself is the history of the account.

Ledger entries will have a transaction type associated with them. Off the top of my head, I'll need Deposit, Withdrawal, Credit, Debit, Correction, IssuePayment, and ReceivePayment entries. Because you won't be allowed to edit a Ledger entry, the Corrections will be required to allow for the inevitable user entry errors that occur with any application. But you aren't going to be allowed to hide your mistake. I might also break down the Deposit to cash and cheque types; I haven't decided yet.

The Ledger will allow for an IdCode attribute that can be used to store arbitrary id codes such as cheque numbers or transaction confirmation codes received from a bank.

There will be a lot more requirements to come as I flesh this beast out, of course, but it is a start on the requirements list. Enough to keep me busy for a couple or few weeks, I think.

2016.02.21 MSS Code Factory CFAll 2.6.13286 Ode to the '286 -- ComboBoxes uses for EnumTypes

My little Java '286 is running!

The EnumType specifications are now presented as ComboBoxes by the JavaFX user interface. Along with that change, a couple of bugs with the code for user-specified ordering of sub-element lists for newly added objects were corrected, the list synchronization issues for the custom TableListPane of CFDbTest was fixed, and a snippet of stale code in the delete callbacks for the ListPanes was cleaned up so that lists refresh properly when an object is deleted.

There are 27,918 lines of custom Java code in all of the 2.6 projects combined out of 16,797,007 total lines of Java code. In other words, 0.1% of the code is hand-written. 99.9% is manufactured.

MSS Code Factory 2.6 Project Sizes
Project Database Java Total
Name Files Lines Files Lines Files Lines
CFAcc 7,674 576,383 2,851 1,185,375 10,629 1,885,431
CFAsterisk 6,036 457,480 2,217 920,253 8,350 1,461,419
CFBam 38,453 5,300,040 11,754 7,245,567 50,304 12,806,373
CFCrm 7,015 519,047 2,793 1,128,911 9,905 1,738,717
CFDbTest 19,345 2,272,288 7,281 3,527,663 26,723 5,963,973
CFFreeSwitch 7,100 576,870 3,068 1,276,531 10,265 1,954,026
CFInternet 5,172 376,448 2,111 832,615 7,375 1,266,977
CFSecurity 3,480 226,329 1,826 680,092 5,390 938,514
TOTAL 94,275 10,304,885 33,901 16,797,007 128,941 28,015,430

2016.02.20 MSS Code Factory CFAll 2.6.13284 All projects remanufactured with EnumDef implementations

I wasn't completely certain that all of the code was in sync, so I did another full manufacturing run, a clean build, and repackaging of the 2.6 projects.

The EnumDef support is now in place as of MSS Code Factory 2.5.13282, so all of the 2.6 projects have been remanufactured, rebuilt, and repackaged to apply those changes.

As the definitions of the data have changed rather drastically, I strongly recommend that you download full versions of the 2.6 projects and reinstall your databases.

2016.02.20 MSS Code Factory CFAll 2.6.13283 All projects rebuilt with EnumDef implementations

The EnumDef support is now in place as of MSS Code Factory 2.5.13282, so all of the 2.6 projects have been remanufactured, rebuilt, and repackaged to apply those changes.

As the definitions of the data have changed rather drastically, I strongly recommend that you download full versions of the 2.6 projects and reinstall your databases.

2016.02.20 MSS Code Factory CFAll 2.6.13271 Refreshed to update CFInternet.MimeType implementation

All of the 2.6 projects have been remanufactured, rebuilt, and repackaged to implement the changes made to the CFInternet and CFCrm models. A new XML initialization file for the CFInternet MimeType table has also been included, which is based on the contents of /etc/mime.types from Debian "Jessie".

You will need to recreate your database to use the rebuilt 2.6 application installers. These new builds are not compatible with older databases or servers.

2016.02.20 MSS Code Factory CFAll 2.6.13268 Remanufactured with ISOLanguage changes, initialization data added

The 2.6 projects have all been remanufactured, rebuilt, and repackaged. The initialization data for the ISOLanguage table is now provided in the bin/initdata directory. All of the ISO tables I intend to populate are now populated; ISOCountryLanguage is one you'll have to populate manually as I don't know of any sources for correlating languages to countries.

You will have to rebuild your database, and you will need to download the full versions or all of the layers for the applications because the new clients are not compatible with old database instances or servers.

2016.02.19 MSS Code Factory CFAll 2.6.13266 Resize and placement issues corrected, enable states synchronized

Just to be clear: due to database model changes made over the past few days, the current versions of the client installers are NOT compatible with older installations of the 2.6 projects. You need to download full versions of the applications and recreate your databases.

The resize and placement issues for the JavaFX Finder and Picker forms have finally been corrected.

The enable states for the ListPane buttons have also been updated and now properly reflect the edit mode of the containing window, whether the list is displaying an add menu, and whether a row is selected.

The selection of rows in the Finder panes now properly update the enable states of their buttons as well.

2016.02.19 MSS Code Factory CFAll 2.6.13264 Adjust minimum window size to 800x480

The minimum window size has been set to 800x480 in order to consume the entire screen of a Raspberry Pi. Unfortunately, the Pi exhibits the same sizing and placement issues for the Picker and Finder forms as OpenJFX on Linux does. It is a shame there isn't an Oracle implementation of JavaFX for the Pi to go with the JDK 8 release -- that would have allowed comparison between different implementations to determine if the bug is in OpenJFX or not. Both the Pi and Linux use OpenJFX, though.

2016.02.19 MSS Code Factory CFAll 2.6.13263 Consolidated JavaFX code for FinderForm

The JavaFX code has been consolidated into the corresponding code.

2016.02.18 MSS Code Factory CFAll 2.6.13261 Picker forms fixed

The picker forms were generating exceptions because they were trying to reference the data table before it was instantiated. This has been corrected and the picker windows now function correctly.

2016.02.08 MSS Code Factory CFAll 2.6.13259 Removed support for ISOCurrency.FracSymbol

Support for the ISOCurrency.FracSymbol attribute has been removed. The population data for the ISOCurrency, ISOCountry, ISOCountryCurrency, and ISOTimezone are now complete and ready for deployment.

2016.02.18 MSS Code Factory CFAll 2.6.13254 ISOCurrency details filled out

I was able to find data for populating the currency symbols and fractional precisions for the ISOCurrency data. Where I couldn't find specific values, the default of a dollar sign has been used. I believe the fractional specifications are complete, though, even if the symbol set is not.

2016.02.18 MSS Code Factory CFAll 2.6.13253 Fleshed out initialization of four ISO lookups

The ISO lookup initialization data has been fleshed out with data gleaned from the relevant ISO standards for ISOCurrency, ISOTimezone, ISOCountry, and ISOCountryCurrency.

Some day I'll deal with ISOLanguage and ISOCountryLanguage, but I don't need it right now so I'm putting off the work. There is a lot of manual effort to converting the tables from the internet to the XML files needed for the imports.

Note that most of the currency symbols and fractional specifications have been defaulted to a dollar and cent sign with two fractional digits for change. I haven't found a comprehensive list of those values yet, so I could only implement proper values for the currencies I know about.

2016.02.18 MSS Code Factory CFAll 2.6.13252 Remanufactured and rebuilt to apply ISO lookup changes

The CFSecurity, CFCrm, and CFAccounting models have been updated to resolve issues with instantiating and populating the ISO objects in the database.

All projects needed to be remanufactured, as all projects incorporate the ISO objects via the lowest level business application model: CFSec.

Initialization XML files for the ISO objects used by CFAccounting have been added to all of the projects as well. They should be imported in sequence (they are numbered) along with the security initialization data for your application after you have initialized the cluster and logged in to the application as "system" for the first time. As the ISO data is stored in system-level tables, you only need to import the data once, not for each tenant you create.

2016.02.12 MSS Code Factory CFAcc 2.6.13250 Merged custom project and main project

It turns out you can debug more than one runtime at once with Eclipse, so there is no need to keep the custom code separate from the main project. I've decided that I'm going to resume working on fleshing out the CFAcc project into an actual application, whether it turns out to be too limited for real use or not. We'll just have to wait and see how it goes, won't we? :D

2016.02.11 MSS Code Factory CFAll 2.6.13249 Code produced by SP4 repackaged with CFLib 2.5.13247

The code produced by Service Pack 4 has been repackaged with CFLib 2.5.13247. This release of CFLib cleans up the production of validation exceptions by the various numeric JavaFX editors, and now provides more detailed information about the reason for the validation failure. This was purely an "optional" excercise for MSS Code Factory, but I thought I'd get it done rather than putting it off until later. Just for something to do this morning.

2016.02.09 MSS Code Factory CFAll 2.6.13246 Repackaged with CFLib 2.5.13244

The Service Pack 4 builds have been repackaged with CFLib 2.5.13244. They were not recompiled, but the wars have changed.

2016.02.09 MSS Code Factory CFAll 2.6.13243 Full field validation now supported by SP4

Remanufacturing with MSS Code Factory 2.5.13242 Service Pack 4 and building with CFLib 2.5.13241 has resolved the remaining issues for field validation and logging to the CFConsole of the applications. This is as "done" as it is going to get for quite some time.

Remanufactured 2016.02.09 to sort the Add menus. This should have been done before the initial release of Service Pack 4.

There are 26,198,013 lines of code in the 2.6 projects, of which only a small fraction is hand written (far less than 1% of the total.)

2016.02.08 MSS Code Factory CFAll 2.6.13237 Repackaged with CFLib 2.5.13235

None of the source code for the 2.6 projects has changed, but they have been repackaged with CFLib 2.5.13235 so that they report field names instead of classes for the user interface exceptions.

There is a big, glaring problem with the code right now. If you get an exception thrown during an Add or an Edit by the field validation process, it gets reported, but the window is left in a view state instead of in it's former Add/Edit state. As a result, the window just closes the next time you try to Save your edits. This is, of course, unacceptable, and I'll be working on it soon, though I don't know how long it will take to fix.

There is a good chance I'll be interrupting the 2.6 uploads with fixes for the problem.

2016.02.08 MSS Code Factory CFAll 2.6.13234 Exceptions are now caught and written to the application's console

The exceptions are now properly identified with field names for the editors, and managed through try/catch blocks on each of the application buttons to log the exceptions to the application's CFConsole instance.

2016.02.07 MSS Code Factory CFAll 2.6.13229 Builds of code produced by Service Pack 3

Service Pack 3 brings support for small-resolution displays such as the 7-inch LCD screen of the Raspberry Pi 2B+, which is only an 800x480 display. With these changes, you should now be able to deploy the clients to any smartphone or tablet which supports JDK 8 and the OpenJFX packages, which should include the iOS and Android ports by Gluon.

2016.02.07 MSS Code Factory CFAll 2.6.13227 Repackaged with CFLib 2.5.13225

The String, Text, Token, NmToken, and NmTokens editors now set their preferred widths, but not a minimum width. This improves compatability for small real-estate screens like the Raspberry Pi.

2016.02.07 MSS Code Factory CFAll 2.6.13224 All applications are now Raspberry Pi compatible

The ScrollPanes for viewing and editing attributes now properly display scroll bars when required. The button menus have all been wrapped in ScrollPanes with dynamic scroll bars so that the menus don't disappear off screen when working on small display real-estate systems like the Raspberry Pi with a 7-inch LCD screen (which is only 800x480.)

While it is crude and painful, the JavaFX applications are now fully usable on the Raspberry Pi.

If they'll fit on the screen of the Raspberry Pi, they'll fit on pretty much any screen, including smart phones using JDK 8 with ports of OpenJFX. (That, apparently, includes Android and iOS devices, so have fun with it!)

The 2.6 projects now weigh in at a whopping 28,053,013 lines of code with the Swing support removed. Not bad for 18 years of work. That averages out to 4,269 lines of code per day if I had worked every single day for the entire 18 years.

2016.02.06 23:45 Programmer's Notes

I now have the horizontal menu scroll bars prototyped in the CFDbTest custom forms. All of the pieces I need for templates to modify the rule base now exist, so I'll get started on that, then remanufacture all of the JavaFX code and issue a build.

All of the forms have to be small-screen compliant, not just the custom ones.

2016.02.06 23:30 Programmer's Notes

I've made the positioning of the button menu consistent for the Hierarchy forms by moving them from the bottom of the window to just under the title area.

2016.02.06 23:15 Programmer's Notes

I finally have the vertical scrollbars working for the button menus of the applications. I can't say that I'm too impressed with the Pi's implementation, though, as the scroll bar only appears when you hover the mouse over where it should be. I don't like that, but that's just me. Someone who uses the Pi regularly will be used to that.

2016.02.06 10:00 Programmer's Notes

The Raspberry Pi runs the applications a lot better now, with most of the screen size adjustments in place. However, I can't get the scroll bars to show up on the vertical button menus, so if you navigate into a sub-menu that has more buttons than will fit vertically, you can't go back to the previous form, because the Back button is off the bottom of the ScrollPane. I've tried setting ALWAYS as the scroll bar policy, but even that doesn't cause the ScrollPane to display one on the Pi.

After I get the vertical ScrollPanes working, I'll deal with the horizontal button menus of the custom forms.

Once I get those working, I'll have sample code for making the changes needed to the rule base to add vertical and horizontal scroll panes to the button menus.

All of the actual data displays seem to be ok.

I also need to remember to remove the sizing configurations from all of the Panes in the rule base. I've already removed them from the custom code.

2016.02.05 MSS Code Factory CFAll 2.6.13222 Rebuilt with CFLib, CFCore with Swing support removed

The Swing support has been removed from CFLib 2.5.13219, CFCore 2.5.13220 has been rebuilt to incorporate those changes, and 2.6 projects have been rebuilt and repackaged with those latest jars.

2016.02.05 MSS Code Factory CFAll 2.6.13218 Swing support removed

The Swing prototype GUI code has been deprecated and removed as the JavaFX layers are now fully capable of superceding that functionality with only a small amount of custom code required for a project.

The CFDbTest 2.6 client has been successfully executed on a Raspberry Pi 2B+ using the Oracle JDK 8 with a Gluon build of the Open JavaFX implementation for that platform. The forms need to have scroll panes added so that the application is actually usable on a 7-inch 800x480 screen, but it does run.

If it will run on a resource-limited platform like a Pi, you should have no problem running the clients on an Android device with the newer OpenJDK 8 based Java environment and the Gluon builds for it. If worst comes to worst, you might have to do a cross-platform build for Google's runtime. But it should work.

It will work better once I've added a few ScrollPanes to wrap the longer lists of buttons used by the menus.

2016.02.05 MSS Code Factory CFAll 2.6.13216 Modify run scripts to add "." to PATH

It turns out that OpenJDK 8 searches the PATH for the .jar files it is supposed to load, so just CD'ing to the directory containing the .jar files is insufficient. Instead of adding "./" before each jar specified by the run scripts, I've explicitly add "./" to the exported PATH within the script.

2016.01.31 MSS Code Factory CFAll 2.6.13214 Final test builds before SP2

These are the final test projects for the MSS Code Factory 2.5 SP2 release. They include the final fixes to the XMsg response XSDs, which was the last bug that I knew of for the CFDbTest 2.6 test suite. Everything seems to be working for that project now.

2016.01.31 MSS Code Factory CFAll 2.6.13212 Rebuilt with CFLib 2.5.13210

CFLib 2.5.13210 corrects errors in the Number field editors. You can now add a ReqFullRange object in CFDbTest's custom JavaFX GUI, and the remote object invocations for instances can now be fired.

You will see error messages from the parse of the response to the remote invocations. That will have to be corrected at some point, but as it doesn't stop the GUI from functioning, I'm not going to address it at this moment.

2016.01.31 MSS Code Factory CFDbTest 2.6.13209 Remote procedure invocations wired

The custom forms for invoking the remote procedures/functions from the server have been coded and largely tested. However, there seems to be a problem with adding ReqFullRange objects which is preventing testing of the server procs.

I'll deal with that at some point in the future. For now, the core functionality for the migration of the CFDbTest client from Swing to JavaFX is complete.

2016.01.29 MSS Code Factory CFBam 2.6.13208 Hierarchy browser promoted from CFDbTest

The hierarchy browser and custom code have been promoted from CFDbTest, and the Finder windows for a CFBam model have been wired to the navigation forms.

2016.01.29 MSS Code Factory CFAll 2.6.13207 JavaFX bug fix for add menus of class hierarchies

The sub-element list views accessed by CFDbTest's forms incorporate add menus for class hierarchies of schema types and table columns. There was a mistaken reference to buttonAdd that needed to be buttonCancelAdd, which has been corrected. CFDbTest's hierarchy browser is now ready to be propagated to CFBam.

2016.01.29 MSS Code Factory CFAll 2.6.13205 Delete function removed from JavaFX View/Edit forms

View/Edit forms cannot support instance deletion without causing problems for synchronization through the callbacks to the invoking form, so the functionality has been removed. You'll have to use the Finder, Picker, and sub-element lists to delete instances, or the hierarchy browsers.

The enhancements to support SchemaDef nodes in the CFDbTest 2.6 hierarchy browser have been coded, but not tested yet. I realized I needed to remove the delete functionality in order to ensure that the hierarchy browser remains properly synchronized with its nodes.

Once the CFDbTest enhancements have been tested, I'll propagate the custom code from CFDbTest to CFBam, and wire any Finder windows that CFBam defines to the propagated code. Then I can shift back to the form customizations required by CFDbTest, as I don't want those in the way when propagating code to CFBam.

2016.01.28 MSS Code Factory CFAll 2.6.13203 The custom schema changes from debugging CFDbTest have been propagated

The changes I had to make to the CFDbTest custom schema for JavaFX have been propagated to the other projects. The only project that still doesn't have a custom JavaFX client of some kind is CFBam. I'll by copy-paste-editing the code from CFDbTest for that one after I've wired the SchemaDef to the hierarchy browser.

2016.01.28 MSS Code Factory CFDbTest 2.6.13202 All of the forms and windows now instantiate successfully

You can now open all of the windows for the CFDbTest client. Further testing and enhancement are required, particularly for the Hierarchy browser, which needs to have the SchemaDef nodes wired, but for now you can access the windows.

I'll also need to migrate the custom code for testing the remote procedure calls defined by CFDbTest's back end XMsg server.

2016.01.28 MSS Code Factory CFDbTest 2.6.13201 Custom JavaFX HTTP client sketched out

The CFDbTest custom JavaFX HTTP client has been sketched out, and runs, though it is not tested yet. Next I need to wire the SchemaDef objects to the Hierarchy browser, in a fashion similar to the way the License objects are currently wired. The Opt/Req tables used to exercise the database types have had their Finder forms wired, but the custom code for them has not been ported yet from the Swing variant on this code.

2016.01.27 MSS Code Factory CFAll 2.6.13200 Internet domain hierarchy cascading deletes implemented

The cascading deletes of the sub-objects for the internet domain hierarchy have been coded and tested for PostgreSQL. This was accomplished through a combination of business application model changes and changes to the rule base for authoring the delete stored procedures of the various databases.

The code has only been tested for PostgreSQL, but the database changes are actually quite minor so they should work for the other databases as well.

New grand total lines of code: 31,324,369

Db files: 7642
Db lines: 575511
Java files: 3688
Java lines: 1452030
Total files: 11428
Total lines: 2173376

Db files: 0
Db lines: 0
Java files: 5
Java lines: 715
Total files: 6
Total lines: 885

Db files: 6004
Db lines: 456418
Java files: 2910
Java lines: 1135648
Total files: 9005
Total lines: 1691701

Db files: 38421
Db lines: 5298978
Java files: 13970
Java lines: 8491812
Total files: 52482
Total lines: 14067470

Db files: 6983
Db lines: 518175
Java files: 3575
Java lines: 1371215
Total files: 10649
Total lines: 1996130

Db files: 19236
Db lines: 2266171
Java files: 8897
Java lines: 4187171
Total files: 28224
Total lines: 6632604

Db files: 7068
Db lines: 575808
Java files: 3864
Java lines: 1555182
Total files: 11023
Total lines: 2247564

Db files: 5140
Db lines: 375386
Java files: 2708
Java lines: 1013123
Total files: 7934
Total lines: 1456184

Db files: 3458
Db lines: 225673
Java files: 2233
Java lines: 796296
Total files: 5770
Total lines: 1058455

2016.01.27 MSS Code Factory CFAll 2.6.13197 JavaFX internet domain browser completed

The JavaFX internet domain browser provided by the custom code for CFInternet 2.6 has been completed, tested, and propagated to the projects which depend upon it.

Note that due to the fact that self-referencing objects are used, the deletes will fail if you try to delete a node that has children. You need to explicitly delete the children of that node bottom-up before it can be successfully removed.

2016.01.27 MSS Code Factory CFAll 2.6.13196 JavaFX Add corrected, updates to internet browser integrated

The JavaFX Add code was not properly propagating the added instance via the callbacks, because only the attribute pane was holding a reference to the newly added instance. This has been corrected by "bubbling up" the added instance from the attribute pane to the other panes via the getJavaFXFocus() APIs. You can now edit an object that was added in the same session.

The internet domain hierarchy browser is almost complete, and the latest version has been integrated with the applications for this release. You can add, view, and edit all of the internet domain node types, and delete them as well. However, when you delete a node, the TreeView is not properly synchronized, and the node remains visible with the stale data. Synchronization for adds and edits works correctly, however.

2016.01.27 MSS Code Factory CFInternet 2.6.13194 Internet domain browser code fleshed out and partially debugged

The internet domain browser no longer crashes on me, and the integration of the sub forms for adding, viewind, editing, and deleting objects all get invoked appropriately and manipulate the database as expected.

However, the TreeView synchronization code I've written so far doesn't work. It doesn't crash, but it fails to update the TreeView as it should. The hack used by the list views to refresh data doesn't work for a TreeView (hiding and re-showing the first column.) I'm also aware of a couple of errors in my logic (e.g. not forcing the parent node of a newly added node to be in an expanded state so that the new node is visible.)

I'm really not in the mood to debug it any further tonight, though, so I'm pushing out this partial update just because I can. It will only affect people who explicity download and integrate this code with their project; I haven't propagated the new code to the other projects yet. There is no point doing so until I've finished my debugging efforts.

2016.01.22 MSS Code Factory CFAll 2.6.13193 View/Edit forms omit EltTabPane if no elements

The View/Edit panes and forms have been modified to omit the EltTabPane if there are no sub-objects of the viewed/edited object. This was done to clean up the user interface.

2016.01.17 MSS Code Factory CFAll 2.6.13191 FormClosed and Deleted callbacks now pass object arguments

The FormClosed and Deleted callbacks for JavaFX now pass the affected and (stale) deleted objects as arguments. This allows more intelligent refreshing of the user interface, improving performance.

2016.01.09 Programmer's Notes

The 2.6.13187 release completes the basic implementation of the CFSecurity functionality. I was hoping to get back to CFInternet and the domain browser, but before I do that I think I'm going to revisit the ViewAdd forms. They should only display an EltTabPane if there are sub-objects of the table to be displayed. I'll hold off on doing a full-scale release of that rule change until I'm ready to release the CFInternet changes as well.

For CFInternet, the first step is to complete the initial coding of the domain tree browser. In particular, I need to make sure I have the Add windows wired up for the domain objects. Then I'm going to try using the Add windows as the editors for the domain objects, because I don't want people adding sub-objects through those forms -- I want them to use the tree interface form instead. If I don't have to recode special-purpose editor windows to hide the EltPane portions instead of using the Add windows, I just need to work on the add/view/edit callbacks and synchronizing those with the tree view.

One little note: when you add an object to a node, I want to automatically expand that parent node so the new object can be made visible and selected. Other than that, I'm hoping the auto-selection code from the ListView can be applied. Although compatible interfaces are provided, there is no guarantee they're 100 percent implementation compatible.

I will leave the Delete confirmation windows alone to display EltTabPane contents so the user has visual feedback as to whether the object they are deleting has sub-objects or not (this can be important when working with a tree.)

Along with the hiding of the EltTabPane detail sections of the ViewAdd forms, that should pretty much complete the CFInternet domain tree functionality. About the only other thing that CFInternet adds is a MimeType table (which I really should populate one of these days using the Debian data as a starting point) and a URL Protocol table.

2016.01.09 MSS Code Factory CFAll 2.6.13187 Repackaged with CFSecurity 2.6.13186

Propagating the changes to the GUIs of the other applications is a simple matter of repackaging to update the jars in the zip distributions.

2016.01.09 MSS Code Factory CFSecurity 2.6.13186 Coded TSecGroup and TSecMember editors

The TSecGroup and TSecMember editors have beed coded and wired as part of the CFSecurityCustomTSecGroupEltTabPane. The code isn't tested, but it is so straight forward a copy-paste-edit of the SecGroupEltTabPane that I'm not going to bother.

2016.01.09 MSS Code Factory CFSecurity 2.6.13185 Functionality testing for new forms complete

The functionality testing for the groups/sub-groups and users/members lists has been completed. There is some clean up to be done on the user interface, but it works.

2016.01.09 MSS Code Factory CFSecurity 2.6.13184 Ready to begin testing new Group forms

The group edit forms have been customized for CFSecuritySecGroupEltPane. Instead of following the usual View/Edit metaphore, this window presents two tabs, one for users/members and one for groups/includes.

For the user/member tab, a list of group members is presented on the left of the window, with a pair of add/remove buttons in the middle, and a list of unassigned users on the right. When you select an unassigned user, the add/left button becomes enabled so you can click on it to add the user to the list of members for the group. When you select an assigned user in the left list, the remove/right button becomes enabled so you can click on it to remove the user from the list of members for the group.

The group/include tab functions similarly, except you have a choice of two lists of groups on the right -- either Visible groups or All groups.

This code clean compiles, but is completely untested. I do believe all of the necessary code has been written, so the next step would be to test the code. What a concept, eh? A programmer doing debugging... :P

2016.01.06 MSS Code Factory CFAll 2.6.13183 Refresh to sync version numbers

The packaging has been redone to synchronize the version numbers of a proper release of the code produced by MSS Code Factory 2.5.13171.

2016.01.05 MSS Code Factory CFBam 2.6.13182 Updated packaging scripts

The packaging script for CFBam now produces client, htmlserver, and database installer versions of CFBam 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 MSS Code Factory CFFreeSwitch 2.6.13181 Updated packaging scripts

The packaging script for CFFreeSwitch now produces client, htmlserver, and database installer versions of CFFreeSwitch 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 MSS Code Factory CFAsterisk 2.6.13180 Updated packaging scripts

The packaging script for CFAsterisk now produces client, htmlserver, and database installer versions of CFAsterisk 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 MSS Code Factory CFAccCustom 2.6.13179 Updated packaging scripts

The packaging script for CFAccCustom now produces a client installer versions of CFAccCustom 2.6. It includes only the pieces needed to run that particular set of code as an XMsg client.

2016.01.05 MSS Code Factory CFAcc 2.6.13178 Updated packaging scripts

The packaging script for CFAcc now produces client, htmlserver, and database installer versions of CFAcc 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 MSS Code Factory CFDbTest 2.6.13177 Updated packaging scripts

The packaging script for CFDbTest now produces client, htmlserver, and database installer versions of CFDbTest 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 MSS Code Factory CFAll 2.6.13176 Refresh JavaFX implementations

The JavaFX implementations for the 2.6 projects have all been refreshed by MSS Code Factory 2.5.13171 and repackaged for distribution. The changes to the packaging scripts will be propagated to the remaining 2.6 projects in due time.

2016.01.05 MSS Code Factory CFCrm 2.6.13175 Updated packaging scripts

The packaging script for CFCrm now produces client, htmlserver, and database installer versions of CFCrm 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 MSS Code Factory CFInternet 2.6.13174 Updated packaging scripts

The packaging script for CFInternet now produces client, htmlserver, and database installer versions of CFInternet 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 MSS Code Factory CFSecurity 2.6.13173 Updated packaging scripts

The packaging script for CFSecurity now produces client, htmlserver, and database installer versions of CFSecurity 2.6. Each includes only the pieces needed to run that particular set of code.

2016.01.05 Programmer's Notes

Next I want to customize the group View/Edit form. It will show the edit fields for the Group itself, but when you aren't in edit mode, it will let you manipulate the include group and member tabs.

Those two tabs will change their functionality from using manufactured code for editing new elements to a simpler and easier to use interface where a list of current elements is presented on the list. For the include group edit, a tab pair of visible/all groups will be presented on the right of the form, with a pair of arrow buttons for moving selected entries back and forth from the include group list. For the member group edit, the right part of the form will show a list of users for the cluster.

In either case, the lists on the right will be filtered to omit the list elements that are displayed on the left, and the contents of the lists will be alphabetically sorted.

For the user view/edit, I'm thinking about doing something similar, except of course there would only be the pane for editing the group memberships.

Someday I may get around to identifying forms and having them check for usage permissions, but for now, group-based permissions on the data will do. The CFSecurity model supports the specification of applications and forms. For now I'm hiding that entire branch of code in the custom user interface, but keeping it in the business application model and databases.

2016.01.05 MSS Code Factory CFSecurity, CFInternet, CFCrm 2.6.13172 Added JavaFX Add forms

The JavaFX Add forms do not display sub-instances or lists of elements. Only the new instance currently being edited is visible. You can not Delete the new instance, only Save or Cancel your edits.

2015.12.16 Programmer's Notes

I have decided that I need to work my way from the bottom up on the custom JavaFX GUI layers. So before I resume working on the network tree in CFInternet, I'll shift back to CFSecurity for a while.

I've already customized the group "finder" forms for CFSecurity. Next I want to customize the group View/Edit form. It will show the edit fields for the Group itself, but when you aren't in edit mode, it will let you manipulate the include group and member tabs.

Those two tabs will change their functionality from using manufactured code for editing new elements to a simpler and easier to use interface where a list of current elements is presented on the list. For the include group edit, a tab pair of visible/all groups will be presented on the right of the form, with a pair of arrow buttons for moving selected entries back and forth from the include group list. For the member group edit, the right part of the form will show a list of users for the cluster.

In either case, the lists on the right will be filtered to omit the list elements that are displayed on the left, and the contents of the lists will be alphabetically sorted.

For the user view/edit, I'm thinking about doing something similar, except of course there would only be the pane for editing the group memberships.

The custom interfaces are going to hide all the form and application data for now; I don't use that, but I would like to use it at some point in the future, so I'm not going to remove it from the CFSecurity model. Someday maybe I will get around to identifying forms and having them check for usage permissions, but for now, group-based permissions on the data will do.

2015.12.11 MSS Code Factory CFSecurity, CFInternet, CFCrm 2.6.13170 [T]SecGroup manager interface for JavaFX

The [T]SecGroup manager interface forms are now used exclusively, and the older finder forms have been retired.

2015.12.11 MSS Code Factory CFAll 2.6.13169 Added and wired JavaFX Add Form/Pane

The table factories for JavaFX now provide for newAddPane() and newAddForm() interfaces and implementations. The AddPane is based on a ViewEditPane, but with the EltTabPane removed.

The new AddForm implemenations are used when Adding an object instance instead of the ViewEditForm that had been previously used. You should not be trying to add sub-element instances until you have persisted the newly added object.

2015.12.11 MSS Code Factory CFSecurity, CFInternet, CFCrm 2.6.13167 Corrected SecGroup and TSecGroup custom forms

I found the event handlers weren't quite right when working with the JavaFXFocus attribute of the SecGroup and TSecGroup forms. That has been corrected.

2015.12.11 MSS Code Factory CFSecurity, CFInternet, CFCrm 2.6.13166 CFSecurityCustomTenantTSecGroup forms

Sketched out and wired the Tenant TSec Group management forms. As with the Cluster Sec Group management forms, there is an unfiltered All collection and filtered collections for BySecUser and IsVisible.

2015.12.11 MSS Code Factory CFSecurity, CFInternet, CFCrm 2.6.13165 Custom form for SecGroup management added

The Manage Sec Group form displays a group of three tabs that filter the security group information within the current security cluster. Filtrations for IsVisible, SecUser, and All are provided. IsVisible shows the SecGroup instances that have their IsVisible attribute set to true. SecUser restricts the list to the SecGroup instances the user participates in as a SecGroupMember. And All displays all of the security groups for the cluster.

Testing complete with the CFSecurityCustomHttp client running against the CFAcc XMsg server.

2015.11.22 MSS Code Factory CFAll 2.6.13163 JavaFX layers refreshed

The JavaFX layers have been refreshed to remove the references to "import javafx.*;".

2015.11.15 MSS Code Factory CFAll 2.6.13161 Correct security initialization data

The security initialization data in java/bin/initdata was incorrectly specifying "xsd:schemaLocation" instead of "xsi:schemaLocation".

2015.11.08 MSS Code Factory CFAll 2.6.13158 Remanufactured by 2.5.13157 and rebuilt under Debian "Jessie"

All projects have been remanufactured by MSS Code Factory 2.5.13157 and rebuilt under Debian "Jessie" with OpenJDK 8 and JavaFX 8 as provided by Jessie's backports.

2015.11.04 MSS Code Factory CFAll 2.6.13153 Add revision and audit attributes to XMsg create requests

All of the code in existence is expecting to deal with the revision and audit attributes for create requests, so that has to be incorporated in the XSD create requests as well as the update requests.

I've also tested the JavaFX workaround for OpenJDK, and it works there. I'll have to wait for my first confirmed user to test it with the OracleJDK later tonight or some time this weekend.

2015.11.04 MSS Code Factory CFAll 2.6.13151 Use a JavaFX workaround instead of TableView.refresh()

It turns out that TableView.refresh() is not public for the Oracle implementation of JavaFX, only for the OpenJDK add-on implementation. So I've replaced the calls to refresh() with the column visiblity hack from

2015.10.29 MSS Code Factory CFAll 2.6.13149 Actions corrected for JavaFX list panes

In addition to applying the MSS Code Factory 2.5.13148 fixes to the code, the entire suite of 2.6 applications have been rebuilt with the latest version of OpenJDK 8 as shipped and supported by Ubuntu 15.10.

2015.10.26 MSS Code Factory CFAll 2.6.13147 MULTI-LINE TEXT NOW WORKS!!!

'nuff said.

I am absolutely ECSTATIC!!!

Now for a code size update...


Db files: 7642
Db lines: 573475
Java files: 3680
Java lines: 1450206
Total files: 11420
Total lines: 2168186

Java files: 5
Java lines: 715
Total files: 6
Total lines: 885

Db files: 6004
Db lines: 454382
Java files: 2898
Java lines: 1132923
Total files: 8993
Total lines: 1686168

Db files: 38421
Db lines: 5295254
Java files: 13740
Java lines: 8439247
Total files: 52252
Total lines: 14010337

Db files: 6983
Db lines: 516139
Java files: 3549
Java lines: 1365542
Total files: 10623
Total lines: 1987529

Db files: 19236
Db lines: 2261493
Java files: 8745
Java lines: 4153025
Total files: 28072
Total lines: 6592878

Db files: 7068
Db lines: 573772
Java files: 3836
Java lines: 1548888
Total files: 10995
Total lines: 2238332

Db files: 5140
Db lines: 373350
Java files: 2680
Java lines: 1006218
Total files: 7906
Total lines: 1446749

Db files: 3458
Db lines: 225673
Java files: 2175
Java lines: 777954
Total files: 5712
Total lines: 1039887

2015.10.25 MSS Code Factory CFAll 2.6.13143 XMsg data streams now validate properly

The XSDs for the projects have been corrected and brought into sync with the messages and parsers produced for the applications by MSS Code Factory. As a result, I am no longer seeing any validation errors at the client nor the server under the debuggers, not even when doing file imports.

While that is good progress, it still doesn't fix the problem I was originally trying to fix by getting the schema validation in place -- stopping Xerces from normalizing string attributes.

Why in the world anything other than an xsd:normalizedString type is being NORMALIZED in the first place is beyond me. Why bother with a normalizedString type if the default behavior for a REGULAR string is to normalize it?

2015.10.24 MSS Code Factory CFAll 2.6.13140 Really enable XML schema validation this time

It turns out that Xerces won't use cached schema definitions, but requires that the schema document be referenced through the schemaLocation specification. As a result, I've switched all the code and data files over to using relative naming to locate ../bin/xsd/myschema.xsd. This works for the main programs, but when you run the servers, you'll need to copy the applications XSD files to $ServerDirectory/../bin/xsd.

Unfortunatly you can only package files under a web deployment, not above it, so there is no way to automate that behavior. If Xerces is ever updated to use cached schema documents, I'm ready to go. The documents are being loaded and cached; it is just that the SAXParser instance doesn't use them no matter what I set for options.

2015.10.24 MSS Code Factory CFAll 2.6.13133 Enable XML 1.1 syntax validation

In addition to switching all of the XML to 1.1 syntax, I've also reworked the grammar caching in the CFLib implementation, rewired the way grammars are added to the cache, and tweaked the instantiation of the SAX parsers to enable schema validation but not DTD validation.

My hope is that with schema validation incorporated, the parsing of the attributes will now respect the white space preserve specifications. I won't know for sure for several hours of build and test time, though. I'll update these notes with the results some time later today.

2015.10.23 MSS Code Factory CFAll 2.6.13128 All XSDs now specify whiteSpace preserve for String and Text attributes

The XSDs produced by the system now specify that white space is to be preserved for all String and Text attributes of an application. The wiring of the XSDs has also been refreshed such that the correct files are referenced by the data XMLs, and the message bodies utilize the proper URIs for identifying the namespaces.

2015.10.22 MSS Code Factory CFAll 2.6.13126 CFInternet Hierarchy pane now displays License nodes

The License objects are now displayed in the CFInternet Hierarchy pane.

2015.10.22 MSS Code Factory CFAll 2.6.13125 CFInternet Hierarchy browser displays data

The CFInternet Hierarchy browser now displays the data it recognizes. I have yet to add the License node support, but I'll get to that at some point today.

I want to rework the custom code for building the node hierarchy such that it can be used to rescan the database and merge the changes to the display tree instead of recreating it from scratch. Otherwise you'd lose your expansions of the tree branches and the current object selection state during a refresh.

2015.10.22 MSS Code Factory CFAll 2.6.13123 CFInternet model corrected

The License object was not a proper XSD component of the BaseDomain, so the test data wasn't parsing properly when performing a data import for CFInternet.

The correction has been propagated by remanufacturing and rebuilding all 2.6 projects.

2015.10.21 MSS Code Factory CFAll 2.6.13121 Rebuilt with CFLib 2.5.13119

Rebuilt, repackaged, and redeployed with CFLib 2.5.13119, adding the objects CFLibFiringList and CFLibFireOnInstanceOf.

2015.10.21 MSS Code Factory CFInternet 2.6.13118 Updated test data

The test data has been split into 0001-CreateLicenses.xml and 0002-CreateProjects.xml.

2015.10.21 MSS Code Factory CFAll 2.6.13117 Remanufactured by 2.5.13116 to provide promoted License support

All of the 2.6 projects have been remanufactured, rebuilt, and repackaged with the code produced by MSS Code Factory 2.5.13116.

2015.10.21 MSS Code Factory CFInternet 2.6.13115 Add License specification to CFInternet 2.6

The License object has been promoted to a generic Internet interface, so that licenses can be specified by generic internet data loaders. Licensing is a common issue to deal with, so it makes sense to generalize the implementation and interface.

2015.10.21 MSS Code Factory CFInternet 2.6.13113 Create testdata/0001-CreateHierarchy.xml

The file java/bin/testdata/0001-CreateHierarchy.xml defines the common features of the MSS Code Factory data set, and will shortly include the License definitions as well. I'm about to promote that element specification from CFBam to CFInternet 2.6.

2015.10.20 MSS Code Factory CFInternet 2.6.13112 Populated remaining nodes of the Internet Hierarchy

Against my preference, I've decided to pre-load the entire internet object hierarchy on widget startup/instantiation. It won't be a very snappy interface, but it'll get me off the ground.

2015.10.20 MSS Code Factory CFInternet 2.6.13111 Added JavaFX Custom Internet Hierarchy form

The Internet Hierarchy form will be used to navigate the tree of Tlds, TopDomains, Domains, TopProjects, SubProjects, MajorVersions, and MinorVersions that form the data ownership hierarchy of the internet.

2015.10.05 MSS Code Factory CFAll 2.6.13109 Cleaned up various JavaFX behaviours

In addition to bringing forward the CFSecurity 2.6 changes to all of the projects, this release incorporates the code changes for data table refreshing that were added to MSS Code Factory 2.5.13108.

2015.10.05 MSS Code Factory CFSecurity 2.6.13107 Cleaned up JavaFX form behaviours

The auto-selection of the first combo box item for the ServerURL has been coded, and the specification of default buttons in the various security forms has been added as well. There is no new real functionality; this was just a "nice to have" clean-up effort.

2015.10.02 MSS Code Factory CF All 2.6.13106 JavaFX add implementation corrected

The 2.6 projects have all been remanufactured to correct defects in the object add functionality for JavaFX.

2015.10.02 MSS Code Factory CFFreeSwitch 2.6.13103 JavaFX custom code added

The custom JavaFX code and run scripts have been added to the CFFreeSwitch 2.6 project.

2015.10.02 MSS Code Factory CFAsterisk 2.6.13102 JavaFX custom code added

In order to allow easy editing of the CFAsterisk configuration data with the JavaFX client, the Internet HostNode is now a Parent of the configuration data instead of a Container. This allows Finder forms to be produced for the configuration objects.

The JavaFX custom code has been created to leverage this change.

2015.10.02 MSS Code Factory CFCrm, CFAccCustom 2.6.13100 Ready to work on the custom code now

The changes made to the implementation framework have been propagated to CFAccCustom 2.6, so now I can resume working on the custom user interface code for the Accounting application.

However, before I do that, I'll try to propagate the custom code frameworks to the other 2.6 projects so that they can be used. Right now there are no mains for those other projects to use the JavaFX code, and I'd like to at least have the basics in place.

2015.10.02 MSS Code Factory CFCrm 2.6.13099 Added Custom JavaFX GUI components

The Custom JavaFX GUI components have been added to CFCrm 2.6.

2015.10.01 MSS Code Factory CFSecurity, CFInternet 2.6.13098 Debugged new callbacks, added run scripts

The new callbacks for the login processing have been tested, and run scripts for starting the JavaFX clients have been added.

2015.09.30 MSS Code Factory CFSecurity, CFInternet 2.6.13097 Added loggedIn() and preLogout() callbacks

The CFSecurity main facet now has an ICFSecurityAuthorizationCallbacks member which is used to wire post-login and pre-logout interface feedback changes from a custom GUI. This enables the higher level application to enable and disable tabs in its user interface based on the login state of the application.

2015.09.26 MSS Code Factory CFInternet 2.6.13096 Added skeleton of Custom JavaFX GUI components

There is now a Custom JavaFX package and a main for the custom GUI in the CFInternet project. This will be used to wire the basic framework of the manufactured JavaFX code to the custom GUI, and to develop the tab enable/disable synchronization code for the login/logout processing performed by the custom CFSecurity JavaFX code.

The goal is to build up applications layer by layer, with all of them relying on the core CFSecurity implementation of the login/logout processing, and the custom tabs of the various projects that they incorporate. Each and every JavaFX-enabled project is therefore expected to have a custom and a customhttp project.

2015.09.22 MSS Code Factory CFAll 2.6.13095 JavaFX for all 2.6 projects now builds clean

All of the 2.6 projects now build clean for the JavaFX CRUD GUI components.

2015.09.20 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13092 Core manufactured JavaFX functionality complete

The core functionality of the manufactured JavaFX GUI is now complete.

2015.09.20 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13089 Changes made by View/Edit forms now synchronized

When you close a View/Edit form, there is now a callback to the invoking form that gets executed so the calling form knows that it's time to refresh it's data views.

2015.09.18 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13087 Added enable/disable support to View/Edit/Attr forms and panes

The enabling and disabling of the various widgets has been added to the Attr and View/Edit forms and panes.

2015.09.17 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13084 TableView selections adjust buttons now

The selection of rows in the table views now adjust the enable/disable state of the "menu" buttons of the application. You can also bring up the various detail windows, though I doubt they work properly yet (except for cancelling/closing.)

2015.09.17 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13082 TableView sorting implemented

TableView sorting has been implemented and the cell renderers have been migrated to CFLib 2.5. The Number cell renderer has been enhanced with the extra Digits and Precis arguments for construction, and the appropriate arguments are now passed by the manufactured code.

2015.09.16 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13079 Read-only table views coded

The table views have been tested for displaying existing data, but there are no selection options coded yet so you can't pick a row and view it in a detail form yet, but that will come in due time. At least the data shows up.

2015.09.16 MSS Code Factory CFSecurity 2.6.13077 JavaFX table view population coded, ready for testing

The initial draft of the TableView population has been coded but is completely untested. Certain features like sorting by chain or qualified name will have to be re-coded later.

2015.09.16 MSS Code Factory CFSecurity 2.6.13075 JavaFX warnings cleaned up, reference cells rendered

There are no more warnings when compiling the JavaFX code, and the cell rendering of relationships/references has been prototyped.

2015.09.16 MSS Code Factory CFSecurity 2.6.13073 JavaFX cell rendering objects added

The cell rendering code for the JavaFX table views has been prototyped. The core objects for the rendering are currently in CFSecurity's JavaFX implementation rather than CFLib while I work on getting them functional and debugged.

2015.09.16 MSS Code Factory CFSecurity 2.6.13071 Key bugs fixed for JavaFX

Some of the initial key bugs with object setup and cross-linking have been fixed, so now you can navigate to the finder windows for the security cluster, system, and tenant data. None of the data is actually populated yet, so you can't add, select/view, or delete objects yet, but it is a start.

2015.09.12 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13069 Refreshed and rebuilt with CFLib 2.5.13067

There were changes to the rules, so I re-manufactured the five core development projects before I built and packaged them.

2015.09.11 MSS Code Factory CFSecurity 2.6.13066 New form workflow support coded

The new form workflow support has been coded and partially tested. The new interfaces and widgets are temporarily in CFSecurityJavaFX26, but will be moved to CFLib after development and testing are complete.

2015.09.11 MSS Code Factory CFSecurity 2.6.13065 A main has been added for running the JavaFX forms

A main CLI has been added for running the CFSecurity custom panel as a standalone application form series. This will provide a debugging environment for developing further custom forms for CFSecurity (meaning I don't need to be able to do that with CFAcc Custom 2.6 any more.)

It is worth noting that this generic application can be run against any XMsg server created by MSS Code Factory, as all applications derive from CFSecurity at a minimum.

2015.09.11 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc 2.6.13064 JavaFX CRUD now included in builds

The new rules have been added to the build.xml for the first four projects, and they've been refreshed, rebuilt, and repackaged including the new jars.

2015.09.11 MSS Code Factory CFAcc 2.6.13062 JavaFX CRUD forms integrated with build

It may not be done and I know it won't work yet, but it builds clean, so I can integrate the new code into the build process.

2015.09.10 MSS Code Factory CFAcc 2.6.13060 So close to a clean compile I can taste it

I still need to deal with the PickerPanes, and then I'll finally have a clean build of the JavaFX CRUD forms. They won't actually work yet, of course, but it means I can stitch the code into the build and the debugger so I can start exercising it.

2015.09.10 MSS Code Factory CFAcc 2.6.13058 The ListPane objects clean compile now

The ListPane objects now compile clean for the JavaFX efforts, but I know for a fact that they won't actually run because there are no custom cell renderers installed and everything is returning objects instead of fussing around with the details.

2015.09.10 MSS Code Factory CFAcc 2.6.13056 The bulk of the CRUD forms build for JavaFX

The List, Picker, and Finder forms with their list boxes are all that remain to be first-cut-ported from Swing to JavaFX. I've made significant UI changes all the way along, as I'm pursuing a different UI metaphor this time which should be better-suited to touch devices and cell phones.

2015.09.09 MSS Code Factory CFAcc 2.6.13054 Work in progress

A significant portion of the CRUD code for JavaFX now builds (4-5 of the rule sets now produce valid source code files.) There is still a lot to be done, of course, but it is coming along nicely.

2015.09.09 MSS Code Factory CFAcc 2.6.13052 Draft JavaFX CRUD code

The new code produced by the JavaFX rules is so far from compiling at this point it isn't even a bad joke... But here it is, such as I'm starting with. These are the pieces of code I intend to whip into shape to form JavaFX CRUD forms.

2015.09.09 MSS Code Factory CFSecurity 2.6.13050 Custom JavaFX login form processing released to production

The login form processing prototyped in CFAcc Custom 2.6 has been promoted to production for CFSecurity 2.6. However, be aware that I'll be continuing to use the development branch of this code rather than relying on that which is built by CFSecurity; this promotion is for the convenience of people writing JavaFX applications that need to be able to log in to an HTTP XMsg server over the 'net.

2015.09.09 MSS Code Factory CFAll 2.6.13049 Migrated to, rebuilt, and repackaged with CFLib 2.5.13047

CFLib 2.5.13047 completes the initial "wedge" of CF* objects for JavaFX. It only includes the "widgets" I've used so far in creating the Security login forms and workflow. It does not include list boxes yet, much less tree views, which I do intend to use -- eventually.

The only GUI project to date is CFAcc Custom 2.6 -- that project now uses CF* widgets throughout.

2015.09.08 MSS Code Factory CFAcc Custom 2.6.13044 Repackaged with CFLib 2.5.13042

As all of my JavaFX code is currently in this project, it is where I'll be focusing on getting things switched over to the custom widget hierarchy, and feeding back any missing widget requirements to CFLib until there are no more "native" JavaFX widgets in my custom code.

2015.09.08 MSS Code Factory CFAcc Custom 2.6.13041 Added table maintenance menus

The CFSecurity skeleton code now presents lists of table maintenance forms for the System, Cluster, and Tenant data groups. Of course there are no such actual forms yet, so if you click on any of the form buttons you just get a "Not implemented yet" warning dialog.

Some of those Group and User tables will get replaced by completely custom forms; my intent is to leave the table maintenance forms up to manufactured code in the future. I'll just hook in the manufactured code to the custom UI at this point in the system.

2015.09.08 Statistics

Here are the results of some statistics runs I did on the 2.6 projects, which take under 4 hours to clean, manufacture, build, and package on a dual Core i7 2.9 GHz mobile processor.

~/msscodefactory$ for adir in *-2-6
> do
> pushd $adir
> CountEmQuiet
> popd
> done
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFAcc-2-6 ~/msscodefactory
Db files: 7519
Db lines: 564477
Java files: 3555
Java lines: 1407223
Total files: 11172
Total lines: 2105843
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFAsterisk-2-6 ~/msscodefactory
Db files: 5881
Db lines: 445215
Java files: 2726
Java lines: 1076684
Total files: 8698
Total lines: 1614243
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFBam-2-6 ~/msscodefactory
Db files: 38421
Db lines: 5297066
Java files: 12244
Java lines: 7769002
Total files: 50756
Total lines: 13329605
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFCrm-2-6 ~/msscodefactory
Db files: 6860
Db lines: 506972
Java files: 3302
Java lines: 1296665
Total files: 10253
Total lines: 1902498
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFDbTest-2-6 ~/msscodefactory
Db files: 19113
Db lines: 2252373
Java files: 7672
Java lines: 3817829
Total files: 26876
Total lines: 6238418
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFEnSyntax-2-6 ~/msscodefactory
Db files: 5250
Db lines: 347416
Java files: 2759
Java lines: 1042761
Total files: 8094
Total lines: 1455459
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFFreeSwitch-2-6 ~/msscodefactory
Db files: 6945
Db lines: 564605
Java files: 3576
Java lines: 1454059
Total files: 10612
Total lines: 2126657
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFInternet-2-6 ~/msscodefactory
Db files: 5017
Db lines: 364183
Java files: 2410
Java lines: 930583
Total files: 7512
Total lines: 1357943
~/msscodefactory/net-sourceforge-MSSCodeFactory-CFSecurity-2-6 ~/msscodefactory
Db files: 3458
Db lines: 225673
Java files: 1802
Java lines: 691816
Total files: 5339
Total lines: 952578
msobkow@tundra:~/msscodefactory$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
139312 total files
31083244 total lines
31083244 / 139312
223 average lines per file
31083244 / 480
64756 lines per minute manufactured, built, and packaged
64756 / 60
1079 lines per second manufactured, built, and packaged

2015.09.08 Programmer's Notes

The vast majority of the windows I need for the custom user interfaces are actually very basic CRUD windows that should be manufactured and then only customized on an as-needed basis.

Before I tackle manufacturing any JavaFX code, though, I need to create some sample windows of each of the functionality types I intend to manufacture: essentially the same architecture as that used by Swing, except that it is based on swapping Panes in the facet/subject tab of the main window, rather than launching MDI windows in a desktop frame.

I noticed along the way that JavaFX inputs support tablet inputs like swipe left and swipe right. Just an interesting thing to notice, seeing as there seems to be this spat between Google and Oracle over Java on Android.

Once I have the sample windows, my next step is creating a "javafx" sub-package for CFLib 2.5, similar to the current swing sub-package. I like to have "wedge" options for common functionality that I want to push down to the widget layer rather than coding in each and every window and use of the widget. (Which is easy enough to do with a code generator, but ugly as sin and not maintainable without the factory.)

Then I'll modify all the windows I've created to date to reference the new wedge widgets (CF*, where * is the name from the JavaFX toolkit. Only those widgets I'm actually using will be subclassed for now.)

Finally I'll be ready to work on manufacturing the common forms using my sample code as a template and relying on the new CF* widget wedges. With any luck I should be moving forward apace with the GUI by the end of September.

I guess I'm not done with it yet. Seriously, though, how can I "buckle down" and write all those windows by hand when an easier solution is at my fingertips?

2015.09.08 MSS Code Factory CFAll 2.6.13040 Initdata now specifies new IsVisible attribute

The SecGroup and TSecGroup entries in the security initialization data manufactured for the projects now specifies the new IsVisible attribute.

Perhaps more importantly, the File Import facility for the custom Security interface has been tested. The security interface is now fully the equivalent of that which used to be manufactured for Swing.

2015.09.07 MSS Code Factory CFAll 2.6.13038 Refreshed all builds

With the core of the security process tested an only the implementation of file imports remaining, I decided it was time to "lock down" the new schema features I'd added over the past day or two, along with one last minute change of adding an IsVisible boolean attribute to the SecGroup and TSecGroup specifications, with indexes by the parent key and the IsVisible attribute for easy querying by the filtered view in the planned security JavaFX GUI interface.

2015.09.07 MSS Code Factory CFAcc Custom 2.6.13036 Logout and Exit Application processing tested

The Logout confirmation now properly logs out the application if the request is confirmed. The Exit Application confirmation now properly exits the application if the request is confirmed. Both go back to the session window if the requests are cancelled.

That leaves the File Import pane to be properly laid out, coded, and wired. I'll need to figure out how to use a file picker in JavaFX. There should be one around somewhere in the toolkit -- likely using the same names without the "J" prefix.

2015.09.07 MSS Code Factory CFAcc Custom 2.6.13035 Login established successfully

The CFAcc Custom 2.6 JavaFX client has successfully logged in to a CFAcc XMsg HTTP server. Just to make sure it works, I had both running under debuggers (an environment I expect to spend all too many hours in for the foreseeable future.)

The extra code for synchronizing the tenant if you choose the system cluster has been added, and the code for catching new Server URLs and stuffing them in the client configuration file has been added as well.

2015.09.07 MSS Code Factory 2.6.13034 Ready to test logins

There are still a few cleanup items to take care of for the login form, but it is largely ready to be tested. But before I test that, I want to code the logout form as well so I can do both.

I also really do need to get off my butt and figure out how to exit a JavaFX application.

2015.09.07 MSS Code Factory CFAcc Custom 2.6.13032 Login form details laid out

The detailed fields and choice boxes for the Login form have been laid out and populated, with appropriate default selections.

I still need to figure out how to capture new choice entries made for the Server URL choice box so that you can enter a new URL to connect to, and then I need to wire all of the processing logic for performing the login request; right now the Ok button doesn't actually do anything but bounce you around some unauthenticated dummy pages of the user interface.

2015.09.07 Programmer's Notes

OpenJDK under Ubuntu 15.04 does not come with JavaFX support built-in. You'll have to go through a few steps to install it from source, but it does seem to work ok. It also provides a much more responsive UI than Swing does. So far all the bugs have been with my use of JavaFX as I'm learning as I go. Even under the worst of my abuses, JavaFX has not actually crashed -- it just hasn't worked as I expected sometimes.

You'll find the instructions for installing JavaFX for OpenJDK here at

After I downloaded the source and attempted to build it as instructed, I ran into a couple of issues with the build, but I was able to work around those by editing some of the files on my end. I don't have the authority to check them in, and all I did was disable a few features that were stopping the build from completing rather than fixing those features.

Regardless, here is the Mercurial "hg diff" results for the source tree:

diff -r 440c0ceb7197 apps/samples/Ensemble8/build.xml
--- a/apps/samples/Ensemble8/build.xml	Wed Sep 02 23:36:50 2015 +0300
+++ b/apps/samples/Ensemble8/build.xml	Mon Sep 07 13:14:24 2015 -0600
@@ -152,7 +152,6 @@
diff -r 440c0ceb7197 build.gradle
--- a/build.gradle	Wed Sep 02 23:36:50 2015 +0300
+++ b/build.gradle	Mon Sep 07 13:14:24 2015 -0600
@@ -3259,8 +3259,8 @@
     ['jfxbuild.jfxrt.jar'] = jfxrtJar
     ['platforms.JDK_1.8.home'] = "${rootProject.ext.JDK_HOME}"
-              ant.project.executeTarget("sampleAppsJar")
-              ant.project.executeTarget("scenebuilderSampleAppsJar")
+              /*ant.project.executeTarget("sampleAppsJar")*/
+              /*ant.project.executeTarget("scenebuilderSampleAppsJar")*/
               if (!"arm")) {
diff -r 440c0ceb7197 buildSrc/linux.gradle
--- a/buildSrc/linux.gradle	Wed Sep 02 23:36:50 2015 +0300
+++ b/buildSrc/linux.gradle	Mon Sep 07 13:14:24 2015 -0600
@@ -74,8 +74,12 @@
         propFile << "libs=" << results.toString().trim();
     { properties ->
-        ccFlags.addAll(properties.getProperty("cflags").split(" "))
-        linkFlags.addAll(properties.getProperty("libs").split(" "))
+		if( null != properties.getProperty("cflags") ) {
+        	ccFlags.addAll(properties.getProperty("cflags").split(" "))
+		}
+        if( null != properties.getProperty("libs") ) {
+			linkFlags.addAll(properties.getProperty("libs").split(" "))
+		}

2015.09.07 MSS Code Factory CFAcc Custom 2.6.13031 Display Public Key implementation tested

The Display Public Key information pane is now displayed after you open the device key, and clicking ok on that pane routes you to the Login form.

Next up. My enemy. My bane. The login form itself. Which requires learning how to do choice boxes with JavaFX... :D

2015.09.07 MSS Code Factory CFSecurity, CFInternet, CFCrm, CFAcc, CFAcc Custom 2.6.13030 Open Device Key implementation tested

The Open Device Key implementation has been tested and routes you to the not-implemented-yet Display Public Key information pane after opening the private key for the device.

Implementing this functionality required a change to the basic interfaces for schemas, cascading down through the implementation hierarchy to affect 5 projects just so I can resume testing. How sweet it is to have this ever-so-much-faster box at my disposal!

2015.09.07 MSS Code Factory CFAcc Custom 2.6.13028 Open Keystore processing complete

The Open Keystore processing logic has been migrated from Swing to JavaFX, and the Create Keystore processing has been coded but is untested at this time. (I'll try to remember to test that next before I can forget about it.)

After that bit of testing, I'll work on migrating the processing logic for Open Device Key. That will mean I'm in a valid processing state up to the Login form.

The Login form will be a little hairy to code -- I need to add a few more fields and there is a goodly swath of programming logic associated with the logins.

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13027 Login form flow complete

The login and main session tab of options for the Security facet are complete and wired together to demonstrate the workflow. Next up, of course, I need to glue in all the actual processing logic that the Swing forms used to have behind them.

The login window, in particular, requires a fair bit more work before it would be ready for testing.

I guess I'll just start at the beginning of the workflow and chip my way forward through the code that is required.

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13026 Form flow starting to come together

The form flow for the login, session security "menu", logout, and exit application processing has been largely stitched together. There are a lot of forms whose detailed field sets need to be filled out yet, but things are coming along quite nicely.

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13025 Security Custom Open Keystore Pane laid out

The Open Keystore custom pane has been laid out and shows up as the initial contents of the Security tab. I still want to tweak it a bit before I copy-paste-edit the Open Key custom pane that comes after you hit Ok on the Open Keystore pane. The next checkin should also have the work flow from the Open Keystore to the Open Key page, and the exit application behaviour when selecting Cancel on those forms should be implemented as well.

2015.09.06 Programmer's Notes

I'm going to postpone filling out all the CRUD forms for maintaining the system data for CFSecurity's custom interfaces. The custom interfaces will focus on the login process, changing your password, the logout process, and the dialogs for unlocking the key store and signing out the private key for the device.

Ideally I want modal application dialogs to launch automatically from the Security custom interface implementation when the application starts up.

You need to be forced to sign out the device key before you're allowed to do anything else. If you cancel out of signing out the device key, the application should exit automatically.

Once you're signed out the device key, the Security interface shows a form for logging in similar to what the Swing GUI does, except that you don't select a menu item to get that form displayed. It should just happen automatically.

On the login form should be a button or link for displaying the public device key information, which brings up a non-modal dialog window with the required information.

Once you have successfully logged in, the Security interface switches over to displaying a "menu" window with five button "items":

1) Change Password
2) Maintain Group Security
3) Logout
4) View Device Public Key
5) Exit Application

Logout and Exit Application both display an application modal confirmation dialog before proceeding.

Maintain Group Security should be greyed out for now -- I'll add that functionality in the future -- this is just a placeholder action.

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13024 Resizing the main window now functions properly

The layouts of the component widgets now adjust to the size of the main window properly, though I still seem to be more restricted on the size of the top facet panes than I expected to be. I must have missed a large value for minimum height somewhere. But I'll worry about that some other time.

For now it is in pretty good shape, visually. The elements I wanted to pull together are starting to fall into place, both in terms of code structure and in terms of implementation of placeholders.

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13023 The outline is starting to look like something

The panels of the facets now display labels as to what they're going to be working with, the close option has been removed from the facet tabs, resizing the the log widget has been improved somewhat, and the log widget now exists and is wired to the resizable panel at the bottom of the window.

Next I need to work more on the resizing and layout manager code, such that when you resize the window all of the space made available is used by the display. A little bit at a time, but it will come together. I've just started.

I should be happy to have a window being displayed at all after only putting one day into the JavaFX coding effort (the first day was spent getting it built for Linux.)

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13022 An empty main window is displayed

An empty main window with a properly set title is displayed. If you close that window using the desktop manager "close" button, the application terminates. I don't know whether the toolkit is smart enough to stay open if you have multiple top-level windows.

Next I need to figure out how to display my custom window instead of an empty scene. Things are definately different in the JavaFX world than the Swing world.

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13021 Sketched outline of Facet panes

The facet panes have been outlined and wired to the main window's tabs in CFAcc Custom 2.6. The idea is that you are presented with a main window that has a log text area in the bottom of the window displayed as a titled pane so it can be minimized/hidden. It is also under a SplitPane, with the top half of the split pane displaying a TabPane with one tab for each of the schema facets defined for the project (i.e. Security, Internet, Crm, and Acc.)

At some point I'm going to have to try to display my newly formed window...

2015.09.06 MSS Code Factory CFAcc Custom 2.6.13020 Fiddling with code structure

I've been fiddling with the code structure a bit, ensuring that the CFInternet, CFCrm, and CFAcc 2.6 custom schema interfaces use diamond inheritance to provide all of the required interfaces. I can see how to automate this code, but first to create it all by hand.

I've never worked with JavaFX before, so I need to take my time and just work top-down to produce the user interface I want.

2015.09.05 MSS Code Factory CFAcc Custom 2.6.13019 Build skeleton ready for code

The build hierarchy and build.xml files have been updated to lay out the inheritance hierarchies of the fundamental schema objects, whose implementations are intended to be the equivalent of JPanes that can be embedded as the root elements of a tabbed pane, where each of the referenced schemas appears as a tab of the pane, as well as one final tab for the main application.

On initialization of that tabbed pane in the root/desktop window, the security schema tab should be automatically selected, as that set of custom windows and forms presents the login dialog, the logout dialog, logout confirmation, password changes, and (depending on user permissions), security group management.

Thus the code that will be developed in java/cfsecurity26custom/src/net/sourceforge/msscodefactory/cfsecuritycustom/v2_6/CFSecurityCustom will likely be common to all applications developed using the code factory. Similarly, the CFInternet and CFCrm tabs will be common to many applications.

Once I have the facet code done for CFSecurity, CFInternet, and CFCrm, I'll move them to appropriately named projects in the build trees for their projects, releasing them under the appropriate license.

2015.09.03 MSS Code Factory CFAcc 2.6.13018 Run scripts added to installer

The run scripts for the PostgreSQL SAX Loader and the Swing prototype HTTP client GUI have been coded for Code Factory Accounting 2.6.

2015.09.02 MSS Code Factory CFAcc 2.6.13017 Latest model changes

I'm working on CFAccounting in earnest now for something to keep me busy.

2015.09.01 MSS Code Factory CFAll 2.6.13015 TODO items taken care of

The various TODO list items in the code have been addressed.

2015.08.28 MSS Code Factory CFAll 2.6.13013 Clean build of code produced by 2.5.13012 PROD

All of the 2.6 projects now build properly.