org.eclipse.tcf.te.ui.controls.validator.Validator.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.tcf.te.ui.controls.validator.Validator.java

Source

/*******************************************************************************
 * Copyright (c) 2011, 2014 Wind River Systems, Inc. and others. 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:
 * Wind River Systems - initial API and implementation
 *******************************************************************************/
package org.eclipse.tcf.te.ui.controls.validator;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.tcf.te.ui.controls.nls.Messages;

/**
 * Input validator and message provider.
 */
public abstract class Validator implements IMessageProvider, ICellEditorValidator {

    // message text, set in isValid(String)
    private String message = null;
    // message type, set in isValid(String)
    private int messageType = NONE;
    // map with all message texts
    private Map<String, String> messages = new HashMap<String, String>();
    // map with all message text types
    private Map<String, Integer> messageTypes = new HashMap<String, Integer>();

    // arguments (binary coded)
    public static final int NO_ATTR = 0;
    public static final int ATTR_MANDATORY = 1;
    // next attribute should start with 2^1

    // binary coded arguments
    private int attributes;

    /**
     * Constructor
     * @param attributes The validator attributes.
     */
    public Validator(int attributes) {
        setAttributes(attributes);
    }

    /**
     * Set the attributes for the validator.
     * @param attributes The validator attributes.
     */
    public void setAttributes(int attributes) {
        this.attributes = attributes;
    }

    /**
     * Add an attribute.
     * @param attribute The validator attribute to add.
     */
    public void addAttribute(int attribute) {
        if (!isAttribute(attribute)) {
            this.attributes |= attribute;
        }
    }

    /**
     * Remove an attribute.
     * @param attribute The validator attribute to remove.
     */
    public void delAttribute(int attribute) {
        if (isAttribute(attribute)) {
            this.attributes -= attribute;
        }
    }

    /**
     * Returns the attributes.
     * @return
     */
    public int getAttributes() {
        return attributes;
    }

    /**
     * Returns if a value is mandatory.
     * @return
     */
    public boolean isMandatory() {
        return isAttribute(ATTR_MANDATORY);
    }

    /**
     * Returns true if the argument is set.
     * @param attribute The argument to ask for.
     * @return
     */
    public boolean isAttribute(int attribute) {
        return isAttribute(attribute, attributes);
    }

    /**
     * Returns true is argument is set.
     * This static method can be used in the constructor or other static methods
     * to check attributes.
     * @param attribute The attribute to ask for
     * @param attributes The binary coded attribute list
     * @return
     */
    public static boolean isAttribute(int attribute, int attributes) {
        return ((attributes & attribute) == attribute);
    }

    /**
     * Initialize the validator.
     * Should always be called in isValid(String) before validation is done.
     * Doesn't reset message texts!
     */
    protected void init() {
        setMessage(null);
        setMessageType(NONE);
    }

    /**
     * Validates the given text.
     * A message text could be set even when the text is valid!
     * @param newText text to validate
     * @return true if text is valid
     */
    public abstract boolean isValid(String newText);

    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.ICellEditorValidator#isValid(java.lang.Object)
     */
    @Override
    public final String isValid(Object newValue) {
        String strValue = (newValue != null) ? newValue.toString() : null;
        if (!isValid(strValue)) {
            return (getMessage());
        }
        return null;
    }

    /**
     * Sets the message text and type.
     * @param message message
     * @param messageType type for message
     */
    protected final void setMessage(String message, int messageType) {
        setMessage(message);
        setMessageType(messageType);
    }

    /**
     * Sets the message.
     * @param message message
     */
    protected final void setMessage(String message) {
        this.message = message;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IMessageProvider#getMessage()
     */
    @Override
    public final String getMessage() {
        return message;
    }

    /**
     * Sets the message type.
     * @param messageType type for message
     */
    protected final void setMessageType(int messageType) {
        this.messageType = messageType;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IMessageProvider#getMessageType()
     */
    @Override
    public final int getMessageType() {
        return messageType;
    }

    /**
     * Returns the message text for the given key.
     * The key always points to the default text.
     * @param key message key
     * @return message text
     */
    protected final String getMessageText(String key) {
        String message = messages.get(key);
        if (message == null) {
            message = getString(key);
            setMessageText(key, message);
        }
        return message;
    }

    /**
     * Returns the message type for the given key. If not set, the
     * proposed message type is returned.
     *
     * @param key The message key.
     * @param proposedType The proposed message type.
     *
     * @return The message type.
     */
    protected final int getMessageTextType(String key, int proposedType) {
        Integer type = messageTypes.get(key);
        if (type == null || type.intValue() == -1)
            type = Integer.valueOf(proposedType);
        return type.intValue();
    }

    /**
     * Sets an alternate message text for an info, warning or error on isValid(String).
     *
     * @param key property key of default text
     * @param text alternate message text, if null the default text for this key is taken
     */
    public final void setMessageText(String key, String text) {
        setMessageText(key, text, -1);
    }

    /**
     * Sets an alternate message text for an info, warning or error on isValid(String).
     *
     * @param key property key of default text
     * @param text alternate message text, if null the default text for this key is taken
     * @param type alternate message type, if -1 the default type for this key is taken
     */
    public final void setMessageText(String key, String text, int type) {
        if (key != null) {
            if (text != null) {
                this.messages.put(key, text);
            } else {
                this.messages.put(key, getString(key));
            }
            if (type != -1) {
                this.messageTypes.put(key, Integer.valueOf(type));
            } else {
                this.messageTypes.remove(key);
            }
        }
    }

    /**
     * Returns the externalized string value for the given key.
     *
     * @param key The key. Must not be <code>null</code>.
     * @return The string value or <code>null</code>
     */
    protected String getString(String key) {
        Assert.isNotNull(key);
        return Messages.getString(key);
    }
}