OSDN Git Service

Entityをジェネリクスにし、それに伴いCoreData関連もジェネリクスにした
[kcd/KCD.git] / KCD / ResourceHistoryDataStore.swift
1 //
2 //  ResourceHistoryDataStore.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/06.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 extension CoreDataIntormation {
12     static let resourceHistory = CoreDataIntormation(
13         modelName: "ResourceHistory",
14         storeFileName: "ResourceHistory.storedata",
15         storeOptions:[NSMigratePersistentStoresAutomaticallyOption: true,
16                       NSInferMappingModelAutomaticallyOption: true],
17         storeType: NSSQLiteStoreType,
18         deleteAndRetry: false
19     )
20 }
21 extension CoreDataCore {
22     static let resourceHistory = CoreDataCore(.resourceHistory)
23 }
24
25
26 class ResourceHistoryDataStore: CoreDataAccessor, CoreDataManager {
27     static var `default` = ResourceHistoryDataStore(type: .reader)
28     class func oneTimeEditor() -> ResourceHistoryDataStore {
29         return ResourceHistoryDataStore(type: .editor)
30     }
31     
32     required init(type: CoreDataManagerType) {
33         managedObjectContext =
34             type == .reader ? core.parentManagedObjectContext
35                 : core.editorManagedObjectContext()
36     }
37     deinit {
38         saveActionCore()
39     }
40     
41     let core = CoreDataCore.resourceHistory
42     var managedObjectContext: NSManagedObjectContext
43 }
44
45 extension KCResource: EntityProvider {
46     override class var entityName: String { return "Resource" }
47 }
48
49 extension ResourceHistoryDataStore {
50     func resources(in minites: [Int], older: Date) -> [KCResource] {
51         let p = NSPredicate(format: "minute IN %@ AND date < %@", minites, older as NSDate)
52         guard let resources = try? objects(with: KCResource.entity, predicate: p)
53             else { return [] }
54         return resources
55     }
56     func cerateResource() -> KCResource? {
57         return insertNewObject(for: KCResource.entity)
58     }
59 }