package votorola.a.register; // Copyright 2008, Michael Allan. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Votorola Software"), to deal in the Votorola Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicence, and/or sell copies of the Votorola Software, and to permit persons to whom the Votorola Software is furnished to do so, subject to the following conditions: The preceding copyright notice and this permission notice shall be included in all copies or substantial portions of the Votorola Software. THE VOTOROLA SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE VOTOROLA SOFTWARE OR THE USE OR OTHER DEALINGS IN THE VOTOROLA SOFTWARE. /** A script context for configuring the indexing of a voter list that is currently being * compiled. Indexing is the penultimate step in compiling the list. It involves * constructing instances of this context, one for each list node, and passing them to * the register's {@linkplain Register#listScript() list script}. The list */ public class ListIndexingContext { /** Partially constructs a ListIndexingContext. * * @see #set(ListNodeC) */ ListIndexingContext() {} /** Constructs a ListIndexingContext. * * @param listNode the list node to be indexed - its configurable fields * will be set to default values, per {@linkplain #listNode() listNode}() */ public ListIndexingContext( final ListNodeC listNode ) { set( listNode ); } // ------------------------------------------------------------------------------------ /** The voter's node in the list. It is fully defined, except for its: *
    *
  1. * {@linkplain ListNode#getBar() bar} - The bar is set to a default that bars * the voter owing to a misconfiguration error. You must explicity overwrite * this default, or clear it by setting it to null. *
  2. *
  3. * {@linkplain ListNode#getNeighbourhoodPath() neighbourhoodPath} - The path * is set to a default of "" (root leaf). You must set this to a non-empty * path, or the voter will automatically be barred from the list. *
  4. *
  5. * {@linkplain ListNode#doubterCount() doubterCount} - The count * is not guaranteed to be accurate at this point. *
  6. *
*/ public ListNodeC listNode() { return listNode; } private ListNodeC listNode; //// P a c k a g e - P r i v a t e /////////////////////////////////////////////////////// /** Sets the fields of this context, for reusing it repeatedly. * * @param listNode the list node to be indexed - its configurable fields * will be set to default values, per {@linkplain #listNode() listNode}() * * @return this context */ ListIndexingContext set( final ListNodeC listNode ) { this.listNode = listNode; listNode.setBar( "Eligibility unknown. The administrator's configuration script (list.js) " + "has failed to specify the eligibility of voter " + listNode.voterEmail() + ". " + "It has not called ListIndexingContext.listNode().setBar()." ); listNode.setNeighbourhoodPath( "" ); return this; } }