5 // Created by Hori,Masaki on 2014/03/23.
6 // Copyright (c) 2014年 Hori,Masaki. All rights reserved.
9 #import "HMTSVSupport.h"
13 #define PATH_KEY2(key1, key2) [NSString stringWithFormat:@"%@.%@", (key1), (key2)]
14 #define PATH_KEY3(key1, key2, key3) [NSString stringWithFormat:@"%@.%@.%@", (key1), (key2), (key3)]
16 @interface HMTSVSupport ()
17 @property HMLocalDataStore *store;
19 @implementation HMTSVSupport
21 - (NSManagedObjectContext *)managedObjectContext
24 return self.store.managedObjectContext;
27 self.store = [HMLocalDataStore oneTimeEditor];
29 return self.store.managedObjectContext;
32 #pragma mark## Save to Text file ##
33 - (NSArray *)allObjectOfEntityName:(NSString *)entityName sortDescriptors:(NSArray *)sortDescriptors
37 NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:entityName];
38 [fetch setSortDescriptors:sortDescriptors];
39 NSArray *fetchedArray = [self.managedObjectContext executeFetchRequest:fetch
42 NSLog(@"%@", [error localizedDescription]);
48 - (NSArray *)allObjectOfEntityName:(NSString *)entityName sortBy:(NSString *)propertyName ascending:(BOOL)ascending
50 NSSortDescriptor *sort = nil;
53 sort = [NSSortDescriptor sortDescriptorWithKey:propertyName ascending:ascending];
56 return [self allObjectOfEntityName:entityName sortDescriptors:sort ? @[sort] : nil];
58 - (NSArray *)allObjectOfEntityName:(NSString *)entityName
60 return [self allObjectOfEntityName:entityName sortDescriptors:nil];
62 - (void)saveLFSeparetedArray:(NSArray *)array toFile:(NSString *)path
66 NSString *saveText = [array componentsJoinedByString:@"\n"];
67 [saveText writeToFile:path
69 encoding:NSUTF8StringEncoding
72 NSLog(@"%@", [error localizedDescription]);
75 - (NSData *)dataFromLFSeparatedArray:(NSArray *)array
77 NSString *saveText = [array componentsJoinedByString:@"\n"];
78 return [saveText dataUsingEncoding:NSUTF8StringEncoding];
80 - (NSData *)dataOfKaihatuHistory
82 NSArray *allObject = [self allObjectOfEntityName:@"KaihatuHistory"
85 if([allObject count] == 0) return nil;
87 NSMutableArray *array = [NSMutableArray array];
88 for(HMKaihatuHistory *obj in allObject) {
89 NSString *element = [[NSString alloc] initWithFormat:@"%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@",
90 obj.date, obj.fuel, obj.bull,
91 obj.steel, obj.bauxite, obj.kaihatusizai,
92 obj.name, obj.flagShipName, obj.flagShipLv, obj.commanderLv
94 [array addObject:element];
97 return [self dataFromLFSeparatedArray:array];
99 - (NSData *)dataOfKenzoHistory
101 NSArray *allObject = [self allObjectOfEntityName:@"KenzoHistory"
104 if([allObject count] == 0) return nil;
106 NSMutableArray *array = [NSMutableArray array];
107 for(HMKenzoHistory *obj in allObject) {
108 NSString *element = [[NSString alloc] initWithFormat:@"%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@",
109 obj.date, obj.fuel, obj.bull,
110 obj.steel, obj.bauxite, obj.kaihatusizai,
111 obj.name, obj.sTypeId, obj.flagShipName,
112 obj.flagShipLv, obj.commanderLv
114 [array addObject:element];
117 return [self dataFromLFSeparatedArray:array];
119 - (NSData *)dataOfKenzoMark
121 NSArray *allObject = [self allObjectOfEntityName:@"KenzoMark"
124 if([allObject count] == 0) return nil;
126 NSMutableArray *array = [NSMutableArray array];
127 for(HMKenzoMark *obj in allObject) {
128 NSString *element = [[NSString alloc] initWithFormat:@"%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@\t%@",
129 obj.created_ship_id, obj.fuel, obj.bull, obj.steel,
130 obj.bauxite, obj.kaihatusizai, obj.kDockId,
131 obj.flagShipName, obj.flagShipLv, obj.commanderLv
133 [array addObject:element];
136 return [self dataFromLFSeparatedArray:array];
138 - (IBAction)save:(id)sender
140 NSSavePanel *panel = [NSSavePanel savePanel];
141 [panel setAllowedFileTypes:@[@"kcdlocaldata"]];
143 [panel beginWithCompletionHandler:^(NSInteger result) {
144 if(result != NSOKButton) return;
146 NSString *path = [panel.URL path];
148 NSFileWrapper *fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil];
149 [fileWrapper setFilename:[path lastPathComponent]];
150 [fileWrapper addRegularFileWithContents:[self dataOfKaihatuHistory]
151 preferredFilename:@"kaihatu.tsv"];
152 [fileWrapper addRegularFileWithContents:[self dataOfKenzoHistory]
153 preferredFilename:@"kenzo.tsv"];
154 [fileWrapper addRegularFileWithContents:[self dataOfKenzoMark]
155 preferredFilename:@"kenzoMark.tsv"];
157 [fileWrapper writeToFile:path atomically:YES updateFilenames:NO];
161 #pragma mark## Initialize from Text ##
162 - (NSArray *)arrayFromLFSeparatedStringData:(NSData *)data
164 NSString *content = [[NSString alloc] initWithData:data
165 encoding:NSUTF8StringEncoding];
166 return [content componentsSeparatedByString:@"\x0a"];
169 - (NSArray *)arrayFromTabSeparatedString:(NSString *)string
171 return [string componentsSeparatedByString:@"\t"];
174 - (BOOL)isEmptyEntityName:(NSString *)name
176 NSError *error = nil;
177 NSFetchRequest *fetch;
180 fetch = [[NSFetchRequest alloc] init];
181 [fetch setEntity:[NSEntityDescription entityForName:name
182 inManagedObjectContext:self.managedObjectContext]];
183 num = [self.managedObjectContext countForFetchRequest:fetch
187 NSLog(@"%@", [error localizedDescription]);
194 - (void)buildKaihatuHistoryFromData:(NSData *)data
196 NSString *entityName = @"KaihatuHistory";
198 HMLocalDataStore *lds = [HMLocalDataStore oneTimeEditor];
199 NSManagedObjectContext *moc = [lds managedObjectContext];
201 contents = [self arrayFromLFSeparatedStringData:data];
203 for(attribute in contents) {
204 NSArray *attr = [self arrayFromTabSeparatedString:attribute];
205 if(attr.count == 0) continue;
206 if([attr[6] isKindOfClass:[NSNull class]]) continue;
207 if([attr[6] isEqual:@"(null)"]) continue;
209 NSArray *array = [lds objectsWithEntityName:entityName
211 predicate:[NSPredicate predicateWithFormat:@"date = %@", [NSDate dateWithString:attr[0]]]
213 if(array.count != 0) continue;
215 HMKaihatuHistory *obj = [NSEntityDescription insertNewObjectForEntityForName:entityName
216 inManagedObjectContext:moc];
217 obj.date = [NSDate dateWithString:attr[0]];
218 obj.fuel = @([attr[1] integerValue]);
219 obj.bull = @([attr[2] integerValue]);
220 obj.steel = @([attr[3] integerValue]);
221 obj.bauxite = @([attr[4] integerValue]);
222 obj.kaihatusizai = @([attr[5] integerValue]);
224 obj.flagShipName = attr[7];
225 obj.flagShipLv = @([attr[8] integerValue]);
226 obj.commanderLv = @([attr[9] integerValue]);
229 - (void)buildKenzoHistoryFromData:(NSData *)data
231 NSString *entityName = @"KenzoHistory";
233 HMLocalDataStore *lds = [HMLocalDataStore oneTimeEditor];
235 contents = [self arrayFromLFSeparatedStringData:data];
237 for(attribute in contents) {
238 NSArray *attr = [self arrayFromTabSeparatedString:attribute];
239 if(attr.count == 0) continue;
240 if([attr[6] isKindOfClass:[NSNull class]]) continue;
241 if([attr[6] isEqual:@"(null)"]) continue;
243 NSArray *array = [lds objectsWithEntityName:entityName
245 predicate:[NSPredicate predicateWithFormat:@"date = %@", [NSDate dateWithString:attr[0]]]
247 if(array.count != 0) continue;
249 HMKenzoHistory *obj = [NSEntityDescription insertNewObjectForEntityForName:entityName
250 inManagedObjectContext:lds.managedObjectContext];
252 obj.date = [NSDate dateWithString:attr[0]];
253 obj.fuel = @([attr[1] integerValue]);
254 obj.bull = @([attr[2] integerValue]);
255 obj.steel = @([attr[3] integerValue]);
256 obj.bauxite = @([attr[4] integerValue]);
257 obj.kaihatusizai = @([attr[5] integerValue]);
259 obj.sTypeId = @([attr[7] integerValue]);
260 obj.flagShipName = attr[8];
261 obj.flagShipLv = @([attr[9] integerValue]);
262 obj.commanderLv = @([attr[10] integerValue]);
265 - (void)buildKenzoMarkFromData:(NSData *)data
267 NSString *entityName = @"KenzoMark";
269 if([self isEmptyEntityName:entityName]) {
270 HMLocalDataStore *lds = [HMLocalDataStore oneTimeEditor];
271 NSManagedObjectContext *moc = [lds managedObjectContext];
273 contents = [self arrayFromLFSeparatedStringData:data];
275 for(attribute in contents) {
276 NSArray *attr = [self arrayFromTabSeparatedString:attribute];
277 if([attr count] < 1) continue;
279 HMKenzoMark *obj = [NSEntityDescription insertNewObjectForEntityForName:entityName
280 inManagedObjectContext:moc];
281 obj.created_ship_id = @([attr[0] integerValue]);
282 obj.fuel = @([attr[1] integerValue]);
283 obj.bull = @([attr[2] integerValue]);
284 obj.steel = @([attr[3] integerValue]);
285 obj.bauxite = @([attr[4] integerValue]);
286 obj.kaihatusizai = @([attr[5] integerValue]);
287 obj.kDockId = @([attr[6] integerValue]);
288 obj.flagShipName = attr[7];
289 obj.flagShipLv = @([attr[8] integerValue]);
290 obj.commanderLv = @([attr[9] integerValue]);
295 - (IBAction)load:(id)sender
297 NSOpenPanel *panel = [NSOpenPanel openPanel];
298 [panel setAllowedFileTypes:@[@"kcdlocaldata"]];
300 [panel beginWithCompletionHandler:^(NSInteger result) {
301 if(result != NSOKButton) return;
303 NSFileWrapper *wrapper = [[NSFileWrapper alloc] initWithURL:panel.URL
306 NSDictionary *children = [wrapper fileWrappers];
307 NSFileWrapper *kaihatu = [children objectForKey:@"kaihatu.tsv"];
308 [self buildKaihatuHistoryFromData:[kaihatu regularFileContents]];
310 NSFileWrapper *kenzo = [children objectForKey:@"kenzo.tsv"];
311 [self buildKenzoHistoryFromData:[kenzo regularFileContents]];
313 NSFileWrapper *kenzoMark = [children objectForKey:@"kenzoMark.tsv"];
314 [self buildKenzoMarkFromData:[kenzoMark regularFileContents]];