Bug Feature --- ------- 5: crashing usability or functionality must-have 4: data corruption major usability enhancement or major feature 3: incorrect behavior significant 2: annoying nice-to-have 1: no plan no planNot all issues are prioritized yet.
5: Need to better document the Test DTD 4: No JavaDoc for QueryString Need to verify whether the following are implemented or not. They are all not documented. site.dtd : query-result/default site.dtd : cookie-value site.dtd : style site.dtd : stored-procedure site.dtd : required-if 3: It is still possible to get a value from JDBCQueryResult after next() returns false. I think that there is a bug in the MM JDBC ResultSet.isAfterLast method. See TJDBCQueryResult_1#countRows Test logging is pretty messy Un-prioritized: Java test (TUserSite_*) don't have a clean consistent way of destroying the SQLDatabase connection. They should probably be migrated to JUnit tests which call SQLDatabase.destroy() in the tearDown method Should verify that links referred to in the <redirect> tags actually exist Check parameters on JSP pages (session, etc) SQLDatabase.getErrorColumn doesn't work if there are unique Indexes on the table. I think the best thing to do here would be to figure out how to query the MySQL or other database for the Index information, and use that. You can't use FormElement.getValue() to get the values of parameters that can't be represented as Strings (e.g. ZIP file byte). Instead you have to use IParameterSource form.getContext().getParameterSource() enum is only supported by generate-schema-mysql.xsl validate-site.xsl may generate spurious 'cannot find table' messages if some columns in the referenced table do not have a 'displayText' element validate-site.xsl doesn't check that a query-value specified to a url-parameter actually references a valid query-value Test defining default values for 'int' parameters and make sure they are type-converted properly
5: 4: Need a consistent way to perform security checks in Beans, and redirect the user to a login screen if necessary. - There is a mix of Login redirects and Authorization errors. I think it won't usually matter b/c the page will re-direct to the login screen anyways - Would be easy to plug in now that the <page> taglib is used everywhere Definitely need a way to specify a 'query' body which is a fixed enumeration of values, e.g. true/false or 10, 20, 50, 1000 Need a better way to free pages, when a bunch of them are being used within a method. - Looks like a good way to do this would be to have a generated Page.instance([params], Map, Page parentPage) method, in which case the newly created page could use parentPage.addOwnedPage(this) to make sure it is freed when parentPage is freed Check out the Tapestry Logging page, which implements admin of log4j logging Likewise for ValidatingTextField I also like how its error messages are localized Could implement a site-map stylesheet for the site document - have locations, pages, titles, links - what kind of layout would you want to see? - site document doesn't describe static HTML links - need to add links if you want them to show up Add a 'new-record' tag to site.qjml, and validate that every column required by the table will have a value Do the same for 'update-record' Add a 'search' tag to site.qjml <search> <parameter <rootTable> <table>ChallengeMatch</table> <filter> <column>eventID</column> <operator>=</operator> <parameter-value>eventID</parameter-value> </filter> <filter> <column>eventID</column> <operator>=</operator> <parameter-value>eventID</parameter-value> </filter> <join> <table>Contestant</table> <firstColumn>id</firstColumn> <secondColumn>challengeMatchID</secondColumn> <join> <table>Avatar</table> <firstColumn>id</firstColumn> <secondColumn>challengeMatchID</secondColumn> </join> </join> <join> <table>ChallengeMatch</table> <firstColumn>id</firstColumn> <secondColumn>id</secondColumn> <join> <table>Contestant</table> <firstColumn>id</firstColumn> <secondColumn>challengeMatchID</secondColumn> <join> <table>Avatar</table> <firstColumn>avatarID</firstColumn> <secondColumn>id</secondColumn> </join> </join> </join> </rootTable> </search> Should an un-parseable date return as new Date(), or null or some other kind of error? Should have an easy way to define a list of choices as a <query>. e.g. instead of doing a database query, just enumerate the values in the site document All pages should have a 'self' link automatically. Will need to update generate-page.xsl so that links named 'self' are checked to ensure that they are 'toself', and ignored Need to verify the last-modified-id.tableName attribute value (that it is a real table) Need a way to test session values against 'null' Would be cool to have a way to test error messages, e.g. by a regular expression. Seems pretty easy to implement... Would be cool to automatically generate a Constants class for each Enum column Need to add validation for form-value How to make a unified 'value' element, and have link-value, literal-value, cookie-value, etc all be 'types of values' - Quick4 should make this possible. I think it can be done with Quick3 even Implement an 'java-expr-value' element that uses JEL to compute a dynamic expression (for example, <java-expr-value>new Date()</java-expr-value> Add 'date' (not DATETIME) specification to schema.qjml and SQL generation Support checking/requiring a user login in the site XML Add 'fileName' attribute to pages so that the name of the file can be different than the name of the element Handle References properly in test Suite - meaning generate test data properly for column references Check and see if color=red is standard HTML (FormElement.renderLabel) Add & use Page.getTitle() Add Context.include(Page) or Page.writeHeader() & Page.writeFooter() ( or both ) Implement ILocation.getURL() Page.java : and preferences.jsp : validate that all required input parameters have been supplied to the page QueryResult.java a lot of testing of type conversion and access Parameter.java : has notion of 'value' and multiple 'defaultValue's. This may be the way that all the Value objects should work Value.java, FormElement.java, Query.java : how does this relate to allowing a prioritized list of possible values (e.g. prefer Cookie, then Query) how about multi-valued values (e.g. an IN clause) generate-query.xsl : share getColumnName & getTableName with validate-site dovetail.qjml : replace 'password=true' syntax with the ability to define and use element rendering templates generate-form.xsl : better logging of event processing generate typed convenience methods for getting parameter values (e.g. getUserIDValue()) generate-form.xsl : Implement base-url actions DispatchServlet.java : Add the referer URL to DispatchServlet errors. See issue for getReferer Site.handleException : How to handle errors in Site.handleException? Have e-mail address of administrator? Mail exception to administrator? Specify error message in the Site XML? validate-site.xsl : Check that none of the Submit names conflict share getColumnName & getTableName with generate-query Maybe allow query elements to be defined on locations? Generate an output XML document that describes the errors, instead of terminating on error agonism.util.Utils : Reconcile the Utils trim(), nullify() methods
POSTPONEDovetail doesn't support multiple options for a parameter value, e.g. you can't specify muliple ways that a parameter or url-parameter value can be determined - This is low priority for now, because a page parameter may have a default, which serves as a secondary way to provide a value for the url-parameter DuplicateKeyException and MissingValueException should be checked exceptions - The framework handles these almost all the time so it's not a big deal. They are not exposed to the API users Make the required form-element rendering customizable through a properties file or something - Done with the taglib. I guess the story is that you can write your own taglibs; they're not complicated ** Doesn't make much sense to have 'link' under url-parameter. should be link-value Need a way to supply values for database insertion other than hidden form-elements. The problem with form-elements is that the values have to be known at page-rendering time. So for example you can't use them to refer to row IDs that have not been created (e.g. LAST_INSERT_ID()) - The workaround for this is to use a session-value, or define a query that queries for e.g. LAST_INSERT_ID Implement checking for required parameters in a page (low-priority b/c this should be checked by validate.xsl) SQLDatabase.java : implement SafeConnection that releases itself on finalize() resolve unique lookup of pages & locations (e.g. page 'games' within location 'games') - requiring unique names makes thigs so much easier
VERIFYProof-Read: JavaDoc for agonism.dovetail.taglibs.Text JavaDoc for agonism.dovetail.site.Form Updating a duplicate value using UpdateRecord (should get a nice error, just getting a SQLException right now) last-modified-id element Test using AbstractInstance.Update Exceptions that show up in form tests aren't properly propagated to the system output Running a test with a ZIP 'isFile' form element test that you can't use FormElement.getValue() to access the value, b/c FormElement does a String conversion of the data The behavior of 'default' elements in parameter-value, when the default does not evaluate to anything (e.g. if default is a session variable that may not be set) form-value Why does validate-site.xsl fail sometimes if displayText is not specified? Add Page#getTitle NewRecord.java Column.comment duplicate keys missing values Setting NOT NULL string columns to empty string (""). What to do about the fact that the Value objects return "" as a default when there is no value? FormElement.renderRadioInput(String) test exceptions (e.g. assertions) thrown by Actions get the type of a reference column A FormElement with a value specified in the site document will have a value (which can be inserted into the database) even if the user doesn't supply a value. For example, the radio buttons on survey-ask.jsp checkbox values stay checked when un-checked by the user and the form is rejected - I think this has been fixed by null-ing the FORM_DATA in the session before re-saving it after a failed request
DONEFR  : Add 'length' to text input *** Need to make an HTTP test for Dovetail's ability to save user input when a form error occurs - Dovetail doesn't do anything special now; since the pages are self-posting, the user input is in the FORM parameters Have the ConnectionHelper record the stack frame when it was created, so that it can print it out if it is freed in finalize() Value.java, FormElement.java, Query.java : how should missing values be reported, as "" or null? what is the protocol & what is an error? - Have basically reconciled this. Value returns null if the supplied raw value is not parseable. FormElement always returns an empty string if the value is null, so that HTML will render nicely (e.g. won't have the string 'null' written into it) DB seems to enjoy stuffing bogus values into the database, e.g. unparseable integers and dates - Changed Insert and Update to do type-conversion and null-checking on parameter values - Before, an empty String was being passed as an int or Date parameter, and the driver was doing funky things with it Page.java : implement a free() method that will free all the page resources If there are two forms on a page, and you submit one with errors, then the other with no errors, and return to the page, the errors will still show up b/c Form only removes its own errors in postProcess, not all errors If you submit an invalid date, the form-element is re-populated with the wrong representation (it is not re-formatted back into the right String) Why aren't the temp files from DoveTail2Java being deleted properly? - temp files are no longer generated Add a request-value tag to the site DTD that can be used to access request values. This would be used to construct links that use newly created row IDs - Have the last-modified-id tag which solves this problem specificall Change form processing so that forms post to themselves * - Remove the FORM_DATA_KEY session variable, b/c all posted values will be in form parameters * - Remove the FORM_ERROR_KEY, b/c the request will be using the same IRequestContext which already has the getErrors() collection * - Don't redirect when an error occurs * - Add a page.process(), page.hasBeenRedirected() methods which should be invoked by all JSP pages * - Don't post PAGE_NAME_INPUT_NAME * - Don't need to set the agonism.dovetail.IFormData request attribute, b/c the default HttpRequestContext constructor should work fine - Basically the page should just find out which form has been posted to, and process it. Then it should return true from hasBeenRedirected() if there were any redirections made. - Could use the Form.preProcess method to do authentication Test the fancy connection stuff validate-site.xsl : Check that none of the form-parameter names conflict check that form-element and database types match Check that all query names with in a location are unique (b/c they will generate the same code) Implement query parameter checking for links Implement checking parameters in links to make sure that everything that is required is there validating no conflicts of page/location names Test UpdateRecord Implement 'this' as a valid page-ref, so that it is easy to link a page back to itself (e.g. for returnToURL) Make a page-ref or link automatically handle passing parameters to a page that are passed into the page? Implement testing of forms Test DuplicateKeyException with the Column and Value filled it Incorporate redirection after form processing as a standard action test : add tests for register.jsp Form.java : looks like getReferer doesn't include the query parameters in the URL. That could be a problem. Can probably use HttpServletRequest.getQueryString, URL-encode it, and stick it in a form parameter ( I took this to mean that the form submission should include the query parameters passed to the form ) Link.java : Render Link URL parameters run t-usersite-2.xml Move NewRecord.java from .db to .site package test.db.TDuplicateKeyException_1 test/xml/t-usersite-2.xml agonism.dovetail.test.FormTest Value.java : can Boolean.valueOf throw an exception? no render checkbox input Use Insert & MissingValueException from Dovetail Support multiple values in a url-parameter (e.g. returnToURL=/games/updategamecode.jsp?challengeID=<id>) How to specify a default for type.size attribute? move IParameterSource to the db package Either support multiple schemas in the tests, or merge the test files You don't really know how weak references are supposed to work. test getColumnName when columnName='' QueryValue : implement used by Value.parse tested by TUserSite_3 Column.java : implement a getTypeID() method that will do the right thing wrt references etc - pretty much have this with site.Type.parseType DoveTail2Java : move to agonism/dovetail/util QueryResult.java implement getType implement getString, getInt, getFloat, etc need to implement getting the data type from the Database schema Value.java Blob type is not supported yet FormElement.java : it's a little strange that getValue() is used both for populating form inputs and for running actions on the back end - oh well get the type from a Database description generate-query.xsl : implement add methods for getting typed values fix getting the $column generate-site.xsl : check the page names of Form and Queries when constructing them implement newQuery Implement a standard way to render form errors (basically the code that is used in each of the JSP pages that loops through them) IRequestContext.java : Add error messages to IRequestContext Form.java, generate-form.java, rendering form parameters : How to store the user's form input between screens? Need to store some named data in the session for some reason: - rs.beforeFirst(); rs.isBeforeFirst(); is returning true for an empty rs - changed to if ( rs.next() ) Form.process, generate-form.xsl : What to do about Form.process? Leave empty, make abstract? Form.process is an empty method. It is over-ridden by the generated Form classes