/** * XMLファイル読み込み * * @param filename ファイル名 */ public void readXML(String filename) throws Exception { // ドキュメントビルダーファクトリを生成 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); // ドキュメントビルダーを生成 DocumentBuilder builder = factory.newDocumentBuilder(); // パースを実行してDocumentオブジェクトを取得 Document document = builder.parse(filename); // ルート要素を取得 Element root = document.getDocumentElement(); // KeyAgreement要素のリストを取得 NodeList ka = root.getElementsByTagName("KeyAgreement"); // KeyAgreementのIDを取得 String kaID = ((Element) ka.item(0)).getAttribute("xmlns:ID"); if (debug) System.out.println("KeyAgreement ID = " + kaID); // Group要素のリストを取得 NodeList gr = ((Element) ka.item(0)).getElementsByTagName("Group"); // GroupのCountを取得 String gcount = ((Element) gr.item(0)).getAttribute("xmlns:Count"); if (debug) System.out.println("\tGroup Count = " + gcount); keyag = new KeyAgreement(); keyag.setID(Integer.parseInt(kaID)); keyag.setGroupCount(Integer.parseInt(gcount)); // Peer要素のリストを取得 NodeList pe = ((Element) ka.item(0)).getElementsByTagName("Peer"); if (debug) System.out.println( "pe.item(i).getParentNode().getNodeName():" + pe.item(0).getParentNode().getNodeName()); if (pe.item(0).getParentNode().getNodeName().equals("KeyAgreement")) { // PeerのIDを取得 String pID = ((Element) pe.item(0)).getAttribute("xmlns:ID"); if (debug) System.out.println("\tPeer ID = " + pID); // Peerのaltを取得 String palt = ((Element) pe.item(0)).getAttribute("xmlns:alt"); if (debug) System.out.println("\tPeer alt = " + palt); Peer peer = new Peer(); peer.setID(Integer.parseInt(pID)); if (palt.equals("")) { palt = "-1"; } peer.setalt(Integer.parseInt(palt)); // Round要素のリストを取得 NodeList ro = ((Element) pe.item(0)).getElementsByTagName("Round"); // Roundの数だけループ for (int j = 0; j < ro.getLength(); j++) { // Roundのroundを取得 String rround = ((Element) ro.item(j)).getAttribute("round"); if (debug) System.out.println("\t\tRound round = " + rround); // RoundのOption要素のリストを取得 NodeList op = ((Element) ro.item(j)).getElementsByTagName("Option"); // Option要素のノードの値を取得 String option = op.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く option = option.trim(); if (debug) System.out.println("\t\t\tOption = " + option); // Roundのbehavior要素のリストを取得 NodeList be = ((Element) ro.item(j)).getElementsByTagName("Behavior"); // behavior要素のノードの値を取得 String behavior = be.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く behavior = behavior.trim(); if (debug) System.out.println("\t\t\tbehavior = " + behavior); // RoundのGroupID要素のリストを取得 // NodeList gid = ((Element)ro.item(j)).getElementsByTagName("GroupID"); // GroupID要素のノードの値を取得 // String groupid = gid.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く // groupid = groupid.trim(); // if(debug) System.out.println("\t\t\tGroupID = "+ groupid); // GroupName部分 要修正 // RoundのGroupName要素のリストを取得 // NodeList gn = ((Element)ro.item(j)).getElementsByTagName("GroupName"); // GroupName要素のノードの値を取得 // String groupname = gn.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く // groupname = groupname.trim(); // if(debug) System.out.println("\t\t\tGroupName = "+ groupname); Round round = new Round(); round.setRoundNumber(Integer.parseInt(rround)); round.setOption(option); round.setbehavior(behavior); // round.setGroupID( Integer.parseInt( groupid ) ); // round.setGroupName( groupname ); if (behavior.equals("Exchange")) { // RoundのSendTo要素のリストを取得 NodeList se = ((Element) ro.item(j)).getElementsByTagName("SendTo"); SendTo sendto = new SendTo(); // SendToのPeer要素のリストを取得 NodeList sp = ((Element) se.item(0)).getElementsByTagName("Peer"); // Peerの数だけループ for (int k = 0; k < sp.getLength(); k++) { // PeerのID要素のリストを取得 NodeList peid = ((Element) sp.item(k)).getElementsByTagName("ID"); // ID要素のノードの値を取得 String peID = peid.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く peID = peID.trim(); if (debug) System.out.println("\t\t\t\tPeer ID = " + peID); // Peerのalt要素のリストを取得 NodeList peal = ((Element) sp.item(k)).getElementsByTagName("alt"); // ID要素のノードの値を代入する変数の宣言 String pealt = new String(); if (peal.item(0) != null) { // ID要素のノードの値を取得 pealt = peal.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く pealt = pealt.trim(); } if (debug) System.out.println("\t\t\t\tPeer alt = " + pealt); // PeerのIP要素のリストを取得 NodeList peip = ((Element) sp.item(k)).getElementsByTagName("IP"); // IP要素のノードの値を取得 String peIP = peip.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く peIP = peIP.trim(); if (debug) System.out.println("\t\t\t\tPeer IP = " + peIP); // PeerのRelayIP要素のリストを取得 NodeList perip = ((Element) sp.item(k)).getElementsByTagName("RelayIP"); // RelayIP要素のノードの値を代入する変数の宣言 String peRIP = new String(); if (perip.item(0).getFirstChild() != null) { // RelayIP要素のノードの値を取得 peRIP = perip.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く peRIP = peRIP.trim(); } if (debug) System.out.println("\t\t\t\tPeer RelayIP = " + peRIP); SendToPeer sendtopeer = new SendToPeer(); sendtopeer.setID(Integer.parseInt(peID)); if (pealt.equals("")) { pealt = "-1"; } sendtopeer.setalt(Integer.parseInt(pealt)); sendtopeer.setIP(peIP); sendtopeer.setRelayIP(peRIP); sendto.addPeerList(sendtopeer); } round.setSendTo(sendto); // RoundのReceiveFrom要素のリストを取得 NodeList rf = ((Element) ro.item(j)).getElementsByTagName("ReceiveFrom"); ReceiveFrom receivefrom = new ReceiveFrom(); // ReceiveFromのID要素のリストを取得 NodeList rfid = ((Element) rf.item(0)).getElementsByTagName("ID"); // ID要素のノードの値を代入する変数の宣言 String rfID = new String(); if (rfid.item(0) != null) { // ID要素のノードの値を取得 rfID = rfid.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く rfID = rfID.trim(); } if (debug) System.out.println("\t\t\tReceiveFrom ID = " + rfID); // ReceiveFromのalt要素のリストを取得 NodeList rfal = ((Element) rf.item(0)).getElementsByTagName("alt"); // alt要素のノードの値を代入する変数の宣言 String rfalt = new String(); if (rfal.item(0) != null) { // alt要素のノードの値を取得 rfalt = rfal.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く rfalt = rfalt.trim(); } if (debug) System.out.println("\t\t\tReceiveFrom alt = " + rfalt); // ReceiveFromのIP要素のリストを取得 NodeList rfip = ((Element) rf.item(0)).getElementsByTagName("IP"); // IP要素のノードの値を代入する変数の宣言 String rfIP = new String(); if (rfip.item(0) != null) { // IP要素のノードの値を取得 rfIP = rfip.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く rfIP = rfIP.trim(); } if (debug) System.out.println("\t\t\tReceiveFrom IP = " + rfIP); // ReceiveFromのRelayIP要素のリストを取得 NodeList rfrip = ((Element) rf.item(0)).getElementsByTagName("RelayIP"); // RelayIP要素のノードの値を代入する変数の宣言 String rfRIP = new String(); if (rfrip.item(0) != null && rfrip.item(0).getFirstChild() != null) { // RelayIP要素のノードの値を取得 rfRIP = rfrip.item(0).getFirstChild().getNodeValue(); // 前後の空白を取り除く rfRIP = rfRIP.trim(); } if (debug) System.out.println("\t\t\tReceiveFrom RelayIP = " + rfRIP); if (rfID.equals("")) { rfID = "-1"; } receivefrom.setID(Integer.parseInt(rfID)); if (rfalt.equals("")) { rfalt = "-1"; } receivefrom.setalt(Integer.parseInt(rfalt)); receivefrom.setIP(rfIP); receivefrom.setRelayIP(rfRIP); round.setReceiveFrom(receivefrom); peer.addRoundList(round); } else { // System.out.println("Wait..."); peer.addRoundList(round); } } keyag.addPeerList(peer); } }