/src/com/schlock/website/services/blog/impl/LessonsManagementImpl.java

https://github.com/dyreschlock/schlock-website · Java · 361 lines · 296 code · 64 blank · 1 comment · 32 complexity · f4e9281d21771e7fe7314d7425f813e1 MD5 · raw file

  1. package com.schlock.website.services.blog.impl;
  2. import com.schlock.website.entities.blog.AbstractPost;
  3. import com.schlock.website.entities.blog.Keyword;
  4. import com.schlock.website.entities.blog.LessonPost;
  5. import com.schlock.website.services.DeploymentContext;
  6. import com.schlock.website.services.blog.LessonsManagement;
  7. import com.schlock.website.services.database.blog.PostDAO;
  8. import org.apache.commons.lang.StringUtils;
  9. import java.io.File;
  10. import java.util.*;
  11. public class LessonsManagementImpl implements LessonsManagement
  12. {
  13. private final DeploymentContext deploymentContext;
  14. private final PostDAO postDAO;
  15. private Map<String, LessonPost> cachedPosts;
  16. public LessonsManagementImpl(DeploymentContext deploymentContext,
  17. PostDAO postDAO)
  18. {
  19. this.deploymentContext = deploymentContext;
  20. this.postDAO = postDAO;
  21. }
  22. public List<String> getYears()
  23. {
  24. List<String> years = new ArrayList<String>();
  25. // years.add(HEISEI28);
  26. years.add(HEISEI27);
  27. years.add(HEISEI26);
  28. years.add(HEISEI25);
  29. return years;
  30. }
  31. public List<String> getGrades()
  32. {
  33. List<String> grades = new ArrayList<String>();
  34. grades.add(SIXTH_GRADE);
  35. grades.add(FIFTH_GRADE);
  36. grades.add(FOURTH_GRADE);
  37. grades.add(THIRD_GRADE);
  38. grades.add(SECOND_GRADE);
  39. grades.add(FIRST_GRADE);
  40. return grades;
  41. }
  42. public List<String> getDisplayGrades()
  43. {
  44. List<String> grades = new ArrayList<String>();
  45. grades.add(SIXTH_GRADE);
  46. grades.add(FIFTH_GRADE);
  47. grades.add(THIRD_GRADE + CONJUNCTION + FOURTH_GRADE);
  48. grades.add(FIRST_GRADE + CONJUNCTION + SECOND_GRADE);
  49. return grades;
  50. }
  51. private List<String> sixthGradeLessons()
  52. {
  53. List<String> lessons = new ArrayList<String>();
  54. lessons.add(LESSON_1_1);
  55. lessons.add(LESSON_1_2);
  56. lessons.add(LESSON_2);
  57. lessons.add(LESSON_3);
  58. lessons.add(LESSON_4);
  59. lessons.add(LESSON_5);
  60. lessons.add(LESSON_6);
  61. lessons.add(LESSON_7);
  62. lessons.add(LESSON_8);
  63. return lessons;
  64. }
  65. private List<String> fifthGradeLessons()
  66. {
  67. List<String> lessons = new ArrayList<String>();
  68. lessons.add(LESSON_1);
  69. lessons.add(LESSON_2);
  70. lessons.add(LESSON_3);
  71. lessons.add(LESSON_4);
  72. lessons.add(LESSON_5);
  73. lessons.add(LESSON_6);
  74. lessons.add(LESSON_7);
  75. lessons.add(LESSON_8);
  76. lessons.add(LESSON_9);
  77. return lessons;
  78. }
  79. private List<String> standardSpecialLessons()
  80. {
  81. List<String> lessons = new ArrayList<String>();
  82. lessons.add(SELF_INTRO);
  83. lessons.add(CHRISTMAS);
  84. return lessons;
  85. }
  86. public List<String> getLessons(String grade, String year)
  87. {
  88. List<String> lessons = new ArrayList<String>();
  89. if (StringUtils.equalsIgnoreCase(grade, SIXTH_GRADE))
  90. {
  91. int hi_friends = 2;
  92. for (String lesson : sixthGradeLessons())
  93. {
  94. lessons.add(HI_FRIENDS_PREFIX + hi_friends + CONJUNCTION + lesson);
  95. }
  96. }
  97. else if (StringUtils.equalsIgnoreCase(grade, FIFTH_GRADE))
  98. {
  99. int hi_friends = 1;
  100. for (String lesson : fifthGradeLessons())
  101. {
  102. lessons.add(HI_FRIENDS_PREFIX + hi_friends + CONJUNCTION + lesson);
  103. }
  104. }
  105. else
  106. {
  107. List<String> grades = Arrays.asList(StringUtils.split(grade, CONJUNCTION));
  108. List<LessonPost> posts = postDAO.getByYearGradeLessonKeyword(year, grades, null);
  109. for (LessonPost post : posts)
  110. {
  111. String uuid = post.getUuid();
  112. if (StringUtils.containsIgnoreCase(uuid, LESSONS_PREFIX))
  113. {
  114. int index = uuid.lastIndexOf(LESSONS_PREFIX) + LESSONS_PREFIX.length();
  115. String name = uuid.substring(index);
  116. lessons.add(name);
  117. }
  118. }
  119. }
  120. return lessons;
  121. }
  122. public List<String> getYearlyItems(String grade)
  123. {
  124. List<String> items = new ArrayList<String>();
  125. if (StringUtils.equalsIgnoreCase(grade, SIXTH_GRADE) ||
  126. StringUtils.equalsIgnoreCase(grade, FIFTH_GRADE))
  127. {
  128. items.add(SYLLABUS);
  129. items.add(FULL_DOWNLOAD);
  130. }
  131. return items;
  132. }
  133. public List<String> getSpecialLessons(String grade, String year)
  134. {
  135. List<String> lessons = new ArrayList<String>();
  136. lessons.addAll(standardSpecialLessons());
  137. if (StringUtils.equalsIgnoreCase(grade, SIXTH_GRADE) ||
  138. StringUtils.equalsIgnoreCase(grade, FIFTH_GRADE))
  139. {
  140. List<LessonPost> posts = postDAO.getByYearGradeLessonKeyword(year, grade, null);
  141. for (LessonPost post : posts)
  142. {
  143. String uuid = post.getUuid();
  144. if (StringUtils.containsIgnoreCase(uuid, SPECIAL_TAG))
  145. {
  146. boolean contains = false;
  147. for (String special : standardSpecialLessons())
  148. {
  149. if (StringUtils.containsIgnoreCase(uuid, special))
  150. {
  151. contains = true;
  152. }
  153. }
  154. if (!contains)
  155. {
  156. int index = uuid.indexOf(SPECIAL_TAG) + SPECIAL_TAG.length() + 1;
  157. String name = uuid.substring(index);
  158. lessons.add(name);
  159. }
  160. }
  161. }
  162. }
  163. return lessons;
  164. }
  165. private int getLessonNumber(String lessonString)
  166. {
  167. int index = HI_FRIENDS_PREFIX.length() + 1 + 1 + LESSONS_PREFIX.length();
  168. String lesson = StringUtils.substring(lessonString, index, index + 1);
  169. return Integer.parseInt(lesson);
  170. }
  171. private int getHiFriendsNumber(String lessonString)
  172. {
  173. int index = HI_FRIENDS_PREFIX.length();
  174. String year = StringUtils.substring(lessonString, index, index + 1);
  175. return Integer.parseInt(year);
  176. }
  177. public LessonPost getPost(String lesson, String grade, String year)
  178. {
  179. final String hash = year + grade + lesson;
  180. if (cachedPosts.containsKey(hash))
  181. {
  182. return cachedPosts.get(hash);
  183. }
  184. List<String> grades = Arrays.asList(StringUtils.split(grade, CONJUNCTION));
  185. List<LessonPost> posts = postDAO.getByYearGradeLessonKeyword(year, grades, lesson);
  186. LessonPost post = null;
  187. if (!posts.isEmpty())
  188. {
  189. post = posts.get(0);
  190. }
  191. cachedPosts.put(hash, post);
  192. return post;
  193. }
  194. public void resetPostCache()
  195. {
  196. cachedPosts = new HashMap<String, LessonPost>();
  197. }
  198. public String getGrade(String... parameters)
  199. {
  200. for (String g : getGrades())
  201. {
  202. for (String p : parameters)
  203. {
  204. if (StringUtils.equalsIgnoreCase(p, g))
  205. {
  206. return g;
  207. }
  208. }
  209. }
  210. return null;
  211. }
  212. public String getYear(String... parameters)
  213. {
  214. for (String y : getYears())
  215. {
  216. for (String p : parameters)
  217. {
  218. if (StringUtils.equalsIgnoreCase(p, y))
  219. {
  220. return y;
  221. }
  222. }
  223. }
  224. return "";
  225. }
  226. public String getLesson(String grade, String year, String... parameters)
  227. {
  228. List<String> lessons = new ArrayList<String>();
  229. lessons.addAll(getLessons(grade, year));
  230. lessons.addAll(getSpecialLessons(grade, year));
  231. lessons.addAll(getYearlyItems(grade));
  232. for (String l : lessons)
  233. {
  234. for (String p : parameters)
  235. {
  236. if (StringUtils.containsIgnoreCase(l, p))
  237. {
  238. return l;
  239. }
  240. }
  241. }
  242. return "";
  243. }
  244. public List<String> getGrades(AbstractPost post)
  245. {
  246. List<String> grades = new ArrayList<String>();
  247. for (String grade : getGrades())
  248. {
  249. for (Keyword keyword : post.getKeywords())
  250. {
  251. if (StringUtils.equalsIgnoreCase(grade, keyword.getName()))
  252. {
  253. grades.add(grade);
  254. }
  255. }
  256. }
  257. return grades;
  258. }
  259. public String getYear(AbstractPost post)
  260. {
  261. for (String year : getYears())
  262. {
  263. for (Keyword keyword : post.getKeywords())
  264. {
  265. if (StringUtils.equalsIgnoreCase(year, keyword.getName()))
  266. {
  267. return year;
  268. }
  269. }
  270. }
  271. return "";
  272. }
  273. public String getLessonPlanImageLink(AbstractPost post)
  274. {
  275. String localPath = deploymentContext.imageLocation();
  276. localPath += LESSON_PLAN_FOLDER + "/" + post.getUuid() + ".jpg";
  277. return getLink(localPath);
  278. }
  279. public String getFlashCardImageLink(AbstractPost post)
  280. {
  281. String localPath = deploymentContext.imageLocation();
  282. localPath += FLASH_CARDS_FOLDER + "/" + post.getUuid() + ".jpg";
  283. return getLink(localPath);
  284. }
  285. public String getLink(String localPath)
  286. {
  287. File file = new File(localPath);
  288. if (file.exists())
  289. {
  290. String path = file.getAbsolutePath();
  291. int i = path.indexOf(DeploymentContext.IMAGE_DIR);
  292. path = "/" + path.substring(i);
  293. return path;
  294. }
  295. return "";
  296. }
  297. }