;-)
On Fri, Jan 4, 2013 at 4:08 PM, Matthias Wessendorf <matzew(a)apache.org>wrote:
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
>
--
Matthias Wessendorf
blog:
http://matthiaswessendorf.wordpress.com/
sessions:
http://www.slideshare.net/mwessendorf
twitter:
http://twitter.com/mwessendorf