Files
corejava/corejava第10版/v2ch09/permissions/WordCheckPermission.java
T
2019-05-22 19:31:49 +08:00

78 lines
2.0 KiB
Java

package permissions;
import java.security.*;
import java.util.*;
/**
* A permission that checks for bad words.
*/
public class WordCheckPermission extends Permission
{
private String action;
/**
* Constructs a word check permission.
* @param target a comma separated word list
* @param anAction "insert" or "avoid"
*/
public WordCheckPermission(String target, String anAction)
{
super(target);
action = anAction;
}
public String getActions()
{
return action;
}
public boolean equals(Object other)
{
if (other == null) return false;
if (!getClass().equals(other.getClass())) return false;
WordCheckPermission b = (WordCheckPermission) other;
if (!Objects.equals(action, b.action)) return false;
if ("insert".equals(action)) return Objects.equals(getName(), b.getName());
else if ("avoid".equals(action)) return badWordSet().equals(b.badWordSet());
else return false;
}
public int hashCode()
{
return Objects.hash(getName(), action);
}
public boolean implies(Permission other)
{
if (!(other instanceof WordCheckPermission)) return false;
WordCheckPermission b = (WordCheckPermission) other;
if (action.equals("insert"))
{
return b.action.equals("insert") && getName().indexOf(b.getName()) >= 0;
}
else if (action.equals("avoid"))
{
if (b.action.equals("avoid")) return b.badWordSet().containsAll(badWordSet());
else if (b.action.equals("insert"))
{
for (String badWord : badWordSet())
if (b.getName().indexOf(badWord) >= 0) return false;
return true;
}
else return false;
}
else return false;
}
/**
* Gets the bad words that this permission rule describes.
* @return a set of the bad words
*/
public Set<String> badWordSet()
{
Set<String> set = new HashSet<>();
set.addAll(Arrays.asList(getName().split(",")));
return set;
}
}