On 12/12/2012 03:10 PM, Vojtech Szocs wrote: > Thanks Michael, in that case we can just use XML when talking with REST API. > > Also, one idea worth implementing in future is to have some sort of debug > console on GUI (I've seen this idea implemented in other applications). When > activated, users could see REST API XML communication (request/response) > between WebAdmin and Engine, which could be useful for someone interested in > writing his own REST API client.
right, i always do that in all clients i've wrote (including SDKs & CLI). > > Vojtech > > > ----- Original Message ----- > From: "Michael Pasternak" <mpast...@redhat.com> > To: "Vojtech Szocs" <vsz...@redhat.com> > Cc: "Itamar Heim" <ih...@redhat.com>, "engine-devel" <engine-devel@ovirt.org> > Sent: Wednesday, December 12, 2012 1:33:56 PM > Subject: Re: [Engine-devel] UI Plugins: PoC patch revision 7 is here > > On 12/12/2012 01:51 PM, Vojtech Szocs wrote: >> Hi, sorry for my late response, >> >>>> Our first iteration could be: >>>> a1, rewrite UiCommon (UI business logic) layer to work with API types >>>> a2, write adapter (e.g. modify Frontend class) between UiCommon using API >>>> types and Generic API (GWT RPC) using internal entities >>> >>> does this mean converting three times? >> >> Not sure what you mean, but here's my idea of the first iteration - what >> would happen on frontend side (GWT): >> 1. UiCommon, using API types, invokes query/command via RPC bridge >> (org.ovirt.engine.ui.frontend.Frontend class) >> 2. Frontend class, still using Generic API (GWT RPC), does the actual >> query/command invocation >> 3. Frontend class receives query/command result and translates it from BE >> type to API type (converter callback) >> >> My idea was to isolate BE type usage into Frontend class, so that when we >> decide to use REST API, we just need to update our RPC bridge (Frontend >> class). >> >>>> Our second iteration could be: >>>> b1, remove adapter from step a2, drop Generic API (GWT RPC) usage >>>> b2, write API type <-> JSON mapper, possibly using some existing framework >>> >>> do you mean talking with api in JSON? >> >> Yes, that was my original idea. I'm not against using XML when talking with >> REST API either. GWT supports parsing both JSON and XML. > > infra. is there, but officially we not supporting json yet, > (resteasy-json-provider has issues with jaxb, - we waiting for fix) > >> >> Vojtech >> >> >> ----- Original Message ----- >> From: "Michael Pasternak" <mpast...@redhat.com> >> To: "Vojtech Szocs" <vsz...@redhat.com> >> Cc: "Itamar Heim" <ih...@redhat.com>, "engine-devel" <engine-devel@ovirt.org> >> Sent: Sunday, November 25, 2012 9:27:59 AM >> Subject: Re: [Engine-devel] UI Plugins: PoC patch revision 7 is here >> >> On 11/20/2012 12:57 PM, Vojtech Szocs wrote: >>> Hi Michael, >>> >>>> if we plan moving UI on top of API, you should be: >>>> >>>> 1. importing restapi-types project >>>> 2. writing intermediate layer to translate BE entities to API's using #1 >>>> 3. using public entities from #2 >>>> >>>> this way your future migration to API (instead of native BE) will be much >>>> more easier. >>> >>> Indeed, this is very useful for GWT RPC -> REST API transition in general, >>> many thanks for pointing this out, Michael. As you suggest, we can use >>> restapi-types mappers to translate between internal entities and API types. >>> >>> Our first iteration could be: >>> a1, rewrite UiCommon (UI business logic) layer to work with API types >>> a2, write adapter (e.g. modify Frontend class) between UiCommon using API >>> types and Generic API (GWT RPC) using internal entities >> >> does this mean converting three times? >> >>> >>> Our second iteration could be: >>> b1, remove adapter from step a2, drop Generic API (GWT RPC) usage >>> b2, write API type <-> JSON mapper, possibly using some existing framework >> >> do you mean talking with api in JSON? >> >>> b3, write RPC layer that talks REST API with Engine >>> >>> However, in order to use REST API types on client (GWT), we need their >>> source code. restapi-interface-definition uses Maven JAXB plugin to >>> generate API types from XSD schema (src/main/resources/api.xsd). On client, >>> we need restapi-definition-<version>-sources.jar that includes those >>> generated API types (target/generated-sources/xjc). >> >>> >>> As for UI plugins (short term), we can just use restapi-types mappers and >>> implement step b2, (API type -> JSON mapper). >>> >>> Thanks, >>> Vojtech >>> >>> >>> ----- Original Message ----- >>> From: "Michael Pasternak" <mpast...@redhat.com> >>> To: "Vojtech Szocs" <vsz...@redhat.com> >>> Cc: "Itamar Heim" <ih...@redhat.com>, "engine-devel" >>> <engine-devel@ovirt.org> >>> Sent: Tuesday, November 20, 2012 9:48:27 AM >>> Subject: Re: [Engine-devel] UI Plugins: PoC patch revision 7 is here >>> >>> On 11/20/2012 12:13 AM, Itamar Heim wrote: >>>> On 11/19/2012 02:07 PM, Vojtech Szocs wrote: >>>>> Hi Itamar, >>>>> >>>>> UI plugin infrastructure translates internal business entities into >>>>> JSON-like representations and passes those representations to UI plugins. >>>>> (Internal entities are NOT >>>>> exposed to UI plugins directly.) >>>>> >>>>> Currently, all entities supported by UI plugin infrastructure (as per >>>>> org.ovirt.engine.ui.webadmin.plugin.entity.EntityType) are transformed >>>>> into following representation: >>>>> >>>>> { entityId: "[BusinessEntityGuidAsString]" } >>>>> >>>>> For example, a VM entity with entity ID "vm123" will translate to: >>>>> >>>>> { entityId: "vm123" } >>>>> >>>>> Translation is currently based on >>>>> org.ovirt.engine.core.common.businessentities.BusinessEntity interface, >>>>> like so: "BusinessEntity<? extends NGuid>" (we expect ID type >>>>> parameter to be NGuid-compatible). However, I've found that there are >>>>> some entities (like Pool - >>>>> org.ovirt.engine.core.common.businessentities.vm_pools) that don't >>>>> implement BusinessEntity interface. >>>> >>>> ok, so we only pass the ID for now. good. >>>> >>>>> >>>>> Quick question to backend folks - IIRC all entities extend >>>>> org.ovirt.engine.core.common.businessentities.IVdcQueryable, but not all >>>>> entities implement >>>>> org.ovirt.engine.core.common.businessentities.BusinessEntity interface. >>>>> What is the precise relation between IVdcQueryable and BusinessEntity? >>>>> >>>>> As for UI plugins, currently all entities get translated to above >>>>> mentioned basic JSON-like representation. You can see the relevant code in >>>>> org.ovirt.engine.ui.webadmin.plugin.entity.BaseEntity.from() static >>>>> method. There's a TODO that says "make this class [BaseEntity] abstract >>>>> and create specific entity for >>>>> each EntityType" - this means we are planning to extend the above >>>>> mentioned basic JSON-like representation for different entity types. >>>>> >>>>> For example, for a VM entity we might do: >>>>> >>>>> { entityId: "[BusinessEntityGuidAsString]", osType: "[VmOsType]" } >>>> >>>> just make sure the entity matches the REST API entity. >>>> (which probably means entityId should be changed to id?) >>> >>> if we plan moving UI on top of API, you should be: >>> >>> 1. importing restapi-types project >>> 2. writing intermediate layer to translate BE entities to API's using #1 >>> 3. using public entities from #2 >>> >>> this way your future migration to API (instead of native BE) will be much >>> more easier. >>> >>>> >>>>> >>>>> Vojtech >>>>> >>>>> >>>>> ----- Original Message ----- >>>>> From: "Itamar Heim" <ih...@redhat.com> >>>>> To: "Vojtech Szocs" <vsz...@redhat.com> >>>>> Cc: "engine-devel" <engine-devel@ovirt.org> >>>>> Sent: Friday, November 16, 2012 5:24:52 PM >>>>> Subject: Re: [Engine-devel] UI Plugins: PoC patch revision 7 is here >>>>> >>>>> On 11/16/2012 06:08 PM, Vojtech Szocs wrote: >>>>>>> is there a clear list of all APIs supported now? >>>>>> >>>>>> Not yet, unfortunately, this should be part of "for plugin developers" >>>>>> wiki that is planned to be written in upcoming weeks. >>>>> >>>>> i just wanted to review how we solved not using internal entities as >>>>> part of the API >>>>> >>>> >>>> >>> >>> >> >> > > -- Michael Pasternak RedHat, ENG-Virtualization R&D _______________________________________________ Engine-devel mailing list Engine-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-devel