/*
* Copyright (c) JForum Team. All rights reserved.
*
* The software in this package is published under the terms of the LGPL
* license a copy of which has been included with this distribution in the
* license.txt file.
*
* The JForum Project
* http://www.jforum.net
*/
package net.jforum.core.events.post;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.jforum.entities.BadWord;
import net.jforum.entities.Post;
import net.jforum.events.EmptyPostEvent;
import net.jforum.repository.BadWordRepository;
import org.apache.commons.lang.StringUtils;
/**
* @author Rafael Steil
*/
public class BadWordEvent extends EmptyPostEvent {
private BadWordRepository repository;
public BadWordEvent(BadWordRepository repository) {
this.repository = repository;
}
/**
* @see net.jforum.events.EmptyPostEvent#beforeAdd(net.jforum.entities.Post)
*/
@Override
public void beforeAdd(Post post) {
List<BadWord> words = this.repository.getAll();
for (BadWord word : words) {
Pattern pattern = Pattern.compile("\\b" + word.getWord() + "\\b", Pattern.CASE_INSENSITIVE);
post.setText(this.applyFilter(post.getText(), word.getReplacement(), pattern));
if (!StringUtils.isEmpty(post.getSubject())) {
post.setSubject(this.applyFilter(post.getSubject(), word.getReplacement(), pattern));
}
if (!StringUtils.isEmpty(post.getTopic().getSubject())) {
post.getTopic().setSubject(this.applyFilter(post.getTopic().getSubject(), word.getReplacement(), pattern));
}
}
}
/**
* @see net.jforum.events.EmptyPostEvent#updated(net.jforum.entities.Post)
*/
@Override
public void updated(Post post) {
this.beforeAdd(post);
}
private String applyFilter(String text, String replacement, Pattern pattern) {
Matcher matcher = pattern.matcher(text);
return matcher.replaceAll(replacement);
}
}