cphonebook.java
来自「SMSLib一个很有用的程序,有服务平台和收发平台」· Java 代码 · 共 300 行
JAVA
300 行
// SMSLib for Java
// An open-source API Library for sending and receiving SMS via a GSM modem.
// Copyright (C) 2002-2006, Thanasis Delenikas, Athens/GREECE
// Web Site: http://www.smslib.org
//
// SMSLib is distributed under the LGPL license.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
package org.smslib;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
class CPhoneBook
{
private static final char PHONE_BOOK_INDICATOR = '~';
private static final int ENTRY_TYPE_NOTFOUND = 0;
private static final int ENTRY_TYPE_ENTRY = 1;
private static final int ENTRY_TYPE_GROUP = 2;
private LinkedList entries;
private LinkedList groups;
public CPhoneBook()
{
this.entries = new LinkedList();
this.groups = new LinkedList();
}
protected boolean load(String file)
{
SAXParserFactory factory;
SAXParser parser;
boolean loaded;
if (file == null)
{
entries = new LinkedList();
groups = new LinkedList();
loaded = true;
}
else
{
loaded = true;
factory = SAXParserFactory.newInstance();
try
{
parser = factory.newSAXParser();
parser.parse(new File(file), new CParser());
}
catch (Exception e) { loaded = false; }
}
return loaded;
}
protected boolean isLoaded() { return (entries.size() > 0 ? true : false); }
protected LinkedList expandPhoneBookEntries(COutgoingMessage message)
{
LinkedList messageList;
String entry;
COutgoingMessage newMessage;
if (message.getRecipient().charAt(0) == PHONE_BOOK_INDICATOR)
{
entry = message.getRecipient().substring(1);
switch (getEntryType(entry))
{
case CPhoneBook.ENTRY_TYPE_ENTRY:
message.setRecipient(getEntryPhone(entry));
messageList = new LinkedList();
messageList.add(message);
break;
case CPhoneBook.ENTRY_TYPE_GROUP:
LinkedList members;
ListIterator iterator;
try
{
messageList = new LinkedList();
members = getGroupMembers(entry);
iterator = members.listIterator(0);
while (iterator.hasNext())
{
newMessage = new COutgoingMessage(getEntryPhone((String) iterator.next()), message.getText());
newMessage.setMessageEncoding(message.getMessageEncoding());
messageList.add(newMessage);
}
}
catch (Exception e) { messageList = null; }
break;
default:
messageList = null;
break;
}
}
else
{
messageList = new LinkedList();
messageList.add(message);
}
return messageList;
}
protected LinkedList expandPhoneBookEntries(LinkedList inList)
{
COutgoingMessage message;
LinkedList outList, tmpList;
outList = new LinkedList();
for (int i = 0; i < inList.size(); i ++)
{
message = (COutgoingMessage) inList.get(i);
tmpList = expandPhoneBookEntries(message);
if (tmpList != null) for (int j = 0; j < tmpList.size(); j ++) outList.add((COutgoingMessage) tmpList.get(j));
else return null;
}
return outList;
}
private int getEntryType(String code)
{
if (getEntryName(code) != null) return ENTRY_TYPE_ENTRY;
else if (getGroupName(code) != null) return ENTRY_TYPE_GROUP;
else return ENTRY_TYPE_NOTFOUND;
}
private String getEntryName(String code)
{
CPhoneBookEntry entry = getEntry(code);
return (entry == null ? null : entry.getName());
}
private String getEntryPhone(String code)
{
CPhoneBookEntry entry = getEntry(code);
return (entry == null ? null : entry.getPhone());
}
private String getGroupName(String code)
{
CPhoneBookGroupEntry entry = getGroupEntry(code);
return (entry == null ? null : entry.getName());
}
private LinkedList getGroupMembers(String code)
{
return getGroupEntry(code).getMembers();
}
private CPhoneBookEntry getEntry(String code)
{
CPhoneBookEntry entry;
for (int i = 0; i < entries.size(); i ++)
{
entry = (CPhoneBookEntry) entries.get(i);
if (entry.getCode().equalsIgnoreCase(code)) return entry;
}
return null;
}
private CPhoneBookGroupEntry getGroupEntry(String code)
{
CPhoneBookGroupEntry entry;
for (int i = 0; i < groups.size(); i ++)
{
entry = (CPhoneBookGroupEntry) groups.get(i);
if (entry.getCode().equalsIgnoreCase(code)) return entry;
}
return null;
}
class CPhoneBookEntry
{
private String code, name, phone;
private CPhoneBookEntry()
{
code = null;
name = null;
phone = null;
}
private CPhoneBookEntry(String code, String name, String phone)
{
this.code = code;
this.name = name;
this.phone = phone;
}
private String getCode() { return code; }
private String getName() { return name; }
private String getPhone() { return phone; }
}
class CPhoneBookGroupEntry
{
private String code, name;
private LinkedList members;
private CPhoneBookGroupEntry()
{
code = null;
name = null;
members = new LinkedList();
}
private CPhoneBookGroupEntry(String code, String name)
{
this.code = code;
this.name = name;
members = new LinkedList();
}
private void add(String code) { members.addLast(code); }
private String getCode() { return code; }
private String getName() { return name; }
private LinkedList getMembers() { return members; }
}
class CParser extends DefaultHandler
{
private static final int WHAT_BOOK = 1;
private static final int WHAT_ENTRY = 2;
private static final int WHAT_GROUP = 3;
private int what = 0;
private String element = "";
private String entryCode, entryName, entryPhone;
private String groupCode, groupName;
private CPhoneBookGroupEntry group;
public void startDocument () throws SAXException
{
}
public void endDocument () throws SAXException
{
}
public void startElement (String uri, String lName, String qName, Attributes attrs) throws SAXException
{
element = null;
if (qName.equalsIgnoreCase("phonebook")) what = WHAT_BOOK;
else if (qName.equalsIgnoreCase("phonebookentry")) what = WHAT_ENTRY;
else if (qName.equalsIgnoreCase("group")) what = WHAT_GROUP;
else element = qName;
}
public void endElement (String uri, String lName, String qName) throws SAXException
{
if (qName.equalsIgnoreCase("phonebookentry")) entries.addLast(new CPhoneBookEntry(entryCode, entryName, entryPhone));
else if (qName.equalsIgnoreCase("group")) groups.addLast(group);
}
public void characters (char buf [], int offset, int len) throws SAXException
{
if (new String(buf, offset, len).trim().length() == 0) return;
switch (what)
{
case WHAT_ENTRY:
if (element.equalsIgnoreCase("code")) entryCode = new String(buf, offset, len).trim();
else if (element.equalsIgnoreCase("name")) entryName = new String(buf, offset, len).trim();
else if (element.equalsIgnoreCase("phone")) entryPhone = new String(buf, offset, len).trim();
else if (element != null) throw(new SAXException("Unknown entry: " + element + "."));
break;
case WHAT_GROUP:
if (element.equalsIgnoreCase("code")) groupCode = new String(buf, offset, len).trim();
else if (element.equalsIgnoreCase("name"))
{
groupName = new String(buf, offset, len).trim();
group = new CPhoneBookGroupEntry(groupCode, groupName);
}
else if (element.equalsIgnoreCase("member")) group.add(new String(buf, offset, len).trim());
break;
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?