// Path: src/main/java/org/votesmart/data/Committee.java
// @XmlRootElement(name="committee")
// public class Committee extends GeneralInfoBase {
// 	public String committeeId;
// 	public String parentId;
// 	public String stateId;
// 	public String committeeTypeId;
// 	public String name;
// 	public String jurisdiction;
// 	public Contact contact;
// 	 
// 	@XmlType(name="contact", namespace="committee")
// 	public static class Contact {
// 		public String address1;
// 		public String address2;
// 		public String city;
// 		public String state;
// 		public String zip;
// 		public String phone;
// 		public String fax;
// 		public String email;
// 		public URL url;
// 		public String staffContact;
// 	}
// 
// }
// 
// Path: src/main/java/org/votesmart/data/CommitteeMembers.java
// @XmlRootElement(name="committeeMembers")
// public class CommitteeMembers extends GeneralInfoBase {
// 	public Committee committee;
// 	public ArrayList<Member> member;
// 
// 	@XmlType(name="commiittee", namespace="committeeMembers")
// 	public static class Committee {
// 		public String committeeId;
// 		public String parentId;
// 		public String name;
// 	}
// 	@XmlType(name="member", namespace="committeeMembers")
// 	public static class Member {
// 		public String candidateId;
// 		public String title;
// 		public String firstName;
// 		public String middleName;
// 		public String lastName;
// 		public String suffix;
// 		public String party;
// 		public String position;
// 	}
// 
// }
// 
// Path: src/main/java/org/votesmart/data/CommitteeTypes.java
// @XmlRootElement(name="committeeTypes")
// public class CommitteeTypes extends GeneralInfoBase {
// 	public ArrayList<Type> type;
// 	
// 	@XmlType(name="type", namespace="committeeTypes")
// 	public static class Type {
// 		public String committeeTypeId;
// 		public String name;
// 	}
// }
// 
// Path: src/main/java/org/votesmart/data/Committees.java
// @XmlRootElement(name="committees")
// public class Committees extends GeneralInfoBase {
// 	public ArrayList<Committee> committee;
// 	
// 	@XmlType(name="committee", namespace="committees")
// 	public static class Committee {
// 		public String committeeId;
// 		public String parentId;
// 		public String stateId;
// 		public String committeeTypeId;
// 		public String name;
// 	}
// }


import org.votesmart.api.*;
import org.votesmart.data.Committee;
import org.votesmart.data.CommitteeMembers;
import org.votesmart.data.CommitteeTypes;
import org.votesmart.data.Committees;

package org.votesmart.classes;


/**
 * <pre>
 * Committee Class
 * 
 * * - Required
 * * - Multiple rows
 * 
 * Committee.getTypes()
 * Returns the committee types(house, senate, joint, etc)
 * Input: none
 * Output: {@link CommitteeTypes}
 * 
 * Committee.getCommitteesByTypeState()
 * Returns the list of committees that fit the criteria
 * Input: typeId(Default: All), stateId (Default: NA(fed))
 * Output: {@link Committees}
 * 
 * Committee.getCommittee()
 * Returns detailed committee data.
 * Input: committeeId*
 * Output: {@link Committee}
 * 
 * Committee.getCommitteeMembers()
 * Returns members of the committee
 * Input: committeeId*
 * Output: {@link CommitteeMembers}
 * 
 * =========== EXAMPLE USAGE ========
 * 
 * CommitteeClass committeeClass = new CommitteeClass();
 * 
 * Committee committee = committeeClass.getCommittee(committeeByBio.committeeId);
 * 
 * CommitteeTypes committeeTypes = committeeClass.getTypes();
 * </pre>
 *
 */
public class CommitteeClass extends ClassesBase {

	/**
	 * Constructor for testing purposes.
	 * 
	 * @param api
	 */
	public CommitteeClass(VoteSmartAPI api) {
		super(api);
	}

	/**
	 * Default Constructor
	 */
	public CommitteeClass() throws VoteSmartException {
		super();
	}

