2 * Copyright (c) 2001-2007 Sun Microsystems, Inc. All rights reserved.
4 * The Sun Project JXTA(TM) Software License
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
9 * 1. Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
16 * 3. The end-user documentation included with the redistribution, if any, must
17 * include the following acknowledgment: "This product includes software
18 * developed by Sun Microsystems, Inc. for JXTA(TM) technology."
19 * Alternately, this acknowledgment may appear in the software itself, if
20 * and wherever such third-party acknowledgments normally appear.
22 * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must
23 * not be used to endorse or promote products derived from this software
24 * without prior written permission. For written permission, please contact
25 * Project JXTA at http://www.jxta.org.
27 * 5. Products derived from this software may not be called "JXTA", nor may
28 * "JXTA" appear in their name, without prior written permission of Sun.
30 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
31 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
32 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SUN
33 * MICROSYSTEMS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
34 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
36 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
37 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
38 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
39 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41 * JXTA is a registered trademark of Sun Microsystems, Inc. in the United
42 * States and other countries.
44 * Please see the license information page at :
45 * <http://www.jxta.org/project/www/license.html> for instructions on use of
46 * the license in source files.
48 * ====================================================================
50 * This software consists of voluntary contributions made by many individuals
51 * on behalf of Project JXTA. For more information on Project JXTA, please see
52 * http://www.jxta.org.
54 * This license is based on the BSD license adopted by the Apache Foundation.
57 package net.jxta.impl.protocol;
60 import net.jxta.document.*;
61 import net.jxta.protocol.RouteAdvertisement;
62 import net.jxta.protocol.RouteResponseMsg;
64 import java.lang.reflect.UndeclaredThrowableException;
65 import java.util.Enumeration;
69 * Used by the Endpoint Routing protocol in response to Route Query Messages.
70 * The Route Response Message contains a route advertisement for the destination
74 * <xs:complexType name="ERR">
76 * <xs:element name="Dst">
79 * <xs:element ref="jxta:RA" />
81 * </xs:complexType>
83 * <xs:element name="Src">
86 * <xs:element ref="jxta:RA" />
88 * </xs:complexType>
91 * </xs:complexType>
94 * @see net.jxta.impl.endpoint.router.EndpointRouter
95 * @see <a href="https://jxta-spec.dev.java.net/nonav/JXTAProtocols.html#proto-erp"
96 * target="_blank">JXTA Protocols Specification : Endpoint Routing Protocol</a>
98 public class RouteResponse extends RouteResponseMsg {
100 private static final String destRouteTag = "Dst";
101 private static final String srcRouteTag = "Src";
104 * Construct a new Route Response Message
106 public RouteResponse() {}
109 * Construct from an XML document fragment.
111 * @param doc the element
113 public RouteResponse(XMLElement doc) {
115 String doctype = doc.getName();
117 if (!doctype.equals(getAdvertisementType())) {
118 throw new IllegalArgumentException(
119 "Could not construct : " + getClass().getName() + " from doc containing a " + doctype);
122 Enumeration<XMLElement> elements = doc.getChildren();
124 while (elements.hasMoreElements()) {
125 XMLElement elem = elements.nextElement();
127 if (elem.getName().equals(destRouteTag)) {
128 for (Enumeration<XMLElement> eachXpt = elem.getChildren(); eachXpt.hasMoreElements();) {
129 XMLElement aXpt = eachXpt.nextElement();
131 RouteAdvertisement route = (RouteAdvertisement) AdvertisementFactory.newAdvertisement(aXpt);
138 if (elem.getName().equals(srcRouteTag)) {
139 for (Enumeration<XMLElement> eachXpt = elem.getChildren(); eachXpt.hasMoreElements();) {
140 XMLElement aXpt = eachXpt.nextElement();
142 RouteAdvertisement route = (RouteAdvertisement) AdvertisementFactory.newAdvertisement(aXpt);
151 if (null == getSrcRoute()) {
152 throw new IllegalArgumentException("Missing source route.");
155 if (null == getDestRoute()) {
156 throw new IllegalArgumentException("Missing destination route.");
159 if (null == getSrcRoute().getDestPeerID()) {
160 throw new IllegalArgumentException("Bad source route.");
163 if (null == getDestRoute().getDestPeerID()) {
164 throw new IllegalArgumentException("Bad destination route.");
169 * return a Document representation of this object
172 public Document getDocument(MimeMediaType asMimeType) {
173 if (null == getSrcRoute()) {
174 throw new IllegalStateException("Missing source route.");
177 if (null == getDestRoute()) {
178 throw new IllegalStateException("Missing destination route.");
181 if (null == getSrcRoute().getDestPeerID()) {
182 throw new IllegalStateException("Bad source route.");
185 if (null == getDestRoute().getDestPeerID()) {
186 throw new IllegalStateException("Bad destination route.");
189 StructuredDocument adv = StructuredDocumentFactory.newStructuredDocument(asMimeType, getAdvertisementType());
191 if (adv instanceof XMLDocument) {
192 ((XMLDocument) adv).addAttribute("xmlns:jxta", "http://jxta.org");
193 ((XMLDocument) adv).addAttribute("xml:space", "preserve");
198 RouteAdvertisement route = getDestRoute();
201 e = adv.createElement(destRouteTag);
203 StructuredTextDocument xptDoc = (StructuredTextDocument)
204 route.getDocument(asMimeType);
206 StructuredDocumentUtils.copyElements(adv, e, xptDoc);
209 route = getSrcRoute();
211 e = adv.createElement(srcRouteTag);
213 StructuredTextDocument xptDoc = (StructuredTextDocument)
214 route.getDocument(asMimeType);
216 StructuredDocumentUtils.copyElements(adv, e, xptDoc);
224 * <p/>String representation of this RouteResponse doc.
227 public String toString() {
228 XMLDocument doc = (XMLDocument) getDocument(MimeMediaType.XMLUTF8);
230 doc.addAttribute("xml:space", "default");
232 return doc.toString();