/*
* Copyright 2007 Zhang, Zheng <oldbig@gmail.com>
*
* This file is part of ZOJ.
*
* ZOJ 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 revision 3 of the License, or (at your option) any later revision.
*
* ZOJ 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 ZOJ. if not, see
* <http://www.gnu.org/licenses/>.
*/
package cn.edu.zju.acm.onlinejudge.bean.enumeration;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* This class represents the Permission Level.
* </p>
*
* @author Zhang, Zheng
* @version 2.0
*/
public class PermissionLevel implements Comparable<PermissionLevel> {
/**
* <p>
* Represents VIEW static instance.
* </p>
*/
public static final PermissionLevel VIEW = new PermissionLevel(1, "View");
/**
* <p>
* Represents PARTICIPATE static instance.
* </p>
*/
public static final PermissionLevel PARTICIPATE = new PermissionLevel(2, "Participate");
/**
* <p>
* Represents ADMIN static instance.
* </p>
*/
public static final PermissionLevel PARTICIPATECANVIEWSOURCE = new PermissionLevel(3, "ParticipateCanViewSource");
/**
* <p>
* Represents ADMIN static instance.
* </p>
*/
public static final PermissionLevel ADMIN = new PermissionLevel(4, "Admin");
/**
* <p>
* Represents the id of PermissionLevel.
* </p>
*/
private long id;
/**
* <p>
* Represents the description of PermissionLevel.
* </p>
*/
private String description;
/**
* <p>
* Create a new instance.
* </p>
*
* @param id
* the id of PermissionLevel.
* @param description
* the description of PermissionLevel.
*
* @throws NullPointerException
* if the argument is null.
*/
public PermissionLevel(long id, String description) {
if (description == null) {
throw new NullPointerException("description should not be null.");
}
this.id = id;
this.description = description;
}
/**
* <p>
* Get the id of the PermissionLevel.
* </p>
*
* @return the id of the PermissionLevel.
*/
public long getId() {
return this.id;
}
/**
* <p>
* Get the description of the PermissionLevel.
* </p>
*
* @return the description of the PermissionLevel.
*/
public String getDescription() {
return this.description;
}
/**
* <p>
* Get the list which consists of all permission levels.
* </p>
*
* @return the list which consists of all permission levels.
*/
public static List<PermissionLevel> getPermissionLevels() {
List<PermissionLevel> list = new ArrayList<PermissionLevel>(4);
list.add(PermissionLevel.VIEW);
list.add(PermissionLevel.PARTICIPATE);
list.add(PermissionLevel.PARTICIPATECANVIEWSOURCE);
list.add(PermissionLevel.ADMIN);
return list;
}
/**
* <p>
* Get the permission level represented by id.
* </p>
*
* @return the permission level represented by id, or null if none is found.
* @param id
* the id of permission level.
*/
public static PermissionLevel findById(long id) {
if (PermissionLevel.VIEW.id == id) {
return PermissionLevel.VIEW;
} else if (PermissionLevel.PARTICIPATE.id == id) {
return PermissionLevel.PARTICIPATE;
} else if (PermissionLevel.ADMIN.id == id) {
return PermissionLevel.ADMIN;
} else if (PermissionLevel.PARTICIPATECANVIEWSOURCE.id == id) {
return PermissionLevel.PARTICIPATECANVIEWSOURCE;
} else {
return null;
}
}
/**
* <p>
* Get the permission level represented by name.
* </p>
*
* @return the permission level represented by name, or null if none matchs.
*
* @param name
* the name of permission level.
*/
public static PermissionLevel findByName(String name) {
if (PermissionLevel.VIEW.description.equals(name)) {
return PermissionLevel.VIEW;
} else if (PermissionLevel.PARTICIPATE.description.equals(name)) {
return PermissionLevel.PARTICIPATE;
} else if (PermissionLevel.ADMIN.description.equals(name)) {
return PermissionLevel.ADMIN;
} else if (PermissionLevel.PARTICIPATECANVIEWSOURCE.description.equals(name)) {
return PermissionLevel.PARTICIPATECANVIEWSOURCE;
} else {
return null;
}
}
/**
* <p>
* Compares to the object.
* </p>
*
* @return true if and only if the ids of the two are the same.
* @param object
* the object to compare.
*/
@Override
public boolean equals(Object object) {
return object instanceof PermissionLevel && this.id == ((PermissionLevel) object).id;
}
/**
* <p>
* get the hashCode of this instance.
* </p>
*
* @return the hash code of this instance.
*/
@Override
public int hashCode() {
return new Long(this.id).hashCode();
}
/**
* <p>
* Compares two permission level.
* </p>
*
* @param object
* the object to compare
* @return a positive int if this level is greater than the given entry, 0 if equals to or a negative int if is less
* than
* @throws ClassCastException
* if the object is not type of PermissionLevel
*/
public int compareTo(PermissionLevel object) {
if (object == null) {
return 1;
}
return new Long(this.id).compareTo(new Long(object.id));
}
}