	/**
	 * Returns the committee types(house, senate, joint, etc)
	 * 
	 * @return {@link CommitteeTypes}: 
	 */
	public CommitteeTypes getTypes() throws VoteSmartException, VoteSmartErrorException {

// Path: src/main/java/org/votesmart/data/Committee.java
// @XmlRootElement(name="committee")
// public class Committee extends GeneralInfoBase {
// 	public String committeeId;
// 	public String parentId;
// 	public String stateId;
// 	public String committeeTypeId;
// 	public String name;
// 	public String jurisdiction;
// 	public Contact contact;
// 	 
// 	@XmlType(name="contact", namespace="committee")
// 	public static class Contact {
// 		public String address1;
// 		public String address2;
// 		public String city;
// 		public String state;
// 		public String zip;
// 		public String phone;
// 		public String fax;
// 		public String email;
// 		public URL url;
// 		public String staffContact;
// 	}
// 
// }
// 
// Path: src/main/java/org/votesmart/data/CommitteeMembers.java
// @XmlRootElement(name="committeeMembers")
// public class CommitteeMembers extends GeneralInfoBase {
// 	public Committee committee;
// 	public ArrayList<Member> member;
// 
// 	@XmlType(name="commiittee", namespace="committeeMembers")
// 	public static class Committee {
// 		public String committeeId;
// 		public String parentId;
// 		public String name;
// 	}
// 	@XmlType(name="member", namespace="committeeMembers")
// 	public static class Member {
// 		public String candidateId;
// 		public String title;
// 		public String firstName;
// 		public String middleName;
// 		public String lastName;
// 		public String suffix;
// 		public String party;
// 		public String position;
// 	}
// 
// }
// 
// Path: src/main/java/org/votesmart/data/CommitteeTypes.java
// @XmlRootElement(name="committeeTypes")
// public class CommitteeTypes extends GeneralInfoBase {
// 	public ArrayList<Type> type;
// 	
// 	@XmlType(name="type", namespace="committeeTypes")
// 	public static class Type {
// 		public String committeeTypeId;
// 		public String name;
// 	}
// }
// 
// Path: src/main/java/org/votesmart/data/Committees.java
// @XmlRootElement(name="committees")
// public class Committees extends GeneralInfoBase {
// 	public ArrayList<Committee> committee;
// 	
// 	@XmlType(name="committee", namespace="committees")
// 	public static class Committee {
// 		public String committeeId;
// 		public String parentId;
// 		public String stateId;
// 		public String committeeTypeId;
// 		public String name;
// 	}
// }


// Path: src/main/java/org/votesmart/classes/CommitteeClass.java
import org.votesmart.api.*;
import org.votesmart.data.Committee;
import org.votesmart.data.CommitteeMembers;
import org.votesmart.data.CommitteeTypes;
import org.votesmart.data.Committees;

package org.votesmart.classes;


/**
 * <pre>
 * Committee Class
 * 
 * * - Required
 * * - Multiple rows
 * 
 * Committee.getTypes()
 * Returns the committee types(house, senate, joint, etc)
 * Input: none
 * Output: {@link CommitteeTypes}
 * 
 * Committee.getCommitteesByTypeState()
 * Returns the list of committees that fit the criteria
 * Input: typeId(Default: All), stateId (Default: NA(fed))
 * Output: {@link Committees}
 * 
 * Committee.getCommittee()
 * Returns detailed committee data.
 * Input: committeeId*
 * Output: {@link Committee}
 * 
 * Committee.getCommitteeMembers()
 * Returns members of the committee
 * Input: committeeId*
 * Output: {@link CommitteeMembers}
 * 
 * =========== EXAMPLE USAGE ========
 * 
 * CommitteeClass committeeClass = new CommitteeClass();
 * 
 * Committee committee = committeeClass.getCommittee(committeeByBio.committeeId);
 * 
 * CommitteeTypes committeeTypes = committeeClass.getTypes();
 * </pre>
 *
 */
public class CommitteeClass extends ClassesBase {

	/**
	 * Constructor for testing purposes.
	 * 
	 * @param api
	 */
	public CommitteeClass(VoteSmartAPI api) {
		super(api);
	}

	/**
	 * Default Constructor
	 */
	public CommitteeClass() throws VoteSmartException {
		super();
	}

	/**
	 * Returns the committee types(house, senate, joint, etc)
	 * 
	 * @return {@link CommitteeTypes}: 
	 */
	public CommitteeTypes getTypes() throws VoteSmartException, VoteSmartErrorException {

		return api.query("Committee.getTypes", null, CommitteeTypes.class );
