pjs/grendel/storage/addressparser/RouteAddrNoPhraseException....

201 строка
4.2 KiB
Java

/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is the Grendel mail/news client.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are Copyright (C) 1997
* Netscape Communications Corporation. All Rights Reserved.
*
* Created: Eric Bina <ebina@netscape.com>, 30 Oct 1997.
*/
package grendel.storage.addressparser;
import java.io.*;
import java.util.*;
class RouteAddrNoPhraseException extends RFC822ParserException
{
public RouteAddrNoPhraseException(String str, AddressToken addr_token,
Vector tokens)
{
super(str, addr_token, tokens);
}
public boolean hasRoute()
{
int start = getAddrSpecStart();
RFC822Token token;
token = (RFC822Token)this.tokens.elementAt(start - 1);
if (token.isSpecialChar(':') == true)
{
return(true);
}
return(false);
}
public boolean hasComments(Vector orig_tokens)
{
int start = this.token.getTokenStart();
int end = this.token.getTokenEnd();
int orig_start = matchToken(0, 0, start, orig_tokens, this.tokens);
/*
* Comments just before the starting '<' count.
*/
if (isComment(orig_tokens, (orig_start - 1)) == true)
{
return(true);
}
/*
* Look for any comments in the body.
*/
orig_start++;
start++;
while (start < end)
{
if (isComment(orig_tokens, orig_start) == true)
{
return(true);
}
orig_start++;
start++;
}
/*
* Comments just after the '>' count.
*/
if (isComment(orig_tokens, (orig_start + 1)) == true)
{
return(true);
}
return(false);
}
public AddressToken getRouteAddr()
{
return(this.token);
}
public int getOrigRouteAddrStart(Vector orig_tokens)
{
int start = this.token.getTokenStart();
int indx = matchToken(0, 0, start, orig_tokens, this.tokens);
return(indx);
}
public int getOrigRouteAddrEnd(Vector orig_tokens)
{
int start = this.token.getTokenStart();
int end = this.token.getTokenEnd();
int indx = matchToken(0, 0, start, orig_tokens, this.tokens);
indx = matchToken(indx, start, end, orig_tokens, this.tokens);
return(indx);
}
public AddressToken getAddrSpec()
{
int start = getAddrSpecStart();
int end = this.token.getTokenEnd();
AddressToken addr_spec;
end--;
addr_spec = new AddressToken(start, end, AddressToken.ADDR_SPEC);
return(addr_spec);
}
/*
public AddressToken makePhrase(Vector orig_tokens)
{
}
*/
/***********************
***********************
** PRIVATE METHODS **
***********************
***********************/
private int matchToken(int orig_start, int start, int end,
Vector orig_tokens, Vector tokens)
{
if (start > end)
{
return(orig_start);
}
while (start <= end)
{
while (isComment(orig_tokens, orig_start) == true)
{
orig_start++;
}
orig_start++;
start++;
}
return(orig_start - 1);
}
private boolean isComment(Vector tokens, int indx)
{
RFC822Token token;
if ((indx < 0)||(indx >= tokens.size()))
{
return(false);
}
token = (RFC822Token)tokens.elementAt(indx);
if (token.getType() == RFC822Token.COMMENT)
{
return(true);
}
return(false);
}
private int getAddrSpecStart()
{
RFC822Token token;
int end = this.token.getTokenEnd();
token = (RFC822Token)this.tokens.elementAt(end);
while (token.isSpecialChar('<') == false)
{
if (token.isSpecialChar(':') == true)
{
break;
}
end--;
token = (RFC822Token)this.tokens.elementAt(end);
}
return(end + 1);
}
}