01: /*
02: Copyright (c) 2007, Dennis M. Sosnoski
03: All rights reserved.
04:
05: Redistribution and use in source and binary forms, with or without modification,
06: are permitted provided that the following conditions are met:
07:
08: * Redistributions of source code must retain the above copyright notice, this
09: list of conditions and the following disclaimer.
10: * Redistributions in binary form must reproduce the above copyright notice,
11: this list of conditions and the following disclaimer in the documentation
12: and/or other materials provided with the distribution.
13: * Neither the name of JiBX nor the names of its contributors may be used
14: to endorse or promote products derived from this software without specific
15: prior written permission.
16:
17: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
21: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
24: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27: */
28:
29: package org.jibx.binding.generator;
30:
31: import java.util.Iterator;
32:
33: import org.jibx.binding.model.BindingElement;
34: import org.jibx.binding.model.NamespaceElement;
35:
36: /**
37: * External data for a binding definition. This tracks references to other
38: * bindings, along with the associated namespace information.
39: */
40: public class BindingHolder extends HolderBase {
41: private final BindingElement m_binding;
42:
43: /**
44: * Constructor.
45: *
46: * @param uri (<code>null</code> if no-namespace binding)
47: * @param index binding index number
48: */
49: public BindingHolder(String uri, int index) {
50: super (uri);
51: m_binding = new BindingElement();
52: if (uri != null) {
53: NamespaceElement ns = new NamespaceElement();
54: ns.setDefaultName("elements");
55: ns.setUri(uri);
56: ns.setPrefix("ns" + index);
57: m_binding.addTopChild(ns);
58: m_binding.addNamespaceDecl("tns", uri);
59: }
60: }
61:
62: public BindingElement getBinding() {
63: return m_binding;
64: }
65:
66: /* (non-Javadoc)
67: * @see org.jibx.binding.generator.HolderBase#addNamespaceDecl(java.lang.String, java.lang.String)
68: */
69: protected void addNamespaceDecl(String prefix, String uri) {
70: m_binding.addNamespaceDecl(prefix, uri);
71: }
72:
73: /**
74: * Handle references from this binding to other bindings. This adds
75: * namespace declarations to the root element of the binding for the
76: * namespaces of the referenced bindings.
77: */
78: public void fixReferences() {
79: for (Iterator iter = getReferences().iterator(); iter.hasNext();) {
80: getPrefix(((BindingHolder) iter.next()).getNamespace());
81: }
82: }
83: }
|