UNICORN - iOS
ModelBase.h
1 //
2 // ModelBase.h
3 //
4 // Created by saimushi on 2014/06/17.
5 // Copyright (c) 2014年 saimushi. All rights reserved.
6 //
7 
8 
9 // モデル参照モード
10 typedef enum{
11  IDResource,
12  myIDResource,
13  listedResource,
14  myListedResource,
15 } loadResourceMode;
16 
17 // 通信パケット監視用クラス
18 @interface ProgressAgent : NSObject
19 {
20  double packetSentBytes;
21  double totalSentBytes;
22  double totalBytes;
23 }
24 @property (nonatomic) double packetSentBytes;
25 @property (nonatomic) double totalSentBytes;
26 @property (nonatomic) double totalBytes;
27 @end
28 
29 
30 #import "Request.h"
31 #import "SBJsonAgent.h"
32 
33 @protocol ModelDelegate;
34 
35 @interface ModelBase : NSObject <RequestDelegate>
36 {
37  // モデルの共通規定値
38  NSString *protocol;
39  NSString *domain;
40  NSString *urlbase;
41  NSString *cryptKey;
42  NSString *cryptIV;
43  int timeout;
44  NSString *tokenKeyName;
45  NSString *deviceTokenKeyName;
46  NSString *modelName;
47  NSString *ID;
48  // 自分のリソースを参照する場合の修飾子(デフォルトでは必ず自分のリソース参照となるので、loadやsaveの際に空文字を入れて下さい)
49  NSString *myResourcePrefix;
50  // リクエストメソッド
51  NSString *requestMethod;
52  // モデルは原則配列を許容する
53  int index;
54  // ページング上のレコード総数
55  int total;
56  // テーブル上の該当レコード総件数
57  int records;
58  // XXX LIMIT OFFSETを自動化したく無い場合、-1を指定して下さい
59  int limit;
60  int offset;
61  NSMutableArray *list;
62  // 通信に関する変数
63  BOOL replaced;
64  BOOL requested;
65  // XXX DEEP RESTを利用しない場合はNOを指定して下さい
66  BOOL isDeep;
67  NSMutableDictionary *response;
68  int statusCode;
69  // Blockでハンドラを受け取るバージョンの為に用意
70  RequestCompletionHandler completionHandler;
71  // 非同期用にデレゲートを用意
72  id <ModelDelegate> delegate;
73  NSURLSessionTask* sessionDataTask;
74 }
75 
76 @property (strong, nonatomic) NSURLSessionTask *sessionDataTask;
77 @property (strong, nonatomic) NSString *modelName;
78 @property (strong, nonatomic) NSString *ID;
79 @property (nonatomic) int index;
80 @property (nonatomic) int total;
81 @property (nonatomic) int records;
82 @property (nonatomic) int limit;
83 @property (nonatomic) int offset;
84 @property (nonatomic) BOOL isDeep;
85 @property (strong, nonatomic) id<ModelDelegate> delegate;
86 
87 /* シングルトンでModelクラスを受け取る */
88 + (id)getInstance;
89 
90 /* 各種モデルの初期化処理 */
91 - (id)init:(NSString *)argProtocol :(NSString *)argDomain :(NSString *)argURLBase :(NSString *)argTokenKeyName;
92 - (id)init:(NSString *)argProtocol :(NSString *)argDomain :(NSString *)argURLBase :(NSString *)argTokenKeyName :(int)argTimeout;
93 /* トークンの生成時に暗号化を使う場合は以下のメソッドでinitする必要があります */
94 /* XXX また、暗号化鍵を渡さないでinitする場合は、- (NSString *)createToken; をオーバーライドして下さい! */
95 - (id)init:(NSString *)argProtocol :(NSString *)argDomain :(NSString *)argURLBase :(NSString *)argTokenKeyName :(NSString *)argCryptKey :(NSString *)argCryptIV;
96 - (id)init:(NSString *)argProtocol :(NSString *)argDomain :(NSString *)argURLBase :(NSString *)argTokenKeyName :(NSString *)argCryptKey :(NSString *)argCryptIV :(int)argTimeout;
97 - (id)init:(NSString *)argProtocol :(NSString *)argDomain :(NSString *)argURLBase :(NSString *)argTokenKeyName :(NSString *)argCryptKey :(NSString *)argCryptIV :(NSString *)argDeviceTokenKeyName :(int)argTimeout;
98 
99 /* モデルのデータを外部からJSON配列のまま貰ってModelの最初期化を行えるようにするモデルデータのアクセサ */
100 - (void)setModelData:(NSMutableArray *)argDataArray;
101 - (void)setModelData:(NSMutableArray *)argDataArray :(int)argIndex;
102 
103 // RESTfulURLの生成ロジック
104 // XXX システムによって実装が変わる場合はオーバーライドして適宜変更して下さい
105 - (NSString *)createURLString:(NSString *)argProtocol :(NSString *)argDomain :(NSString *)argURLBase :(NSString *)argMyResourcePrefix :(NSString *)argModelName :(NSString *)argResourceID;
106 
107 /* 単一モデルを読み込む(読み込み処理をモデル側で実装を変えたい場合はこのメソッドをオーバーライドする) */
108 - (BOOL)load:(loadResourceMode)argLoadResourceMode;
109 /* 単一モデルを読み込む(BlockでHandlerを受け取れるバージョン:読み込み処理をモデル側で実装を変えた場合はこのメソッドをオーバーライドする) */
110 - (BOOL)load:(loadResourceMode)argLoadResourceMode :(RequestCompletionHandler)argCompletionHandler;
111 /* 条件指定でモデルを読み込む(読み込み処理をモデル側で実装を変えた場合はこのメソッドをオーバーライドする) */
112 - (BOOL)query:(NSMutableDictionary *)argWhereParams :(loadResourceMode)argLoadResourceMode;
113 /* 条件指定でモデルを読み込む(BlockでHandlerを受け取れるバージョン:読み込み処理をモデル側で実装を変えた場合はこのメソッドをオーバーライドする) */
114 - (BOOL)query:(NSMutableDictionary *)argWhereParams :(loadResourceMode)argLoadResourceMode :(RequestCompletionHandler)argCompletionHandler;
115 
116 /* モデルを読み込む(Protected:参照処理の実態) */
117 - (BOOL)_load:(int)argListed :(NSMutableDictionary *)argParams;
118 /* モデルを保存する(モデルが継承してオーバーライドする空のメソッド定義) */
119 - (BOOL)save;
120 /* モデルを保存する(BlockでHandlerを受け取れるバージョン:読み込み処理をモデル側で実装を変えた場合はこのメソッドをオーバーライドする) */
121 - (BOOL)save:(RequestCompletionHandler)argCompletionHandler;
122 /* モデルを保存する(Protected:保存処理の実態) */
123 - (BOOL)_save:(NSMutableDictionary *)argSaveParams;
124 /* モデルを保存する(Protected:ファイル添付付き) */
125 /* XXX 大きいファイルのアップロードには- (BOOL)save:(NSMutableDictionary *)argSaveParams :(NSURL *)argUploadFilePath;を使って下さい! */
126 - (BOOL)_save:(NSMutableDictionary *)argSaveParams :(NSData *)argUploadData :(NSString *)argUploadDataName :(NSString *)argUploadDataContentType :(NSString *)argUploadDataKey;
127 /* ファイルを一つのモデルリソースと見立てて保存する(Protected:ファイルアップロード) */
128 /* PUTメソッドでのアップロード処理を強制します! POSTを利用したい場合は、小クラスで、メセッドの時実行前に「requestMethod」に「POST」を指定して下さい! */
129 - (BOOL)_save:(NSMutableDictionary *)argSaveParams :(NSURL *)argUploadFilePath;
130 
131 /* 特殊なメソッド1 インクリメント(加算:モデルが継承してオーバーライドする空のメソッド定義) */
132 - (BOOL)increment;
133 - (BOOL)_increment:(NSMutableDictionary *)argSaveParams;
134 /* 特殊なメソッド2 デクリメント(減算:モデルが継承してオーバーライドする空のメソッド定義) */
135 - (BOOL)decrement;
136 - (BOOL)_decrement:(NSMutableDictionary *)argSaveParams;
137 
139 //+ (void)saveIdentifier:(NSString *)argIdentifier :(NSString *)argCryptKey :(NSString *)argCryptIV;
141 //+ (NSString *)loadIdentifier:(NSString *)argCryptKey :(NSString *)argCryptIV;
142 //
144 //+ (void)saveOwnerID:(NSString *)argIdentifier :(NSString *)argCryptKey :(NSString *)argCryptIV;
146 //+ (NSString *)loadOwnerID:(NSString *)argCryptKey :(NSString *)argCryptIV;
147 //
149 //+ (void)saveOwnerName:(NSString *)argIdentifier :(NSString *)argCryptKey :(NSString *)argCryptIV;
151 //+ (NSString *)loadOwnerName:(NSString *)argCryptKey :(NSString *)argCryptIV;
152 //
154 //+ (void)saveOwnerImageURL:(NSString *)argIdentifier :(NSString *)argCryptKey :(NSString *)argCryptIV;
156 //+ (NSString *)loadOwnerImageURL:(NSString *)argCryptKey :(NSString *)argCryptIV;
157 
158 /* デバイストークンの保存 */
159 + (void)saveDeviceTokenString:(NSString *)argDeviceTokenString;
160 + (void)saveDeviceTokenData:(NSData *)argDeviceTokenData;
161 /* デバイストークンの読み込み */
162 + (NSString *)loadDeviceToken;
163 
164 // モデルの配列操作に関する処理
165 - (BOOL)next;
166 - (id)objectAtIndex:(int)argIndex;
167 - (void)insertObject:(ModelBase *)argModel :(int)argIndex;
168 - (void)replaceObject:(ModelBase *)argModel :(int)argIndex;
169 - (void)addObject:(ModelBase *)argModel;
170 - (void)removeObjectAtIndex:(int)argIndex;
171 
172 /* モデルの実態側でメソッドを実装して下さい! */
173 - (void)resetReplaceFlagment;
174 - (NSMutableDictionary *)convertModelData;
175 /* モデルデータをセットする(モデルが継承してオーバーライドする空のメソッド定義) */
176 - (void)_setModelData:(NSMutableDictionary *)argDataDic;
177 /* 該当のデータを持つModelのIndexの一覧を返す */
178 - (NSIndexSet *)search:(NSString *)argSearchKey :(NSString *)argSearchValue;
179 
180 // ステータスコードに応じたRESTfulエラーメッセージを表示
181 +(void)showRequestError:(int)argStatusCode;
182 
183 @end
184 
185 /* Modelの非同期通信用デレゲート */
186 /* Modelを非同期で使いたい場合だけ、Delegateに指定して下さい */
187 @protocol ModelDelegate <NSObject>
189 @optional
190 - (void)didReceiveValidateError:(NSString *)argValidateErrorMsg;
191 - (void)didReceiveMustUpdate:(NSString *)argUpdateURL;
192 - (void)didReceiveAppBadgeNum:(NSString *)argBadgeNumStr;
193 - (void)didReceiveNotifyMessage:(NSString *)argNotifyMessage;
194 - (void)didFinishSuccess:(ModelBase*)model :(NSHTTPURLResponse *)responseHeader :(NSString *)responseBody;
195 - (void)didFinishError:(ModelBase*)model :(NSHTTPURLResponse *)responseHeader :(NSString *)responseBody :(NSError *)failedHandler;
196 - (void)didChangeProgress:(ModelBase*)model :(ProgressAgent *)progressAgent;
197 
198 @end
Definition: ModelBase.h:188
Definition: Request.h:88
Definition: ModelBase.h:35
Definition: ModelBase.h:18