Hi , Updated current archi. https://docs.google.com/drawings/d/1hwfQMVgCvYKS6iHU060drcET3Aq3Vles2DQlJOOt3n8/edit
Improved XWikiApplicationContext object. It is now used for IOC. Also it is now integrated to android native runtime. All activities can now call android native method "this.getApplication()" to receive a XWikiApplicationContext. https://github.com/xwiki-contrib/android-client/tree/p2 Thanks Regards. Thanks, Best Regards. On Sat, Jun 23, 2012 at 10:40 AM, sasinda rukshan <[email protected]>wrote: > PS: > Forgot to mention, > Document API will have 2 additional methods. > activate() > passivate() > These are introduced to passivate the document when an Android Activity > shuts down if user is doing multi tasking. > For the rationale behind this, refer to > http://developer.android.com/guide/components/tasks-and-back-stack.html > Tasks and BackStack > http://developer.android.com/guide/components/activities.html > see, figure1:The Activity Lifecycle > > passivate() will pass the Document object to an Android > Service which will persist document to the device. > > I will do an incremental development. > 1st increment: BlogDocument object will have functionality to send a > BlogPost. All lower layer functinality needed will be implemented. > 2nd increment: Save the BlogDocument in the device drive. > Rest I have not planned. > > Thanks > Best Regards. > Sasinda. > > > On Sat, Jun 23, 2012 at 10:26 AM, sasinda rukshan < > [email protected]> wrote: > >> hi, >> >> API update. >> Document: create,retrieve,update,delete. (same as above) >> >> We are using a ReSTful Manager and ReSTfulAccessObject[i.e. RAO<Document> >> for accssing doc from server and all that.]. It is the Data Access Object >> Pattern.This is to hide the underlying rest communication model.(i.e. >> Jackson/Gson/SimpleXml...). Also this will apply a database like feeling >> when accessing remote server ReSTful API. (this makes the architecture >> simple and consistent also). >> >> I did not see a method to querry all pages having a BlogPostClass object, >> in the ReSTAPI documentation. Only possible way I found is to retrieve all >> pages and there object summaries and find which pages have a BlogPostClass >> in them. >> I will add the querry method to an implementation of RAO<Space>. >> It will be something like this. >> >> class defs >> interface RAO<T>{has a method querry()} >> MYSpaceRAOImpl implements RAO<Space> >> ReSTfulManager : Think that an instance of this is like a hibernate >> session. Since this is a mobile env (and I am not that smart to implement >> something like hibernate:-) >> we get an RAO(same as a DataAccessObject) >> from it rather than hiding everything behind it. >> >> RAO<Space> spcRAO=ResTfulManager.getRAO(Space.class , fetchstrategy) >> spcRAO.querry( all documents having a BlogPostClass object in them) >> >> The SpaceRAO will handle the querying and return Document objects >> matching the query. Actually this should return a list of Wrappers of >> Document objects, to do things like lazy fetching from the RemoteXWiki >> Server.Since time is limited, I will forget about wrappers and return back >> the whole document, fully loaded. >> I will implement a minimal functionality set in the above components. It >> is very easy to evolve the feature set later because of the patterns >> applied. >> >> Please give feedback on the idea. >> >> Thanks >> Best Regards. >> Sasinda. >> >> >> >> >> >> >> >> On Fri, Jun 22, 2012 at 9:08 AM, sasinda rukshan < >> [email protected]> wrote: >> >>> hi, >>> Document API. >>> >>> *create()* >>> put the page on server. If the doc includes Objects post them as well. >>> (likely for comments tags, attatchments) >>> * >>> * >>> *update(int strategy)* >>> Update all things in Page. Throw XWikiException if page not yet created. >>> @param : strategy values={MERGE / FORCED } OR {ALL/ OBJECTS / >>> TAGS/...} >>> ex: thing there are objects 0,1,2 in server page. >>> >>> - merge (when local doc has objects 0,1 only) >>> - update obj 0,1 >>> - forced (whne local doc has obj 0,1 only) >>> - delete obj 2 in server. Update obj 0,1. >>> >>> usage: >>> doc.update(MERGE || OBJECTS || TAGS) means update page, >>> merge objects and tags. Leave the rest as it is >>> >>> >>> *delete() * >>> delete the whole document. >>> >>> *get()* >>> load the doc from server >>> >>> *save()* >>> save to local device >>> *load()* >>> load from local device >>> >>> Document API is not exposed directly to Client Developers. All it's >>> methods are protected. >>> We have a BlogDocument [extension to Document] which is exposed to the >>> BlogClient developer. >>> BlogDocument knows what a blog post is and it knows that it only needs >>> to update the BlogPostClass object in the server page. It calls the super >>> update() method with the relevant strategy. >>> Any way the Document is not the real guy who does all these updates to >>> server and local saves and loads. >>> For local saves and loads it calls a DAO(data Access Object ) in our >>> persistence lib.This DAO will call a FAO (File Access Object ) to save the >>> documents bulk to the local file system and enter a light weight entry in >>> the SQLite DataBase. >>> For updating the server, Document delegate duties to >>> ReSTfulDocumentAdapter{implements ReSTfulAdapter}.We can configure which >>> ReST model to use in the adapter (currently only simpleXML model). Adapters >>> convert and adapt the Document model to a rest model and call the XWikiReST >>> API abstraction layer to update the remote server. >>> By the way, those ReSTfulAdapter(s) do a lot of things. Convert Document >>> to REST model.Choose an Update Strategy object for the document (passed by >>> param in doc.update(strat)) Calls REST api abstraction inside android >>> according to the Update strategy. They do a lot of things for an adapter.I >>> don't know what to call it :-).An Adapter or something else ??? :-O. >>> >>> Also for automatic syncs with the server when the device is offline and >>> user have made a blog post, user should be given the option to select >>> whether to automatically do it or manually post it. >>> For automatic sync/posting we can make android Services. >>> >>> Also currently the xwiki-androi-rest module does not use android native >>> services to call server.If a user gets a phone call or something when >>> uploading to server things might get messy.This is because android >>> Activities are stoped and may be destroyed on these occasions.I will see if >>> I can rectify it if I have time after the mid eval.(It may totally affect >>> how web services are called from upper layers) >>> >>> Thanks >>> Best Regards. >>> Sasinda. >>> >>> >>> >>> >>> >>> >>> >>> On Fri, Jun 22, 2012 at 7:33 AM, sasinda rukshan < >>> [email protected]> wrote: >>> >>>> hi, >>>> PS: >>>> check the *p2 branch*. Not master. Did not merge yet. :-) >>>> >>>> Regards, >>>> Sasinda. >>>> >>>> On Fri, Jun 22, 2012 at 7:31 AM, sasinda rukshan < >>>> [email protected]> wrote: >>>> >>>>> Hi, >>>>> Pushed some initial scaffolding's of XWiki model to android, in to >>>>> https://github.com/xwiki-contrib/android-client >>>>> This is the basic idea. >>>>> The client app developers will be only exposed to a service layer. All >>>>> packages suffixed with "Svc" have these. >>>>> package: cmnSvc >> has the LoginFacade. called to log in to server and >>>>> system.(also update state of XWikiContext in the android and etc) >>>>> package blogSvc >> will have BlogDocument, CategoryDocument and etc >>>>> which can be used to create posts and update server. >>>>> The base class Document will handle all server updations(through a >>>>> ReSTfulAdapter, to decouple Document and underlying rest model: simple >>>>> XML/Gson) and etc. >>>>> >>>>> Please check whether approach to redesigning com.xpn....objects into >>>>> org.xwiki.android.xmodel.xobjects is correct. >>>>> >>>>> Thanks. >>>>> Best Regards. >>>>> Sasinda. >>>>> >>>>> >>>>> >>>>> >>>>> On Mon, Jun 18, 2012 at 3:20 PM, sasinda rukshan < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi Thomas, >>>>>> >>>>>> >>>>> >>>>>> ---------- Forwarded message ---------- >>>>>> From: Thomas Mortagne <[email protected]> >>>>>> Date: Mon, Jun 18, 2012 at 3:08 PM >>>>>> Subject: Re: [xwiki-devs] Fwd: [GSoc] XDroid Platform >>>>>> To: [email protected], XWiki Developers <[email protected]> >>>>>> >>>>>> >>>>>> On Mon, Jun 18, 2012 at 11:30 AM, sasinda rukshan >>>>>> <[email protected]> wrote: >>>>>> > ---------- Forwarded message ---------- >>>>>> > From: sasinda rukshan <[email protected]> >>>>>> > Date: Mon, Jun 18, 2012 at 2:56 PM >>>>>> > Subject: Re: [xwiki-devs] [GSoc] XDroid Platform >>>>>> > To: XWiki Developers <[email protected]> >>>>>> > >>>>>> > >>>>>> > Hi Thomas, >>>>>> > >>>>>> > Thanks for the explanations. >>>>>> > The methods toXML , toEmbedXML are wrong.It was just an idea that >>>>>> came up >>>>>> > without much thinking. I will use a separate model >>>>>> > converter.(xwikitTosimpleModelConverter implements ModelConverter >>>>>> like >>>>>> > thing). So the model objects don't know about it at all. >>>>>> > By what you ment by "user" I think it is the client app developer >>>>>> is it? >>>>>> >>>>>> Yes I mean the user of the API. >>>>>> >>>>>> > you did not mean end user. I never reveal the xml representations >>>>>> to end >>>>>> > users. >>>>>> > >>>>>> > I came up with a simpler design. I will post diagram later tomorrow. >>>>>> >>>>>> Ok, this ASCII art here is not very easy to read ;) >>>>>> >>>>>> > To give a brief on it, >>>>>> > XObject : has protected property List<XProperty> >>>>>> >>>>>> A Map<XProperty> would probably make more sense here since each >>>>>> property as a unique name in an object and you will need to set some >>>>>> specific property very often. >>>>>> >>>>>> > |__XPoperty :<< all objects that can be added as a property of an >>>>>> objects >>>>>> > should extend this. Has an attribute list. cancels the >>>>>> > | property list of XObject >>>>>> > | |_____XString : >>>>>> > |__Abstract XDocObject :<< all documents should have an object of >>>>>> this. >>>>>> > This is the pages class. Has a object List<XObject> >>>>>> > | |____XBlog :<< all documents which are blogs >>>>>> should >>>>>> > have a object of this. This determines the class of the object. >>>>>> > | but this data is not >>>>>> posted >>>>>> > anywhere in <link rel="...../class"> . It is just kept for type >>>>>> checks. >>>>>> > That is like >>>>>> > | this page should include >>>>>> > XBlogPost objects. >>>>>> > |__XBlogPost : <<the BlogPostClass object. >>>>>> > >>>>>> > In my view I assume every page has an object of some class. And >>>>>> this object >>>>>> > holds the objects which you can get under .../pages/BlogPg1/objects/ >>>>>> >>>>>> Well not exactly, you don't always have an object. A document can be >>>>>> just about content. Just a wiki page if you prefer. >>>>>> >>>>>> > >>>>>> > [ >>>>>> > an added advantage: >>>>>> > I think we can make a ViewEngine to generate android View >>>>>> components from >>>>>> > the above model. Since the objects in the page carry rendering >>>>>> > descriptions.We can make a general model like a browser to >>>>>> > brows xwiki using generated the views. But the problem is some >>>>>> features in >>>>>> > specific spaces like blog do not seem to be totally defined by the >>>>>> XWiki >>>>>> > Object model behind them. Also this is just an idea (not suggesting >>>>>> I do >>>>>> > for the GSoc).Making it a usable reality is a little challenge. >>>>>> > ] >>>>>> > >>>>>> > So as you said if a document (I think it equivalent to a page) can >>>>>> have >>>>>> > many class types my assumption fails. >>>>>> > Why should a document be of multiple classes. I was thinking a page >>>>>> belongs >>>>>> > to a class. And the page is an instance of that class. If page can >>>>>> have >>>>>> > multiple classes my understanding should be wrong. Isn't it? >>>>>> >>>>>> I don't understand, what I said is that you can only have one class in >>>>>> a document but you can have several objects. >>>>>> >>>>>> > >>>>>> > Thanks >>>>>> > Best Regards >>>>>> > Sasinda. >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> >>>>> >>>> >>> >> > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

