001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.naming;
023:
024: import javax.naming.MalformedLinkException;
025: import javax.naming.Name;
026: import javax.naming.RefAddr;
027: import javax.naming.Reference;
028: import javax.naming.StringRefAddr;
029:
030: import org.jboss.logging.Logger;
031:
032: /**
033: * A pair of addresses, one to be used in the local machine,
034: * the other in remote machines.
035: *
036: * @author Adrian Brock (adrian@jboss.com)
037: * @version $Revision: 57209 $
038: */
039: public class LinkRefPair extends Reference {
040: // Constants -----------------------------------------------------
041:
042: /** Serial version UID */
043: private static final long serialVersionUID = 6036946190113161492L;
044:
045: /** Our class name */
046: private static final String linkRefPairClassName = LinkRefPair.class
047: .getName();
048:
049: /** The remote jndi object */
050: static final String remoteAddress = "remoteAddress";
051:
052: /** The local jndi object */
053: static final String localAddress = "localAddress";
054:
055: /** The guid used to determine whether we are local to the VM */
056: private static final String guidAddress = "guid";
057:
058: // Attributes ----------------------------------------------------
059:
060: // Static --------------------------------------------------------
061:
062: // Constructors --------------------------------------------------
063:
064: /**
065: * Create a new link ref pair with the give remote and local names.
066: *
067: * @param remote the remote name
068: * @param local the local name
069: */
070: public LinkRefPair(String remote, String local) {
071: super (linkRefPairClassName, LinkRefPairObjectFactory.className,
072: null);
073: add(new StringRefAddr(guidAddress,
074: LinkRefPairObjectFactory.guid));
075: add(new StringRefAddr(remoteAddress, remote));
076: add(new StringRefAddr(localAddress, local));
077: }
078:
079: // Public --------------------------------------------------------
080:
081: /**
082: * Get the guid link name
083: *
084: * @return the guid
085: * @throws MalformedLinkException when the reference is malformed
086: */
087: public String getGUID() throws MalformedLinkException {
088: if (className != null && className.equals(linkRefPairClassName)) {
089: RefAddr refAddr = get(guidAddress);
090: if (refAddr != null && refAddr instanceof StringRefAddr) {
091: Object content = refAddr.getContent();
092: if (content != null && content instanceof String)
093: return (String) content;
094: else
095: throw new MalformedLinkException(
096: "Content is not a string: " + content);
097: } else
098: throw new MalformedLinkException(
099: "RefAddr is not a string reference: " + refAddr);
100: } else
101: throw new MalformedLinkException(
102: "Class is not a LinkRefPair: " + className);
103: }
104:
105: /**
106: * Get the remote link name
107: *
108: * @return the remote link
109: * @throws MalformedLinkException when the reference is malformed
110: */
111: public String getRemoteLinkName() throws MalformedLinkException {
112: if (className != null && className.equals(linkRefPairClassName)) {
113: RefAddr refAddr = get(remoteAddress);
114: if (refAddr != null && refAddr instanceof StringRefAddr) {
115: Object content = refAddr.getContent();
116: if (content != null && content instanceof String)
117: return (String) content;
118: else
119: throw new MalformedLinkException(
120: "Content is not a string: " + content);
121: } else
122: throw new MalformedLinkException(
123: "RefAddr is not a string reference: " + refAddr);
124: } else
125: throw new MalformedLinkException(
126: "Class is not a LinkRefPair: " + className);
127: }
128:
129: /**
130: * Get the local link name
131: *
132: * @return the remote link
133: * @throws MalformedLinkException when the reference is malformed
134: */
135: public String getLocalLinkName() throws MalformedLinkException {
136: if (className != null && className.equals(linkRefPairClassName)) {
137: RefAddr refAddr = get(localAddress);
138: if (refAddr != null && refAddr instanceof StringRefAddr) {
139: Object content = refAddr.getContent();
140: if (content != null && content instanceof String)
141: return (String) content;
142: else
143: throw new MalformedLinkException(
144: "Content is not a string: " + content);
145: } else
146: throw new MalformedLinkException(
147: "RefAddr is not a string reference: " + refAddr);
148: } else
149: throw new MalformedLinkException(
150: "Class is not a LinkRefPair: " + className);
151: }
152:
153: // Package protected ---------------------------------------------
154:
155: // Protected -----------------------------------------------------
156:
157: // Private -------------------------------------------------------
158:
159: // Inner classes -------------------------------------------------
160: }
|