<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2006 Renaun Erickson (http://renaun.com)

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

@ignore
-->
<!--

This example RSS Reader is specific to reading the Macromedia XML News Aggregator (MXNA).
MXNA can be found here http://weblogs.macromedia.com/mxna/.

This example shows how to load external XML data (ie: RSS feed or Atom feed) and parse through the data. 
It display the data using a repeatar class and uses navigateToUrl to provide links back to the 
blog posts themselves.

To see the application run go to http://renaun.com/flex2/MXNARSSReader/
To see the application's source code go to http://renaun.com/flex2/MXNARSSReader/srcview/

-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        initialize="loadXML()"
        width="100%" height="100%"
        paddingLeft="5" paddingRight="5" paddingBottom="5" paddingTop="5"
        horizontalAlign="left"
        layout="vertical" viewSourceURL="srcview/index.html">
        
    <mx:Script>
        <![CDATA[
            import mx.formatters.DateFormatter;
            import flash.net.navigateToURL;
            import mx.collections.XMLListCollection;
            
            [Bindable]
            private var externalXML:XMLListCollection;
            
            private function loadXML():void {        
                var loader:URLLoader = new URLLoader();
                var request:URLRequest = new URLRequest("http://weblogs.macromedia.com/mxna/xml/rss.cfm?query=byCategory&languages=1&categoryId=5");
                loader.load(request);
                loader.addEventListener(Event.COMPLETE, onComplete);
            }
            
            private function onComplete(event:Event):void {
                
                var loader:URLLoader = URLLoader(event.target);
            
                var qnItems:QName = new QName(mxna, "item");    
                var dataXML:XML = XML( loader.data );
                dataXML.addNamespace( mxna );
                var base:XMLList = dataXML.descendants( qnItems );
            
                externalXML = new XMLListCollection( base );
                
            }
            
            private var mxna:Namespace = new Namespace("http://purl.org/rss/1.0/");
            private var dc:Namespace = new Namespace("http://purl.org/dc/elements/1.1/");
            [Bindable]
            private var qnTitle:QName = new QName(mxna, "title");
            [Bindable]    
            private var qnLink:QName = new QName(mxna, "link");
            [Bindable]
            private var qnDescription:QName = new QName(mxna, "description");
            [Bindable]
            private var qnCreator:QName = new QName(dc, "creator");
            [Bindable]
            private var qnDate:QName = new QName(dc, "date");
            [Bindable]
            private var qnSubject:QName = new QName(dc, "subject");            
            private function getField( itemXML:XML, field:QName ):String {
                if( field == qnDate ) {
                    var df:DateFormatter = new DateFormatter();
                    df.formatString = "(YYYY.MM.DD)";
                    return df.format( itemXML.descendants( field ).toString() );
                }
                return itemXML.descendants( field ).toString();
            }

            private function processURL( url:String ):void {
                var request:URLRequest = new URLRequest(url);
                navigateToURL( request );
            }
            

        ]]>
    </mx:Script>
    <mx:Panel layout="vertical"
        title="Adobe MXNA Flex Feed"
        width="100%" height="100%" 
        paddingLeft="5" paddingRight="5" paddingBottom="5" paddingTop="5">

        <mx:Repeater width="100%"
            id="newsItems"
            dataProvider="{ externalXML }">
            <mx:VBox width="100%" horizontalAlign="left" creationCompleteEffect="Fade">
                <mx:LinkButton id="lbtn"
                    textAlign="left"
                    label="{ getField( XML( newsItems.currentItem ), qnTitle ) }" 
                    click="processURL( getField( XML( event.currentTarget.getRepeaterItem() ), qnLink ) )" />
                <mx:TextArea paddingLeft="10" paddingRight="10" editable="false"
                    width="98%" cornerRadius="6" height="50"
                    backgroundColor="0xFAFAFA"
                    htmlText="{ getField( XML( newsItems.currentItem ), qnDescription ) }" ></mx:TextArea>
                <mx:Text paddingRight="10" 
                    width="98%" 
                    textAlign="right"
                    text="{ getField( XML( newsItems.currentItem ), qnCreator ) + ' ' + getField( XML( newsItems.currentItem ), qnDate )  + ' ' + getField( XML( newsItems.currentItem ), qnSubject ) }" />                    
            </mx:VBox>
        </mx:Repeater>
    </mx:Panel>
</mx:Application>