1: using System;
2: using System.Xml.Linq;
3: using System.Linq;
4: using System.IO;
5: using System.Data;
6: using System.Collections;
7: using System.Collections.Generic;
8: using System.Reflection;
9:
10: namespace Ia.TentPlay.Cl.Model.Memorise
11: {
12: ////////////////////////////////////////////////////////////////////////////
13:
14: /// <summary publish="true">
15: /// Russian class
16: /// </summary>
17: /// <value>
18: /// https://msdn.microsoft.com/en-us/library/z1hkazw7(v=vs.100).aspx
19: /// </value>
20: /// <remarks>
21: /// Copyright © 2008-2018 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
22: ///
23: /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
24: /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
25: ///
26: /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
27: /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
28: ///
29: /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
30: ///
31: /// Copyright notice: This notice may not be removed or altered from any source distribution.
32: /// </remarks>
33: public class Russian : Test
34: {
35: private XDocument xDocument;
36: protected override TestTopic testTopic
37: {
38: get
39: {
40: return Ia.TentPlay.Cl.Model.Memorise.Test.TestTopic.Russian;
41: }
42: }
43:
44: ////////////////////////////////////////////////////////////////////////////
45:
46: /// <summary>
47: ///
48: /// </summary>
49: public enum WordType { Verb = 1, Noun, Adjective, Adverb, Unspecified };
50:
51: ////////////////////////////////////////////////////////////////////////////
52:
53: /// <summary>
54: ///
55: /// </summary>
56: public struct Word
57: {
58: public WordType Type;
59: public string English;
60: public string Russian;
61:
62: /// <summary/>
63: public Word(string english, string russian, WordType type)
64: {
65: this.Type = type;
66: this.English = english;
67: this.Russian = russian;
68: }
69:
70: /// <summary/>
71: public override string ToString()
72: {
73: return this.Russian + ":" + this.English + ":" + this.Type;
74: }
75: }
76:
77: ////////////////////////////////////////////////////////////////////////////
78:
79: /// <summary>
80: ///
81: /// </summary>
82: public Russian() { }
83:
84: ////////////////////////////////////////////////////////////////////////////
85:
86: /// <summary>
87: /// Read all tests
88: /// </summary>
89: public List<Word> ReadList()
90: {
91: WordType wordType;
92: Word word;
93: List<Word> wordList;
94:
95: wordList = new List<Word>(10000);
96:
97: foreach (XElement xe in XDocument.Elements("russian").Elements())
98: {
99: switch (xe.Name.LocalName)
100: {
101: case "verb": wordType = WordType.Verb; break;
102: case "noun": wordType = WordType.Noun; break;
103: case "adjective": wordType = WordType.Adjective; break;
104: case "adverb": wordType = WordType.Adverb; break;
105: default: wordType = WordType.Unspecified; break;
106: }
107:
108: word = new Word(xe.Attribute("english").Value, xe.Attribute("russian").Value, wordType);
109:
110: wordList.Add(word);
111: }
112:
113: return wordList;
114: }
115:
116: ////////////////////////////////////////////////////////////////////////////
117:
118: /// <summary>
119: ///
120: /// </summary>
121: public override void PopulateTestDatabaseTableWithInitialQuestionsIfEmpty(Guid userId)
122: {
123: int count;
124: string question, answer;
125: XDocument xDocument;
126: WordType wordType;
127: Ia.TentPlay.Cl.Model.Memorise.Score score;
128: List<Ia.TentPlay.Cl.Model.Memorise.Score> scoreList;
129:
130: xDocument = XDocument;
131:
132: // below: synch database words with XML list
133: using (var db = new Ia.TentPlay.Db())
134: {
135: count = (from s in db.Scores where s.TestId == (int)Ia.TentPlay.Cl.Model.Memorise.Test.TestTopic.Russian select s).Count();
136:
137: if (count == 0)
138: {
139: scoreList = Ia.TentPlay.Cl.Model.Memorise.Score.RussianScoreList(userId);
140:
141: foreach (XElement xe in xDocument.Elements("russian").Elements())
142: {
143: switch (xe.Name.LocalName)
144: {
145: case "verb": wordType = WordType.Verb; break;
146: case "noun": wordType = WordType.Noun; break;
147: case "adjective": wordType = WordType.Adjective; break;
148: case "adverb": wordType = WordType.Adverb; break;
149: default: wordType = WordType.Unspecified; break;
150: }
151:
152: question = xe.Attribute("russian").Value;
153: answer = xe.Attribute("english").Value;
154:
155: score = (from s in scoreList where s.TestId == (int)testTopic && s.Question == question && s.Answer == answer && s.TypeId == (int)wordType select s).FirstOrDefault();
156:
157: if (score == null)
158: {
159: score = new Ia.TentPlay.Cl.Model.Memorise.Score();
160:
161: score.Question = question;
162: score.Answer = answer;
163: score.TestId = (int)testTopic;
164: score.TypeId = 0; //(int)wordType;
165: score.Created = score.Updated = score.Viewed = DateTime.UtcNow.AddHours(3);
166: score.UserId = userId;
167:
168: db.Scores.Add(score);
169: }
170: }
171:
172: db.SaveChanges();
173: }
174: }
175: }
176:
177: ////////////////////////////////////////////////////////////////////////////
178:
179: /// <summary>
180: ///
181: /// </summary>
182: public override int WeightedRandomTypeIdAccordingTypeDistribution(Guid userId)
183: {
184: /*
185: int countOfAllTypes, countOfTypeId1, countOfTypeId2, countOfTypeId3, countOfTypeId4, countOfTypeId5, typeId;
186: ArrayList countArrayList;
187:
188: // public enum WordType { Verb = 1, Noun, Adjective, Adverb, Unspecified };
189:
190: using (var db = new Ia.TentPlay.Db())
191: {
192: countOfAllTypes = (from s in db.Scores where s.TestId == (int)testTopic select s).Count();
193: countOfTypeId1 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Verb select s).Count();
194: countOfTypeId2 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Noun select s).Count();
195: countOfTypeId3 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Adjective select s).Count();
196: countOfTypeId4 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Adverb select s).Count();
197: countOfTypeId5 = (from s in db.Scores where s.TestId == (int)testTopic && s.TypeId == (int)WordType.Unspecified select s).Count();
198:
199: countArrayList = new ArrayList(countOfAllTypes);
200:
201: // below: populate ArrayList with TypeId keys a number of times equal to its count
202: for (int i = 0; i < countOfTypeId1; i++) countArrayList.Add((int)WordType.Verb);
203: for (int i = 0; i < countOfTypeId2; i++) countArrayList.Add((int)WordType.Noun);
204: for (int i = 0; i < countOfTypeId3; i++) countArrayList.Add((int)WordType.Adjective);
205: for (int i = 0; i < countOfTypeId4; i++) countArrayList.Add((int)WordType.Adverb);
206: for (int i = 0; i < countOfTypeId5; i++) countArrayList.Add((int)WordType.Unspecified);
207:
208: typeId = (int)countArrayList[random.Next(countOfAllTypes)];
209: }
210: */
211:
212: return 0; // typeId;
213: }
214:
215: ////////////////////////////////////////////////////////////////////////////
216: ////////////////////////////////////////////////////////////////////////////
217:
218: /// <summary>
219: ///
220: /// How to embed and access resources by using Visual C# http://support.microsoft.com/kb/319292/en-us
221: ///
222: /// 1. Change the "Build Action" property of your XML file from "Content" to "Embedded Resource".
223: /// 2. Add "using System.Reflection".
224: /// 3. Manifest resource stream will start with the project namespace, the location of XML file.
225: ///
226: /// </summary>
227: public XDocument XDocument
228: {
229: get
230: {
231: if (xDocument == null)
232: {
233: Assembly _assembly;
234: StreamReader streamReader;
235:
236: _assembly = Assembly.GetExecutingAssembly();
237: streamReader = new StreamReader(_assembly.GetManifestResourceStream("Ia.TentPlay.Cl.model.data.memorise.russian.xml"));
238:
239: try
240: {
241: if (streamReader.Peek() != -1)
242: {
243: xDocument = System.Xml.Linq.XDocument.Load(streamReader);
244: }
245: }
246: catch (Exception)
247: {
248: }
249: finally
250: {
251: }
252: }
253:
254: return xDocument;
255: }
256: }
257:
258: ////////////////////////////////////////////////////////////////////////////
259: ////////////////////////////////////////////////////////////////////////////
260: }
261:
262: ////////////////////////////////////////////////////////////////////////////
263: ////////////////////////////////////////////////////////////////////////////
264: }