Improve Google Android XWiki connector

Last modified by Sasinda Premarathna on 2012/08/21 05:28

Mentor(s)
Student
Details

Last year nice work has been does to provide an easy to use Android oriented library to communicate with an XWiki instance.

You can look at it's current state:

This year the goal is to continue improving it and start implementing some ideas of small applications based on it.

It's up to the student to write a proposal on what's he/she plans to do but here are some ideas for inspirations:

  • better integration with Android system
    • add XWiki Android account and make the connector use it so that various applications don't have to maintain their own connection informations
    • synchronize all or only followed XWiki users from XWiki user stream as Android contacts
  • various Android version for existing XWiki applications and features (as reusable android element as much as possible)
    • write and send blog article
    • edit attachment with any Android application and then automatically update it online
  • new UI elements and improvements of existing elements
  • addition to the low level framework
    • make easy to edit a document offline (keep it inn a local database and synchronize it when connection come back)
  • ...

Like last year the most important things remain:

  • produce clean, documented and maintainable code
  • always produce easy to use and as reusable as possible elements, the main goal is to make others use XWiki for their need and make it as easy as possible for them
  • follow Android standards and use native tools as much as possible
Active
Yes
Year

2012

Developer profile

Good knowledge of Google Android native APIs

Status

Selected

Progress

Document here the student's progress as described here.

Description and Development Approach

As a XWiki Platform based app I will create a Blog application. This application's settings will have the functionality to create a XWiki account if there is n't a XWiki account already created.The created account data is shared among other XWiki apps.(functionality will be added to 2.2.8 sharing module). Also the Blogging application can choose to remember password.Reusable components for remember password are added to Security module.Remembered passwords are not shared. Users can do offline editing of the blog page. Document can be persisted for latnote er editing. The persistence will be added through the Persistence module and annotating the models.External library will be used for providing Entity based persistence(OrmLite). If the project does not face any schedule risks I will add a rich text editor with Html conversion capability to the module UI elements. All reusable components made in the process of making the Blog application will be added to the relevant modules in the tentative architecture architecture documented in design page.(modules 2.2.3 observables and 2.2.6 cache  may not be implemented at this stage.)

deliverables

* [d0 minor deliverable] [M1,2,3] Demo Blog app

* [D1] [M1] Sharing module : data/configuration sharing for multiple apps

* [D2] [M2]Persistence module: Objects in the domain model will be annotated to be used by this. 3rd party lib will be used. Proposed ORM Lite

* [D3] [M2]Domain model: Blog document , other objects related to blogging app. These will be annotated for persistence.

* [D4] [M3]Security module (initial version) : only password encryption and storing. Demonstrated using blog app.

Time Line
 Week    Days   Description       
   14 May -  20 May   Community Bonding period.Get familiar with Android development with Maven.   
 Week 1  21 May- 27  May   Start a blog application prototype that connect to a main Xwiki instance.This will be using the already provided Androic XWiki connector  
 Week 2  28 May- 03 June   Initial implementation and requirements gathering for the configuration and user profile sharing components for multiple android apps running in same phone.  
 Week 3  04 Jun-10 Jun   Complete sharing component
  Milestone 1  10 Jun  Sharing module completed. Partly completed Blog app and another sample app to demonstrate sharing.
 Week 4  11 Jun-17 Jun  Analyze the domain model of XWiki Enterprise. Start defining classes for the mobile version which are needed for the blogging app.If time available define other classes also.  
 Week 5  18 Jun- 24 Jun  Annotate document object and other related objects(in Blog App) for persistence.  
 Week 6  25 Jun- 01 Jul Implement edit and persist for later edits  
 Week 7  02 Jul - 08 Jul  Write test cases and improve persistence module. Annotate other entities as well.  
 Week 8  09 Jul - 15 Jul  Annotate other domain objects as required.  
 Week 9  16 Jul - 22 JulCover schedule lags, improve documentation code cleanup, test cases. 
 Milestone 2  22 Jul  Persistence module complete  
 Week 10  23 Jul-  29 Jul  Start implementing  password remember and encryption facilities.  
 Week 11  30 Jul- 06 Aug  Complete security module. Implement test cases. Add WYSIWYG editor to Demo blog app and UI-Elements.
 Milestone 306 Aug  Security module.
 Week 12  Aug 07-13 Aug Code cleanup. More test cases. Improve documentation etc.  
 Week 13Aug 13 - onwardsFinalization work. Project demo video for the community etc. 
Progress
Week Ending Deliverable Status  Comments Mentor Comments
 week  020 May  - -Work done
 tutorial on maven "Sonatype Maven Tutorial"
Android Developer guide [Application fundamentals -to- UI events, Testing fundamentals]
Setup inteliJ IDEA with Maven for the android project. Could not build the project through the IDE.
Was successful at building through command line mvn clean package (after editing a few POM entries).

