package edu.asu.spring.quadriga.validator;
import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;
import org.springframework.stereotype.Service;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import edu.asu.spring.quadriga.domain.impl.projectblog.ProjectBlogEntry;
import edu.asu.spring.quadriga.domain.settings.IAboutText;
import edu.asu.spring.quadriga.domain.settings.impl.AboutText;
import edu.asu.spring.quadriga.utilities.impl.ExtendedWhitelist;
/**
* This class acts as validator of form data coming from
* <code>publicWebsiteEditAbout.jsp</code>
*
* @author Nischal Samji
*
*/
@Service
public class HTMLContentValidator implements Validator {
@Override
public boolean supports(Class<?> arg0) {
return AboutText.class.isAssignableFrom(arg0) || ProjectBlogEntry.class.isAssignableFrom(arg0);
}
/**
* This method validates the entered title, description of a about text for
* a project. Validates if the values are available or not. If values are
* not available error is thrown
*
* @param obj
* @param err
*/
@Override
public void validate(Object obj, Errors err) {
String description = null;
String title = null;
if (obj instanceof IAboutText) {
IAboutText abtText = (IAboutText) obj;
description = abtText.getDescription();
title = abtText.getTitle();
} else if (obj instanceof ProjectBlogEntry) {
ProjectBlogEntry projectBlog = (ProjectBlogEntry) obj;
description = projectBlog.getDescription();
title = projectBlog.getTitle();
}
Whitelist whitelist = ExtendedWhitelist.extendedWhiteListWithBase64();
Whitelist titleWhitelist = Whitelist.simpleText();
// validate all the input parameters
ValidationUtils.rejectIfEmptyOrWhitespace(err, "title", "about_title.required");
ValidationUtils.rejectIfEmptyOrWhitespace(err, "description", "about_description.required");
if (!Jsoup.isValid(description, whitelist)) {
err.rejectValue("description", "about_description.proper");
}
if (!Jsoup.isValid(title, titleWhitelist)) {
err.rejectValue("title", "about_title.proper");
}
}
}