
{{#models}}{{#model}}
#import "{{classname}}ManagedObjectBuilder.h"

/**
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen
* Do not edit the class manually.
*/

@implementation {{classname}}ManagedObjectBuilder

-(instancetype)init {
    self = [super init];
    if (self != nil) {
{{#isArrayModel}}    _entriesBuilder = [[{{arrayModelType}}ManagedObjectBuilder alloc] init];
{{/isArrayModel}}{{#vars}}{{#complexType}}{{^isMapContainer}}       _{{name}}Builder = [[{{complexType}}ManagedObjectBuilder alloc] init];
{{/isMapContainer}}{{/complexType}}{{/vars}}    }
    return self;
}

-({{classname}}ManagedObject*)createNew{{classname}}ManagedObjectInContext:(NSManagedObjectContext*)context {
    {{classname}}ManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([{{classname}}ManagedObject class]) inManagedObjectContext:context];
    return managedObject;
}

-({{classname}}ManagedObject*){{classname}}ManagedObjectFrom{{classname}}:({{classname}}*)object context:(NSManagedObjectContext*)context {
    {{classname}}ManagedObject* new{{classname}} = [self createNew{{{classname}}}ManagedObjectInContext:context];
    [self update{{classname}}ManagedObject:new{{classname}} with{{classname}}:object];
    return new{{classname}};
}

-(void)update{{classname}}ManagedObject:({{classname}}ManagedObject*)managedObject with{{classname}}:({{classname}}*)object {
    if(!managedObject || !object) {
        return;
    }
    NSManagedObjectContext* context = managedObject.managedObjectContext;
{{#vars}}{{^complexType}}    managedObject.{{name}} = [object.{{name}} copy];{{/complexType}}{{#complexType}}{{#isListContainer}}    if(managedObject.{{name}}) {
        for (id object in managedObject.{{name}}) {
            [context deleteObject:object];
        }
    }
    if(object.{{name}}) {
        NSMutableOrderedSet * convertedObjs = [NSMutableOrderedSet orderedSet];
        for (id innerObject in object.{{name}}) {
            id convertedObj = [self.{{name}}Builder {{complexType}}ManagedObjectFrom{{complexType}}:innerObject context:managedObject.managedObjectContext];
            [convertedObjs addObject:convertedObj];
        }
        managedObject.{{name}} = convertedObjs;
    }{{/isListContainer}}{{^isListContainer}}{{^isMapContainer}}
    if(!managedObject.{{name}}) {
        managedObject.{{name}} = [self.{{name}}Builder {{complexType}}ManagedObjectFrom{{complexType}}:object.{{name}} context:managedObject.managedObjectContext];
    } else {
        [self.{{name}}Builder update{{complexType}}ManagedObject:managedObject.{{name}} with{{complexType}}:object.{{name}}];
    }{{/isMapContainer}}{{#isMapContainer}}managedObject.{{name}} = [object.{{name}} copy];{{/isMapContainer}}{{/isListContainer}}{{/complexType}}
{{/vars}}{{#isArrayModel}}    NSMutableOrderedSet * convertedObjs = [NSMutableOrderedSet orderedSet];
    for (id innerObject in object) {
        id convertedObj = [self.entriesBuilder {{arrayModelType}}ManagedObjectFrom{{arrayModelType}}:innerObject context:managedObject.managedObjectContext];
        [convertedObjs addObject:convertedObj];
    }
    managedObject.entries = convertedObjs;{{/isArrayModel}}
}

-({{classname}}*){{classname}}From{{classname}}ManagedObject:({{classname}}ManagedObject*)obj {
    if(!obj) {
        return nil;
    }
    {{classname}}* new{{classname}} = [[{{classname}} alloc] init];
    [self update{{classname}}:new{{classname}} with{{classname}}ManagedObject:obj];
    return new{{classname}};
}

-(void)update{{classname}}:({{classname}}*)new{{classname}} with{{classname}}ManagedObject:({{classname}}ManagedObject*)obj {
{{#isArrayModel}}        [new{{classname}} removeAllObjects];
        NSMutableArray* convertedObjs = [NSMutableArray array];
        for (id innerObject in obj.entries) {
            id convertedObj = [self.entriesBuilder {{arrayModelType}}From{{arrayModelType}}ManagedObject:innerObject];
            [convertedObjs addObject:convertedObj];
        }
        [new{{classname}} addObjectsFromArray:convertedObjs];
{{/isArrayModel}}{{#vars}}{{^complexType}}    new{{classname}}.{{name}} = [obj.{{name}} copy];{{/complexType}}{{#complexType}}{{#isListContainer}}    if(obj.{{name}} != nil) {
        NSMutableArray* convertedObjs = [NSMutableArray array];
        for (id innerObject in obj.{{name}}) {
            id convertedObj = [self.{{name}}Builder {{complexType}}From{{complexType}}ManagedObject:innerObject];
            [convertedObjs addObject:convertedObj];
        }
        new{{classname}}.{{name}} = ({{{ datatype }}})convertedObjs;
    }
    {{/isListContainer}}{{^isListContainer}}    new{{classname}}.{{name}} = [self.{{name}}Builder {{complexType}}From{{complexType}}ManagedObject:obj.{{name}}];{{/isListContainer}}{{/complexType}}
    {{/vars}}
}

@end
{{/model}}
{{/models}}