<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,7 @@
+Features:
+* Integrate user authentication on the Flex client and the GAE server.
+* Use the RESTful convention.
+
 Study:
 * python-rest - http://code.google.com/p/python-rest/
 * Bloog (RESTful design) - http://bloog.billkatz.com/
@@ -5,3 +9,6 @@ Study:
 * http://aralbalkan.com/1307
 * PHP RIA SDK by Adobe - http://code.google.com/p/adobe-php-sdk/
 * Ruby on Rails RIA SDK by Adobe - http://groups.google.com/group/adobe-rubyonrails-ria-sdk
+* RubyAMF - http://code.google.com/p/rubyamf/
+* php_ria_sdk_by_adobe_070108\php_ria_sdk_by_adobe\samples\flex\amfphp
+* RubyOnRailsRIASDKbyAdobe\RubyOnRailsRIASDKbyAdobe\samples\flex\flex_ror_sdk_issuetracker\Flex Source\flex_issuetracker</diff>
      <filename>TODO.txt</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>flex-client/bin-debug/main.swf</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,69 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot;&gt;
-&lt;mx:RemoteObject id=&quot;remoteObj&quot; endpoint=&quot;http://localhost:8080/&quot;
-	destination=&quot;EchoService&quot;
-	result=&quot;resultField.text = event.toString(); outputField.text = event.result.toString();&quot; 
-	fault=&quot;resultField.text = event.toString()&quot;/&gt;
-	&lt;mx:Label x=&quot;10&quot; y=&quot;10&quot; text=&quot;Input:&quot;/&gt;
-	&lt;mx:TextInput x=&quot;70&quot; y=&quot;10&quot; id=&quot;inputField&quot;/&gt;
-	&lt;mx:Button x=&quot;238&quot; y=&quot;10&quot; label=&quot;Submit&quot; click=&quot;remoteObj.echo_upper(inputField.text)&quot;/&gt;
-	&lt;mx:Label x=&quot;10&quot; y=&quot;42&quot; text=&quot;Output:&quot;/&gt;
-	&lt;mx:TextInput x=&quot;70&quot; y=&quot;40&quot; width=&quot;652&quot; id=&quot;outputField&quot; editable=&quot;false&quot;/&gt;
-	&lt;mx:Label x=&quot;10&quot; y=&quot;71&quot; text=&quot;Result:&quot;/&gt;
-	&lt;mx:TextArea x=&quot;70&quot; y=&quot;70&quot; width=&quot;652&quot; height=&quot;332&quot; id=&quot;resultField&quot; editable=&quot;false&quot;/&gt;
+&lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot; creationComplete=&quot;onInit()&quot;&gt;
+    &lt;mx:Script&gt;
+   	&lt;![CDATA[
+		import flash.net.Responder;
+		import mx.controls.Alert;
+
+   		[Bindable]
+		public var dataProvider:Array;
+
+		[Bindable]
+		public var statusMsg:String;
+
+		public var gateway:NetConnection;
+		
+		public function onInit():void
+   		{
+			statusMsg = &quot;Loading data...&quot;;
+   			gateway = new NetConnection();
+   			gateway.connect(&quot;http://localhost:8080/&quot;);
+			getProjects();
+  		}
+  		
+		public function getProjects():void {
+			gateway.call(&quot;ProjectService.get_all&quot;, new Responder(getResult, onFault));
+		}
+
+		public function getResult(result:Array):void {
+			dataProvider = result;
+			statusMsg = &quot;Data loaded.&quot;;
+		}
+
+		public function submitProject():void {
+			var newProject:Object = new Object();
+			newProject.code = project_code.text;
+			newProject.name = project_name.text;
+			gateway.call(&quot;ProjectService.insert&quot;, new Responder(null, onFault), newProject);
+			getProjects();
+		}
+
+		public function onFault(info:Object):void {
+			statusMsg = info.toString();
+		}
+   	]]&gt;
+    &lt;/mx:Script&gt;
+    
+	&lt;mx:DataGrid id=&quot;dgProjects&quot; x=&quot;10&quot; y=&quot;10&quot; dataProvider=&quot;{dataProvider}&quot; width=&quot;356&quot; height=&quot;183&quot;&gt;
+		&lt;mx:columns&gt;
+			&lt;mx:DataGridColumn headerText=&quot;Code&quot; dataField=&quot;code&quot;/&gt;
+			&lt;mx:DataGridColumn headerText=&quot;Name&quot; dataField=&quot;name&quot;/&gt;
+		&lt;/mx:columns&gt;
+	&lt;/mx:DataGrid&gt;
+	&lt;mx:Button x=&quot;374&quot; y=&quot;11&quot; label=&quot;Reload&quot; click=&quot;onInit()&quot;/&gt;
+	&lt;mx:Label x=&quot;10&quot; y=&quot;203&quot; text=&quot;Created at&quot;/&gt;
+	&lt;mx:TextInput x=&quot;103&quot; y=&quot;201&quot; id=&quot;selected_created_at&quot; text=&quot;{dgProjects.selectedItem.created_at}&quot; width=&quot;263&quot;/&gt;
+    &lt;mx:Form x=&quot;10&quot; y=&quot;240&quot; width=&quot;356&quot; borderStyle=&quot;solid&quot; cornerRadius=&quot;2&quot;&gt;
+      &lt;mx:FormHeading label=&quot;New Project&quot;/&gt;
+      &lt;mx:HBox&gt;
+         &lt;mx:Label text=&quot;Code&quot;/&gt;
+         &lt;mx:TextInput id=&quot;project_code&quot; width=&quot;159&quot;/&gt;
+      &lt;/mx:HBox&gt;
+      &lt;mx:HBox&gt;
+         &lt;mx:Label text=&quot;Name&quot;/&gt;
+         &lt;mx:TextInput id=&quot;project_name&quot;/&gt;
+      &lt;/mx:HBox&gt;
+      &lt;mx:Button label=&quot;Insert&quot; click=&quot;submitProject()&quot;/&gt;
+    &lt;/mx:Form&gt;
+	&lt;mx:Label x=&quot;10&quot; y=&quot;384&quot; text=&quot;{statusMsg}&quot; width=&quot;356&quot;/&gt;
 &lt;/mx:Application&gt;</diff>
      <filename>flex-client/src/main.mxml</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,11 @@ def test():
 def insert(code, name):
     gw = RemotingService('http://localhost:8080/')
     service = gw.getService('ProjectService')
-    service.insert(int(code), name)
+    new_project = {
+        &quot;code&quot;: int(code),
+        &quot;name&quot;: name,
+    }
+    service.insert(new_project)
 
 def get(code):
     gw = RemotingService('http://localhost:8080/')</diff>
      <filename>python-client/client.py</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,4 @@
+import logging
 from google.appengine.ext import db
 
 class Project(db.Model):
@@ -7,14 +8,17 @@ class Project(db.Model):
 
 class ProjectService:
     def get(self, code):
+        logging.debug('get %s' % (code))
         project = Project.gql(&quot;WHERE code = :1&quot;, code).get()
         return project
         
-    def insert(self, code, name):
-        project = Project()
-        project.code = code
-        project.name = name
-        project.put()
+    def insert(self, project):
+        logging.debug('insert %s' % (project))
+        new_project = Project()
+        new_project.code = int(project.code)
+        new_project.name = project.name
+        new_project.put()
 
     def get_all(self):
+        logging.debug('get_all')
         return Project.all().fetch(1000)</diff>
      <filename>server/services/ProjectService.py</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8cc7ba9d924b079bd215eb5790e2c6048b02cb4e</id>
    </parent>
  </parents>
  <author>
    <name>Fernando Correia</name>
    <email>fernandoacorreia@gmail.com</email>
  </author>
  <url>http://github.com/fernandoacorreia/flex-and-python-test/commit/b6e7458d6ecb037f1dc1293fccc2a7d3c15a5b93</url>
  <id>b6e7458d6ecb037f1dc1293fccc2a7d3c15a5b93</id>
  <committed-date>2008-07-17T18:16:16-07:00</committed-date>
  <authored-date>2008-07-17T18:16:16-07:00</authored-date>
  <message>Flex client</message>
  <tree>a141b13eda0a2d72a0c94247bd0dfea9bde60d1e</tree>
  <committer>
    <name>Fernando Correia</name>
    <email>fernandoacorreia@gmail.com</email>
  </committer>
</commit>
