KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > util > XMLRelationNodeReader


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.util;
11
12 import java.util.Vector JavaDoc;
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 JavaDoc;
20 import org.w3c.dom.Node JavaDoc;
21 import org.xml.sax.InputSource JavaDoc;
22
23 /**
24  * This class reads a relation node from an exported application.
25  * @application Applications
26  * @move org.mmbase.util.xml
27  * @author Daniel Ockeloen
28  * @author Michiel Meeuwissen
29  * @version $Id: XMLRelationNodeReader.java,v 1.28 2006/03/08 12:51:58 nklasens Exp $
30  */

31 public class XMLRelationNodeReader extends XMLNodeReader {
32
33
34    private static final Logger log = Logging.getLoggerInstance(XMLRelationNodeReader.class);
35
36     /**
37      * @since MMBase-1.8
38      */

39     public XMLRelationNodeReader(InputSource JavaDoc is, ResourceLoader path) {
40         super(is, path);
41     }
42
43    public Vector JavaDoc getNodes(MMBase mmbase) {
44       Vector JavaDoc nodes = new Vector JavaDoc();
45       Node JavaDoc 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 JavaDoc n2 = n1.getFirstChild();
57             while (n2 != null) {
58                if (n2.getNodeName().equals("node")) {
59                   NamedNodeMap JavaDoc nm = n2.getAttributes();
60                   if (nm != null) {
61                      Node JavaDoc 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 JavaDoc 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                         // figure out rnumber
83
int rnumber = reldef.getNumberByName(rname);
84                         newNode.setValue("rnumber", rnumber);
85
86                         // directionality
87

88                         if (InsRel.usesdir) {
89                            n4 = nm.getNamedItem("dir");
90                            int dir = 0;
91                            if (n4 != null) {
92                               String JavaDoc 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 JavaDoc e) {
121                         log.error(e);
122                         log.error(Logging.stackTrace(e));
123                      }
124                      Node JavaDoc n5 = n2.getFirstChild();
125                      while (n5 != null) {
126                         String JavaDoc key = n5.getNodeName();
127                         if (n5.getNodeType() == Node.ELEMENT_NODE) {
128                            Node JavaDoc n6 = n5.getFirstChild();
129                            String JavaDoc value = "";
130                            if (n6 != null) {
131                                value = n6.getNodeValue(); // needs to be a loop
132
}
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