1 10 package org.mmbase.util; 11 12 import java.util.Vector ; 13 14 import org.mmbase.module.core.*; 15 import org.mmbase.module.corebuilders.InsRel; 16 import org.mmbase.module.corebuilders.RelDef; 17 import org.mmbase.util.logging.Logger; 18 import org.mmbase.util.logging.Logging; 19 import org.w3c.dom.NamedNodeMap ; 20 import org.w3c.dom.Node ; 21 import org.xml.sax.InputSource ; 22 23 31 public class XMLRelationNodeReader extends XMLNodeReader { 32 33 34 private static final Logger log = Logging.getLoggerInstance(XMLRelationNodeReader.class); 35 36 39 public XMLRelationNodeReader(InputSource is, ResourceLoader path) { 40 super(is, path); 41 } 42 43 public Vector getNodes(MMBase mmbase) { 44 Vector nodes = new Vector (); 45 Node n1 = document.getFirstChild(); 46 if (n1.getNodeType() == Node.DOCUMENT_TYPE_NODE) { 47 n1 = n1.getNextSibling(); 48 } 49 while (n1 != null) { 50 MMObjectBuilder bul = mmbase.getMMObject(n1.getNodeName()); 51 if (bul == null) { 52 log.error( 53 "Can't get builder with name: '" + n1.getNodeName() + "'"); 54 } 55 else { 56 Node n2 = n1.getFirstChild(); 57 while (n2 != null) { 58 if (n2.getNodeName().equals("node")) { 59 NamedNodeMap nm = n2.getAttributes(); 60 if (nm != null) { 61 Node n4 = nm.getNamedItem("owner"); 62 MMObjectNode newNode = bul.getNewNode(n4.getNodeValue()); 63 try { 64 n4 = nm.getNamedItem("number"); 65 int num = Integer.parseInt(n4.getNodeValue()); 66 newNode.setValue("number", num); 67 68 n4 = nm.getNamedItem("snumber"); 69 int rnum = Integer.parseInt(n4.getNodeValue()); 70 newNode.setValue("snumber", rnum); 71 n4 = nm.getNamedItem("dnumber"); 72 int dnum = Integer.parseInt(n4.getNodeValue()); 73 newNode.setValue("dnumber", dnum); 74 n4 = nm.getNamedItem("rtype"); 75 String rname = n4.getNodeValue(); 76 RelDef reldef = mmbase.getRelDef(); 77 if (reldef == null) { 78 log.error( 79 "XMLRelationReader -> can't get reldef builder"); 80 return null; 81 } 82 int rnumber = reldef.getNumberByName(rname); 84 newNode.setValue("rnumber", rnumber); 85 86 88 if (InsRel.usesdir) { 89 n4 = nm.getNamedItem("dir"); 90 int dir = 0; 91 if (n4 != null) { 92 String dirs = n4.getNodeValue(); 93 if ("unidirectional".equals(dirs)) { 94 dir = 1; 95 } 96 else 97 if ("bidirectional".equals(dirs)) { 98 dir = 2; 99 } 100 else { 101 log.error( 102 "invalid 'dir' attribute encountered in " 103 + bul.getTableName() 104 + " value=" 105 + dirs); 106 } 107 } 108 if (dir == 0) { 109 MMObjectNode relnode = reldef.getNode(rnumber); 110 if (relnode != null) { 111 dir = relnode.getIntValue("dir"); 112 } 113 } 114 if (dir != 1) 115 dir = 2; 116 newNode.setValue("dir", dir); 117 } 118 119 } 120 catch (Exception e) { 121 log.error(e); 122 log.error(Logging.stackTrace(e)); 123 } 124 Node n5 = n2.getFirstChild(); 125 while (n5 != null) { 126 String key = n5.getNodeName(); 127 if (n5.getNodeType() == Node.ELEMENT_NODE) { 128 Node n6 = n5.getFirstChild(); 129 String value = ""; 130 if (n6 != null) { 131 value = n6.getNodeValue(); } 133 setValue(bul, newNode, n5, key, value); 134 } 135 n5 = n5.getNextSibling(); 136 } 137 nodes.add(newNode); 138 } 139 } 140 n2 = n2.getNextSibling(); 141 } 142 } 143 n1 = n1.getNextSibling(); 144 } 145 return nodes; 146 } 147 } 148 | Popular Tags |