001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: *
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */
018:
019: /**
020: * @author Alexei Y. Zakharov
021: * @version $Revision: 1.1.2.4 $
022: */package org.apache.harmony.jndi.provider.dns;
023:
024: import java.util.StringTokenizer;
025:
026: import org.apache.harmony.jndi.internal.nls.Messages;
027:
028: /**
029: * Represents a DNS pseudo URL.
030: */
031: public class DNSPseudoURL {
032:
033: private String host = "localhost"; //$NON-NLS-1$
034:
035: private int port = ProviderConstants.DEFAULT_DNS_PORT;
036:
037: private String domain = "."; //$NON-NLS-1$
038:
039: private boolean hostIpWasGiven = false;
040:
041: /**
042: * Parses given argument and constructs new <code>DNSPseudoURL</code>
043: * object. The format of the argument is:<br>
044: * <code>dns:[//host[:port]][/domain]</code><br>
045: * If no host information was given then <code>localhost</code> will be
046: * used. If no port was given then the standard DNS server port
047: * <code>53</code> will be used. If no domain was given then the root
048: * domain will be used. All domain here are treated as absolute domains.
049: *
050: * @param DNS
051: * string representation of DNS URL
052: * @throws IllegalArgumentException
053: * if the argument is not in acceptable format
054: * @throws NullPointerException
055: * if the argument is null
056: */
057: public DNSPseudoURL(String strForm) throws IllegalArgumentException {
058: StringTokenizer st = null;
059: StringTokenizer st2 = null;
060: String token;
061:
062: if (strForm == null) {
063: // jndi.67=strForm is null
064: throw new NullPointerException(Messages
065: .getString("jndi.67")); //$NON-NLS-1$
066: }
067: st = new StringTokenizer(strForm, "/", true); //$NON-NLS-1$
068: if (!st.hasMoreTokens()) {
069: // jndi.68=Empty URL
070: throw new IllegalArgumentException(Messages
071: .getString("jndi.68")); //$NON-NLS-1$
072: }
073: // scheme
074: token = st.nextToken();
075: if (!token.equals("dns:")) { //$NON-NLS-1$
076: // jndi.69=Specified scheme is not dns
077: throw new IllegalArgumentException(Messages
078: .getString("jndi.69")); //$NON-NLS-1$
079: }
080: // host
081: if (st.hasMoreTokens()) {
082: token = st.nextToken();
083: if (!token.equals("/") || !st.hasMoreTokens()) { //$NON-NLS-1$
084: // jndi.6A=Bad URL syntax
085: throw new IllegalArgumentException(Messages
086: .getString("jndi.6A")); //$NON-NLS-1$
087: }
088: token = st.nextToken();
089: if (token.equals("/")) { //$NON-NLS-1$
090: // host[:port] was given
091: if (!st.hasMoreElements()) {
092: // jndi.6A=Bad URL syntax
093: throw new IllegalArgumentException(Messages
094: .getString("jndi.6A")); //$NON-NLS-1$
095: }
096: token = st.nextToken();
097: st2 = new StringTokenizer(token, ":"); //$NON-NLS-1$
098: host = st2.nextToken();
099: try {
100: ProviderMgr.parseIpStr(host);
101: hostIpWasGiven = true;
102: } catch (IllegalArgumentException e) {
103: hostIpWasGiven = false;
104: }
105: // port
106: if (st2.hasMoreTokens()) {
107: port = Integer.parseInt(st2.nextToken());
108: }
109: // domain
110: if (st.hasMoreTokens()) {
111: token = st.nextToken();
112: if (!token.equals("/") || !st.hasMoreTokens()) { //$NON-NLS-1$
113: // jndi.6A=Bad URL syntax
114: throw new IllegalArgumentException(Messages
115: .getString("jndi.6A")); //$NON-NLS-1$
116: }
117: domain = ProviderMgr.normalizeName(st.nextToken());
118: }
119: } else {
120: // domain
121: domain = ProviderMgr.normalizeName(token);
122: }
123: // extra
124: if (st.hasMoreTokens()) {
125: // jndi.66=Extra characters encountered at the end of the URL
126: throw new IllegalArgumentException(Messages
127: .getString("jndi.66")); //$NON-NLS-1$
128: }
129: }
130: }
131:
132: /**
133: * @return Returns the domain.
134: */
135: public String getDomain() {
136: return domain;
137: }
138:
139: /**
140: * @return Returns the host.
141: */
142: public String getHost() {
143: return host;
144: }
145:
146: /**
147: * @return Returns the hostIpWasGiven.
148: */
149: public boolean isHostIpGiven() {
150: return hostIpWasGiven;
151: }
152:
153: /**
154: * @return Returns the port.
155: */
156: public int getPort() {
157: return port;
158: }
159:
160: }
|