The Code Style site has evolved by gradual refinement and accumulation of features and content. This review is part of a fully backdated site log and archive that sheds light on when, why and how particular features were implemented.
This log is sometimes updated several times per week, sometimes with a long overdue backlog of items. Many log entries refer to the Code Style Java package that delivers the servlet services and utilities used to manage this site.
Subscribe to the news feed for this log:
Completed a working version of the FAQ data editor application and cleared a big backlog of answers across most sections, as follows.
Removed the sortIndex argument from factory methods for FaqSection, FaqCategory and FaqQuestion and added internal counters to assign sequential indices regardless of the source value. The FaqDataEditor re-saves any instances that are assigned different values from those stored. Added a getNextSortIndex method to the FaqNode interface with implementations in each concrete class.
Added a fixed local output path to the local FAQ menu generator script, and created a new PSFTP batch script for updating all FAQ documents and include files.
Created a static FeedDownloader class to get a paired sets of Web feeds from the Web Feed Generator and their source pages for use as test files.
Technorati tags: FAQ, Java, servlets, fonts, PSFTP.
Corrected the test class for the W3CDTF utility class because it was not correctly accounting for the day roll over in Greenwich Mean Time (GMT). When the test was run after 11pm British Summer Time (BST), the day of the month test failed because the expected value was the "current" day. Created two replacement test cases to that use Calendar mutator methods to set and test explicit dates in the summer time and mean time periods. The BST version checks the post 11pm roll over case.
Technorati tags: W3CDTF, GMT, BST.
Added a button panel and card layout to the FaqDataEditor GUI application to switch the button options available for different nodes in the FAQ tree. Added a createButtonPanels helper method, and updateButtonPanel method that is called whenever the currently selected node changes. Also added new methods to prepare and display new Section, Category and Question types for input, and add them to the tree when saved. Added a trim() call to the initial string values the FAQ objects to remove surplus white space from the database values.
Checked in a working draft implementation of a Ping interface, PingManager and concrete implementations TechnoratiPing, Syndic8Ping, and abstract superclasses AbstractPing and AbstractXmlRpcPing.
Technorati tags: FAQ, CardLayout.
Added boolean marker arguments to the new instance methods for Question, Category, Section types to track status against the database store. Added save(Connection) and isStored methods to the FaqNode interface.
Created a new AbstractFaqNode class to handle common features, including the sort index value, accessor and compareTo implementation. Added a generic save method that hands-off calls to abstract template methods doInsert or doUpdate according to isStored() status. Also added a set of methods to deal with changes to a node's primary key value; getPrimaryKey(), setPrimaryKey(String), hasPrimaryKeyChange() and updatePrimaryKey().
Implemented doInsert and doUpdate methods in each concrete FaqNode class, with secondary update to sub-sections' parent name references, and added primary key value methods.
Updated the FaqDataEditor class with an edit panel to display the currently selected FAQ node, and a Save button that calls the save method on the currently selected node. Amended the valueChanged method to get the current user object and assign it to the currentNode field. Also changed the createFaqNodes method to display the first section in the edit panel.
Created an AbstractSortableJPanel as a superclass for the FAQ types. The sort index is held as a LabelledTextField with an added getInt() method to parse the text value of the field. Switched String storage in FaqSection, FaqCategory and FaqQuestion to use LabelledTextField references and adapted all accessor methods. Added setField methods to all FAQ types to set the GridLayout for all the input fields. The AbstractSortableJPanel class has a protected getSortIndexJPanel method so that the field can be laid out in subclasses.
Altered the constraints on the category and question database tables' foreign key constraints so that any changes are cascaded.
Completed a first draft XmlRpcEchoServlet that copies the last HTTP POST submission to the output of the next GET request for testing ping requests.
Technorati tags: XML RPC, ping.
Simplified the main FAQ index page and moved the very frequently asked questions to the top of the page. Created a new table of front-end and back-end FAQ links for a more compact, directed navigation. This temporarily supersedes the automatically generated version. Minimised the news feed link in the FAQ standfirst.
Removed feint Code Style logo from menu box panels and replaced with a silvery grey tint.
.MenuBox {
background: #f9f9f9;
color: #000;
border: solid 1px #CCC;
}
Split the rules for Box and MenuBox classes in CSSStdLayoutCommon.css so they can be treated differently:
.MenuBox {
padding: 1% 2%;
margin-top: 1em;
margin-bottom: 1em;
}
.Box {
margin-top: 1em;
margin-bottom: 1em;
}
Added new selectors to grouped selectors in CSStdLiveryCommon.css and CSStdLiveryStrict.css to make label elements in Box class divisions look the same as table heading elements.
ContentHandler for HTML parsing, 6th June 2006
Added a default constructor to the FeedChannel class, and a setTitle(String) method. Adopted a nested element handler structure in HtmlContentHandler with a new set of ElementHandler types. Created a basic test class for FeedExtractionFilter and made a compatibility tweak to MockTransformerFactory.
Technorati tags: SAX, ContentHandler.
Corrected a NullPointerException in CombinedLogParser when the request line does not include the HTTP protocol and version. Adds a simple check that the string exists. If not the problem is reported and a ParseException thrown. Lines with parse exceptions are ignored.
Technorati tags: log parser, combined log format.
These backdated pages record detailed changes to the Code Style Web site since July 2000, when development first got underway. Some pages may refer to documents or features that have since changed or are no longer part of the site, but the archive is checked to ensure there are no dead links.
For a summary overview, see the annotated site log contents.