/*
 *	EasyScout Boy Scouts of America tracking software.
 *	http://www.easyscout.org/
 *
 *	Copyright (C) 2000 Conan C. Albrecht
 *	conan@warp.cx
 *
 *	This program is released under the GNU license so tech-savvy
 *	Boy Scouts and others can enhance the program for the use
 *	of all.  Please e-mail changes to my address above so I can
 *	reintegrate into the main program at http://www.easyscout.org/.
 *	This way, all users mutually benefit one another in the spirit of
 *	scouting.
 *
 *	This program is free software; you can redistribute it and/or
 *	modify it under the terms of the GNU General Public License
 *	as published by the Free Software Foundation; either version 2
 *	of the License, or (at your option) any later version.
 *
 * 	Any and all changes to the program code must be documented with
 *  date, author name and e-mail, and a short description.
 *
 *	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.
 *
 *	You should have received a copy of the GNU General Public License
 *	along with this program; if not, write to the Free Software
 *	Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

package cx.warp.scout;

import java.util.*;
import java.io.*;

/** The common interface to a scout */
public interface Scout extends Person {

	public static final String FIELDS[][] = { // field name, getter method name, ALL DO NOT HAVE SETTER METHODS!
	  { "Name",								  "getName" },
		{ "Address",							"getAddress" },
		{ "Email", 								"getEmail" },
		{ "Phone",                "getPhone" },
		{ "Birthdate", 					  "getBirthDate" },
		{ "Age", 									"getAge" },
		{ "Position",             "getPosition" },
		{ "Current Rank",         "getRank" },
	  { "Registration Number",  "getRegistration" },
		{ "Patrol",               "getPatrol" } ,
		{ "Notes",                "getNotes" },
		{ "Adult Contact(s)",     "getContact" },
		{ "Emergency Contact(s)", "getEmergency" },
		{ "Medical Information",  "getMedicalNotes" }
	}; // fields array
		

	
	/** Sets the scout's registration number */
	public void setRegistration(String reg)throws DataException;
	
	/** Returns the scout's registration number */
	public String getRegistration()throws DataException;
	
	/** Sets the scout's current patrol */
	public void setPatrol(String patrol)throws DataException;
	
	/** Returns the scout's current patrol */
	public String getPatrol()throws DataException;
	
	/** Sets the contact information */
	public void setContact(String contact)throws DataException;
	
	/** Returns the contact information */
	public String getContact()throws DataException;
	
	/** Sets the emergency contact information */
	public void setEmergency(String emergency)throws DataException;
	
	/** Returns the emergency contact info */
	public String getEmergency()throws DataException;
	
	/** Sets the medical notes */
	public void setMedicalNotes(String medical)throws DataException;
	
	/** Gets the medical notes */
	public String getMedicalNotes()throws DataException;

	/////////////////////////////////
	///   Merit Badge accessors   ///
	/////////////////////////////////

	/** Creates a new merit badge */
	public MeritBadge createMeritBadge() throws DataException;
	
	/** Sorts merit badges by date */
	public void sortMeritBadges() throws DataException;

	/** Returns the merit badge with the given id */
	public MeritBadge getMeritBadge(String id)throws DataException;
	
	/** Returns an Enumeration of all MeritBadges earned by a scout, sorted by date */
	public Enumeration getMeritBadges()throws DataException;
	
	/** Removes a merit badge from this scout's list */
	public MeritBadge removeMeritBadge(String id) throws DataException;
	
	/////////////////////////////////
	///   Activities accessors    ///
	/////////////////////////////////

	/** Creates a new activity */
	public Activity createActivity()throws DataException;
	
	/** Sorts Activity by date */
	public void sortActivities() throws DataException;

	/** Returns the Activity with the given id */
	public Activity getActivity(String id)throws DataException;
	
	/** Returns an Enumeration of all Activities earned by a scout, sorted by date */
	public Enumeration getActivities()throws DataException;
	
	/** Removes an Activity from this scout's list */
	public Activity removeActivity(String id) throws DataException;
	
	/////////////////////////////////
	///   Leadership accessors    ///
	/////////////////////////////////

	/** Creates a new leadership position */
	public Position createPosition()throws DataException;
	
	/** Sorts Position by date */
	public void sortPositions() throws DataException;

	/** Returns the Position with the given id */
	public Position getPosition(String id)throws DataException;
	
	/** Returns an Enumeration of all Position earned by a scout, sorted by date */
	public Enumeration getPositions()throws DataException;
	
	/** Removes an Position from this scout's list */
	public Position removePosition(String id) throws DataException;
	
	/////////////////////////////
	///   Advancement ranks   ///
	/////////////////////////////

	/** Sets the current rank of the scout */
	public void setRank(String rank)throws DataException;

	/** Returns the scout's current rank */
	public Rank getRank() throws DataException;
	
	/** Returns the scout's next rank */
	public Rank getNextRank() throws DataException;
	
	/** Returns the given rank */
	public Rank getRank(String name) throws DataException;
	
	/** Returns the given rank number */
	public Rank getRank(int index)  throws DataException;
	
	/** Returns the index of the given rank */
	public int getRankIndex(String name) throws DataException;

	/** Returns an Enumeration of Ranks for this scout */
	public Enumeration getRanks() throws DataException;

}//Scout
