/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.ui.editors.locale; import net.rim.ejde.internal.util.Messages; import net.rim.sdk.resourceutil.ResourceCollection; import org.apache.commons.lang.StringUtils; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.viewers.ICellEditorValidator; /** * Class for the validation of a resource key. It implements interface ICellEditorValidator and interface IInputValidator * * @author * */ class ResourceKeyValidator implements ICellEditorValidator, IInputValidator { private boolean _allowEmpty; private ResourceCollection _collection; private String _currentKey; private static String[] RESERVED_WORDS = { "boolean", "byte", "char", "class", "double", "false", "final", "float", "int", "long", "new", "null", "short", "true", "void" }; /** * Class constructor specifying resource collection and if a key can be empty * * @param collection * A collection of resources * @param allowEmpty * Flag indicating if a key is allowed to be empty */ ResourceKeyValidator( ResourceCollection collection, boolean allowEmpty ) { this( collection, allowEmpty, null ); } /** * Class constructor specifying resource collection, if a key can be empty and the current key * * @param collection * A collection of resources * @param allowEmpty * Flag indicating if a key is allowed to be empty * @param currentKey * Name of the current key */ ResourceKeyValidator( ResourceCollection collection, boolean allowEmpty, String currentKey ) { _allowEmpty = allowEmpty; _collection = collection; _currentKey = currentKey; } /** * This method checks if a key is valid. A key cannot have an empty name unless it is allowed. It also have to follow a * certain pattern and cannot contain special characters. This method also checks if a key consists of reserved words or if a * key already exists. * * @param key * The key to be validated */ public String isValid( Object key ) { return isValid( (String) key ); } /** * This method checks if a key is valid. A key cannot have an empty name unless it is allowed. It also have to follow a * certain pattern and cannot contain special characters. This method also checks if a key consists of reserved words or if a * key already exists. * * @param key * The key to be validated */ public String isValid( String key ) { // Check for empty key name if( !_allowEmpty && StringUtils.isBlank( key ) ) return Messages.ResourceKeyValidator_ResourceKey_Empty; // Check if key contains only whitespace if( StringUtils.isWhitespace( key ) ) return Messages.ResourceKeyValidator_ResourceKey_Whitespace; // Check if key is reserved word if( isReservedWord( key ) ) return Messages.ResourceKeyValidator_ResourceKey_ReservedWord; // Check if key contains invalid characters if( containsInvalidChar( key ) ) return Messages.ResourceKeyValidator_ResourceKey_InvalidCharacter; // Check if key already exists if( _collection.containsKey( key ) && !( key.equals( _currentKey ) ) ) return Messages.ResourceKeyValidator_ResourceKey_KeyExists; return null; } private static boolean containsInvalidChar( String key ) { if( !key.matches( "[A-Za-z]{1}[A-Za-z0-9]*([_]{1}[A-Za-z0-9]+)*" ) ) { return true; } return false; } private static boolean isReservedWord( String key ) { for( String reservedWord : RESERVED_WORDS ) { if( key.equals( reservedWord ) ) return true; } return false; } }