Hi Jun, I did a code review in your branch. I've written a lot of notes in the commits (you should have received several mail for that :))
Please take a look. Thanks, Fabio On Sun, Jun 19, 2011 at 4:57 PM, Jun Han <[email protected]> wrote: > Hi Vincent, > > Thanks a lot for your suggestion. > > IMHO, xmlrpc is included for the purpose of back-ward compatibility. > As REST API was first introduced in version 1.8 from xwiki jira, > xmlrpc might be useful If the xwiki server only supports xmlrpc (e.g., > v1.4 or v1.5). > > I agree that technical details should not be exposed to end user. > > The backend implementation may be determined via analyzing user input of > server endpoint. For example, if the serverurl contains "confluence" > (http://localhost:8080/xwiki/xmlrpc/confluence), then xmlrpc is used. If > it contains "rest" (e.g., http://localhost:8080/xwiki/rest), then rest > is used. > > However, the current implementation will populate the specific server > url field according to the backend type (xmlrpc or rest). > There may be some better way to do this. > > Best regards > > Jun Han > > On 06/19/2011 03:40 AM, Vincent Massol wrote: >> Hi there, >> >> I haven't followed this thread but just noticing this: why do we want to >> expose to users something purely technical (ie the backend implementation)? >> Also why do we want to have to maintain several backends? >> >> IMO we should only use one and use the REST API only. >> >> If it's only about migration from the current XMLRPC to REST, it should be a >> "hidden" config param not exposed to users and that we use internally only >> IMO. >> >> The goal should always be to make it as easy as possible for end users, i.e. >> they shouldn't have to think when using XEclipse. >> >> Thanks >> -Vincent >> >> On Jun 19, 2011, at 6:52 AM, Jun Han wrote: >> >>> Hi Fabio, >>> >>> I have already finished re-factoring the whole xmlrpc backend. >>> >>> A new combo list is added to the "new connection" wizard to provide two >>> choices (xmlrpc and rest), as shown in >>> http://dl.dropbox.com/u/3466762/xwiki/newConnectionWizard.png. >>> >>> When user selects "xmlrpc", the xmlrpc implementation is used. The >>> navigation panel can show the xwiki resources, as shown in >>> http://dl.dropbox.com/u/3466762/xwiki/xmlrpcBackend.png. >>> >>> I will continue working on the rest backend following the previous >>> discussion. >>> >>> Best regards >>> >>> Jun Han >>> >>> On 06/17/2011 09:24 AM, Fabio Mancinelli wrote: >>>> Hi Jun, >>>> >>>> could you post a status about your work? >>>> Your commits stream >>>> (https://github.com/junhan/xwiki-eclipse/commits/master) is not very >>>> informative (are you holding commits locally? If so you should push >>>> more frequently!) >>>> >>>> Midterm is approaching so we need to make things advance a little bit >>>> faster. >>>> >>>> Thanks, >>>> Fabio >>>> >>>> >>>> >>>> On Mon, Jun 13, 2011 at 9:00 AM, Jun Han<[email protected]> wrote: >>>>> Dear all, >>>>> >>>>> After I looked into the current implementation of XEclipse and tried >>>>> several attempts, one plan, whose goal is to provide an abstract >>>>> communication layer between XEclipse and server, might be feasible. >>>>> A rough system diagram showing the relationships of plugins of XWiki >>>>> Eclipse is available at: >>>>> http://dl.dropbox.com/u/3466762/xwiki/architecture.png >>>>> >>>>> In order to remove dependency of particular back-end implementation >>>>> (xmlrpc or rest), >>>>> an abstract layer, which includes two plugins (model and storage) will >>>>> be created. >>>>> 1. model plugin contains the current package of xwiki.eclipse.core.model >>>>> 2. storage plugin contains xwiki.eclipse.core.storage including two >>>>> abstract classes, AbstractLocalDataStorage and AbstractRemoteDataStorage. >>>>> >>>>> In this way, all the core implementation and UI components (dialogs, >>>>> properties dialog, adapters) in ui plugin will now depend on the model >>>>> and storage plugins rather than the xmlrpc implementation. >>>>> >>>>> Instead of only providing the required jar files, xmlrpc and rest >>>>> plugins will also do the following: >>>>> 1. extend the AbstractLocalDataStorage and AbstractRemoteDataStorage in >>>>> storage plugin >>>>> 2. extend the model classes in model plugin >>>>> >>>>> In this way, all the abstract classes in model and storage plugins will >>>>> be initialized in the run time and perform the specified functions. >>>>> >>>>> If my understanding is correct, I will begin re-factoring work. >>>>> >>>>> Best regards >>>>> >>>>> Jun Han >>>>> >>>>> On 6/11/2011 10:32 AM, Eduard Moraru wrote: >>>>>> Hi Jun, >>>>>> >>>>>> Instead of returning Object, you should return >>>>>> org.xwiki.eclipse.core.model.Page or Object, etc. >>>>>> >>>>>> So the storage abstraction needs to include and abstract model as well in >>>>>> order to be usable. This means that the implementation also comes with a >>>>>> model implementation (xmlrpc.model.PageSummary for xmlrpc back-end, >>>>>> rest.jaxb.model.Page for rest back-end, etc.... all of them implementing >>>>>> org.xwiki.eclipse.core.model.Page) >>>>>> >>>>>> Cheers, >>>>>> Eduard >>>>>> >>>>>> On Fri, Jun 10, 2011 at 7:52 PM, Jun Han<[email protected]> wrote: >>>>>> >>>>>>> Hi Eduard, >>>>>>> >>>>>>> Thanks a lot for prompt instruction. >>>>>>> >>>>>>> I forgot to sync the screenshot to the server. Now it is the correct >>>>>>> one. >>>>>>> >>>>>>> Regarding the pluggable solution for both xml-rpc and rest, I will try >>>>>>> to devise a common storage API for both of them. >>>>>>> >>>>>>> For example, >>>>>>> public Object getPage(String pageId) >>>>>>> public List<Object> getPages(String spaceKey) >>>>>>> >>>>>>> They will return >>>>>>> 1. xmlrpc.model.PageSummary if connecting via xmlrpc or >>>>>>> 2. rest.jaxb.model.Page if connecting via rest. >>>>>>> >>>>>>> If this is the way to go, I will look more into how to implement this. >>>>>>> Adapter pattern may be used. >>>>>>> >>>>>>> Best regards >>>>>>> >>>>>>> Jun Han >>>>>>> >>>>>>> On 06/10/2011 12:08 PM, Eduard Moraru wrote: >>>>>>>> Hi Jun, >>>>>>>> >>>>>>>> On 06/10/2011 05:26 PM, Jun Han wrote: >>>>>>>>> Hi, Eduard and Fabio, >>>>>>>>> >>>>>>>>> I finished part of the navigation panel, which shows the connection, >>>>>>>>> wiki, space. >>>>>>>>> Please see the screenshot at >>>>>>>>> http://dl.dropbox.com/u/3466762/xwiki/Screenshot-navigationPanel.png >>>>>>>> I think you pasted the wrong screenshot. We`ve already seen this one >>>>>>>> and >>>>>>>> I think it's from an early stage of development. >>>>>>>>> Adding pages under space is straightforward too, however, it requires >>>>>>>>> re-factor a lot of source code, which spreads in the plugin of >>>>>>>>> xwiki.eclipse.ui and xwiki.eclipse.core. >>>>>>>>> >>>>>>>>> I will continue work on displaying more XWiki resources after I finish >>>>>>>>> re-factoring the properties editor, action provider (context menu), >>>>>>>>> and >>>>>>>>> other dialog windows related to connection, wiki, space. >>>>>>>> It should not take that much of a refactoring on the UI part, since the >>>>>>>> heavy lifting is done in the core. >>>>>>>> >>>>>>>> What I actually wanted to tell you is that you should take the >>>>>>>> refactoring in a modular direction and consider your work as a >>>>>>>> contribution and alternative for the existing system and not only as a >>>>>>>> replacement. I you can`t do it as a contribution, consider adding a >>>>>>>> mechanism that allows you to do so (see our first discussions on >>>>>>>> integrating the rest back-end). Keep the abstraction layer (interfaces, >>>>>>>> model, etc) as the main think the ui and even core components >>>>>>>> communicate with and keep the implementation of that abstraction layer >>>>>>>> pluggable (xml-rpc, rest, etc). The UI must also be aware of this and >>>>>>>> act accordingly. >>>>>>>> >>>>>>>> We don`t want to do the same replacement work if, for whatever reason, >>>>>>>> we want to switch to a different back-end in the future. So keep that >>>>>>>> in >>>>>>>> mind at all time during GSoC. >>>>>>>> >>>>>>>> Besides that, keep up the good work ;) >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Eduard >>>>>>>>> Best regards >>>>>>>>> Jun Han >>>>>>>>> >>>>>>>>> On 06/09/2011 07:26 PM, Eduard Moraru wrote: >>>>>>>>>> Hi Jun, >>>>>>>>>> >>>>>>>>>> On 06/09/2011 11:14 AM, Fabio Mancinelli wrote: >>>>>>>>>>> Hi Jun, >>>>>>>>>>> >>>>>>>>>>> I am not sure that syntaxes should appear as a child of connection. >>>>>>>>>>> I >>>>>>>>>>> would show this information in the property panel of the connection. >>>>>>>>>> I think that you should make the "wikis" implicit as well and leave >>>>>>> only >>>>>>>>>> the Connection Name as top root, just like in my previous proposal: >>>>>>>>>> >>>>>>>>>> Connection01 >>>>>>>>>> - wiki1 >>>>>>>>>> -- spaceA >>>>>>>>>> --- pageX >>>>>>>>>> - wiki2 >>>>>>>>>> - etc. >>>>>>>>>> >>>>>>>>>> As Fabio pointed out, stuff like supported syntaxes and xwiki version >>>>>>>>>> should be displayed in the properties page of a connection. >>>>>>>>>> >>>>>>>>>> Also, you need to take care when the user enters the user name and >>>>>>>>>> password and consider the wiki for which it applies. User Admin on >>>>>>>>>> the >>>>>>>>>> main wiki (xwiki:XWiki.Admin) is not the same as user Admin on >>>>>>>>>> subwiki1 >>>>>>>>>> (subwiki1:XWiki.Admin). >>>>>>>>>> I believe that, if you don`t enter the absolute user name >>>>>>>>>> (xwiki:XWiki.Admin) and you enter only the relative name (Admin), it >>>>>>>>>> will be resolved to the wiki of the resource you are trying to >>>>>>>>>> access. >>>>>>>>>> You should, at least internally, always use absolute user names. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Eduard >>>>>>>>>>> Thanks, >>>>>>>>>>> Fabio >>>>>>>>>>> >>>>>>>>>>> On Wed, Jun 8, 2011 at 10:26 PM, Jun Han<[email protected]> >>>>>>> wrote: >>>>>>>>>>>> Hi Eduard and Fabio, >>>>>>>>>>>> >>>>>>>>>>>> Thanks a lot for your suggestions. >>>>>>>>>>>> >>>>>>>>>>>> I managed to create a top-level tree expansion when user requests >>>>>>>>>>>> the >>>>>>>>>>>> entry point of REST API: localhost:8080/xwiki/rest. >>>>>>>>>>>> >>>>>>>>>>>> A screenshot is available at: >>>>>>>>>>>> http://dl.dropbox.com/u/3466762/xwiki/Screenshot-navigationPanel.png >>>>>>>>>>>> >>>>>>>>>>>> Now the labels display the whole<href> attribute, I plan to >>>>>>> "syntaxes" >>>>>>>>>>>> and "wikis" later on. >>>>>>>>>>>> When user clicks the "wikis", the navigation tree will continue to >>>>>>>>>>>> expand to show all the sub-wiki names. >>>>>>>>>>>> >>>>>>>>>>>> It took me a while to figure out the configuration of tree content >>>>>>>>>>>> provider, tree viewer and label provider, which is a little >>>>>>>>>>>> different >>>>>>>>>>>> with what I did in Eclipse SWT development. As this has been sorted >>>>>>> out, >>>>>>>>>>>> I would pick up the pace. >>>>>>>>>>>> >>>>>>>>>>>> Best regards >>>>>>>>>>>> Jun Han >>>>>>>>>>>> >>>>>>>>>>>> On 06/07/2011 10:37 AM, Eduard Moraru wrote: >>>>>>>>>>>>> Hi Jun, >>>>>>>>>>>>> >>>>>>>>>>>>> On 06/07/2011 02:05 PM, Fabio Mancinelli wrote: >>>>>>>>>>>>>> Hi Jun, >>>>>>>>>>>>>> >>>>>>>>>>>>>> the REST api also takes into account Wikis, so you should take >>>>>>>>>>>>>> into >>>>>>>>>>>>>> account this into the plugin. >>>>>>>>>>>>> Also, I think that we need to display the other resources (like we >>>>>>> do >>>>>>>>>>>>> now), but maybe we should improve that too. >>>>>>>>>>>>> >>>>>>>>>>>>> I`d suggest that we group objects by class name, something like: >>>>>>>>>>>>> >>>>>>>>>>>>> xwiki.org (wiki/farm/connection name, given by the user) >>>>>>>>>>>>> -- xwiki (main/sub wiki name) >>>>>>>>>>>>> ---- Main >>>>>>>>>>>>> ------ WebHome >>>>>>>>>>>>> -------- XWiki.XWikiComments >>>>>>>>>>>>> ---------- 0 >>>>>>>>>>>>> ---------- 1 >>>>>>>>>>>>> ---------- 2 >>>>>>>>>>>>> -------- XWiki.MyClass >>>>>>>>>>>>> ---------- 0 >>>>>>>>>>>>> ---------- 1 >>>>>>>>>>>>> etc. >>>>>>>>>>>>> >>>>>>>>>>>>> 0, 1, 2 above are object numbers, but, in the future, they might >>>>>>> change >>>>>>>>>>>>> to some other IDs. >>>>>>>>>>>>> >>>>>>>>>>>>> The advantage of such an ordering is that, highly used pages (that >>>>>>> have >>>>>>>>>>>>> lots of comments, or lots of objects of specific classes) will >>>>>>>>>>>>> allow >>>>>>>>>>>>> easier management of the objects. >>>>>>>>>>>>> >>>>>>>>>>>>> If a list of numbers looks too blank, you could have them print >>>>>>>>>>>>> the >>>>>>>>>>>>> value of the first property it their class, just like XWiki`s >>>>>>>>>>>>> object >>>>>>>>>>>>> editor does and you`d have something like: >>>>>>>>>>>>> >>>>>>>>>>>>> -------- XWiki.XWikiComments >>>>>>>>>>>>> ---------- 0 : Administrator ('author' property value) >>>>>>>>>>>>> ---------- 1 : Guest >>>>>>>>>>>>> ---------- 2 : Administrator >>>>>>>>>>>>> -------- XWiki.MyClass >>>>>>>>>>>>> ---------- 0 : etc. >>>>>>>>>>>>> ---------- 1 : etc. >>>>>>>>>>>>> etc. >>>>>>>>>>>>> >>>>>>>>>>>>> I don`t know what's the status of Attachments (I don remember if >>>>>>>>>>>>> we >>>>>>>>>>>>> display them or not), but we should have them as an 'implicit' >>>>>>>>>>>>> first >>>>>>>>>>>>> class like: >>>>>>>>>>>>> >>>>>>>>>>>>> ------ WebHome >>>>>>>>>>>>> -------- Attachments >>>>>>>>>>>>> ---------- dog.png >>>>>>>>>>>>> ---------- spreadsheet.xls >>>>>>>>>>>>> -------- XWiki.XWikiComments >>>>>>>>>>>>> ---------- 0 : Administrator ('author' property value) >>>>>>>>>>>>> ---------- 1 : Guest >>>>>>>>>>>>> ---------- 2 : Administrator >>>>>>>>>>>>> -------- XWiki.MyClass >>>>>>>>>>>>> ---------- 0 : etc. >>>>>>>>>>>>> ---------- 1 : etc. >>>>>>>>>>>>> etc. >>>>>>>>>>>>> >>>>>>>>>>>>> Anyway, the main idea is to expose as much as REST API allows. >>>>>>>>>>>>> Check >>>>>>>>>>>>> again the API specs. >>>>>>>>>>>>> >>>>>>>>>>>>> You can get creative with the details on how to display/handle the >>>>>>> new >>>>>>>>>>>>> stuff. :) >>>>>>>>>>>>> >>>>>>>>>>>>> Cheers, >>>>>>>>>>>>> Eduard >>>>>>>>>>>>>> -Fabio >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Tue, Jun 7, 2011 at 7:35 AM, Jun Han<[email protected]> >>>>>>> wrote: >>>>>>>>>>>>>>> Hi Fabio, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I have finished replacing xmlrpc implementation of login >>>>>>> functionality >>>>>>>>>>>>>>> by sending http GET request to entry point >>>>>>>>>>>>>>> (http://localhost:8080/xwiki/rest/) along with >>>>>>>>>>>>>>> username/password. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> A status code of 200 will be regarded as successful while 401 >>>>>>> means >>>>>>>>>>>>>>> login fails. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> The source code have been updated in org.xwiki.eclipse.ui and >>>>>>>>>>>>>>> org.xwiki.eclipse.core plugins. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I will begin working on xwiki navigatoin panel and replace >>>>>>>>>>>>>>> xmlrpc >>>>>>> code >>>>>>>>>>>>>>> accordingly. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> One question is what resources are to be included in navigation >>>>>>> panel, >>>>>>>>>>>>>>> besides xwiki -> space -> pages? and how >>>>>>>>>>>>>>> to display >>>>>>> them? >>>>>>>>>>>>>>> Best regards >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Jun Han >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On 06/05/2011 05:50 PM, Fabio Mancinelli wrote: >>>>>>>>>>>>>>>> Hi Jun, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> login/logout can be implemented in order to store on the client >>>>>>> side >>>>>>>>>>>>>>>> user credentials that are sent with HTTP requests. >>>>>>>>>>>>>>>> Currently there is no way in the REST-api to get a "session >>>>>>> token" >>>>>>>>>>>>>>>> (like the cookie sent after a login is made using the web form) >>>>>>> so >>>>>>>>>>>>>>>> that subsequent requests are performed on the behalf of a >>>>>>> previously >>>>>>>>>>>>>>>> authenticated user. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> So what is usually done is to send basic-auth credentials with >>>>>>> each request. >>>>>>>>>>>>>>>> You can start with this. Next you might try to retrieve the >>>>>>> cookie by >>>>>>>>>>>>>>>> faking a standard login and using that cookie in subsequent >>>>>>> requests. >>>>>>>>>>>>>>>> The ideal setting would be to implement server side some >>>>>>> OAuth-like >>>>>>>>>>>>>>>> mechanism, but this is out of scope wrt your project. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -Fabio >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Sat, Jun 4, 2011 at 6:27 PM, Jun Han<[email protected]> >>>>>>> wrote: >>>>>>>>>>>>>>>>> Dear all, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I am on the way of replacing the xmlrpc implementation of >>>>>>>>>>>>>>>>> RemoteXWikiDataStorage implements IDataStorage >>>>>>>>>>>>>>>>> {}. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> One question is about how to implement login and logout >>>>>>> functionality >>>>>>>>>>>>>>>>> via REST API. >>>>>>>>>>>>>>>>> From REST API document, users can be authenticated >>>>>>>>>>>>>>>>> via >>>>>>> something like: >>>>>>>>>>>>>>>>> 1. XWiki session >>>>>>>>>>>>>>>>> 2. HTTP Basic Auth. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> HTTP basic auth can be implemented via adding HTTP header to >>>>>>>>>>>>>>>>> the >>>>>>> HTTP >>>>>>>>>>>>>>>>> request, then XEclipse can display Xwiki Resources by parsing >>>>>>> the response. >>>>>>>>>>>>>>>>> Therefore, do we need to implement login and logout methods? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Best regards >>>>>>>>>>>>>>>>> Jun Han >> _______________________________________________ >> devs mailing list >> [email protected] >> http://lists.xwiki.org/mailman/listinfo/devs > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

