TaskHeap
1 Immediate (Plan, 72 hrs, 26aug05, ttl 72 hrs)
1.1 TaskHeap specific work (Plan, 40 hrs, 22aug05, ttl 40 hrs) 1.2 Trap string length and auto truncate (pending, 4 hrs, 22aug05, ttl 4 hrs)
1.3 Tabular collection summary display (pending, 16 hrs, 24aug05, ttl 16 hrs)
1.4 Import logs progress (pending, 2 hrs, 24aug05, ttl 2 hrs)
1.5 config editor dies with sand.flags dynamicselect (pending, 4 hrs, 25aug05, ttl 4 hrs)
1.6 Messaging.html improvements (pending, 6 hrs, 26aug05, ttl 6 hrs)
2 Near (Plan, 463 hrs, 15nov05, ttl 463 hrs)
2.1 SAND framework and functionality (Plan, 353 hrs, 27oct05, ttl 353 hrs)
2.1.1 Configuration and Control (Plan, 56 hrs, 6sep05, ttl 56 hrs)
2.1.1.1 warn about uninitialized comms (pending, 8 hrs, 29aug05, ttl 8 hrs)
2.1.1.2 Host-specific launch (pending, 8 hrs, 30aug05, ttl 8 hrs)
2.1.1.3 Explicit MBean reset (hot redeploy) (pending, 16 hrs, 1sep05, ttl 16 hrs)
2.1.1.4 more flexible XMLSerializer (pending, 24 hrs, 6sep05, ttl 24 hrs)
2.1.2 UI and SANDForms processing (Plan, 168 hrs, 5oct05, ttl 168 hrs)
2.1.2.1 Actions on collections (pending, 32 hrs, 12sep05, ttl 32 hrs)
2.1.2.2 Thousands separator for numbers (pending, 8 hrs, 13sep05, ttl 8 hrs)
2.1.2.3 UIFormContext improvements (Plan, 120 hrs, 4oct05, ttl 120 hrs)
2.1.2.3.1 note recursive edit (pending, 8 hrs, 14sep05, ttl 8 hrs)
2.1.2.3.2 near-binary serialization of state objects (pending, 8 hrs, 15sep05, ttl 8 hrs)
2.1.2.3.3 stack push and pop capability (pending, 8 hrs, 16sep05, ttl 8 hrs)
2.1.2.3.4 cancel tree for contained add (pending, 80 hrs, 30sep05, ttl 80 hrs)
2.1.2.3.5 Output text severity (pending, 16 hrs, 4oct05, ttl 16 hrs)
2.1.2.4 UI error handling (Plan, 8 hrs, 5oct05, ttl 8 hrs) 2.1.2.5 Screen scraper for emailing reports (Plan, 0 hrs, 5oct05, ttl 0 hrs)
2.1.2.6 Field triggers (Plan, 0 hrs, 5oct05, ttl 0 hrs)
2.1.3 Persistence and query processing (Plan, 65 hrs, 17oct05, ttl 65 hrs)
2.1.3.1 automatic database reset (pending, 24 hrs, 10oct05, ttl 24 hrs)
2.1.3.2 Smart quoting of strings in match value (pending, 4 hrs, 10oct05, ttl 4 hrs)
2.1.3.3 Subselect query support (Plan, 37 hrs, 17oct05, ttl 37 hrs)
2.1.3.3.1 Note no advanced matching in matches method (pending, 1 hrs, 10oct05, ttl 1 hrs)
2.1.3.3.2 Query string serialization (pending, 4 hrs, 11oct05, ttl 4 hrs)
2.1.3.3.3 IN/EXCLUDE matching for longs (pending, 16 hrs, 13oct05, ttl 16 hrs)
2.1.3.3.4 Authorizer support for subqueries (pending, 16 hrs, 17oct05, ttl 16 hrs)
2.1.4 Messaging (Plan, 64 hrs, 27oct05, ttl 64 hrs)
2.1.4.1 Native WS messaging (Plan, 20 hrs, 19oct05, ttl 20 hrs) 2.1.4.2 SOAP messaging (Plan, 8 hrs, 20oct05, ttl 8 hrs) 2.1.4.3 JMS Messaging (Plan, 4 hrs, 21oct05, ttl 4 hrs) 2.1.4.4 messaging error handling (Plan, 24 hrs, 26oct05, ttl 24 hrs) 2.1.4.5 Const message instances (pending, 8 hrs, 27oct05, ttl 8 hrs)
2.2 SAND development process (Plan, 110 hrs, 15nov05, ttl 110 hrs)
2.2.1 General SAND development (Plan, 110 hrs, 15nov05, ttl 110 hrs)
2.2.1.1 SAND intro doc (pending, 16 hrs, 31oct05, ttl 16 hrs)
2.2.1.2 SAND error handling (Plan, 24 hrs, 3nov05, ttl 24 hrs) 2.2.1.3 build work (Plan, 70 hrs, 15nov05, ttl 70 hrs)
2.2.1.3.1 Split deployment prefix into deployment and application (pending, 32 hrs, 9nov05, ttl 32 hrs)
2.2.1.3.2 container independent mainbuild.xml (pending, 8 hrs, 10nov05, ttl 8 hrs)
2.2.1.3.3 jar file versioning (pending, 8 hrs, 11nov05, ttl 8 hrs)
2.2.1.3.4 Reregister MBeans on hot deploy (pending, 16 hrs, 15nov05, ttl 16 hrs)
2.2.1.3.5 SandBuildDriver reset ant task (pending, 6 hrs, 15nov05, ttl 6 hrs)
3 Future (Plan, 436 hrs, 31jan06, ttl 436 hrs)
3.1 BILoc deployment support (Plan, 0 hrs, 15nov05, ttl 0 hrs) 3.2 case-driven development (Plan, 420 hrs, 27jan06, ttl 420 hrs)
3.2.1 switch to store state in session (pending, 8 hrs, 16nov05, ttl 8 hrs)
3.2.2 multiselect drop down support (pending, 8 hrs, 17nov05, ttl 8 hrs)
3.2.3 dynamic config editor updates (pending, 40 hrs, 24nov05, ttl 40 hrs)
3.2.4 use -linksource for javadoc (pending, 8 hrs, 25nov05, ttl 8 hrs)
3.2.5 build process monitors warnings (pending, 8 hrs, 28nov05, ttl 8 hrs)
3.2.6 localized XHTMLFormAdaptor (pending, 24 hrs, 1dec05, ttl 24 hrs)
3.2.7 Advanced paging (pending, 80 hrs, 15dec05, ttl 80 hrs)
3.2.8 polymorphic message collections (pending, 80 hrs, 29dec05, ttl 80 hrs)
3.2.9 message struct version checking (pending, 60 hrs, 10jan06, ttl 60 hrs)
3.2.10 @sand.link for javadoc (pending, 40 hrs, 17jan06, ttl 40 hrs)
3.2.11 dynamicrefresh FieldTagFlag (pending, 40 hrs, 24jan06, ttl 40 hrs)
3.2.12 Link.linkType=macro (pending, 8 hrs, 25jan06, ttl 8 hrs)
3.2.13 @sand.flags blobpersist (pending, 8 hrs, 26jan06, ttl 8 hrs)
3.2.14 general match expression query field (pending, 8 hrs, 27jan06, ttl 8 hrs)
3.3 Active SANDForms (Plan, 0 hrs, 27jan06, ttl 0 hrs)
3.4 Good to do (Plan, 16 hrs, 31jan06, ttl 16 hrs)
4 Recycling (Plan, 0 hrs, 31jan06, ttl 275 hrs)
4.2 Work done for release 1_6 (Plan, 0 hrs, 31jan06, ttl 227 hrs)
4.2.1 fastXMLWS servlet generator (finished, 6 hrs, 1feb06, ttl 6 hrs)
4.2.2 FastWSServlet implementation (finished, 12 hrs, 2feb06, ttl 12 hrs)
4.2.3 FastWSClient class (finished, 20 hrs, 7feb06, ttl 20 hrs)
4.2.4 add totalMatched field to SandCollectionMessage (finished, 24 hrs, 10feb06, ttl 24 hrs)
4.2.5 add norefdisplay to FieldTagFlags (finished, 8 hrs, 13feb06, ttl 8 hrs)
4.2.6 Support for Postgres (finished, 24 hrs, 16feb06, ttl 24 hrs)
4.2.7 Refactor persistence generation (Plan, 0 hrs, 16feb06, ttl 40 hrs)
4.2.7.1 sandpersist project declaration (finished, 16 hrs, 20feb06, ttl 16 hrs)
4.2.7.2 requiredMode parameter (finished, 16 hrs, 22feb06, ttl 16 hrs)
4.2.7.3 tablePrefix parameter (finished, 4 hrs, 22feb06, ttl 4 hrs)
4.2.7.4 autogenerate db clear script (finished, 4 hrs, 23feb06, ttl 4 hrs)
4.2.8 Cancel button clears outstanding updates (finished, 4 hrs, 16feb06, ttl 4 hrs)
4.2.9 Outdenting a task causes orphaning (finished, 6 hrs, 17feb06, ttl 6 hrs)
4.2.10 dump deployment prefix (finished, 4 hrs, 17feb06, ttl 4 hrs)
4.2.11 default to save action after editing (finished, 24 hrs, 22feb06, ttl 24 hrs)
4.2.12 Leave selection after move up/down (finished, 8 hrs, 23feb06, ttl 8 hrs)
4.2.13 Update parent collection on Add (finished, 4 hrs, 24feb06, ttl 4 hrs)
4.2.14 Recursive editing indicator (finished, 4 hrs, 24feb06, ttl 4 hrs)
4.2.15 greater than and less than escapes (closed, 1 hrs, 27feb06, ttl 1 hrs)
4.2.16 Clean up Resource display (finished, 16 hrs, 1mar06, ttl 16 hrs)
4.2.17 Reset lastModifiedReason on update (finished, 4 hrs, 1mar06, ttl 4 hrs)
4.2.18 prepulate ddmmmyy for notes subject (finished, 2 hrs, 1mar06, ttl 2 hrs)
4.2.19 Avoid recreating demo data (finished, 4 hrs, 2mar06, ttl 4 hrs)
4.2.20 Unsaved data not found for display (closed, 8 hrs, 3mar06, ttl 8 hrs)
4.2.21 restrict import/export availability (finished, 1 hrs, 3mar06, ttl 1 hrs)
4.2.22 Move CSVSerializer into apps util (finished, 3 hrs, 3mar06, ttl 3 hrs)
4.3 Recently completed or closed (Plan, 0 hrs, 31jan06, ttl 48 hrs)
4.3.1 Interim save processing (closed, 8 hrs, 1feb06, ttl 8 hrs)
4.3.2 build a Java Spaces statement (finished, 8 hrs, 2feb06, ttl 8 hrs)
4.3.3 easier current plan selection (finished, 24 hrs, 7feb06, ttl 24 hrs)
4.3.4 Filter to only your assignments (closed, 8 hrs, 8feb06, ttl 8 hrs)
Report generated on Aug 14, 2005 9:57:26 PM
by eric
|
Chromacoding key:
modified within past 24 hours
modified within 2 days
modified within 7 days
modified within 14 days
modified within 30 days
last modified over 30 days ago
|
1 Immediate (Plan 72 hrs) id: 1175
plan components:
1.1 TaskHeap specific work (Plan, 40 hrs, 22aug05, ttl 40 hrs)
1.2 Trap string length and auto truncate (pending, 4 hrs, 22aug05, ttl 4 hrs)
1.3 Tabular collection summary display (pending, 16 hrs, 24aug05, ttl 16 hrs)
1.4 Import logs progress (pending, 2 hrs, 24aug05, ttl 2 hrs)
1.5 config editor dies with sand.flags dynamicselect (pending, 4 hrs, 25aug05, ttl 4 hrs)
1.6 Messaging.html improvements (pending, 6 hrs, 26aug05, ttl 6 hrs)
Top level organization plan for work to be done immediately.
TOC
1.1 TaskHeap specific work (Plan 40 hrs) id: 1261
plan components:
Tasks that are specific to just the TaskHeap application. These may help demonstrate what's possible with SAND apps, but don't automatically apply to other applications.
TOC
1.1.1 Get the ExternalPlan refresh working (pending 16 hrs) id: 1317
As an http client, assume that the URL for the ExternalPlan points to the report output area where that plan can be found. Read the remaining hours off that report if asked to recalc.
TOC
1.1.2 Email WBS (pending 16 hrs) id: 1264
Add a button to generate the WBS report and then email it to yourself, without actually exporting it. That's useful for generating various possible planning scenarios for consideration, and it serves as an example for using email in a SAND app.
[Eric Parker] generalized email utility
If it turns out to be possible to factor a generalized email utility into sand/apps/basics then we should do that. Note that apps/basics can only depend on J2SE.
[Eric Parker] 14aug05 forgotPassword example
At this point the forgotPassword processing serves as an example of using email within a SAND app, so it comes down to whether emailing the heap to yourself is a good thing to do. In practice it's better to email a link to the static page, but since we already have a chunk of code in here we may as well finish this. Do the easiest thing that works. Assume html mail.
TOC
1.1.3 Uncache hidden work (pending 8 hrs) id: 1333
TaskHeap caches WBS plan components for decent response time, but we can potentially reduce the memory footprint of this by removing any hidden plan components from the cache. These aren't needed for the outline, so response time should be the same.
TOC
1.2 Trap string length and auto truncate (pending 4 hrs) id: 1314
Trap string length violations up front so that the returned error message explains which field was a problem, what the current length is, and what the declared maximum length is. Provide a config flag in the DataManager to automatically truncate these values or throw an error on save.
[Eric Parker] 04aug05 trapping but not done yet
I tried to enter a name in TaskHeap that was too long, and it trapped it, but it didn't give any helpful info in the error as described so this is still open.
TOC
1.3 Tabular collection summary display (pending 16 hrs) id: 1266
When dumping out a collection of messages, it should be possible to put the summary field names across the top, and then dump out each of the elements formatted in a tabular way. The task here is to build the demonstration transforms for TaskHeapDemo, and add any supporting output tagging if necessary.
[Eric Parker] thoughts so far
Not really sure how to do this. Maybe an initial summary line with just the summary field names would be useful. Transforms could pick up on this line to write out an appropriate first table line with width percentages and whatnot.
TOC
1.4 Import logs progress (pending 2 hrs) id: 1313
The import processing should log which number object it's on, so you that you can see where it is at. Do this right before the insert call.
TOC
1.5 config editor dies with sand.flags dynamicselect (pending 4 hrs) id: 1334
The @sand.flags dynamicselect messes up the config editor so it spits out the "save parent before editing" placeholder. Fix this.
TOC
1.6 Messaging.html improvements (pending 6 hrs) id: 1309
Add a section in the beginning talking about basic usage. Call with a SandQueryMessage, get a SandCollectionMessage in return. Call with a SandUpdateMessage, get a SandUpdateMessage back. We need to cover the basics here first.
Note that in practice many times even single updates are wrapped inside of an AggregateUpdate message, since that saves on comm declarations and authorization processing.
TOC
2 Near (Plan 463 hrs) id: 1176
plan components:
Near term work to be done after immediate work.
TOC
2.1 SAND framework and functionality (Plan 353 hrs) id: 1336
plan components:
2.1.1 Configuration and Control (Plan, 56 hrs, 6sep05, ttl 56 hrs)
2.1.2 UI and SANDForms processing (Plan, 168 hrs, 5oct05, ttl 168 hrs)
2.1.3 Persistence and query processing (Plan, 65 hrs, 17oct05, ttl 65 hrs)
2.1.4 Messaging (Plan, 64 hrs, 27oct05, ttl 64 hrs)
Work related to features of the application framework generated from the SAND
declarations, or general utilities available to application deployments.
TOC
2.1.1 Configuration and Control (Plan 56 hrs) id: 1304
plan components:
2.1.1.1 warn about uninitialized comms (pending, 8 hrs, 29aug05, ttl 8 hrs)
2.1.1.2 Host-specific launch (pending, 8 hrs, 30aug05, ttl 8 hrs)
2.1.1.3 Explicit MBean reset (hot redeploy) (pending, 16 hrs, 1sep05, ttl 16 hrs)
2.1.1.4 more flexible XMLSerializer (pending, 24 hrs, 6sep05, ttl 24 hrs)
Work related to configuration management and runtime control.
TOC
2.1.1.1 warn about uninitialized comms (pending 8 hrs) id: 1232
When a communication path is not configured, we should probably warn about that at startup and/or on saving the configuration in the config editor. It's too easy to not hook something up that needs to be.
TOC
2.1.1.2 Host-specific launch (pending 8 hrs) id: 1307
SandBossRootNode needs to launch only the nodes that should be launched for the server it is currently on. We can't rely on figuring this out from the network environment, so we need to use a setting. To figure out the current host, the root will look for
1. A "sandhostname" system property.
2. A "SANDHOSTNAME" environment variable.
3. A "hostname" system property.
4. A "HOSTNAME" environment variable.
If none of these are found then the hostname is "".
The host name value can be set to a single name, or a CSV of names. The root will launch all node instances declared to be running on the host(s) defined. The reserved value "SAND_ALLNODESLOCAL" directs the root to launch all nodes regardless of which server they are declared to be running on. If hostname ends up as "" that is treated as SAND_ALLNODESLOCAL by default.
SandRoot exposes two new methods: getHostName() and overrideHostName(String). The first is a general utility and the second allows things like XHTMLSandUIServlet to force local launch.
We log what the hostname is when we figure it out, or when it is overridden. It should be clear from the log what host we are on.
TOC
2.1.1.3 Explicit MBean reset (hot redeploy) (pending 16 hrs) id: 1320
Currently hot deploy of a war can fail if the node control MBeans were already registered. We need to check for an existing registration and reset it as necessary on startup.
We can't rely on appropriate signaling for teardown. Even if this were generally reliable, we would still want the reset capability.
TOC
2.1.1.4 more flexible XMLSerializer (pending 24 hrs) id: 1329
The XMLSerializer should avoid using array element totals, or use them just as an initial guide. It should avoid using indices or other values that make it hard to insert new array elements during hand editing. It should also fall back to using a full SAX parser if reading fails.
By making these changes, we retain the speed used for messaging, but we also gain the capability of being able to easily hand edit the config and sandui files, and/or have other editors built for these that aren't tied to our XMLSerializer.
TOC
2.1.2 UI and SANDForms processing (Plan 168 hrs) id: 1278
plan components:
2.1.2.1 Actions on collections (pending, 32 hrs, 12sep05, ttl 32 hrs)
2.1.2.2 Thousands separator for numbers (pending, 8 hrs, 13sep05, ttl 8 hrs)
2.1.2.3 UIFormContext improvements (Plan, 120 hrs, 4oct05, ttl 120 hrs)
2.1.2.4 UI error handling (Plan, 8 hrs, 5oct05, ttl 8 hrs)
2.1.2.5 Screen scraper for emailing reports (Plan, 0 hrs, 5oct05, ttl 0 hrs)
2.1.2.6 Field triggers (Plan, 0 hrs, 5oct05, ttl 0 hrs)
Work related to SANDForms, SandUI or other general UI behavior.
TOC
2.1.2.1 Actions on collections (pending 32 hrs) id: 1294
When working with a SandCollectionMessage, we want to enable the selection of multiple instances to apply a single function to. For example you might want to select 13 out of 20 instances to delete.
To handle this and numerous other multi-select situations, we will provide a "Select" button for collections. When first clicked, this puts checkboxes in front of all the collection elements, and displays "Mark All", "Clear All", and "Select" buttons. The second select click restricts the collection to the checked items.
Applications can (as usual) provide their own custom buttons to handle deleting, accepting, or otherwise manipulating multiple items.
TOC
2.1.2.2 Thousands separator for numbers (pending 8 hrs) id: 1316
Change the default numeric output to use number formatting rather than the default toString conversion. That way we can get the commas for large numbers in there.
TOC
2.1.2.3 UIFormContext improvements (Plan 120 hrs) id: 1241
plan components:
2.1.2.3.1 note recursive edit (pending, 8 hrs, 14sep05, ttl 8 hrs)
2.1.2.3.2 near-binary serialization of state objects (pending, 8 hrs, 15sep05, ttl 8 hrs)
2.1.2.3.3 stack push and pop capability (pending, 8 hrs, 16sep05, ttl 8 hrs)
2.1.2.3.4 cancel tree for contained add (pending, 80 hrs, 30sep05, ttl 80 hrs)
2.1.2.3.5 Output text severity (pending, 16 hrs, 4oct05, ttl 16 hrs)
Our currrent UIFormContext model organizes all state into an efficient structure that works well under most circumstances, but there is room for improvement. This plan organizes identified or potential improvement work.
TOC
2.1.2.3.1 note recursive edit (pending 8 hrs) id: 1242
Scenario:
Assume that ClassA contains an array of ClassB references, and ClassB in turn contains an array of ClassC references.
If a user edits InstanceA and makes a new InstanceB. They cannot add an InstanceC to the new InstanceB, until after InstanceB and the modified InstanceA are saved. This is because there is not enough room in the UIFormContext to store this state. Some indication of this needs to be provided when editing InstanceB.
One possibility here is to indicate that adding a new InstanceC is possible, but is disabled until the previous instance is saved. Another solution is to provide the editing buttons for instanceC, and if clicked, prompt the user to save the outstanding InstanceA and InstanceB changes. We would need to extend the UserQuery to provide this kind of prompting.
[Eric Parker] UserQuery extension useful
Extending the UserQuery functionality may be helpful in doing things like confirming user actions and such. For example "Are you sure?" type prompts.
Keep this in mind.
TOC
2.1.2.3.2 near-binary serialization of state objects (pending 8 hrs) id: 1243
Objects which are part of the current state need to be saved in a tight binary format. Although it is more readable to have them serialized out as individual hidden parameters, this takes up a huge amount of data which needs to get transferred back and forth. Instead, this state needs to be stored as a single hexified binary serialized value to save transmission bandwidth.
[Eric Parker] Add explanatory text
I personally hate viewing source and finding a pile of hexified crap, so we should dump a URL in a comment where people can get details of what's going on.
TOC
2.1.2.3.3 stack push and pop capability (pending 8 hrs) id: 1245
The idea here is to be able to take the entire UIFormContext and push it onto its own stack. That way we can recursively edit references without any depth limitations. The UIFormOwner.formSave processing would need to be called on CANCEL when there is a stack, but otherwise this seems possible. Needs spec.
TOC
2.1.2.3.4 cancel tree for contained add (pending 80 hrs) id: 1246
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=699993&group_id=46466&atid=446225
This needs to be considered as part of the standalone config editor tool.
TOC
2.1.2.3.5 Output text severity (pending 16 hrs) id: 1234
A UI needs to know the severity of the output text. If this is an error in processing, then it might be displayed in red, if this is a message saying that the data was saved successfully, then it probably would not be. The severity needs to follow the log level, and be available for transformation.
[Eric Parker] Use with SandTransmitMessage error array
If we modify UIFormContext to have an array of messages, each with a severity level, then we could code that up for XHTML color transformation so that error messages come out in red and informational messages don't.
TOC
2.1.2.4 UI error handling (Plan 8 hrs) id: 1306
plan components:
Work related to preventing or handling errors and exception conditions in the UI.
TOC
2.1.2.4.1 protect webapp from partial form submission (pending 8 hrs) id: 1236
If someone clicks a button before a form has a chance to fully download, then we may potentially lose state, leading to bad data reconstruction and potentially bad processing. For DEREF operations this is not critical, but for SAVE or SELECT it could be bad. See about providing an end-of-data marker or other strategy to prevent this from happening.
We should look into how other people handle this, however any double refresh of the page or other hacking that affects the display is not a good idea.
TOC
2.1.2.5 Screen scraper for emailing reports (Plan 0 hrs) id: 1315
plan components:
Write a basic screen scraper framework for TaskHeap using java commons HttpClient as a base. Use this to capture the contents of a printer friendly report page with a heap summary, which can then be emailed or otherwise manipulated. This is useful as a demonstration for how applications can handle runtime reports in general, but it's not a major priority in terms of actual TaskHeap functionality.
TOC
2.1.2.6 Field triggers (Plan 0 hrs) id: 1254
plan components:
A field trigger can be declared via an @sand.fieldtrigger struct field tag, and causes the associated method in a FieldTriggerHandler interface implementation to be called at run time, with a representation of the form display. The FieldTriggerHandler processes the form display, doing things like altering the possible values of other fields and the like.
A possible example implementation would be for the struct rendering to produce client side javascript associated with the specific field, which would then call the FieldTriggerHandler processing as a javascript function. The idea is to provide client-side dynamic forms without having to worry about doing this kind of thing in transformation templates. Needs spec.
TOC
2.1.3 Persistence and query processing (Plan 65 hrs) id: 1279
plan components:
Work related to storing and retrieving persistent message instances.
TOC
2.1.3.1 automatic database reset (pending 24 hrs) id: 1225
This was previously called "autogen ClearDatabase.sql" but that's HSQL specific and doesn't really solve the whole problem. Here's the use case: you have a demo deployment set up that you want to frequently reset to a known starting state so you can re-run the same script or rebuild the playspace.
In terms of TaskHeap, you want a "reset database" button on the Admin screen that will delete everything in the database, and then load the required initial data, then import the application data, then restart the whole application to reset the state and caching.
To do this we need
1. A config parameter for the DataManager to allow/disallow reset
2. Create a DataResetStruct in apps/basics (see DataImportExportStruct)
3. Set up the TaskHeap button, message plumbing etc
4. Get the database reset and initial data load happening
5. Get the automatic data import happening
6. DataManager calls systemwideShutdown(SHUTDOWN_ERROR_RESTART_GLOBAL)
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=819294&group_id=46466&atid=446225
TOC
2.1.3.2 Smart quoting of strings in match value (pending 4 hrs) id: 1277
If we are matching a string field called "name", we might specify a match value of "Sue OR Mary". In actual fact this needs to written as
"\"Sue\" OR \"Mary\"" to be processed correctly. We should provide some heuristic preprocessing in these cases so if an expression can be tokenized on whitespace we let it go through.
TOC
2.1.3.3 Subselect query support (Plan 37 hrs) id: 1288
plan components:
2.1.3.3.1 Note no advanced matching in matches method (pending, 1 hrs, 10oct05, ttl 1 hrs)
2.1.3.3.2 Query string serialization (pending, 4 hrs, 11oct05, ttl 4 hrs)
2.1.3.3.3 IN/EXCLUDE matching for longs (pending, 16 hrs, 13oct05, ttl 16 hrs)
2.1.3.3.4 Authorizer support for subqueries (pending, 16 hrs, 17oct05, ttl 16 hrs)
We want to support the equivalent of SQL subselects so a query can specify that a given value is IN/NOT IN another query. A typical example is retrieving Readers that are not also Resources.
TOC
2.1.3.3.1 Note no advanced matching in matches method (pending 1 hrs) id: 1290
The matches method generated for each SandQueryMessage needs commentage describing that it does not handle dereferencing operations (for example a PlanQuery specifying "taskPhaseID.name = proposed"), or other advanced query processing like subselects. This kind of processing is why databases were invented, so that's where we draw the line.
A generalized matcher that can handle the dereferencing and subselects is effectively a DataManager implementation (or at least a very smart cache). This kind of thing is handled on a per application basis as needed.
TOC
2.1.3.3.2 Query string serialization (pending 4 hrs) id: 1289
Allow for serialization of SandQueryMessages by providing toText and fromText methods in the generated classes. So toText of a ResourceQuery for username eric would come out as
ResourceQuery username = "eric"
And fromText("ResourceQuery username = \"eric\"") would reconstruct the object.
The methods need to be symmetric, but fromText does not need to be as forgiving as the general query processing in terms of quoting or implied equality operators.
TOC
2.1.3.3.3 IN/EXCLUDE matching for longs (pending 16 hrs) id: 1291
Extend the query processing to allow the IN or EXCLUDE operators for any long. So for example we could have a ReaderQuery with a match of
"uniqueID","EXCLUDE ResourceQuery"
This would trigger a NOT IN subselect clause with "SELECT uniqueID FROM Resource". To avoid issues with String fields containing values of "in" or "exclude", this matching is limited to longs.
TOC
2.1.3.3.4 Authorizer support for subqueries (pending 16 hrs) id: 1292
The Authorizer needs to be extended so it checks for subqueries. Someone who has no access to Resources should not be allowed to specify a ReaderQuery EXCLUDE ResourceQuery. We have a similar issue for dereferencing using dot notation. The unpacking process for both of these needs to be handled by the Authorizer processing.
TODO: This needs spec.
TOC
2.1.4 Messaging (Plan 64 hrs) id: 1248
plan components:
2.1.4.1 Native WS messaging (Plan, 20 hrs, 19oct05, ttl 20 hrs)
2.1.4.2 SOAP messaging (Plan, 8 hrs, 20oct05, ttl 8 hrs)
2.1.4.3 JMS Messaging (Plan, 4 hrs, 21oct05, ttl 4 hrs)
2.1.4.4 messaging error handling (Plan, 24 hrs, 26oct05, ttl 24 hrs)
2.1.4.5 Const message instances (pending, 8 hrs, 27oct05, ttl 8 hrs)
Tasks around messaging and distributed communications.
TOC
2.1.4.1 Native WS messaging (Plan 20 hrs) id: 1281
plan components:
To allow client applications to communicate with the server application over HTTP (the only protocol available in some proxy firewall setups), we want to provide a simple web services interface using the same AuthWrapper messaging used for secure comms. This is in contrast to a SOAP wrapper, which is scoped separately. This plan holds work related to a serialized AuthWrapper sent to the server via HTTP POST, with the results received as the response. Serialization is via org.sandboss.tools.util.XMLSerializer.
For broadcast, we serve a page holding the N latest broadcast messages collected as a SandMessage[] placed inside of an AuthWrapper. The client can poll this page periodically. The expecation is that the CommBridge will return an array of SandTransmitMessages with a sequence number to allow for client reconcilliation.
TOC
2.1.4.1.1 Full exception bulletproofing (pending 4 hrs) id: 1302
We never want to crash with a server 500 error, so make sure we trap all exceptions that occur during processing and return some kind of an error message inside of an AuthWrapper.
TOC
2.1.4.1.2 Client .jar ant task (pending 8 hrs) id: 1285
Create an ant task that will create a single deployment project subdir containing all the source needed for an external client. This includes all the generated sandmessages, supporting code like serializers and comm interfaces, and a relatively small set of the total utilities. This provides a base for an application to add whatever additional files it wants to make available, build the client.jar as a separate ant task, and then do whatever to make this available to the client app. This simplifies the client complexity and reduces the size of any download that is needed.
TOC
2.1.4.1.3 QuickWSMessager (pending 8 hrs) id: 1250
Our Quick WebServices Messager is a Messager implmentation that uses our XMLSerializer to send messages between machines via servlets. Since this also goes over the default port, it needs to play nicely with webapps.
Standalone GUI apps must be able to use QuickWSMessager. Note that in this case there is no servlet container.
[Eric Parker] mention Fast Web Service
[Eric Parker] is pure J2SE possible?
Our only real dependency on J2EE (aside from the webapp template transformation) is the HttpServlet APIs. If in the process of supporting our standalone GUI apps, we can work out a better interface layer here, then we should record a task to make that happen.
We should also look into the state of JSR work for generalized servlet interfaces. There may be more relevant APIs that are heading for J2SE core because things like cell phones need more lightweight protocols.
TOC
2.1.4.2 SOAP messaging (Plan 8 hrs) id: 1280
plan components:
The goal here is to create a service, which means creating a WSDL and publishing it to a registry.
Web services are primarily used for edge communications to/from the outside world. For communications within the app but across VMs, it should be no problem at all using our own "quick web services" interface, but nobody from outside of our build/release process has any business calling this directly, since the serialization will change with each data revision (the app could just as well be sending a binary stream, or using sockets). This is a useful default communications mechanism but it is not a basis for external integration.
We need some build support to produce the basics. Specifically we need Ant tasks that make it possible to:
1. Generate struct defs from WSDL (for ease of creating processing nodes). This is a pretty nice driver task for folks coming from pure SOA tools.
2. Generate a servlet shell and WSDL from an inmessage/outmessage specification. That's pretty nice for SAND folks needing to expose a web service. The security here is still evolving, but with the next spec revision supporting OSS XML, this should straighten out a bit. For now we just do the basics and assume they are over HTTPS.
TOC
2.1.4.2.1 WS-I basic profile 1.0 (SOAP messaging) (pending 8 hrs) id: 1249
It must be possible to easily create standards-based web services in sandboss using the container support for J2EE 1.4 SOAP calls. This is JAX-RPC with lookups via JNDI. Define how this works and implement the supporting generators.
TOC
2.1.4.3 JMS Messaging (Plan 4 hrs) id: 1286
plan components:
Tasks related to Messaging over JMS
TOC
2.1.4.3.1 Automatic session recovery (pending 4 hrs) id: 1287
The AuthorizedJMSMessager should recover automatically when the session has been closed. So if it receives a javax.jms.IllegalStateException "cannot perform operation, session has been closed", then it should complain and then reinit to recover.
This happens if the JMS server gets restarted and sandboss doesn't.
TOC
2.1.4.4 messaging error handling (Plan 24 hrs) id: 1303
plan components:
Error and exception handling fixes and improvements.
TOC
2.1.4.4.1 SandTransmitMessage error array (pending 24 hrs) id: 1233
We should change SandTransmitMessage to have an array of error messages rather than just one. We can adapt this to preserve the simple interface, while still enabling an application to return multiple errors. This is particularly useful when an update fails due to multiple problems with the data. If you can catch that up front, then you can avoid multiple annoying save attempts.
TOC
2.1.4.5 Const message instances (pending 8 hrs) id: 1259
I think the caching issue we see on update failures (form still has the
changed data) is due to a common pattern:
- retrieve an instance from cache or other known location
- modify it
- wrap it in an update message and call to do the update
When the update fails, we have nonetheless modified the instance we were
working with.
The solution is to support immutable instances. So every message would
have a makeInstanceConstant() method which would flip a protected int
instanceProtection member from zero (MUTABLE) to one (CONST). Every
mutator method in the message would then check the isInstanceConst before
making a change to any data members.
Modification of a const message results in a runtime error being thrown.
We don't want this to be a standard exception since it causes all sorts of
unnecessary annoyance for non-const instances. The main use for this is
in the IDCache, a secondary use is in the UIFormContext.
TOC
2.2 SAND development process (Plan 110 hrs) id: 1337
plan components:
Work related to developing using SAND, including declarations, build, deployment management and related issues.
TOC
2.2.1 General SAND development (Plan 110 hrs) id: 1305
plan components:
Work related to generators, build, or general SAND development issues.
TOC
2.2.1.1 SAND intro doc (pending 16 hrs) id: 1310
Create an intro document describing SAND. Modeling this as following an "introduction to distributed systems" slideshow might bore some people in spots, but it's still the best format for most of our audience.
Write this up.
TOC
2.2.1.2 SAND error handling (Plan 24 hrs) id: 1230
plan components:
A plan for making SAND development more robust in the face of errors, or probable mistakes.
TOC
2.2.1.2.1 duplicate sand declarations (pending 8 hrs) id: 1231
When the same @sand.xyz tag is used more than once (usually a result of cut and paste), it can be difficult to see. Consider spitting out a build warning or failing the build when this happens.
TOC
2.2.1.2.2 bulletproof scrub with new generator (pending 8 hrs) id: 1238
You can't run "ant scrub" after adding a new generator. You get a SandBuildException: Could not find class when trying to run it. Recover from this better. On scrub, if there's no class found, then there probably isn't any cleanup to do either.
TOC
2.2.1.2.3 build tracking of deleted struct decls (pending 8 hrs) id: 1239
sourceforge bug:
http://sourceforge.net/tracker/index.php?func=detail&aid=787779&group_id=46466&atid=446222
Deleting a struct decl causes the build to fail. This was working at one point and is apparently busted now. The comments describe the problem details and where to start.
TOC
2.2.1.3 build work (Plan 70 hrs) id: 1240
plan components:
2.2.1.3.1 Split deployment prefix into deployment and application (pending, 32 hrs, 9nov05, ttl 32 hrs)
2.2.1.3.2 container independent mainbuild.xml (pending, 8 hrs, 10nov05, ttl 8 hrs)
2.2.1.3.3 jar file versioning (pending, 8 hrs, 11nov05, ttl 8 hrs)
2.2.1.3.4 Reregister MBeans on hot deploy (pending, 16 hrs, 15nov05, ttl 16 hrs)
2.2.1.3.5 SandBuildDriver reset ant task (pending, 6 hrs, 15nov05, ttl 6 hrs)
Other general open work on SAND/sandboss
TOC
2.2.1.3.1 Split deployment prefix into deployment and application (pending 32 hrs) id: 1322
Split the current DeploymentPrefix property into an ApplicationPrefix and a DeploymentPrefix. This allows optimum memory usage in a multi-app deployment environment. Things like XHTMLFormAdaptor use the ApplicationPrefix, since they can be shared across multiple runtime instances. Things like the JDBCPersister and supporting database code uses the ApplicationPrefix to generate code, which takes the DeploymentPrefix as a parameter of what tables to access.
TOC
2.2.1.3.2 container independent mainbuild.xml (pending 8 hrs) id: 1253
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=756781&group_id=46466&atid=446225
We need to get the JBoss and even the J2EE .jar links out of the core mainbuild.xml so that we use the same build across multiple SAND environments.
TOC
2.2.1.3.3 jar file versioning (pending 8 hrs) id: 1270
In addition to prefixing, we want to allow some form of suffixing to provide version identification based on the .jar file name itself.
TOC
2.2.1.3.4 Reregister MBeans on hot deploy (pending 16 hrs) id: 1274
Now that we are using generic MBeans which are registering both in JBoss and standalone Tomcat, the next step is to make them resilient on hot deploy. Currently hot deploy of a self-contained WAR fails because the MBeans are already registered. We need to destroy the existing instances and recreate them in this case.
TOC
2.2.1.3.5 SandBuildDriver reset ant task (pending 6 hrs) id: 1328
We need an ant task to nuke the SandBuildDriver so it can be reset. Currently it is not possible to do several top level independent ant builds within a single target, because the SBD context carries over. We need a way to tell the SBD when we are done with it.
TOC
3 Future (Plan 436 hrs) id: 1178
plan components:
3.1 BILoc deployment support (Plan, 0 hrs, 15nov05, ttl 0 hrs)
3.2 case-driven development (Plan, 420 hrs, 27jan06, ttl 420 hrs)
3.3 Active SANDForms (Plan, 0 hrs, 27jan06, ttl 0 hrs)
3.4 Good to do (Plan, 16 hrs, 31jan06, ttl 16 hrs)
Work to potentially be done in the future (not near term).
TOC
3.1 BILoc deployment support (Plan 0 hrs) id: 1296
plan components:
Browser interface localhost (BILoc) application deployments are local applications using the default browser for their display, with a micro webserver process for the application. Launching a BILoc deployment runs the application and opens a browser window set to the corresponding localhost:80 URL.
Advantages of a BILoc app:
- same application can be server-based or standalone
- lower learning curve for new application users
- thick clients identical to their thin client variants
- server UI skills applicable for standalone development
- UI look and feel normalized across a wide range of platforms
With support for BILoc, a SAND app can be deployed
- on multiple servers
- on a single server, shared server, or web enabled device
- on a single client
[Eric Parker] 14jul05 Graphical interface support
Support for graphical interfaces depends a lot on what is required, and what the browser will support. This can range from generated click-mapped images, through subinterfaces like applets or plug-ins, all the way through to custom browsers (arguably an online videogame is essentially a massively customized browser). For SAND, the SiteUI editor and Configuration editors are local tools that would run as BILoc apps. The configuration diagram and the associated map would be generated dynamically.
QUESTION: What's the best approach to generating mapped images like this?
[Eric Parker] 16jul05 Not running off the browser
A BILoc app is NOT an applet. Apps running off the browser are subject to browser differences between vendors and versions, and they are not trusted like an installed application is. The whole point here is to have a real application.
TOC
3.1.1 Application shell deployment (Plan 0 hrs) id: 1330
plan components:
We need a way to install an application on a typical PC (Windows/Mac) that looks like any other app but in reality fires up an executable .jar (the application) and the default browser keyed to the main URL for the app. Need to figure out what tech to use for this, how the install build will work, and what the plumbing requirements are. Presumably java webstart may kick in somewhere here.
For extra credit have the same thing work for Linux boxes and Palm pilots too.
TOC
3.1.2 The web microserver (Plan 0 hrs) id: 1331
plan components:
Having the overhead of a full blown webserver just for our SAND app seems like overkill, but maybe there's something small available that we can use? If not, then we should look into avoiding the whole HttpServletRequest/Response architecture in favor of a streamlined implementation of our UIRenderInput interface. Really all we need is the param map and some way of listening on the socket nicely. Figure out how this plumbing will work.
TOC
3.2 case-driven development (Plan 420 hrs) id: 1216
plan components:
3.2.1 switch to store state in session (pending, 8 hrs, 16nov05, ttl 8 hrs)
3.2.2 multiselect drop down support (pending, 8 hrs, 17nov05, ttl 8 hrs)
3.2.3 dynamic config editor updates (pending, 40 hrs, 24nov05, ttl 40 hrs)
3.2.4 use -linksource for javadoc (pending, 8 hrs, 25nov05, ttl 8 hrs)
3.2.5 build process monitors warnings (pending, 8 hrs, 28nov05, ttl 8 hrs)
3.2.6 localized XHTMLFormAdaptor (pending, 24 hrs, 1dec05, ttl 24 hrs)
3.2.7 Advanced paging (pending, 80 hrs, 15dec05, ttl 80 hrs)
3.2.8 polymorphic message collections (pending, 80 hrs, 29dec05, ttl 80 hrs)
3.2.9 message struct version checking (pending, 60 hrs, 10jan06, ttl 60 hrs)
3.2.10 @sand.link for javadoc (pending, 40 hrs, 17jan06, ttl 40 hrs)
3.2.11 dynamicrefresh FieldTagFlag (pending, 40 hrs, 24jan06, ttl 40 hrs)
3.2.12 Link.linkType=macro (pending, 8 hrs, 25jan06, ttl 8 hrs)
3.2.13 @sand.flags blobpersist (pending, 8 hrs, 26jan06, ttl 8 hrs)
3.2.14 general match expression query field (pending, 8 hrs, 27jan06, ttl 8 hrs)
Work best handled as part of an ongoing project. In the absence of at least one driving real-world scenario, it's generally a bad idea to proceed. If someone requires the feature, and they are working with us, then we will make it happen. Otherwise it's tabled here.
TOC
3.2.1 switch to store state in session (pending 8 hrs) id: 1244
We should provide a switch for storing the state information in the session as opposed to with the client request. The session is more susceptible to things getting out of sync, but it saves transmission bandwidth.
TOC
3.2.2 multiselect drop down support (pending 8 hrs) id: 1273
The first stage of this is to generate a multiselect dropdown for enumint fields in the query message. Each multiselect item is related by OR.
Once that's happening, we want to be able to trigger this using some kind of a tag. Maybe @sand.reference my.struct.name fieldname combined with @sand.flags multiselectOR. Figure that out after the multiselect is working.
[Eric Parker] 14aug05 needs spec
This needs more spec. Maybe a string field with enumint tags and a multiselect flag would be a good way to deal with this? Then the result could be stored as a CSV of ints. On the other hand a straight String field with some additional display transformation might do this. Tabling this until there is a driving case.
TOC
3.2.3 dynamic config editor updates (pending 40 hrs) id: 1217
sourceforge bug:
http://sourceforge.net/tracker/index.php?func=detail&aid=672238&group_id=46466&atid=446222
Basically the idea is to have the config editor notify the SandBossRoot so
the changes take place without having to restart the container. While
making the config editor a standalone tool will make things less
confusing, the dynamic restart is a good thing to have anyway.
[Eric Parker] hot deploy on build
At this point you need to redeploy the updated config.xml file, so maybe that will help eliminate some of the confusion around what's going on. Currently we don't pick up on this in a hot-deploy, but that may be possible. This might be worth a separate task.
TOC
3.2.4 use -linksource for javadoc (pending 8 hrs) id: 1218
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=617725&group_id=46466&atid=446225
Basically we want to be able to drill through to the source, but if this makes javadoc even slower then it needs to be a switchable option.
TOC
3.2.5 build process monitors warnings (pending 8 hrs) id: 1219
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=665051&group_id=46466&atid=446225
Our build has improved a bunch, but it would be nice to have it optionally stop if a warning was generated.
TOC
3.2.6 localized XHTMLFormAdaptor (pending 24 hrs) id: 1220
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=699679&group_id=46466&atid=446225
Basically extend XHTMLFormAdaptor and use the locale to lookup what the button text and suchlike should be.
TOC
3.2.7 Advanced paging (pending 80 hrs) id: 1276
Once we are able to return the total for a query, we can separate out
paging from the standard add/edit/delete functions onto a separate line.
This line should display the total, and then provide paging through a
standard text line of
prev 1 2 3 4 5 6 7 8 9 10 next (12050 total)
where each item is a link except for the current page. As you move up
past page 5, the entire contents scrolls, so for the 6th page you see
prev 2 3 4 5 6 7 8 9 10 11 next (12050 total)
and so on until you run out of data of pages on the right.
To implement this, we need to provide support in XHTMLFormAdaptor and
any other UIFormAdaptor implementations. The links all correspond to a
new button called "pager" which reads a request parameter of "pg" that
is set to a relative page number. So for example pg=1 means forward one
page and pg=-1 means back one page. This logic needs to be implemented
in AbstractFormManager, and needs to be supported by an additional
SandQueryMessage parameter.
The idea here is that the query processing will repeat the appropriate
number of queries to get to the next relative page. So if pg=5, then
we would repeat the query to the database 5 times and then retun that
result. A value of -3 would repeat the query 3 times in the reverse
direction.
TOC
3.2.8 polymorphic message collections (pending 80 hrs) id: 1222
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=699765&group_id=46466&atid=446225
Basically this is a security issue vs a demand issue. Waiting for a real driving case that isn't a case of sloppy design and/or inadequate authorization considerations.
TOC
3.2.9 message struct version checking (pending 60 hrs) id: 1223
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=699791&group_id=46466&atid=446225
This is excellent functionality which we should probably deliver on an as-needed basis. Waiting to drive the general solution from a real application so we can demonstrate appropriate testing and node reactions to old formats. Version checking follows the 80/20 rule, and we want a real case to provide the focus.
TOC
3.2.10 @sand.link for javadoc (pending 40 hrs) id: 1224
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=780840&group_id=46466&atid=446225
Basically putting explicit relative paths in the javadoc comments is ugly and kind of hard to maintain. The javadoc -link option is kind of scary due to the way it brings in absolutely everything, but our own linkage would not be too bad and would probably be very useful. Especially since we could then run some analysis or even generate our own "see also" type link lookups from the core classes out to the technology interface implementations. Nice to have.
[Eric Parker] Func req linkage
When generating a functional requirements document from the struct and node doc information, being able to trap internal linkage would allow us to have consistent traversal. Yet another reason why this is useful.
TOC
3.2.11 dynamicrefresh FieldTagFlag (pending 40 hrs) id: 1226
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=826951&group_id=46466&atid=446225
I want some more requirements and specification before putting a solution forward. Looking for a general solution involving field triggers.
TOC
3.2.12 Link.linkType=macro (pending 8 hrs) id: 1227
At the time of this writing we have form links, text links, and empty links (which are essentially invisible action holders). A macro link is a variant of a text link, where the value is determined through a callback to the UIFormOwner. This is useful for context-dependent dynamic linkage similar to what we can do in generated report text, but limited to within a given page.
Waiting for a driving case before implementing.
TOC
3.2.13 @sand.flags blobpersist (pending 8 hrs) id: 1228
This is analogous to @sand.flags stringpersist, but stores the result as a blob rather than a String. Need a real driving case for when stringpersist won't cut it.
TOC
3.2.14 general match expression query field (pending 8 hrs) id: 1229
In the query forms we generate, we should display a sandMatchExpression text entry where you can put raw match expressions, including access to subfields etc. Any entered text simply gets passed through raw. The field can be removed in display transformation when it's not needed.
What this does is provide join capability to the end user, but at the expense of increased form complexity. So far we've dealt with this kind of a perceived need using custom actions and other hooks. Not sure if this is a real need or not so waiting for a driving case.
TOC
3.3 Active SANDForms (Plan 0 hrs) id: 1295
plan components:
By using javascript together with a URL request to a broadcast message request source (utilizing our generated web service), it should be possible to dynamically refresh a collection display in response to realtime changes (at least at the level of the polling interval). This needs to be explored, since it obviates the need for building a standalone program to provide a stateful display.
TOC
3.4 Good to do (Plan 16 hrs) id: 1338
plan components:
Stuff we should do because it's the right thing to do, but that need an extra push to get up higher in the priority stack.
TOC
3.4.1 build a JCA statement (pending 8 hrs) id: 1251
Describe how we fit onto different messager implementations. Webservices should be pretty clear from our default implementation, and JMS is already covered in a few comments even though it could probably be brought together more cohesively. After we figure out the appropriate place to cover these, we also need a statement on how we work over JCA. This is important for people who want to work directly with higher level integration packages.
TOC
3.4.2 Clean up query processing (pending 8 hrs) id: 1308
The query processing SQL might be easier to understand if we defined a SQLQuery class with
String selectClause
String fromClause
String whereClause
String orderByClause
and then had methods to generate result SQL based on the target DB.
At this point what we have is working and relatively stable, so this is not the highest prio, but it might help to support more databases in the future and make things more readable next time we need to go in there.
TOC
4 Recycling (Plan 0 hrs) id: 1190
plan components:
Work which was not done and won't be done. Storing these work definitions under recycling rather than just deleting them can help in tracking and allows work to potentially be revisited later if needs change.
TOC
4.2 Work done for release 1_6 (Plan 0 hrs) id: 1260
plan components:
4.2.1 fastXMLWS servlet generator (finished, 6 hrs, 1feb06, ttl 6 hrs)
4.2.2 FastWSServlet implementation (finished, 12 hrs, 2feb06, ttl 12 hrs)
4.2.3 FastWSClient class (finished, 20 hrs, 7feb06, ttl 20 hrs)
4.2.4 add totalMatched field to SandCollectionMessage (finished, 24 hrs, 10feb06, ttl 24 hrs)
4.2.5 add norefdisplay to FieldTagFlags (finished, 8 hrs, 13feb06, ttl 8 hrs)
4.2.6 Support for Postgres (finished, 24 hrs, 16feb06, ttl 24 hrs)
4.2.7 Refactor persistence generation (Plan, 0 hrs, 16feb06, ttl 40 hrs)
4.2.8 Cancel button clears outstanding updates (finished, 4 hrs, 16feb06, ttl 4 hrs)
4.2.9 Outdenting a task causes orphaning (finished, 6 hrs, 17feb06, ttl 6 hrs)
4.2.10 dump deployment prefix (finished, 4 hrs, 17feb06, ttl 4 hrs)
4.2.11 default to save action after editing (finished, 24 hrs, 22feb06, ttl 24 hrs)
4.2.12 Leave selection after move up/down (finished, 8 hrs, 23feb06, ttl 8 hrs)
4.2.13 Update parent collection on Add (finished, 4 hrs, 24feb06, ttl 4 hrs)
4.2.14 Recursive editing indicator (finished, 4 hrs, 24feb06, ttl 4 hrs)
4.2.15 greater than and less than escapes (closed, 1 hrs, 27feb06, ttl 1 hrs)
4.2.16 Clean up Resource display (finished, 16 hrs, 1mar06, ttl 16 hrs)
4.2.17 Reset lastModifiedReason on update (finished, 4 hrs, 1mar06, ttl 4 hrs)
4.2.18 prepulate ddmmmyy for notes subject (finished, 2 hrs, 1mar06, ttl 2 hrs)
4.2.19 Avoid recreating demo data (finished, 4 hrs, 2mar06, ttl 4 hrs)
4.2.20 Unsaved data not found for display (closed, 8 hrs, 3mar06, ttl 8 hrs)
4.2.21 restrict import/export availability (finished, 1 hrs, 3mar06, ttl 1 hrs)
4.2.22 Move CSVSerializer into apps util (finished, 3 hrs, 3mar06, ttl 3 hrs)
A plan to hold finished or closed tasks so they are out of the way but can
still be viewed for reference purposes.
To reference deleted tasks, go to the tasks screen, click the find button, and enter "1" for the status.
TOC
4.2.1 fastXMLWS servlet generator (finished 6 hrs) id: 1282
In response to a sandui project declaration type="fastXMLWS", create a servlet shell that initializes the implClass servlet (for example org.sandboss.tools.UIProcessor.FastWSServlet) with name of the class implementing the CommBridge interface (specified in the ownerNodeNameLookup param). Fixed mode is assumed.
This is analogous to the current sandui webapp declaration, but source and decl files get written to the fastXMLWS directory rather than the webapp directory. Note that there is no target for supporting this (or any other custom interfaces) in mainbuild.xml. We should provide a sample declaration for TaskHeapDemo to build THD_FastWS.war for illustration purposes.
TOC
4.2.2 FastWSServlet implementation (finished 12 hrs) id: 1283
Create and implement org.sandboss.tools.UIProcessor.FastWSServlet. This is analogous to XHTMLSandUIServlet, but handles AuthWrapper messages via HTTP POST instead. If we can factor code between these, then we should.
The FastWSServlet has a CommBridge reference for support in doing its work. In response to an HTTP GET, it just returns the contents of getBufferedMessages. It does no parameter setting or other interaction with the CommBridge. The idea is that the CommBridge is probably a node with settings that can be controlled through the config and runtime control.
TOC
4.2.3 FastWSClient class (finished 20 hrs) id: 1284
For testing, and to make it easy to write client apps, we provide a FastWSClient class that is set up with some parameters (like the WS URL, onReceive callback class, polling interval etc) which it uses to handle the calls and polling needed for communications with the server over FastWS.
To make this readily available, we generate a simple console-based standalone java app as part of the SandUI project. The app reads a SandMessage in XML format from a local file (eg SampleRequest.xml), makes the call, and then dumps the results to the screeen. If the file is empty then it mentions that fact and then dumps the result of a GET. Provide a sample ant target that sets the parameters and calls the app. That makes it easy to test external connectivity at any time.
TOC
4.2.4 add totalMatched field to SandCollectionMessage (finished 24 hrs) id: 1221
Sourceforge RFE
http://sourceforge.net/tracker/index.php?func=detail&aid=699738&group_id=46466&atid=446225
Query stats are important, but can cause overhead. From our current work we know that retrieving a count (for example a count of the total number of tasks), without the overehead of actually transferring data can be critically important for generating a stats page or workflow summary.
[Eric Parker] count(*) is important
One possibility here is to add some standard aggregate methods to SandQueryMessage to allow for returning of values. For example a "processingMode" field that defaults to NORMAL, but also allows for COUNT.
Other functions like AVG or SUM could be added and applied to the first attr in the match expression. That would allow for reasonably efficient summary type information retrieval.
[Eric Parker] 9mar05 separate function from match
We don't want to confuse the match criteria (the SandAttrVals in the query) with operands for an aggregate function. So the current thinking is to add a "function" field to each SandQueryMessage with values of
DATA: standard function, return the instances requested
COUNT: return the total count of matched instances, but no actual data
AVG: return the average of the specified operation field(s)
MAX: return the maximum of the specified operation field(s)
MIN: return the minimum value of the specified operation field(s)
That implies adding an "operationFields" string to the SandQueryMessage which holds a CSV of field names that will be used for the specified operation. So for example you could return the AVG timeEstimate for all Tasks matching the given critera.
SandCollectionMessage gets a corresponding String "result" field that holds the results as a CSV corresponding to the operation fields. Even though most of the values from aggregates functions are numeric, using a String allows us to return multiple values and is more flexible.
[Eric Parker] 9mar05 Intelligent paging wants totals
Intelligent pagination displays can make use of a total, so whenever possible we will fill that in even when the function is DATA, provided it doesn't add significant processing overhead. In other words if this is available from the stats on the query, then we fill it in, otherwise we leave the result as null and the caller will need to make a separate query with an aggregate function to retrieve the total.
TOC
4.2.5 add norefdisplay to FieldTagFlags (finished 8 hrs) id: 1293
In cases where an instance contains an extensive array of references to other objects (for example a batch processing control structure), the SANDForms display needs to be alerted that it should not retrieve each instance to generate a summary display form. While this is generally very helpful when following links between instances in the display, the overhead from these queries can be prohibitive in the batch control structure case. We need a norefdisplay tag to indicate that the summary info should not be retrieved.
TOC
4.2.6 Support for Postgres (finished 24 hrs) id: 1268
We want to be able to explicitely support Postgres. This might just work with the DefaultSQLStrutMapper, but we won't know until we try it. Given that the two major free databases right now are MySQL and Postgres, I think it's time to get Postgres happening for cash constrained deployments.
TOC
4.2.7 Refactor persistence generation (Plan 0 hrs) id: 1298
plan components:
4.2.7.1 sandpersist project declaration (finished, 16 hrs, 20feb06, ttl 16 hrs)
4.2.7.2 requiredMode parameter (finished, 16 hrs, 22feb06, ttl 16 hrs)
4.2.7.3 tablePrefix parameter (finished, 4 hrs, 22feb06, ttl 4 hrs)
4.2.7.4 autogenerate db clear script (finished, 4 hrs, 23feb06, ttl 4 hrs)
Work to clean up persistence generation.
TOC
4.2.7.1 sandpersist project declaration (finished 16 hrs) id: 1265
The persistence code we generate (both schema verification and query processing) depends on the datasource we are targeting. That kind of wrecks the existing design of a dual-mode DataManager with a development db config and a production db config co-existing off the same codebase. We need to restructure this into the dynamic build and clean things up.
Essentially this means removing the SQLStructMapper property and replacing it with a full blown sandpersist task similar to the sandui or sandpackager tasks.
The new sandpersist task will have the StructMapper to use, the persister class, the ID manager class, the converter class, the datasource spec, and import/export source. The username/password fields are gone. Even if username/password values are necessary, they are typically incorporated into the datasource string itself. And for most situations this is set up in the container config so these are just generally confusing right now.
TOC
4.2.7.2 requiredMode parameter (finished 16 hrs) id: 1299
Modify the TaskHeapDemo build.xml to show how development/production builds can be generally managed. The approach I'm thinking of is to have a "requiredMode" parameter in the sandpersist task which it checks at runtime to see if it matches a global "SANDevMode" property. So you might have two sandpersist task declarations in the "sandproject" target, one with requiredMode="development" and the other with requiredMode="production". Then we have a SANDevMode property which is set to one of these (or read from the environment or whatever makes sense). Not sure if that's the best thing, but we need something that allows switching without any significant modification to avoid typos screwing up an otherwise tested deployment. Whatever makes the most sense.
TOC
4.2.7.3 tablePrefix parameter (finished 4 hrs) id: 1300
Table prefixing is a good thing to have on by default, so the generated deployment doesn't conflict with other deployments of the same app, or have any table overlap issues. The persistence declaration has a tablePrefix parameter which is set to the deployment prefix in our example code.
TOC
4.2.7.4 autogenerate db clear script (finished 4 hrs) id: 1301
We should autogenerate a script to drop all the tables for the deployment so that it is possible to reinitialize the db from scratch. Maintaining this with the automatic prefixing will turn into an unnecessary hassle.
TOC
4.2.8 Cancel button clears outstanding updates (finished 4 hrs) id: 1272
In the default form management, clicking the cancel button should clear any outstanding updates. That helps recover from problematic update situations.
TOC
4.2.9 Outdenting a task causes orphaning (finished 6 hrs) id: 1312
Outdenting a task loses it. Moving C from A-B-C to A-C loses C. The child points to the parent but the parent does not have a reference to the child. Fix this. It's kind of a heart attack when the task disappears, and worse if you don't notice it. Need to fix this before production.
See UpdateManagerNode v1.27
TOC
4.2.10 dump deployment prefix (finished 4 hrs) id: 1321
Dump the deployment prefix out as part of the general info after the locale and language info. Then pick up on this in the transform to prefix the title so it is easy to see which heap you are working with.
TOC
4.2.11 default to save action after editing (finished 24 hrs) id: 1262
When there are outstanding edits in the UIFormContext, then the default action should be SAVE. That helps with having to use the mouse. It also avoids losing data since the current default of Cancel makes it hard to figure out what happened if you accidentally hit return. If you do extensive editing and don't remember to hit the back button on the browser, then you can lose your edits.
[Eric Parker] more description
I tested this out and in the case where there is a control available (such as when editing or adding), the focus is set to the first control (so the name text box when editing a task for example). If there is no form control available, then the focus is set to the "save" button, unless the mode is LISTING in which case it is set to "edit". This is correct behavior.
The problem arises because the browser is being smart, and in the case of an input control that does not accept the enter key (in other words anything other than a large text entry box), it chooses a button to activate as the default. This is the first button in the form. So in the case of a Plan, it adds a note, and for anything without contained components it defaults to the cancel button since it finds that first.
Putting the save button first is not enough. For example this won't work for a Plan since the button to add a note ends up being the default button.
To handle this we essentially trap the enter key being pressed in any input control that is not large text, and note that the enter key was pressed so we can set the default action appropriately.
[Eric Parker] default button in LISTING mode stays
At least in firefox, tabbing to a specific button and then hitting return is equivalent to clicking on it, so if focus is set to a button by default then there is no way to figure out that they hit the return key and attempt to do a default. Given that people can and do enter forms this way, for us to override in this case would lead to incorrect behavior.
So for LISTING mode, whatever button the browser sets the focus to will be the action that fires if you hit return.
TOC
4.2.12 Leave selection after move up/down (finished 8 hrs) id: 1311
After moving an array element up or down, leave it selected so it can be easily moved again. Having to reselect it each time you move it one spot is definitely annoying.
TOC
4.2.13 Update parent collection on Add (finished 4 hrs) id: 1324
When adding a new element and then clicking "parent", the new element isn't displayed in the collection. We need to test the new element they added against the find query they were using, and if it matches, add it to the collection. If it doesn't match, then we should disable the parent button.
Actually the find query may have been overwritten in the process of adding the new instance, so we should add the new instance to the parent collection regadless of whether it matches or not.
TOC
4.2.14 Recursive editing indicator (finished 4 hrs) id: 1267
When you are editing a Plan, and you add a new Task to the components, you can't add a Note to the new Task because you are already two levels down in editing context and that's all the current XHTMLFormAdaptor can do. Eventually the full stack UIFormAdaptor will remove this restriction, but in the meantime some kind of an indicator as to why editing is not available would be useful. Something like "save this instance before editing contained/referenced instances" would be useful. The actual text needs to be wrapped so it can be picked up and transformed.
TOC
4.2.15 greater than and less than escapes (closed 1 hrs) id: 1237
Although quotes and single quotes make it through ok, the greater than and less than characters broke in TaskHeap. I created a task named something like Task less-than dash greater-than Plan and it died in XML transformation. Figure out what's up with that and make it work.
Retested this again and it works. < and > work in the description and in the task name. Probably an encoding issue at one point that is now fixed.
TOC
4.2.16 Clean up Resource display (finished 16 hrs) id: 1318
The public key field should be hidden and not used by default. The userParams field shouldn't be showing up for display. Probably want a status field so it is possible to disable a user without deleting them.
Also added form links to struct descriptions, fixed the help file access, and added title prefixing in the display.
TOC
4.2.17 Reset lastModifiedReason on update (finished 4 hrs) id: 1326
When editing an existing instance, reset the the lastModifiedReason to the empty
string so we don't get the same text being written each time. This is especially stupid when it continues to say "Initial creation" or whatever.
TOC
4.2.18 prepulate ddmmmyy for notes subject (finished 2 hrs) id: 1319
Notes are frequently time based, so it's helpful to know when a note was added. Default the subject so it starts with "04may05 " so its easy to enter new notes with the timestamp.
TOC
4.2.19 Avoid recreating demo data (finished 4 hrs) id: 1325
The demo data gets recreated each time. Something is causing the isEquivalent check to fail and so we rewrite it on startup. The isEquivalent method only checks the base declared fields, this is being caused by the algo, which always ended up resetting the components in the main demo plan. Better now.
TOC
4.2.20 Unsaved data not found for display (closed 8 hrs) id: 1208
When creating a new instance to serve as a reference, the display can't find it and ends up showing a default instance of the same type. This is fixed after the AggregateUpdate is processed successfully, but it looks ugly in the interim and looks like an error. Have the display processing find this in the outstanding updates
[Eric Parker] works now
From all I can tell, this is now working. When I edit a Plan and add a new Task, the task is displayed before saving. Before saving it is displayed as a Task because that's what gets found in the lookup. After saving it is displayed as a PlanComponent since that is what gets retrieved for the collection. But nothing innacurate shows up so closing this out.
TOC
4.2.21 restrict import/export availability (finished 1 hrs) id: 1257
Only Resources should be authorized for import/export operations.
Since there's not a lot of reason why Readers would need to see the heap settings either, the easiest thing seems to be to simply restrict access to the Admin screen to just Resources. Did that.
TOC
4.2.22 Move CSVSerializer into apps util (finished 3 hrs) id: 1323
XMLSerializer was moved into the util directory of the last application before the deployment in the build chain. That was so the same class could be shared across multiple deployments of the same app. CSVSerialier is analogous, and it should go to the same place. Change the generator and any dependent code to move this over.
TOC
4.3 Recently completed or closed (Plan 0 hrs) id: 1335
plan components:
4.3.1 Interim save processing (closed, 8 hrs, 1feb06, ttl 8 hrs)
4.3.2 build a Java Spaces statement (finished, 8 hrs, 2feb06, ttl 8 hrs)
4.3.3 easier current plan selection (finished, 24 hrs, 7feb06, ttl 24 hrs)
4.3.4 Filter to only your assignments (closed, 8 hrs, 8feb06, ttl 8 hrs)
Placeholder for work until we figure out where it ultimately belongs.
TOC
4.3.1 Interim save processing (closed 8 hrs) id: 1235
Add an additional call to the UIFormOwner to be able to handle interim save processing. If the user is adding a reference to a new instance, we need to confirm the new instance is ok before returning to the referencing instance for the next save. If possible, do this stack-oriented interim save processing within the existing formSave UIFormOwner signature. The application needs to confirm the data at each stage.
[Eric Parker] unify save and ok processing
It is possible that we can unify the OK and SAVE actions into a single action as part of this. That would be a good thing, since this is causing more confusion than it's worth. Most of our apps simply don't use the OK action, they would just always call SAVE and figure out when it's interim work vs when the full AggregateUpdate is ready to go.
The driving force behind having two separate actions was to handle the interim save processing, allowing the user to store up multiple edits before committing them. This is the only way to get around circular referential integrity edits from a form-based UI. But in actual fact, we have usually been able to handle circular references through automation, where the necessary modifications are added to the AggregateUpdate in an UpdateManager node. I suspect at this point that any situation where this kind of automation is not possible would be indicative of bad design, and not worth having a feature to support it.
[Eric Parker] 14aug05 Save of new ref saves parent
The default UIFormManager save processing now saves the modification to the parent when the child is saved. This prevents people forgetting to do the second save which they generally found confusing. So this task is not really relevant anymore except for the potential unification of the ok and save buttons. Since most of our UIs simply hide the ok button, that's not much of an issue, and it might come in handy at some point. Closing this out.
TOC
4.3.2 build a Java Spaces statement (finished 8 hrs) id: 1252
We need a relatively concrete statement of how the SAND Messager works in Java Spaces. Added to sandservices FAQ.
TOC
4.3.3 easier current plan selection (finished 24 hrs) id: 1332
Having a current plan to move things to is great, but it would be a lot better if we could select this more easily. I might want to factor existing work into several places at once (eg "reference recycling", "phase 3 work", "hidden recycling" and "future"). Having to reselect the current plan each time as I work through a list is kind of a pain. The idea here is to remember which plans have been marked as current at some point, and then offer a drop down or some mechanism to switch between them without losing context on the current component being viewed. Not sure how to do this.
Another option is to have a selection icon for each item in the outline, with the current item noted. So small titlebar colored spheres in front of each plan, which when clicked set the current plan to the selected one. The selected plan has a large sphere in front of it that does nothing. That would move things around pretty quickly.
[Eric Parker] 04aug05 Solved through outline buttons
Handled this through two graphic buttons in the revised outline view. The first sets the current plan, and the second moves an item into the current plan. Really quick to reorganize things now. The movement is smart enough so it prepends when something is being pushed down, and appends when something is being pushed up. That saves a lot of reorganizing at the plan ordering level also.
TOC
4.3.4 Filter to only your assignments (closed 8 hrs) id: 1213
Allow the initial display to be filtered to only the stuff assigned to you.
So if you want to focus in on your work, you can.
Closing this out. If you want to find your tasks, go to the tasks screen, click find, and enter your resourceID. The idea is for everyone to see the project so it becomes a shared view of what is going on. Don't see a need for this.
TOC