PageRenderTime 40ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/Controllers/LiteraturQuellenController.cs

https://gitlab.com/Ontology/LiteraturquellenController
C# | 381 lines | 287 code | 93 blank | 1 comment | 88 complexity | d5f4df118d2e4a105901c20c3e00e16e MD5 | raw file
  1. using LiteraturquellenController.Factories;
  2. using LiteraturquellenController.Models;
  3. using LiteraturquellenController.Services;
  4. using LiteraturquellenController.Translations;
  5. using OntologyAppDBConnector;
  6. using OntologyClasses.BaseClasses;
  7. using OntoMsg_Module;
  8. using OntoMsg_Module.Attributes;
  9. using OntoMsg_Module.Base;
  10. using OntoMsg_Module.Models;
  11. using OntoMsg_Module.Notifications;
  12. using OntoMsg_Module.StateMachines;
  13. using OntoMsg_Module.WebSocketServices;
  14. using OntoWebCore.Factories;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.Linq;
  18. using System.Reflection;
  19. using System.Runtime.InteropServices;
  20. using System.Text;
  21. using System.Threading.Tasks;
  22. using System.ComponentModel;
  23. namespace LiteraturquellenController.Controllers
  24. {
  25. public class LiteraturQuellenController : LiteraturQuellenViewModel, IViewController
  26. {
  27. private WebsocketServiceAgent webSocketServiceAgent;
  28. private TranslationController translationController = new TranslationController();
  29. private ElasticServiceAgent serviceAgentElastic;
  30. private LiteraturQuellenFactory literaturQuellenFactory;
  31. private clsLocalConfig localConfig;
  32. private clsOntologyItem oItemRef;
  33. private bool firstLoad = false;
  34. public IControllerStateMachine StateMachine { get; private set; }
  35. public ControllerStateMachine LocalStateMachine
  36. {
  37. get
  38. {
  39. if (StateMachine == null)
  40. {
  41. return null;
  42. }
  43. return (ControllerStateMachine)StateMachine;
  44. }
  45. }
  46. public LiteraturQuellenController()
  47. {
  48. // local configuration
  49. localConfig = (clsLocalConfig)LocalConfigManager.GetLocalConfig(((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(true).FirstOrDefault(objAttribute => objAttribute is GuidAttribute)).Value);
  50. if (localConfig == null)
  51. {
  52. localConfig = new clsLocalConfig(new Globals());
  53. LocalConfigManager.AddLocalConfig(localConfig);
  54. }
  55. Initialize();
  56. PropertyChanged += LiteraturQuellenController_PropertyChanged;
  57. }
  58. private void LiteraturQuellenController_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  59. {
  60. var property = ViewModelProperties.FirstOrDefault(viewProperty => viewProperty.Property.Name == e.PropertyName);
  61. if (property == null) return;
  62. if (e.PropertyName == nameof(SelectedLiteraturQuelle_Selected))
  63. {
  64. clsOntologyItem sendItem = null;
  65. if (SelectedLiteraturQuelle_Selected.Property == nameof(LiteraturQuelle.NameQuelle))
  66. {
  67. sendItem = new clsOntologyItem
  68. {
  69. GUID = SelectedLiteraturQuelle_Selected.LiteraturQuelle.IdQuelle,
  70. Name = SelectedLiteraturQuelle_Selected.LiteraturQuelle.NameQuelle,
  71. GUID_Parent = SelectedLiteraturQuelle_Selected.LiteraturQuelle.IdClassQuelle,
  72. Type = localConfig.Globals.Type_Object
  73. };
  74. }
  75. else if (SelectedLiteraturQuelle_Selected.Property == nameof(LiteraturQuelle.NameLiteraturQuelle))
  76. {
  77. sendItem = new clsOntologyItem
  78. {
  79. GUID = SelectedLiteraturQuelle_Selected.LiteraturQuelle.IdLiteraturQuelle,
  80. Name = SelectedLiteraturQuelle_Selected.LiteraturQuelle.NameLiteraturQuelle,
  81. GUID_Parent = localConfig.OItem_type_literarische_quelle.GUID,
  82. Type = localConfig.Globals.Type_Object
  83. };
  84. }
  85. if (sendItem == null) return;
  86. var interModMessage = new InterServiceMessage
  87. {
  88. ChannelId = Channels.ParameterList,
  89. OItems = new List<clsOntologyItem> { sendItem }
  90. };
  91. webSocketServiceAgent.SendInterModMessage(interModMessage);
  92. }
  93. property.ViewItem.AddValue(property.Property.GetValue(this));
  94. webSocketServiceAgent.SendPropertyChange(e.PropertyName);
  95. }
  96. private void Initialize()
  97. {
  98. var stateMachine = new ControllerStateMachine(StateMachineType.BlockSelectingSelected | StateMachineType.BlockLoadingSelected);
  99. stateMachine.IsControllerListen = true;
  100. StateMachine = stateMachine;
  101. stateMachine.PropertyChanged += StateMachine_PropertyChanged;
  102. stateMachine.loadSelectedItem += StateMachine_loadSelectedItem;
  103. stateMachine.loginSucceded += StateMachine_loginSucceded;
  104. stateMachine.openedSocket += StateMachine_openedSocket;
  105. stateMachine.closedSocket += StateMachine_closedSocket;
  106. serviceAgentElastic = new ElasticServiceAgent(localConfig);
  107. serviceAgentElastic.PropertyChanged += ServiceAgentElastic_PropertyChanged;
  108. literaturQuellenFactory = new LiteraturQuellenFactory(localConfig);
  109. literaturQuellenFactory.PropertyChanged += LiteraturQuellenFactory_PropertyChanged;
  110. }
  111. private void StateMachine_closedSocket()
  112. {
  113. webSocketServiceAgent.RemoveAllResources();
  114. }
  115. private void StateMachine_openedSocket()
  116. {
  117. webSocketServiceAgent.RegisterEndpoint(new ChannelEndpoint
  118. {
  119. EndPointId = webSocketServiceAgent.EndpointId,
  120. EndpointType = EndpointType.Sender,
  121. SessionId = webSocketServiceAgent.DataText_SessionId
  122. });
  123. }
  124. private void StateMachine_loginSucceded()
  125. {
  126. webSocketServiceAgent.RegisterEndpoint(new ChannelEndpoint
  127. {
  128. ChannelTypeId = Channels.ParameterList,
  129. EndpointType = EndpointType.Receiver,
  130. });
  131. webSocketServiceAgent.RegisterEndpoint(new ChannelEndpoint
  132. {
  133. ChannelTypeId = Notifications.NotifyChanges.Channel_CreatedLiteraturQuelle,
  134. EndpointType = EndpointType.Receiver,
  135. });
  136. IsToggled_Listen = true;
  137. Text_View = translationController.Text_ViewLiteraturQuellen;
  138. FirstLoad();
  139. }
  140. private void StateMachine_loadSelectedItem(clsOntologyItem oItemSelected)
  141. {
  142. }
  143. private void StateMachine_PropertyChanged(object sender, PropertyChangedEventArgs e)
  144. {
  145. if (e.PropertyName == nameof(OntoMsg_Module.StateMachines.ControllerStateMachine.LoginSuccessful))
  146. {
  147. IsSuccessful_Login = LocalStateMachine.LoginSuccessful;
  148. }
  149. }
  150. private void LiteraturQuellenFactory_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  151. {
  152. if (e.PropertyName == nameof(LiteraturQuellenFactory.ResultLiteraturQuellen))
  153. {
  154. if (literaturQuellenFactory.ResultLiteraturQuellen.Result.GUID == localConfig.Globals.LState_Success.GUID)
  155. {
  156. var sessionFile = webSocketServiceAgent.RequestWriteStream(Guid.NewGuid().ToString() + ".json");
  157. var resultTask = GridFactory.WriteKendoJson(typeof(LiteraturQuelle), literaturQuellenFactory.ResultLiteraturQuellen.LiteraturQuellen.ToList<object>(), sessionFile);
  158. resultTask.Wait();
  159. if (resultTask.Result.GUID == localConfig.Globals.LState_Success.GUID)
  160. {
  161. KendoDataSource_Grid = GridFactory.CreateKendoGridConfig(typeof(LiteraturQuelle), sessionFile);
  162. }
  163. }
  164. }
  165. }
  166. private void ServiceAgentElastic_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  167. {
  168. if (e.PropertyName == nameof(ElasticServiceAgent.ResultLiteraturSource))
  169. {
  170. if (serviceAgentElastic.ResultLiteraturSource.Result.GUID == localConfig.Globals.LState_Success.GUID)
  171. {
  172. var resultTask = literaturQuellenFactory.CreateLiteraturQuellenList(serviceAgentElastic.ResultLiteraturSource);
  173. }
  174. }
  175. }
  176. public void InitializeViewController(WebsocketServiceAgent webSocketServiceAgent)
  177. {
  178. this.webSocketServiceAgent = webSocketServiceAgent;
  179. this.webSocketServiceAgent.PropertyChanged += WebSocketServiceAgent_PropertyChanged;
  180. this.webSocketServiceAgent.comServerOnMessage += WebSocketServiceAgent_comServerOnMessage;
  181. this.webSocketServiceAgent.comServerOpened += WebSocketServiceAgent_comServerOpened;
  182. this.webSocketServiceAgent.paramsChecked += WebSocketServiceAgent_paramsChecked;
  183. }
  184. private void WebSocketServiceAgent_paramsChecked()
  185. {
  186. FirstLoad();
  187. }
  188. private void FirstLoad()
  189. {
  190. if (!IsSuccessful_Login) return;
  191. if (firstLoad) return;
  192. firstLoad = true;
  193. var resultTask = serviceAgentElastic.GetLiteraturSources(oItemRef);
  194. }
  195. private void WebSocketServiceAgent_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
  196. {
  197. if (e.PropertyName == OntoMsg_Module.Notifications.NotifyChanges.Websocket_DataText_SessionId)
  198. {
  199. }
  200. else if (e.PropertyName == OntoMsg_Module.Notifications.NotifyChanges.Websocket_Command_RequestedCommand)
  201. {
  202. if (webSocketServiceAgent.Command_RequestedCommand == "clicked.listen")
  203. {
  204. IsToggled_Listen = !IsToggled_Listen;
  205. }
  206. else if (webSocketServiceAgent.Command_RequestedCommand == "clicked.addSource")
  207. {
  208. var viewUrl = ModuleDataExchanger.GetViewUrlById("61f3da21b6a04e7a8e4c91d36fccf395", sender: webSocketServiceAgent.EndpointId, objectId: oItemRef?.GUID);
  209. Url_CreateLiteraturquelle = viewUrl;
  210. }
  211. }
  212. else if (e.PropertyName == OntoMsg_Module.Notifications.NotifyChanges.Websocket_Event_RequestEvent)
  213. {
  214. }
  215. else if (e.PropertyName == OntoMsg_Module.Notifications.NotifyChanges.Websocket_ChangedViewItems)
  216. {
  217. webSocketServiceAgent.ChangedViewItems.ForEach(changedItem =>
  218. {
  219. if (changedItem.ViewItemClass == "Grid" && changedItem.ViewItemType == "SelectedIndex")
  220. {
  221. var selected = Newtonsoft.Json.JsonConvert.DeserializeObject<SelectedLiteraturQuelle>(changedItem.ViewItemValue.ToString());
  222. if (selected == null) return;
  223. SelectedLiteraturQuelle_Selected = selected;
  224. }
  225. });
  226. }
  227. else if (e.PropertyName == NotifyChanges.Websocket_ObjectArgument)
  228. {
  229. var objectId = webSocketServiceAgent.ObjectArgument.Value.ToString();
  230. if (!localConfig.Globals.is_GUID(objectId)) return;
  231. if (!IsSuccessful_Login) return;
  232. if (!IsToggled_Listen) return;
  233. }
  234. }
  235. private void WebSocketServiceAgent_comServerOpened()
  236. {
  237. var authenticationRequest = new InterServiceMessage
  238. {
  239. ChannelId = Channels.Login,
  240. SenderId = webSocketServiceAgent.EndpointId
  241. };
  242. webSocketServiceAgent.SendInterModMessage(authenticationRequest);
  243. }
  244. private void WebSocketServiceAgent_comServerOnMessage(OntoMsg_Module.Notifications.InterServiceMessage message)
  245. {
  246. if (message.ReceiverId != null && message.ReceiverId != webSocketServiceAgent.EndpointId) return;
  247. if (!IsSuccessful_Login) return;
  248. if (message.ChannelId == Channels.ParameterList && IsToggled_Listen)
  249. {
  250. var oitemMessage = message.OItems.FirstOrDefault();
  251. if (oitemMessage == null) return;
  252. oItemRef = oitemMessage;
  253. IsToggled_Listen = false;
  254. CheckSendOrParamObject(oItemRef.GUID);
  255. var resultTask = serviceAgentElastic.GetLiteraturSources(oItemRef);
  256. }
  257. else if (message.ChannelId == Notifications.NotifyChanges.Channel_CreatedLiteraturQuelle)
  258. {
  259. var literaturQuelleObject = message.GenericParameterItems.FirstOrDefault();
  260. if (literaturQuelleObject == null) return;
  261. var literaturQuelle = Newtonsoft.Json.JsonConvert.DeserializeObject<LiteraturQuelle>(literaturQuelleObject.ToString());
  262. ChangedLiteraturQuelle_LiteraturQuelleAdd = new ChangedLiteraturQuelle
  263. {
  264. LiteraturQuelle = literaturQuelle
  265. };
  266. }
  267. }
  268. private void CheckSendOrParamObject(string idItem)
  269. {
  270. var paramObject = serviceAgentElastic.GetOItem(idItem, localConfig.Globals.Type_Object);
  271. if (paramObject == null) return;
  272. oItemRef = paramObject;
  273. Text_View = oItemRef.Name;
  274. if (oItemRef.Type == localConfig.Globals.Type_Object)
  275. {
  276. var classItem = serviceAgentElastic.GetOItem(oItemRef.GUID_Parent, localConfig.Globals.Type_Class);
  277. if (classItem == null) return;
  278. Text_View += " (" + classItem.Name + ")";
  279. }
  280. }
  281. public List<ViewModelProperty> GetViewModelProperties(bool onlySend = true, ViewItemType viewItemType = ViewItemType.All, ViewItemClass viewItemClass = ViewItemClass.All)
  282. {
  283. return ViewModelProperties.Where(viewItemProp => (onlySend ? viewItemProp.ViewModelAttribute.Send : 1 == 1)
  284. && (viewItemType != ViewItemType.All ? viewItemProp.ViewModelAttribute.ViewItemType == viewItemType : 1 == 1)
  285. && (viewItemClass != ViewItemClass.All ? viewItemProp.ViewModelAttribute.ViewItemClass == viewItemClass : 1 == 1)).ToList();
  286. }
  287. }
  288. }