SampleSyncAdapter sample code.
diff --git a/samples/SampleSyncAdapter/samplesyncadapter_server/dashboard.py b/samples/SampleSyncAdapter/samplesyncadapter_server/dashboard.py
new file mode 100644
index 0000000..c986f7e
--- /dev/null
+++ b/samples/SampleSyncAdapter/samplesyncadapter_server/dashboard.py
@@ -0,0 +1,273 @@
+#!/usr/bin/python2.5
+
+# Copyright (C) 2010 The Android Open Source Project
+# 
+# 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.
+
+"""Defines Django forms for inserting/updating/viewing data
+   to/from SampleSyncAdapter datastore."""
+
+import cgi
+import datetime
+import os
+
+from google.appengine.ext import db
+from google.appengine.ext import webapp
+from google.appengine.ext.webapp import template
+from google.appengine.ext.db import djangoforms
+from model import datastore
+
+import wsgiref.handlers
+
+
+class UserForm(djangoforms.ModelForm):
+  """Represents django form for entering user info."""
+
+  class Meta:
+    model = datastore.User
+
+
+class UserInsertPage(webapp.RequestHandler):
+  """Inserts new users. GET presents a blank form. POST processes it."""
+
+  def get(self):
+    self.response.out.write('<html><body>'
+                            '<form method="POST" '
+                            'action="/add_user">'
+                            '<table>')
+    # This generates our shopping list form and writes it in the response
+    self.response.out.write(UserForm())
+    self.response.out.write('</table>'
+                            '<input type="submit">'
+                            '</form></body></html>')
+
+  def post(self):
+    data = UserForm(data=self.request.POST)
+    if data.is_valid():
+      # Save the data, and redirect to the view page
+      entity = data.save(commit=False)
+      entity.put()
+      self.redirect('/users')
+    else:
+      # Reprint the form
+      self.response.out.write('<html><body>'
+                              '<form method="POST" '
+                              'action="/">'
+                              '<table>')
+      self.response.out.write(data)
+      self.response.out.write('</table>'
+                              '<input type="submit">'
+                              '</form></body></html>')
+
+
+class UserEditPage(webapp.RequestHandler):
+  """Edits users. GET presents a form prefilled with user info
+     from datastore. POST processes it."""
+
+  def get(self):
+    id = int(self.request.get('user'))
+    user = datastore.User.get(db.Key.from_path('User', id))
+    self.response.out.write('<html><body>'
+                            '<form method="POST" '
+                            'action="/edit_user">'
+                            '<table>')
+    # This generates our shopping list form and writes it in the response
+    self.response.out.write(UserForm(instance=user))
+    self.response.out.write('</table>'
+                            '<input type="hidden" name="_id" value="%s">'
+                            '<input type="submit">'
+                            '</form></body></html>' % id)
+
+  def post(self):
+    id = int(self.request.get('_id'))
+    user = datastore.User.get(db.Key.from_path('User', id))
+    data = UserForm(data=self.request.POST, instance=user)
+    if data.is_valid():
+      # Save the data, and redirect to the view page
+      entity = data.save(commit=False)
+      entity.updated = datetime.datetime.utcnow()
+      entity.put()
+      self.redirect('/users')
+    else:
+      # Reprint the form
+      self.response.out.write('<html><body>'
+                              '<form method="POST" '
+                              'action="/edit_user">'
+                              '<table>')
+      self.response.out.write(data)
+      self.response.out.write('</table>'
+                              '<input type="hidden" name="_id" value="%s">'
+                              '<input type="submit">'
+                              '</form></body></html>' % id)
+
+
+class UsersListPage(webapp.RequestHandler):
+  """Lists all Users. In addition displays links for editing user info,
+     viewing user's friends and adding new users."""
+
+  def get(self):
+    users = datastore.User.all()
+    template_values = {
+        'users': users
+        }
+
+    path = os.path.join(os.path.dirname(__file__), 'templates', 'users.html')
+    self.response.out.write(template.render(path, template_values))
+
+
+class UserCredentialsForm(djangoforms.ModelForm):
+  """Represents django form for entering user's credentials."""
+
+  class Meta:
+    model = datastore.UserCredentials
+
+
+class UserCredentialsInsertPage(webapp.RequestHandler):
+  """Inserts user credentials. GET shows a blank form, POST processes it."""
+
+  def get(self):
+    self.response.out.write('<html><body>'
+                            '<form method="POST" '
+                            'action="/add_credentials">'
+                            '<table>')
+    # This generates our shopping list form and writes it in the response
+    self.response.out.write(UserCredentialsForm())
+    self.response.out.write('</table>'
+                            '<input type="submit">'
+                            '</form></body></html>')
+
+  def post(self):
+    data = UserCredentialsForm(data=self.request.POST)
+    if data.is_valid():
+      # Save the data, and redirect to the view page
+      entity = data.save(commit=False)
+      entity.put()
+      self.redirect('/users')
+    else:
+      # Reprint the form
+      self.response.out.write('<html><body>'
+                              '<form method="POST" '
+                              'action="/add_credentials">'
+                              '<table>')
+      self.response.out.write(data)
+      self.response.out.write('</table>'
+                              '<input type="submit">'
+                              '</form></body></html>')
+
+
+class UserFriendsForm(djangoforms.ModelForm):
+  """Represents django form for entering user's friends."""
+
+  class Meta:
+    model = datastore.UserFriends
+    exclude = ['deleted', 'username']
+
+
+class UserFriendsInsertPage(webapp.RequestHandler):
+  """Inserts user's new friends. GET shows a blank form, POST processes it."""
+
+  def get(self):
+    user = self.request.get('user')
+    self.response.out.write('<html><body>'
+                            '<form method="POST" '
+                            'action="/add_friend">'
+                            '<table>')
+    # This generates our shopping list form and writes it in the response
+    self.response.out.write(UserFriendsForm())
+    self.response.out.write('</table>'
+                            '<input type = hidden name = "user" value = "%s">'
+                            '<input type="submit">'
+                            '</form></body></html>' % user)
+
+  def post(self):
+    data = UserFriendsForm(data=self.request.POST)
+    if data.is_valid():
+      user = self.request.get('user')
+      # Save the data, and redirect to the view page
+      entity = data.save(commit=False)
+      entity.username = user
+      query = datastore.UserFriends.all()
+      query.filter('username = ', user)
+      query.filter('friend_handle = ', entity.friend_handle)
+      result = query.get()
+      if result:
+	result.deleted = False
+	result.updated = datetime.datetime.utcnow()
+	result.put()
+      else:
+        entity.deleted = False
+        entity.put()
+      self.redirect('/user_friends?user=' + user)
+    else:
+      # Reprint the form
+      self.response.out.write('<html><body>'
+                              '<form method="POST" '
+                              'action="/add_friend">'
+                              '<table>')
+      self.response.out.write(data)
+      self.response.out.write('</table>'
+                              '<input type="submit">'
+                              '</form></body></html>')
+
+
+class UserFriendsListPage(webapp.RequestHandler):
+  """Lists all friends for a user. In addition displays links for removing
+     friends and adding new friends."""
+
+  def get(self):
+    user = self.request.get('user')
+    query = datastore.UserFriends.all()
+    query.filter('deleted = ', False)
+    query.filter('username = ', user)
+    friends = query.fetch(50)
+    template_values = {
+        'friends': friends,
+        'user': user
+        }
+    path = os.path.join(os.path.dirname(__file__),
+                        'templates', 'view_friends.html')
+    self.response.out.write(template.render(path, template_values))
+
+
+class DeleteFriendPage(webapp.RequestHandler):
+  """Processes delete friend request."""
+
+  def get(self):
+    user = self.request.get('user')
+    friend = self.request.get('friend')
+    query = datastore.UserFriends.all()
+    query.filter('username =', user)
+    query.filter('friend_handle =', friend)
+    result = query.get()
+    result.deleted = True
+    result.updated = datetime.datetime.utcnow()
+    result.put()
+
+    self.redirect('/user_friends?user=' + user)
+
+
+def main():
+  application = webapp.WSGIApplication(
+      [('/add_user', UserInsertPage),
+       ('/users', UsersListPage),
+       ('/add_credentials', UserCredentialsInsertPage),
+       ('/add_friend', UserFriendsInsertPage),
+       ('/user_friends', UserFriendsListPage),
+       ('/delete_friend', DeleteFriendPage),
+       ('/edit_user', UserEditPage)
+      ],
+      debug=True)
+  wsgiref.handlers.CGIHandler().run(application)
+
+if __name__ == '__main__':
+  main()
\ No newline at end of file