01: /*
02:
03: This software is OSI Certified Open Source Software.
04: OSI Certified is a certification mark of the Open Source Initiative.
05:
06: The license (Mozilla version 1.0) can be read at the MMBase site.
07: See http://www.MMBase.org/license
08:
09: */
10: package org.mmbase.datatypes.util.xml;
11:
12: import org.mmbase.datatypes.BasicDataType;
13: import org.mmbase.datatypes.DataTypeCollector;
14: import org.w3c.dom.Element;
15: import org.mmbase.util.logging.*;
16:
17: /**
18: * This exception get thrown if parsing of a datatype element (temporary) fails.
19: *
20: * @author Michiel Meeuwissen
21: * @version $Id: DependencyException.java,v 1.1 2008/01/28 16:27:38 michiel Exp $
22: * @since MMBase-1.8.6
23: **/
24: public class DependencyException extends Exception {
25:
26: private static final Logger log = Logging
27: .getLoggerInstance(DependencyException.class);
28:
29: private final Element element;
30: private final DataTypeDefinition def;
31: private final BasicDataType requestedBaseDataType;
32: private DataTypeCollector collector = null;
33:
34: public DependencyException(Element el, BasicDataType rdt,
35: DataTypeDefinition def) {
36: super ();
37: element = el;
38: this .def = def;
39: requestedBaseDataType = rdt;
40: }
41:
42: public void setCollector(DataTypeCollector col) {
43: if (collector != null)
44: throw new IllegalStateException();
45: collector = col;
46: }
47:
48: public String getMessage() {
49: return "Attribute 'base' ('" + element.getAttribute("base")
50: + "') of datatype '" + element.getAttribute("id")
51: + "' is an unknown datatype (in "
52: + element.getOwnerDocument().getDocumentURI() + ").";
53:
54: }
55:
56: public String getId() {
57: return element.getOwnerDocument().getDocumentURI() + "@"
58: + element.getAttribute("id") + " (@base="
59: + element.getAttribute("base") + ")";
60: }
61:
62: public boolean retry() {
63: try {
64: log.info("Retrying " + getId());
65: def.configure(element, requestedBaseDataType);
66: if (collector != null) {
67: collector.addDataType(def.dataType);
68: }
69: return true;
70: } catch (DependencyException de) {
71: return false;
72: }
73: }
74:
75: public BasicDataType fallback() {
76: log.warn(getMessage());
77: element.setAttribute("base", "");
78: try {
79: return DataTypeReader.readDataType(element,
80: requestedBaseDataType, collector).dataType;
81: } catch (DependencyException de2) {
82: log.fatal(de2.getMessage());
83: return null;
84: }
85:
86: }
87:
88: }
|