Eclipse vs IDEA : eclipse has better support for android specific features through ADT plugin.
 The benifits of using IDEA is that it provide intelligent auto complete  help for XML editing (Even inside strings!)
 and fast at starting the emulator.

Incomplete work for week 0    
Check how android instrumentation tests work.
Whether possible to have IDE specific build scripts and Maven build scripts together
This is because IDEA was having problems with using android-maven-plugin and was much less helpful with maven.
To state a few IDEA could not run the emulator from the IDE when using maven build script.
May need some additional config.It got build errors for the XWiki android client project,
where as the command line mvn tasks were working fine. It was robust when using IDE default ant script.)

 
 week 127  May    Initial research on ORMLite http://ormlite.com/ 
Considered Spring for Android for CDI like component injections.Peeked a little bit and found library to be too bulky.
http://www.springsource.org/spring-android
http://www.springsource.org/download/community?project=Spring%20for%20Android
Otherwise had very useful features as
Rest Client, Auth Support(for ssl).
Had difficulty in compiling with maven. Tried with an updated version of maven plugin: com.jayway.maven.plugins.android.generation2: version 3.2.0
and failed. Reverted back to the earlier beta version 2.9.0-beta
Set up the project structure and play a bit with android.
 
 week 203 June   Added functionality:
1)Ability to save username, password, xwiki url. These saved entries show up in login dialog.

(need to add ui checkbox to remember password if user specifies to, did not focus on it as my main goal is not ui part. But need to add the required 
   functionality at lower layer. LoginFacade)

2) Improved architecture.MVC with activities as Controllers and additional business logic layer (facades and services) to process models.

Only new functionality are following this pattern.Old code also had facades ex: org.xwiki.android.rest.Request object. And this is not completely new.
Some processes like login which were directly carried out by the controllers(activity Login) got more complex(need to persist login attempt data)  with my new code,
 and I am introducing facades for sets of similar processes.(A little performance overhead[one level of indirection] but lot easier for maintenance, evolution)
 I'll update documentation later.

3) fixed bug: Can fake log in with even invalid username pwd.
 
 week 310 Jun     Added options: not to remember password. If remember password is unchecked the remembered password entry is deleted from database. Added Config.xml file. We can read configuration using Android shared preferences. The config file is not yet used. Made a launch pad to launch multiple applications in the XWiki Main app. (Blog  sub app, Navigator sub app etc.) 
 week 4 17 Jun   Study XWiki Domain model. Made scaffolding for model objects. Defined Data integration layer with 3 main apis. ReSTful Access Layer (For Rest communication), File Store Access Layer (persistence in file system), Data Access Layer (persistence in data base). The Data integration layer has a uniform implementation of DAO pattern. 
 week
 24 Jun   Introduced very simple Inversion of Control/ Dependancy injection through integrating to native Android application Context. Extended Application Context with XWikiApplicationContext. Application Context is used to inject dependancies only for major components such as EntityManager(DB persistence) , FileStoreManager (File persistence), ReSTfulManger (ReST access).  
Week6 01 Jul   Restructured Xwiki model to reflect more on java.lang package. (XObject, XProperty, XClass ...). XWikiApplicationContext is complete. Added some commented out demo code that uses java reflection to do IoC. We do not use them because we only support ReST using XML. Dependancy injection tecniques introduced are for use in future, when we will hopefully support both JSON and XML rest. 
 Week 7 08 Jul   Standardized the ReSTful Access Layer. More work needed here.
Change of Plans: We do not store XWiki Domain model in the database. We store it in the file system.
 Completed Implementation of FileStore (Hybrid persistence system using data base to save light weight reference and file system to save bulk) which is used to store XWiki Domain model. Only Document is supported(that means page+objects+comments...). Blog Demo UI is updated.
Work not Done: Write Test Cases.
 
 Week 8 15 Jul  Updated Documentation. http://dev.xwiki.org/xwiki/bin/view/Design/XWikiAndroid
S
tuck with completing the RAL (Restful access layer, which introduce CRUD{Create,_read,_update_and_delete } model to ReST communication) which was not part of the initial project plan.
 
 Week 9 22 Jul  RAL ( logic for keeping dirty state of Xwiki Domain model) 
 Week 10 29 Jul  RAL still more logic there.  Do Documentation of the APIs.  
 Week 115 Aug   More logic added to RAL . User Guides for the Client App, Platform. Extention guide for the Platform etc. 
 Week 12 12 Aug   Automated Testing. Setup Test modules to start up a XWiki Server instance at the Jenkins server. Adding more tests . Fixing bugs in the RAL layer. 
 Week 13 19 Aug   Successfully made a module to start up an XWiki Server instance for testing and set up external test fixture using Apache Http Client directly. Add more tests like testing the File Store. 

Tags:
Created by Thomas Mortagne on 2012/03/09 14:52
   

Get Connected