package org.jivesoftware.openfire.plugin.rest.entity;

import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlRootElement(name = "chatRoom")
@XmlType(propOrder = { "roomName", "naturalName", "description", "password", "subject", "creationDate",
		"modificationDate", "maxUsers", "persistent", "publicRoom", "registrationEnabled", "canAnyoneDiscoverJID",
		"canOccupantsChangeSubject", "canOccupantsInvite", "canChangeNickname", "logEnabled",
		"loginRestrictedToNickname", "membersOnly", "moderated", "broadcastPresenceRoles", "owners", "admins",
		"members", "outcasts", "ownerGroups", "adminGroups", "memberGroups", "outcastGroups" })
public class MUCRoomEntity {

	private String roomName;
	private String description;
	private String password;
	private String subject;
	private String naturalName;

	private int maxUsers;

	private Date creationDate;
	private Date modificationDate;

	private boolean persistent;
	private boolean publicRoom;
	private boolean registrationEnabled;
	private boolean canAnyoneDiscoverJID;
	private boolean canOccupantsChangeSubject;
	private boolean canOccupantsInvite;
	private boolean canChangeNickname;
	private boolean logEnabled;
	private boolean loginRestrictedToNickname;
	private boolean membersOnly;
	private boolean moderated;

	private List<String> broadcastPresenceRoles;

	private List<String> owners;
	private List<String> ownerGroups;

	private List<String> admins;
	private List<String> adminGroups;

	private List<String> members;
	private List<String> memberGroups;

	private List<String> outcasts;
	private List<String> outcastGroups;

	public MUCRoomEntity() {
	}

	public MUCRoomEntity(String naturalName, String roomName, String description) {
		this.naturalName = naturalName;
		this.roomName = roomName;
		this.description = description;
	}

	@XmlElement
	public String getNaturalName() {
		return naturalName;
	}

	public void setNaturalName(String naturalName) {
		this.naturalName = naturalName;
	}

	@XmlElement
	public String getRoomName() {
		return roomName;
	}

	public void setRoomName(String roomName) {
		this.roomName = roomName;
	}

	@XmlElement
	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	@XmlElement
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@XmlElement
	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	@XmlElement
	public int getMaxUsers() {
		return maxUsers;
	}

	public void setMaxUsers(int maxUsers) {
		this.maxUsers = maxUsers;
	}

	@XmlElement
	public Date getCreationDate() {
		return creationDate;
	}

	public void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
	}

	@XmlElement
	public Date getModificationDate() {
		return modificationDate;
	}

	public void setModificationDate(Date modificationDate) {
		this.modificationDate = modificationDate;
	}

	@XmlElement
	public boolean isPersistent() {
		return persistent;
	}

	public void setPersistent(boolean persistent) {
		this.persistent = persistent;
	}

	@XmlElement
	public boolean isPublicRoom() {
		return publicRoom;
	}

	public void setPublicRoom(boolean publicRoom) {
		this.publicRoom = publicRoom;
	}

	@XmlElement
	public boolean isRegistrationEnabled() {
		return registrationEnabled;
	}

	public void setRegistrationEnabled(boolean registrationEnabled) {
		this.registrationEnabled = registrationEnabled;
	}

	@XmlElement
	public boolean isCanAnyoneDiscoverJID() {
		return canAnyoneDiscoverJID;
	}

	public void setCanAnyoneDiscoverJID(boolean canAnyoneDiscoverJID) {
		this.canAnyoneDiscoverJID = canAnyoneDiscoverJID;
	}

	@XmlElement
	public boolean isCanOccupantsChangeSubject() {
		return canOccupantsChangeSubject;
	}

	public void setCanOccupantsChangeSubject(boolean canOccupantsChangeSubject) {
		this.canOccupantsChangeSubject = canOccupantsChangeSubject;
	}

	@XmlElement
	public boolean isCanOccupantsInvite() {
		return canOccupantsInvite;
	}

	public void setCanOccupantsInvite(boolean canOccupantsInvite) {
		this.canOccupantsInvite = canOccupantsInvite;
	}

	public void setBroadcastPresenceRoles(List<String> broadcastPresenceRoles) {
		this.broadcastPresenceRoles = broadcastPresenceRoles;
	}

	@XmlElement
	public boolean isCanChangeNickname() {
		return canChangeNickname;
	}

	public void setCanChangeNickname(boolean canChangeNickname) {
		this.canChangeNickname = canChangeNickname;
	}

	@XmlElement
	public boolean isLogEnabled() {
		return logEnabled;
	}

	public void setLogEnabled(boolean logEnabled) {
		this.logEnabled = logEnabled;
	}

	@XmlElement
	public boolean isLoginRestrictedToNickname() {
		return loginRestrictedToNickname;
	}

	public void setLoginRestrictedToNickname(boolean loginRestrictedToNickname) {
		this.loginRestrictedToNickname = loginRestrictedToNickname;
	}

	@XmlElement
	public boolean isMembersOnly() {
		return membersOnly;
	}

	public void setMembersOnly(boolean membersOnly) {
		this.membersOnly = membersOnly;
	}

	@XmlElement
	public boolean isModerated() {
		return moderated;
	}

	public void setModerated(boolean moderated) {
		this.moderated = moderated;
	}

	@XmlElement(name = "broadcastPresenceRole")
	@XmlElementWrapper(name = "broadcastPresenceRoles")
	public List<String> getBroadcastPresenceRoles() {
		return broadcastPresenceRoles;
	}

	@XmlElementWrapper(name = "owners")
	@XmlElement(name = "owner")
	public List<String> getOwners() {
		return owners;
	}

	@XmlElementWrapper(name = "ownerGroups")
	@XmlElement(name = "ownerGroup")
	public List<String> getOwnerGroups() {
		return ownerGroups;
	}

	public void setOwners(List<String> owners) {
		this.owners = owners;
	}

	public void setOwnerGroups(List<String> ownerGroups) {
		this.ownerGroups = ownerGroups;
	}

	@XmlElementWrapper(name = "members")
	@XmlElement(name = "member")
	public List<String> getMembers() {
		return members;
	}

	@XmlElementWrapper(name = "memberGroups")
	@XmlElement(name = "memberGroup")
	public List<String> getmemberGroups() {
		return memberGroups;
	}

	public void setMembers(List<String> members) {
		this.members = members;
	}

	public void setMemberGroups(List<String> memberGroups) {
		this.memberGroups = memberGroups;
	}

	@XmlElementWrapper(name = "outcasts")
	@XmlElement(name = "outcast")
	public List<String> getOutcasts() {
		return outcasts;
	}

	@XmlElementWrapper(name = "outcastGroups")
	@XmlElement(name = "outcastGroup")
	public List<String> getoutcastGroups() {
		return outcastGroups;
	}

	public void setOutcasts(List<String> outcasts) {
		this.outcasts = outcasts;
	}

	public void setOutcastGroups(List<String> outcastGroups) {
		this.outcastGroups = outcastGroups;
	}

	@XmlElementWrapper(name = "admins")
	@XmlElement(name = "admin")
	public List<String> getAdmins() {
		return admins;
	}

	@XmlElementWrapper(name = "adminGroups")
	@XmlElement(name = "adminGroup")
	public List<String> getadminGroups() {
		return adminGroups;
	}

	public void setAdmins(List<String> admins) {
		this.admins = admins;
	}

	public void setAdminGroups(List<String> adminGroups) {
		this.adminGroups = adminGroups;
	}

}