移动Agent编程工具Naplet

源代码在线查看: addressbook.java

软件大小: 969 K
上传用户: ABC258369000
关键词: Naplet Agent 移动 编程工具
下载地址: 免注册下载 普通下载 VIP

相关代码

				
				/* 
				 * @AddressBook.java version 0.0.1, 1/1/2001
				 *
				 * THIS PROGRAM IS FREE SOFTWARE; YOU CAN DISTRIBUTE IT AND/OR
				 * MODIFY IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE 
				 * AS PUBLISHED BY THE FREE SOFTWARE FOUNDATION.
				 *
				 * THIS PROGRAM 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 GENERAL PUBLIC LICENSE FOR MORE DETAILS.
				 *
				 * Copyright (c) 2000 Wayne State University. All Rights Reserved.
				 */
				package naplet.message;
				
				import java.util.*;
				import naplet.*;
				
				/**
				 * The AddressBook of a naplet contains all the NapletID of 
				 * its sibling naplets due to cloning, as well as the address information
				 * inherited from its parent (creator).  
				 * All the naplets in the AddressBook forms a communication network.
				 */
				public class AddressBook implements java.io.Serializable, Cloneable {
					/**
					 * AddressBook is created to associate with each original naplet. 
					 * Naplet clone() inherits AddressBook.
					 */ 
					private NapletID creator;
				
					/**
					 * Owner of the address book can change with time.
					 * On spawning a naplet, the child naplet becomes a owner of the book while
					 * creator remains the same. 
					 */
					private NapletID owner;			
					private int generation; 	// Descendent of the creator.
				
					/**
					 * A group of reachable naplets, including the creator itself. 
					 */
					private ArrayList aBook;
					
					/**
					 * Constructor
					 * @param nid Creator of the AddressBook
					 */
					public AddressBook( NapletID nid ) {
						creator = nid;	
						owner = nid;
						aBook = new ArrayList();  // Create an empty address book
						aBook.add( new AddressEntry(nid) ); 
					}
				
					/**
					 * Clone, deep or shallow??
					 */
					public synchronized Object clone() {
						try {
							AddressBook newBook = (AddressBook)super.clone();
				
							newBook.creator = creator; 
							newBook.owner = owner;
							newBook.generation++; 	// New generation relative to creator
							
							if (aBook!=null) 
								newBook.aBook = (ArrayList) aBook.clone();
							else
								throw new NapletInternalError("Clone an Empty Address Book");	
				
							return newBook;
						} catch (CloneNotSupportedException e) {
							throw new NapletInternalError("Clone error for AddressBook");
						}
					}
				
					public final NapletID creator() { return creator; }
					public final int generation() { return generation; }
					public int size() { return aBook.size(); }
				
					public final NapletID getOwner() { return owner; }
					public final void setOwner( NapletID nid ) throws InvalidNapletException { 
						if (nid==null)
							throw new InvalidNapletException("Empty AddressBook Owner"); 
						owner = nid; 
					}
				
					public void add( NapletID nid, URN server ) {
						aBook.add( new AddressEntry(nid, server) );
					}
				
					public void add( NapletID nid ) {
						add(nid, null);
					}
				
					public void addAll( NapletID[] nids, URN[] servers ) {
						for (int i=0; i							add( nids[i], servers[i] );
					}
					public void addAll( NapletID[] nids ) {
						for (int i=0; i							add( nids[i] );
					}
				
					public URN getAddress( NapletID nid ) throws NoSuchElementException {
						boolean going = true;
						URN server = null;
				
						if (nid==null)
							throw new NoSuchElementException();
						
						for (int i=0; going && i							AddressEntry entry = (AddressEntry) aBook.get(i);
							if (nid.equals(entry.getNapletID())) {
								server = entry.getServerURN();
								going = false;
							}
						}
				
						return server; 
					}
				
					public void updateAddress( NapletID nid, URN server ) 
									throws NoSuchElementException {
				
						boolean going = true;
						if (nid==null)
							throw new NoSuchElementException();
						
						for (int i=0; going && i							AddressEntry entry = (AddressEntry) aBook.get(i);
							if (nid.equals(entry.getNapletID())) {
								entry.setServerURN( server ) ;
								going = false;
							}
						}
				
					}
				
					public ListIterator iterator() {
						return aBook.listIterator();
					}
				
					public String toString() {
						StringBuffer sb = new StringBuffer(creator.toString()+"("); 
						for (int i=1; i							sb.append( aBook.toString() );
						sb.append(")");
						return sb.toString();
					}
				
				}
							

相关资源