OSDN Git Service

MappingConfigurationを簡略化
[kcd/KCD.git] / KCD / AirBaseMapper.swift
1 //
2 //  AirBaseMapper.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/02/25.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10 import SwiftyJSON
11
12 class AirBaseMapper: JSONMapper {
13     typealias ObjectType = AirBase
14     
15     let apiResponse: APIResponse
16     let configuration = MappingConfiguration(entity: AirBase.entity,
17                                              dataKeys: ["api_data", "api_air_base"],
18                                              primaryKeys: ["area_id", "rid"],
19                                              editorStore: ServerDataStore.oneTimeEditor())
20     
21     required init(_ apiResponse: APIResponse) {
22         self.apiResponse = apiResponse
23     }
24
25     func handleExtraValue(_ value: JSON, forKey key: String, to airbase: AirBase) -> Bool {
26         if key != "api_plane_info" { return false }
27         
28         if airbase.planeInfo.count == 0 {
29             if let store = configuration.editorStore as? ServerDataStore {
30                 let new: [AirBasePlaneInfo] = (0..<4).flatMap {_ in
31                     store.createAirBasePlaneInfo()
32                 }
33                 airbase.planeInfo = NSOrderedSet(array: new)
34             }
35         }
36         
37         guard let planeInfos = value.array
38             else {
39                 print("value is wrong")
40                 return false
41         }
42         guard let infos = airbase.planeInfo.array as? [AirBasePlaneInfo]
43             else {
44                 print("airbase is wrong")
45                 return false
46         }
47         zip(infos, planeInfos).forEach { (info, dict) in
48             guard let slotid = dict["api_slotid"].int,
49                 slotid != 0
50                 else { return }
51             guard let cond = dict["api_cond"].int,
52                 let count = dict["api_count"].int,
53                 let maxCount = dict["api_max_count"].int,
54                 let squadronid = dict["api_squadron_id"].int,
55                 let state = dict["api_state"].int
56                 else { return print("planeInfos is wrong") }
57             info.cond = cond
58             info.count = count
59             info.max_count = maxCount
60             info.slotid = slotid
61             info.squadron_id = squadronid
62             info.state = state
63             info.airBase = airbase
64         }
65         return true
66     }
67 }