[ 
https://issues.apache.org/jira/browse/OLINGO-482?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14291424#comment-14291424
 ] 

Ramesh Reddy commented on OLINGO-482:
-------------------------------------

[~mirbo] This weekend I took stab at the API, (this is work very much in 
progress, I wanted to show you before I spent too much into it). Apart from the 
what I mentioned above, it also removes lot of boiler plate code from the 
service implementation. Please take a look at it and let me know what you 
think. Obviously I am willing to make adjustments as we see it we think this is 
good design.

I used my git repo for this code 
[https://github.com/rareddy/teiid/tree/TEIID-2973/olingo/src/main/java/org/apache/olingo/server/core]


> Refactoring of {{Processor}} interfaces
> ---------------------------------------
>
>                 Key: OLINGO-482
>                 URL: https://issues.apache.org/jira/browse/OLINGO-482
>             Project: Olingo
>          Issue Type: Improvement
>          Components: odata4-server
>    Affects Versions: V4 4.0.0-beta-01
>            Reporter: Michael Bolz
>            Assignee: Michael Bolz
>         Attachments: processor.png, request_model.png, response_model.png
>
>
> h2. Idea
> During the introduction of the {{RepresentationType}} a discussion has 
> started about re-factoring of the {{Processor}} interfaces.
> The new idea is to create an own {{*Processor}} interface for each 
> {{RepresentationType}} which then has the according HTTP methods (in form of 
> read/write/..).
> As a result we don’t have explicit {{ProcedureProcessor}} because during the 
> dispatching the {{ReturnType}} of an e.g. Function is evaluated and the call 
> is than processed by the according e.g. {{EntityProcessor}} or 
> {{EntitySetProcessor}} or {{SomeOtherProcessor}}.
> For the {{ProcessorInterfaces}} the return type ({{RepresentationType}}) and 
> its content is leading (and NOT the format). According to this each return 
> type (RepresentationType) results in an own {{*Processor}} Interface with 
> methods for the possible HTTP Requests (see Mapping HTTP Request -> Processor 
> Method). For some exception the return types should be added as method to an 
> existing {{Processor}} Interface.
> As example the {{readPrimitiveAsValue(..)}} method should be added at 
> {{EntityProcessor}}. On the other side for the {{countXX(...)}} methods an 
> own {{Processor}} should be created because the result is not the content of 
> the entity (in a different format).
> h2. Mapping HTTP Request -> Processor Methode
> * HTTP GET -> read_XX(...)
> * HTTP POST -> create_XX(...)
> * HTTP PUT -> update_XX(...)
> ** HTTP PATCH -> update_XX(...)
> * HTTP DELETE -> delete_XX(...)
> h2. Processor Interfaces
> * ServiceDocument - R
> * Metadata - R
> * Error - P rocess
> * Batch - P rocess
> * Entity - CRUD
> * EntityCollection - R
> * Primitive - RUD
> * PrimitiveCollection - RUD
> * Complex - RUD
> * ComplexCollection - RUD
> * Count Processor als
> **  Count - R
>      oder
> ** CountEntityCollection - R
> ** CountPrimitiveCollection - R
> ** CountComplexCollection - R
> * Media - CRUD => Create Media at {{EntityProcessor}}
> * -Binary - CRUD-
> * -Value - CRUD- => Added as  {{readPrimitiveAsValue(...)}} Methode at the 
> {{PrimitiveTypeProcessor}}
> * Reference - CRUD
> * ReferenceCollection - RU\[?\]
> * Difference (Delte/Tombstone) - R



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to