/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.databinding.validators;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
/**
* Validates a test data cube name.
*
* @author BREDEX GmbH
* @created Jun 29, 2010
*/
public class TestDataManagerNameValidator implements IValidator {
/**
* <code>m_alreadyUsedNames</code>
*/
private Set<String> m_alreadyUsedNames;
/**
* Constructor
*
* @param oldName if not null allow this name the support rename
* @param usedNames a set of already used names
*/
public TestDataManagerNameValidator(String oldName, Set<String> usedNames) {
m_alreadyUsedNames = usedNames;
}
/**
* {@inheritDoc}
*/
public IStatus validate(Object value) {
return isTestDataCubeName(String.valueOf(value));
}
/**
* @param stringValue component name
* @return IStatus.OK if this is a valid component name, error status
* otherwise
*/
public IStatus isTestDataCubeName(String stringValue) {
IStatus is = isValidTestDataCubeString(stringValue);
if (!is.isOK()) {
return is;
}
if (!m_alreadyUsedNames.contains(stringValue)) {
return ValidationStatus.ok();
}
return ValidationStatus.error(
Messages.TestDataCubeErrorExists);
}
/**
* @param stringValue name to check
* @return IStatus.OK if this is a valid component name, error status
* otherwise
*/
public static IStatus isValidTestDataCubeString(String stringValue) {
if (StringUtils.isEmpty(stringValue)) {
return ValidationStatus.error(
Messages.TestDataCubeErrorEmpty);
}
if (stringValue.startsWith(StringConstants.SPACE)
|| stringValue.charAt(
stringValue.length() - 1) == ' ') {
return ValidationStatus.error(
Messages.TestDataCubeErrorNoSpaceAtStartOrEnd);
}
for (char ch : stringValue.toCharArray()) {
if (Character.isISOControl(ch)) {
return ValidationStatus.error(
Messages.TestDataCubeErrorInvalidChar);
}
}
return ValidationStatus.ok();
}
}