Improve Google Android XWiki connector
- 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:
- source: https://github.com/xwiki-contrib/android-client
- automatic build: http://maven.xwiki.org/snapshots/org/xwiki/android/
- doc: http://extensions.xwiki.org/xwiki/bin/view/Extension/Google+Android+Client
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
- Developer profile
Good knowledge of Google Android native APIs
- Active
- Yes
- Year
2012
- 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 Jul Cover 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 3 06 Aug Security module. Week 12 Aug 07-13 Aug Code cleanup. More test cases. Improve documentation etc. Week 13 Aug 13 - onwards Finalization work. Project demo video for the community etc. Progress
Week Ending Deliverable Status Comments Mentor Comments week 0 20 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 1 27 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 2 03 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 3 10 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
524 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
Stuck 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 11 5 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.