OSDN Git Service

60f64b436deba4ba290e194d58cf65eea70cdf0d
[kybernetes/Kybernetes.git] / base / command / template / abCommand.cs
1 using com.andoutomo.kybernetes.view;\r
2 using com.andoutomo.kybernetes.control;\r
3 \r
4 namespace com.andoutomo.kybernetes.command\r
5 {\r
6     public abstract class AbCommand\r
7     {\r
8         protected abstract bool execute();\r
9 \r
10 \r
11         protected abstract string turnMessage();\r
12         protected abstract string turnErrorMessage();\r
13         protected abstract string turnSplitErrorMessage();\r
14 \r
15         protected BaseForm form;\r
16         protected CommandArg argument;\r
17 \r
18 \r
19         /// <summary>\r
20         /// 処理を実行する<br />\r
21         /// 各継承先クラスで指定された、splitArguments及び\r
22         /// executeを呼び出す。\r
23         /// </summary>\r
24         /// <param name="_args">呼び出す前に指定された引数(コマンドラインからなので、それを受け取る)</param>\r
25         /// <param name="_form">フォーム情報。ここからフォームを操作できるようにします。</param>\r
26         /// <returns></returns>\r
27         public bool run(CommandArg _args, BaseForm _form)\r
28         {\r
29             KybernetesLogger.Log.debug("run start on " + this.GetType().ToString());\r
30             if (_args.getSplitResult() == false)\r
31             {\r
32                 KybernetesLogger.Log.debug("split failed at " + _args.GetType().ToString());\r
33                 message = turnSplitErrorMessage();\r
34                 return false;\r
35             }\r
36 \r
37             this.argument = _args;\r
38             this.form = _form;\r
39 \r
40             if (execute())\r
41             {\r
42                 message = turnMessage();\r
43                 KybernetesLogger.Log.debug("run success on " + this.GetType().ToString());\r
44                 KybernetesLogger.Log.debug("message:" + message);\r
45 \r
46                 if (chain)\r
47                 {\r
48                     chainCommand.run(chainCommandArg, _form);\r
49                 }\r
50 \r
51                 return true;\r
52             }\r
53             else\r
54             {\r
55                 message = turnErrorMessage();\r
56                 KybernetesLogger.Log.debug("run failure on " + this.GetType().ToString());\r
57                 KybernetesLogger.Log.debug("message:" + message);\r
58 \r
59                 return false;\r
60             }\r
61         }\r
62 \r
63         private string message;\r
64 \r
65         \r
66         /// <summary>\r
67         /// 処理完了後のメッセージを呼び出し元に返す。\r
68         /// </summary>\r
69         /// <returns>メッセージ</returns>\r
70         public string getMessage()\r
71         {\r
72             return message;\r
73         }\r
74 \r
75         protected ErrorType errorType\r
76         {\r
77             private get;\r
78             set;\r
79         }\r
80 \r
81         protected string DefaultErrorMessage\r
82         {\r
83             get\r
84             {\r
85                 string errorMessage;\r
86                 switch(errorType){\r
87                     case ErrorType.DataNotFound:\r
88                         errorMessage = "対象データが見つかりません。";\r
89                         break;\r
90                     case ErrorType.Unexpected:\r
91                     default:\r
92                         errorMessage = "予期せぬエラーが発生いたしました。";\r
93                         break;\r
94 \r
95                 }\r
96                 return errorMessage;\r
97             \r
98             }\r
99         }\r
100         protected string DefaultSplitErrorMessage\r
101         {\r
102             get { return "無効なパラメータです。"; }\r
103         }\r
104         protected string DefaultNormalMessage\r
105         {\r
106             get { return "> ";}\r
107         }\r
108         private CommandArg chainCommandArg;\r
109         private AbCommand chainCommand;\r
110         private bool chain;\r
111         //このコマンド実行後に実施する追加コマンドを設定します。\r
112         protected void setChainCommand(CommandArg arg, AbCommand cmd)\r
113         {\r
114             if (arg != null && cmd != null)\r
115             {\r
116                 this.chainCommandArg = arg;\r
117                 this.chainCommand = cmd;\r
118                 chain = true;\r
119             }\r
120             else\r
121             {\r
122                 chain = false;\r
123             }\r
124         }\r
125 \r
126     }\r
127     public enum ErrorType\r
128     {\r
129         Unexpected,\r
130         DataNotFound,\r
131 \r
132     }\r
133 \r
134 }\r