flash/src/ReadTab.mxml

<?xml version="1.0"?>
<mx:Canvas 
  xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:word="*"
  implements="mx.rpc.IResponder"
  label="Read">

  <mx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.rpc.AsyncToken;
      import mx.rpc.events.ResultEvent;
      import hessian.mxml.HessianService;

      [Bindable]
      private var _poems:ArrayCollection = new ArrayCollection();
      private var _service:HessianService;

      public function refresh():void
      {
        var token:AsyncToken = _service.getRecent.send();
        token.addResponder(this);
      }

      public function result(data:Object):void
      {
        var event:ResultEvent = data as ResultEvent;
        var poems:Array = new Array();
        var index:int = 1;

        for each(var wordSet:Object in event.result) {
          var poem:Object = new Object();
          poem.label = "Poem " + index + " (" + wordSet._submitter + ")";
          poem.wordSprites = new Array();

          for each (var wordObject:Object in wordSet._words) {
            var wordSprite:WordSprite = new WordSprite();
            var value:String = 
              WordValue.enumValueToString(wordObject._value.name);

            var word:Word = new Word(value);
            word._x = wordObject._x;
            word._y = wordObject._y;

            wordSprite.word = word;
            wordSprite.readOnly = true;

            poem.wordSprites.push(wordSprite);
          }

          index++;
          poems.push(poem);
        }

        _poems.source = poems;
      }

      public function fault(data:Object):void
      {
        var event:ResultEvent = data as ResultEvent;
      }

      public function setPoem(poem:Object):void
      {
        canvas.removeAllChildren();

        for each (var wordSprite:WordSprite in poem.wordSprites) 
          canvas.addChild(wordSprite);
      }

      public function get service():HessianService
      {
        return _service;
      }

      public function set service(value:HessianService):void
      {
        _service = value;
      }
    ]]>
  </mx:Script>

  <mx:HBox y="0" height="200" width="100%">
    <mx:List 
      id="list" 
      height="100%" width="50%" 
      dataProvider="{_poems}"
      change="setPoem(List(event.target).selectedItem)"/>
    <mx:VRule height="100%"/>
    <mx:Canvas id="canvas" height="100%" width="50%"/>
  </mx:HBox>

  <mx:HRule x="0" y="0" width="100%"/>
  <mx:HRule x="0" y="200" width="100%"/>

  <mx:HBox y="202" width="100%" horizontalAlign="center">
    <mx:Button label="Get Poems from Server" click="refresh()"/>
  </mx:HBox>

</mx:Canvas>