Advertisement
alexjowilson7

ParseBoard

Mar 5th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.43 KB | None | 0 0
  1. import javax.xml.parsers.DocumentBuilderFactory;
  2. import javax.xml.parsers.DocumentBuilder;
  3. import javax.xml.parsers.ParserConfigurationException;
  4. import org.w3c.dom.Document;
  5. import org.w3c.dom.NodeList;
  6. import org.w3c.dom.Node;
  7. import org.w3c.dom.Element;
  8. import java.io.File;
  9. import java.util.ArrayList;
  10. import java.awt.Rectangle;
  11.  
  12. public class ParseBoard {
  13.  
  14.     private Room[] allRooms;
  15.  
  16.     public Room[] getAllRooms() {
  17.         return this.allRooms;
  18.     }
  19.  
  20.     public Document getDocFromFile(String filename) throws ParserConfigurationException {
  21.  
  22.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  23.         DocumentBuilder db = dbf.newDocumentBuilder();
  24.         Document doc = null;
  25.         try {
  26.             doc = db.parse(filename);
  27.         } catch (Exception ex) {
  28.             System.out.println("XML parse failure");
  29.             ex.printStackTrace();
  30.         }
  31.         return doc;
  32.         // exception handling
  33.     }
  34.  
  35.     public void readBoardData(Document d) {
  36.         Element root = d.getDocumentElement();
  37.         // make a nodeList for all the sets in the file
  38.         NodeList sets = root.getElementsByTagName("set"); // get set tag name
  39.         Room[] rooms = new Room[sets.getLength()];
  40.  
  41.         // loop through each set
  42.         for (int i = 0; i < sets.getLength(); i++) {
  43.  
  44.             Room curRoom = new Room();
  45.             ArrayList<cardPlacement> cards = new ArrayList<cardPlacement>();
  46.             ArrayList<shotPlacement> shots = new ArrayList<shotPlacement>();
  47.  
  48.             // Read data from nodes
  49.             Node set = sets.item(i);
  50.  
  51.             // Print out each set name
  52.             String setName = set.getAttributes().getNamedItem("name").getNodeValue(); // get set name
  53.  
  54.             // set name
  55.             curRoom.setRoomName(setName);
  56.  
  57.             // This will make a nodeList representing the children of set
  58.             NodeList children = set.getChildNodes();
  59.  
  60.             // Traverse through each set
  61.             for (int x = 0; x < children.getLength(); x++) {
  62.                 Node sub = children.item(x);
  63.  
  64.                 // enter neighbors root node
  65.                 if ("neighbors".equals(sub.getNodeName())) {
  66.                     NodeList neighbor = sub.getChildNodes();
  67.  
  68.                     ArrayList<String> adjRooms = new ArrayList<>();
  69.  
  70.                     // traverse through children of NEIGHBORS
  71.                     for (int z = 0; z < neighbor.getLength(); z++) { // for loop for neighbors
  72.                         Node neighbors = neighbor.item(z);
  73.  
  74.                         // neighbors children
  75.                         if ("neighbor".equals(neighbors.getNodeName())) {
  76.  
  77.                             // get name of adjRooms
  78.                             String neighbors1 = neighbors.getAttributes().getNamedItem("name").getNodeValue();
  79.                             adjRooms.add(neighbors1);
  80.                         }
  81.  
  82.                     }
  83.                     // set adjRooms
  84.                     curRoom.setAdjRooms(adjRooms);
  85.                 }
  86.  
  87.                 // get area
  88.                 else if ("area".equals(sub.getNodeName())) {
  89.                    
  90.                     // get coordinates of placement of card
  91.                     int setX = Integer.parseInt(sub.getAttributes().getNamedItem("x").getNodeValue());
  92.                     int setY = Integer.parseInt(sub.getAttributes().getNamedItem("y").getNodeValue());
  93.                     int setH = Integer.parseInt(sub.getAttributes().getNamedItem("h").getNodeValue());
  94.                     int setW = Integer.parseInt(sub.getAttributes().getNamedItem("w").getNodeValue());
  95.                    
  96.                     // load them in
  97.                     cardPlacement cardPlacement = new cardPlacement(setX,setY,setH,setW);
  98.                     cards.add(cardPlacement);
  99.                     curRoom.setCardPlacement(cards);
  100.  
  101.                 } else if ("takes".equals(sub.getNodeName())) {
  102.  
  103.                     int numShotCounters = 0;
  104.                     NodeList take = sub.getChildNodes();
  105.                    
  106.  
  107.                     for (int r = 0; r < take.getLength(); r++) { // loop through takes children
  108.  
  109.                         Node takes = take.item(r);
  110.                        
  111.                         if ("take".contentEquals(takes.getNodeName())) {
  112.                             // get the take number
  113.                             int takes1 = Integer.parseInt(takes.getAttributes().getNamedItem("number").getNodeValue());
  114.                            
  115.                             numShotCounters++; // for logic
  116.                            
  117.                             NodeList takes2 = takes.getChildNodes();
  118.                             for(int e = 0; e < takes2.getLength(); e++) {
  119.                                 Node take2 = takes2.item(e);
  120.                                 if("area".contentEquals(take2.getNodeName())) {
  121.                                    
  122.                                     // get coordinates of shots
  123.                                     int takeX = Integer.parseInt(take2.getAttributes().getNamedItem("x").getNodeValue());
  124.                                     int takeY = Integer.parseInt(take2.getAttributes().getNamedItem("y").getNodeValue());
  125.                                     int takeH = Integer.parseInt(take2.getAttributes().getNamedItem("h").getNodeValue());
  126.                                     int takeW = Integer.parseInt(take2.getAttributes().getNamedItem("w").getNodeValue());
  127.                                    
  128.                                     // load them in
  129.                                     shotPlacement shotPlace = new shotPlacement(takeX,takeY,takeH,takeW,takes1);
  130.                                     shots.add(shotPlace);
  131.                                     curRoom.setShotPlacement(shots);
  132.                                 }  
  133.                             }
  134.                         }
  135.                     }
  136.                     curRoom.setNumShotCounters(numShotCounters);
  137.                     curRoom.setMaxShotCounters(numShotCounters);
  138.                 } else if ("parts".equals(sub.getNodeName())) {
  139.  
  140.                     NodeList part = sub.getChildNodes();
  141.                     ArrayList<Role> roles = new ArrayList<Role>();
  142.  
  143.                     for (int k = 0; k < part.getLength(); k++) {
  144.  
  145.                         Node parts = part.item(k);
  146.  
  147.                         if ("part".equals(parts.getNodeName())) {
  148.  
  149.                             // get part name
  150.                             String parts1 = parts.getAttributes().getNamedItem("name").getNodeValue();
  151.  
  152.                             // get rank
  153.                             String rank = parts.getAttributes().getNamedItem("level").getNodeValue();
  154.                             int intRank = Integer.parseInt(rank);
  155.  
  156.                             // get line said
  157.                             String line = parts.getTextContent();
  158.  
  159.                             // load it up
  160.                             Role curRole = new Role(parts1, intRank, line, false);
  161.                             roles.add(curRole);
  162.                         }
  163.                         curRoom.setRoles(roles);
  164.                     }
  165.  
  166.                 }
  167.  
  168.             }
  169.             rooms[i] = curRoom;
  170.         }
  171.         this.allRooms = rooms;
  172.     }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement