OSDN Git Service

構成変更のためファイルを置き直し。
[kybernetes/Kybernetes.git] / main / CmdDispatcher.cs
1 using System;\r
2 using com.andoutomo.kybernetes.view;\r
3 using com.andoutomo.kybernetes.data.accessor;\r
4 using com.andoutomo.kybernetes.data.DAO;\r
5 using com.andoutomo.kybernetes.command;\r
6 using System.Reflection;\r
7 using System.Collections.Generic;\r
8 \r
9 namespace com.andoutomo.kybernetes.control\r
10 {\r
11     public class CmdDispatcher\r
12     {\r
13         #region Singleton Setting\r
14         private static CmdDispatcher singleton;\r
15         private CmdDispatcher()\r
16         {\r
17         }\r
18         public static CmdDispatcher getDispatcher(BaseForm form)\r
19         {\r
20             if (singleton == null)\r
21             {\r
22                 singleton = new CmdDispatcher(form);\r
23             }\r
24             return singleton;\r
25         }\r
26 \r
27         private BaseForm baseForm;\r
28 \r
29         private CmdDispatcher(BaseForm form)\r
30         {\r
31             form.onCmdDispatch += new BaseForm.CmdDispatchEventHandler(form_onCmdDispatch);\r
32             this.baseForm = form;\r
33             \r
34         }\r
35         public BaseForm getForm()\r
36         {\r
37             return this.baseForm;\r
38         }\r
39 \r
40         private void form_onCmdDispatch(object sender, CmdDispatchEventArg e)\r
41         {\r
42             e.Result = dispatch(e.Command);\r
43         }\r
44 \r
45         #endregion\r
46         /// <summary>\r
47         /// コマンドをデータベースと照合して、処理の呼び出しを実施します。\r
48         /// </summary>\r
49         /// <param name="command"></param>\r
50         /// <returns></returns>\r
51         public string dispatch(string command)\r
52         {\r
53             //空文字の場合は改行を入れる(Unixの仕様に準拠)\r
54             if (string.IsNullOrEmpty(command))\r
55             {\r
56                 return string.Empty;\r
57             }\r
58 \r
59             string retStr = string.Empty;\r
60             string commandTop = command.Split(' ')[0];\r
61             CommandData data = CommandDataAccessor.getObject.getCommandData(commandTop);\r
62 \r
63             if (data != null)\r
64             {\r
65                 try\r
66                 {\r
67                     List<SimpleDataBean> dllList = CommandDataAccessor.getObject.getDllList();\r
68 \r
69                     Assembly asm;\r
70                     Type argsType = null;\r
71                     Type commandType = null;\r
72                     foreach (SimpleDataBean bean in dllList)\r
73                     {\r
74                         asm = Assembly.LoadFrom(bean.Val);\r
75                         if (argsType == null)\r
76                         {\r
77                             argsType = asm.GetType(data.ArgClass);\r
78                         }\r
79                         if (commandType == null)\r
80                         {\r
81                             commandType = asm.GetType(data.TargetClass);\r
82                         }\r
83                         //両方見つかったら脱出。\r
84                         if (argsType != null && commandType != null)\r
85                         {\r
86                             break;\r
87                         }\r
88                     }\r
89                     if (argsType == null || commandType == null)\r
90                     {\r
91                         return "コマンドが見つかりません。";\r
92                     }\r
93                     CommandArg args = (CommandArg)Activator.CreateInstance(argsType);\r
94                     AbCommand commandCls = (AbCommand)Activator.CreateInstance(commandType);\r
95 \r
96                     args.split(command);\r
97                     commandCls.run(args,baseForm);\r
98 \r
99                     retStr = commandCls.getMessage();\r
100                 }\r
101                 catch (Exception e)\r
102                 {\r
103                     retStr = "エラーが発生しました。";\r
104                     new KybernetesApplicationException(e);\r
105                 }\r
106             }\r
107             else\r
108             {\r
109                 retStr = "不明なコマンドです。";\r
110             }\r
111             return retStr;\r
112         }\r
113     }\r
114 }\r