net.rim.ejde.internal.ui.preferences.PreprocessDefineInputValidator.java Source code

Java tutorial

Introduction

Here is the source code for net.rim.ejde.internal.ui.preferences.PreprocessDefineInputValidator.java

Source

/*
* 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.preferences;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

import net.rim.ejde.internal.core.IConstants;
import net.rim.ejde.internal.util.Messages;

import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.osgi.util.NLS;

public class PreprocessDefineInputValidator implements IInputValidator {

    private PreprocessDirectiveUI UI;
    private boolean isEdit;
    private String initialText;
    private static final Pattern validPPTagPattern = Pattern.compile(IConstants.PP_VALIDATION_REG_EX);

    public PreprocessDefineInputValidator(PreprocessDirectiveUI preprocessDirectiveUI, boolean isEdit,
            String initialText) {
        this.UI = preprocessDirectiveUI;
        this.isEdit = isEdit;
        this.initialText = initialText;
    }

    public PreprocessDefineInputValidator(PreprocessDirectiveUI preprocessDirectiveUI) {
        this.UI = preprocessDirectiveUI;
        this.isEdit = false;
        initialText = "";
    }

    public String isValid(String newText) {
        if (newText == null || newText.length() == 0) {
            return Messages.BuildPrefsPage_PreprocessValidationMsg1;
        }
        String[] tagStrings = StringUtils.split(newText, IConstants.SEMICOLON_MARK);
        List<String> validtag = new ArrayList<String>();
        for (String tagString : tagStrings) {
            if (StringUtils.isEmpty(tagString)) {
                return Messages.BuildPrefsPage_PreprocessValidationMsg1;
            } else if (!(validPPTagPattern.matcher(tagString).matches())) {
                if (tagString.contains(IConstants.SEMICOLON_MARK) && !isEdit) {// for add ; is a valid character
                    for (String tag : StringUtils.split(tagString, IConstants.SEMICOLON_MARK)) {
                        if (!(validPPTagPattern.matcher(tag).matches())) {
                            return Messages.BuildPrefsPage_PreprocessValidationMsg2 + tag;
                        }
                    }
                } else {
                    return Messages.BuildPrefsPage_PreprocessValidationMsg2 + newText;
                }
            } else if (validtag.contains(tagString)) {
                return NLS.bind(Messages.BuildPrefsPage_PreprocessValidationMsg4, tagString);
            } else if (isExistsInTable(UI.getDefineList(), tagString)) {
                if (!(initialText.equals(tagString)) && isEdit) {
                    return NLS.bind(Messages.BuildPrefsPage_PreprocessValidationMsg3, tagString);
                } else if (!isEdit) {// eliminate duplication during add
                    return NLS.bind(Messages.BuildPrefsPage_PreprocessValidationMsg3, tagString);
                }
            }
            validtag.add(tagString);
        }
        return null;
    }

    private boolean isExistsInTable(List<String> defineList, String tag) {
        boolean result = false;
        if ((tag == null) || (defineList == null)) {
            return result;
        }
        for (String define : defineList) {
            if (define.equals(tag)) {
                result = true;
                break;
            }
        }
        return result;
    }
}