that's the idea
On Fri, Jan 4, 2013 at 3:07 PM, Douglas Campos <qmx(a)qmx.me> wrote:
Ah so the mapping is reversed then?
On 04/01/2013, at 11:16, Matthias Wessendorf <matzew(a)apache.org> wrote:
> There is some code in Mantle, which does that; my look up mechanism will
borrow that - but that's an impl detail
>
> The mapper goal is really just to say JSON "key" 'blah' is mapped
to
'foo' on the actual bean (not about the specific types)
>
> Makes sense?
>
> -M
>
>
> On Fri, Jan 4, 2013 at 2:09 PM, Douglas Campos <qmx(a)qmx.me> wrote:
> how the mapper deals with nested objects?
>
> On 04/01/2013, at 08:55, Matthias Wessendorf <matzew(a)apache.org> wrote:
>
> > CoreData: API proposal - AGEntityMapper
> > Background
> > Mapping JSON representations to a "rich" domain model in ObjC is a
bit
cumbersome. Similar is true when mapping a JSON data/response to a
NSMangedObject (and vise versa). There is a base framework for "remote
persistence", via the CoreData API, by leveraging a custom
NSIncrementalStore -> AFIncrementalStore.
> >
> > For that,... a similar two-way-mapping is required, as described here.
> >
> > AeroGear and CoreData
> > Our CoreData offerings are leveraging the AFIncrementalStore,
therefore (as with other frameworks/libraries) we need a mapping as well.
We need to know the name of the entity and we need a NSDictionary that
covers the actual JSON/property mapping. It could be done with the vanialla
ObjC classes:
> >
> > // some mappers:
> > NSDictionary *task_mapper =
> >
> >
> > [NSDictionary
dictionaryWithObjectsAndKeys:@"description",@"desc",@"id",@"myId",
nil];
> > NSDictionary *project_mapper =
> >
> >
> > [NSDictionary dictionaryWithObjectsAndKeys:@"id",@"myId",
nil];
> >
> >
> >
> > // create a schema out of the mappers:
> > NSDictionary *schema =
> >
> >
> > [NSDictionary dictionaryWithObjectsAndKeys:task_mapper, @"Task",
project_mapper, @"Project", nil];
> >
> >
> >
> > // pass the schema to the AGCoreDataHelper class, when doing the
init...
> > Proposal for a custom API
> > I'd like to introduce a new wrapper type, called AGEntityMapper:
> >
> > @interface AGEnityMapper : NSObject
> >
> >
> >
> > @property NSString *name;
> > @property NSDictionary *mapper;
> >
> >
> >
> > -(id) initWithName:(NSString *) name mapper:(NSDictionary *) mapper;
> > @end
> > This AGEntityMapper would be applied onto the AGCoreDataConfig:
> >
> > @protocol AGCoreDataConfig <NSObject>
> >
> >
> >
> > @property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
> > @property (strong, nonatomic) NSURL *baseURL;
> >
> >
> >
> > -(void)applyEntityMappers:(AGEnityMapper *)firstObject, ...
NS_REQUIRES_NIL_TERMINATION;
> >
> >
> >
> > @end
> > The actual code, would look like this:
> >
> > EnityMapper *taskMapper =
> >
> >
> > [[EnityMapper alloc] initWithName:@"Task"
> >
> >
> > // mapping the properties on the "entity" (NSManagedObject)
> >
> >
> > // to the external representation (e.g. JSON)
> >
> >
> > mapper:@{ @"desc": @"description", @"myId":
@"id"}];
> >
> >
> >
> > EnityMapper *projectMapper =
> >
> >
> > [[EnityMapper alloc] initWithName:@"Project"
> >
> >
> > // mapping the properties on the "entity" (NSManagedObject)
> >
> >
> > // to the external representation (e.g. JSON)
> >
> >
> > mapper:@{ @"myId": @"id"}];
> >
> >
> >
> > AGCoreDataHelper *helper = [[AGCoreDataHelper alloc]
initWithConfig:^(id<AGCoreDataConfig> config) {
> >
> >
> >
> > [config setBaseURL:[NSURL URLWithString:@"http://server.com"]];
> >
> >
> >
> > [config applyEntityMappers:
> >
> >
> > taskMapper,
> >
> >
> > projectMapper,
> >
> >
> > nil // terminate the varargs.
> >
> >
> > ];
> > }];
> >
> > --
> > Matthias Wessendorf
> >
> > blog:
http://matthiaswessendorf.wordpress.com/
> > sessions:
http://www.slideshare.net/mwessendorf
> > twitter:
http://twitter.com/mwessendorf
> > _______________________________________________
> > aerogear-dev mailing list
> > aerogear-dev(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>
>
> --
> Matthias Wessendorf
>
> blog:
http://matthiaswessendorf.wordpress.com/
> sessions:
http://www.slideshare.net/mwessendorf
> twitter:
http://twitter.com/mwessendorf
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/aerogear-dev
_______________________________________________
aerogear-dev mailing list
aerogear-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev