/*
* Copyright (C) 2003-2008 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program 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 this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.ecm.webui.form.validator;
import org.exoplatform.ecm.webui.utils.Utils;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.exception.MessageException;
import org.exoplatform.webui.form.UIFormInput;
import org.exoplatform.webui.form.validator.Validator;
/**
* Created by The eXo Platform SAS
* Author : Ly Dinh Quang
* quang.ly@exoplatform.com
* xxx5669@yahoo.com
* Mar 20, 2008
*/
public class StandardNameValidator implements Validator {
public void validate(UIFormInput uiInput) throws Exception {
String inputValue = ((String)uiInput.getValue()).trim();
if (inputValue == null || inputValue.length() == 0) {
throwException("ECMStandardPropertyNameValidator.msg.empty-input", uiInput);
}
switch (inputValue.length()) {
case 1:
checkOneChar(inputValue, uiInput);
break;
case 2:
checkTwoChars(inputValue, uiInput);
default:
checkMoreChars(inputValue, uiInput);
break;
}
}
/**
*
* @param s
* @param arrFilterChars
* @return
*/
private boolean checkArr(String s, String[] arrFilterChars) {
for (String filter : arrFilterChars) {
if (s.equals(filter)) {
return true;
}
}
return false;
}
/**
* Check String Input s if s.length() = 1
* @param s
* @param uiInput
* @throws MessageException
*/
private void checkOneChar(String s, UIFormInput uiInput) throws MessageException {
if (checkArr(s, Utils.SPECIALCHARACTER)) {
throwException("ECMStandardPropertyNameValidator.msg.Invalid-char", uiInput);
}
}
/**
* Check String Input s if s.length() = 2
* @param s
* @param uiInput
*/
private void checkTwoChars(String s, UIFormInput uiInput) throws MessageException {
String s2 = "";
if (s.startsWith(".")) {
s2 = s.substring(1, 2);
checkOneChar(s2, uiInput);
} else if (s.endsWith(".")) {
s2 = s.substring(0, 1);
checkOneChar(s2, uiInput);
} else {
String s3 = s.substring(0, 1);
String s4 = s.substring(1, 2);
String[] arrFilterChars = {".", "/", ":", "[", "]", "*", "'", "|", "\""} ;
if (checkArr(s3, arrFilterChars)) {
throwException("ECMStandardPropertyNameValidator.msg.Invalid-char", uiInput);
} else {
if (checkArr(s4, arrFilterChars)) {
throwException("ECMStandardPropertyNameValidator.msg.Invalid-char", uiInput);
}
}
}
}
/**
* Check String Input s if s.length() > 2
* @param s
* @param uiInput
*/
private void checkMoreChars(String s, UIFormInput uiInput) throws MessageException {
//check nonspace start and end char
String[] arrFilterChars = {"/", ":", "[", "]", "*", "'", "|", "\""} ;
//get start and end char
String s1 = s.substring(0, 1);
String s2 = s.substring(s.length() - 1, s.length());
if (checkArr(s1, arrFilterChars)) {
throwException("ECMStandardPropertyNameValidator.msg.Invalid-char", uiInput);
} else if (checkArr(s2, arrFilterChars)){
throwException("ECMStandardPropertyNameValidator.msg.Invalid-char", uiInput);
} else {
String s3 = s.substring(1, s.length() - 1);
for(String filterChar : arrFilterChars) {
if(s3.indexOf(filterChar) > -1) {
throwException("ECMStandardPropertyNameValidator.msg.Invalid-char", uiInput);
}
}
}
}
private void throwException(String s, UIFormInput uiInput) throws MessageException {
Object[] args = { uiInput.getName() };
throw new MessageException(new ApplicationMessage(s, args, ApplicationMessage.WARNING));
}
}