Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.50 KB | None | 0 0
  1. package src;
  2. import java.io.File;
  3.  
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.List;
  7.  
  8. import javax.xml.parsers.DocumentBuilderFactory;
  9. import javax.xml.parsers.DocumentBuilder;
  10. import org.w3c.dom.Document;
  11. import org.w3c.dom.NodeList;
  12. import org.w3c.dom.Node;
  13. import org.w3c.dom.Element;
  14.  
  15. public class Parser {
  16. private File inputFile;
  17. private Document xmlDocument;
  18.  
  19. public Parser(String filename) {
  20. try {
  21. this.inputFile = new File(filename);
  22. DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
  23. DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
  24. xmlDocument = dBuilder.parse(this.inputFile);
  25. this.xmlDocument.getDocumentElement().normalize();
  26. } catch (Exception e) {
  27.  
  28. }
  29. }
  30.  
  31. public List<HashMap<String,Object>> parseCourses() {
  32. NodeList courseList = xmlDocument.getElementsByTagName("course");
  33.  
  34. List<HashMap<String,Object>> courses = new ArrayList<HashMap<String,Object>>();
  35. for (int course = 0; course < courseList.getLength(); course++) {
  36. Node courseNode = courseList.item(course);
  37. Element courseNodeElement = (Element) courseNode;
  38.  
  39. String courseName = courseNodeElement.getAttribute("name");
  40. String courseId = courseNodeElement.getAttribute("id");
  41.  
  42. List<HashMap<String,Object>> groups = new ArrayList<HashMap<String,Object>>();
  43. NodeList children = courseNode.getChildNodes();
  44. for (int courseChild = 0; courseChild < children.getLength(); courseChild++) {
  45. Node maybeGroupNode = children.item(courseChild);
  46. if (maybeGroupNode.getNodeName().equalsIgnoreCase("group")) {
  47. HashMap<String,Object> groupMap = parseGroup(maybeGroupNode);
  48. groups.add(groupMap);
  49. }
  50. }
  51.  
  52. HashMap<String,Object> courseMap = new HashMap<String,Object>();
  53. courseMap.put("groups", groups);
  54. courseMap.put("courseName", courseName);
  55. courseMap.put("courseId", courseId);
  56. courses.add(courseMap);
  57. }
  58.  
  59. return courses;
  60. }
  61.  
  62. public HashMap<String,Object> parseGroup(Node groupNode) {
  63. Element groupNodeElement = (Element)groupNode;
  64. String groupTeacher = groupNodeElement.getAttribute("teacher");
  65. String groupNoStudent = groupNodeElement.getAttribute("number_of_students");
  66. String groupId = groupNodeElement.getAttribute("id");
  67. Boolean sameRoom = true;
  68.  
  69. List<HashMap<String,Object>> sessions = new ArrayList<HashMap<String,Object>>();
  70. NodeList children = groupNode.getChildNodes();
  71. for (int sessionChild = 0; sessionChild < children.getLength(); sessionChild++) {
  72. Node maybeSessionNode = children.item(sessionChild);
  73. if(maybeSessionNode.getNodeName().equalsIgnoreCase("session")){
  74. HashMap<String,Object> sessionMap = parseSession(maybeSessionNode);
  75. if (!checkSameRoom(sessions, sessionMap)) {
  76. sameRoom = false;
  77. }
  78.  
  79. sessions.add(sessionMap);
  80. }
  81. }
  82.  
  83. HashMap<String,Object> groupMap = new HashMap<String,Object>();
  84. groupMap.put("groupTeacher", groupTeacher);
  85. groupMap.put("groupId", groupId);
  86. groupMap.put("groupNoStudent", Integer.parseInt(groupNoStudent.trim()));
  87. groupMap.put("sameRoom", sameRoom);
  88. groupMap.put("sessions", sessions);
  89.  
  90. return groupMap;
  91. }
  92.  
  93. private boolean checkSameRoom(List<HashMap<String,Object>> sessions, HashMap<String,Object> sessionMap) {
  94. boolean sameRoom = true;
  95. for (HashMap<String,Object> otherSession : sessions) {
  96. // passa pelas outras sessions, procurando por alguma com features diferentes
  97. if (sessionMap.get("roomFeaturesNeeded") != null) {
  98. if (otherSession.get("roomFeaturesNeeded") != null) {
  99. List<Integer> features = (List<Integer>)otherSession.get("roomFeaturesNeeded");
  100. boolean sameFeat = sameFeatures(features, (List<Integer>)sessionMap.get("roomFeaturesNeeded"));
  101. //System.out.println(features);
  102. //System.out.println((List<Integer>)sessionMap.get("roomFeaturesNeeded"));
  103.  
  104. if (!sameFeat) {
  105. System.out.println("SAME ROOM : FALSE");
  106. sameRoom = false;
  107. }
  108. } else {
  109. sameRoom = false;
  110. }
  111. } else {
  112. if (otherSession.get("roomFeaturesNeeded") != null) {
  113. sameRoom = false;
  114. }
  115. }
  116. }
  117.  
  118. return sameRoom;
  119. }
  120.  
  121. public boolean sameFeatures(List<Integer> listA, List<Integer> listB) {
  122. if (listA.size() != listB.size()) {
  123. return false;
  124. }
  125.  
  126. for (Integer a : listA) {
  127. if (!listB.contains(a)) {
  128. return false;
  129. }
  130. }
  131.  
  132. return true;
  133. }
  134.  
  135. public HashMap<String,Object> parseSession(Node sessionNode) {
  136. Element sessionNodeElement = (Element)sessionNode;
  137.  
  138. String duration = sessionNodeElement.getAttribute("duration");
  139. String requiresBuildingId = sessionNodeElement.getAttribute("requires_building_id");
  140. String requiresRoomId = sessionNodeElement.getAttribute("requires_room_id");
  141. String startTime = sessionNodeElement.getAttribute("start_time");
  142. Integer weekDay = Integer.parseInt(sessionNodeElement.getAttribute("weekday"));
  143.  
  144. if (!this.validateWeekDay(weekDay)) {
  145. throw new IllegalArgumentException("Weekday is invalid");
  146. }
  147.  
  148. // aloca um hashmap com os dados da session
  149. HashMap<String,Object> sessionMap = new HashMap<String,Object>();
  150. if (!duration.isEmpty()) {
  151. String roomFeatures = sessionNodeElement.getAttribute("feature_ids");
  152. sessionMap.put("roomFeaturesNeeded", parseFeatures(roomFeatures));
  153. }
  154.  
  155. if (duration != "") {
  156. sessionMap.put("duration", Integer.parseInt(duration));
  157. } else {
  158. sessionMap.put("duration", 0);
  159. }
  160.  
  161. sessionMap.put("requiresBuildingId", requiresBuildingId);
  162. sessionMap.put("requiresRoomId", requiresRoomId);
  163. sessionMap.put("weekDay", weekDay);
  164. sessionMap.put("startTime", startTime);
  165.  
  166. return sessionMap;
  167. }
  168.  
  169. private ArrayList<Integer> parseFeatures(String featuresString) {
  170. ArrayList<Integer> featuresIds = new ArrayList<Integer>();
  171. for (String featureString : featuresString.split(",")) {
  172. if (!featureString.isEmpty()) {
  173. featuresIds.add(Integer.parseInt(featureString.trim()));
  174. }
  175. }
  176.  
  177. return featuresIds;
  178. }
  179.  
  180. private boolean validateWeekDay(Integer weekDay) {
  181. return (weekDay > 0 && weekDay < 6);
  182. }
  183.  
  184. public List<HashMap<String,Object>> parseBuildings() {
  185. List<HashMap<String,Object>> buildings = new ArrayList<HashMap<String,Object>>();
  186.  
  187. NodeList buildingList = this.xmlDocument.getElementsByTagName("building");
  188. for (int building = 0; building < buildingList.getLength(); building++){
  189. Node buildingNode = buildingList.item(building);
  190. buildings.add(parseBuilding(buildingNode));
  191. }
  192.  
  193. return buildings;
  194. }
  195.  
  196. public HashMap<String,Object> parseBuilding(Node buildingNode) {
  197. Element buildingNodeElement = (Element)buildingNode;
  198. String buildingId = buildingNodeElement.getAttribute("id");
  199.  
  200. List<HashMap<String,Object>> rooms = new ArrayList<HashMap<String,Object>>();
  201. NodeList children = buildingNode.getChildNodes();
  202. for (int buildingChild = 0; buildingChild < children.getLength(); buildingChild++) {
  203. Node maybeRoomNode = children.item(buildingChild);
  204. if (maybeRoomNode.getNodeName().equalsIgnoreCase("room")) {
  205. HashMap<String,Object> roomMap = parseRoom(maybeRoomNode);
  206. if (roomMap.get("available") != "false") {
  207. rooms.add(roomMap);
  208. }
  209. }
  210. }
  211.  
  212. HashMap<String,Object> buildingMap = new HashMap<String,Object>();
  213. buildingMap.put("buildingId", buildingId);
  214. buildingMap.put("rooms", rooms);
  215.  
  216. return buildingMap;
  217. }
  218.  
  219. public HashMap<String,Object> parseRoom(Node roomNode) {
  220. Element roomNodeElement = (Element)roomNode;
  221. String available = roomNodeElement.getAttribute("available_for_allocation");
  222. String roomId = roomNodeElement.getAttribute("id");
  223. String roomFeatures = roomNodeElement.getAttribute("feature_ids");
  224. String roomNoPlaces = roomNodeElement.getAttribute("number_of_places");
  225.  
  226. ArrayList<Integer> roomFeaturesIds = parseFeatures(roomFeatures);
  227. HashMap<String,Object> roomMap = new HashMap<String,Object>();
  228. roomMap.put("roomId", roomId);
  229. roomMap.put("available", available);
  230. roomMap.put("roomFeatureIds", roomFeaturesIds);
  231. if (roomNoPlaces != "") {
  232. roomMap.put("roomNoPlaces", Integer.parseInt(roomNoPlaces));
  233. } else {
  234. roomMap.put("roomNoPlaces", 0);
  235. }
  236.  
  237. return roomMap;
  238. }
  239.  
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement