org.eclipse.jst.jsf.validation.internal.ELValidationPreferences.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jst.jsf.validation.internal.ELValidationPreferences.java

Source

/*******************************************************************************
 * Copyright (c) 2006 Oracle Corporation.
 * 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:
 *    Cameron Bateman/Oracle - initial API and implementation
 *    
 ********************************************************************************/

package org.eclipse.jst.jsf.validation.internal;

import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jst.jsf.core.internal.IJSFPreferenceModel;
import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;

/**
 * Model object for EL validation preferences
 * 
 * @author cbateman
 */
public class ELValidationPreferences implements IJSFPreferenceModel {
    private final static String KEY_ENABLE_BUILD_VALIDATION = "org.eclipse.jst.jsf.ui.ValidateJSFELBuild"; //$NON-NLS-1$
    private final static boolean DEFAULT_ENABLE_BUILD_VALIDATION = true;

    private final static String KEY_ENABLE_INCREMENTAL_VALIDATION = "org.eclipse.jst.jsf.ui.ValidateJSFELIncremental"; //$NON-NLS-1$
    private final static boolean DEFAULT_ENABLE_INCREMENTAL_VALIDATION = false;

    private boolean _enableBuildValidation;
    private boolean _enableIncrementalValidation;
    private int[] _severities;

    /**
     * Loads the object from the preference store provided
     * 
     * @param prefStore
     */
    public void load(IPreferenceStore prefStore) {
        if (!prefStore.contains(KEY_ENABLE_BUILD_VALIDATION)) {
            prefStore.setDefault(KEY_ENABLE_BUILD_VALIDATION, DEFAULT_ENABLE_BUILD_VALIDATION);
        }
        _enableBuildValidation = prefStore.getBoolean(KEY_ENABLE_BUILD_VALIDATION);

        if (!prefStore.contains(KEY_ENABLE_INCREMENTAL_VALIDATION)) {
            prefStore.setDefault(KEY_ENABLE_INCREMENTAL_VALIDATION, DEFAULT_ENABLE_INCREMENTAL_VALIDATION);
        }
        _enableIncrementalValidation = prefStore.getBoolean(KEY_ENABLE_INCREMENTAL_VALIDATION);

        loadSeverities(prefStore);
    }

    private void loadSeverities(final IPreferenceStore prefStore) {
        final int severities[] = getSeverities();

        for (int i = 0; i < DiagnosticFactory.NUM_IDS; i++) {
            final String key = getKeyById(i);

            if (!prefStore.contains(key)) {
                final int diagSeverity = getDefaultSeverity(i);
                final Severity severity = mapDiagToSeverity(diagSeverity);

                prefStore.setDefault(key, severity.toString());
            }
            final String storedSeverity = prefStore.getString(key);
            severities[i] = mapSeverityToDiag(storedSeverity);
        }
    }

    /**
     * Copies the object into the preference store but DOES NOT SAVE IT
     * 
     * @param prefStore
     */
    public void commit(IPreferenceStore prefStore) {
        prefStore.setValue(KEY_ENABLE_BUILD_VALIDATION, _enableBuildValidation);
        prefStore.setValue(KEY_ENABLE_INCREMENTAL_VALIDATION, _enableIncrementalValidation);
        commitSeverities(prefStore);
    }

    private void commitSeverities(final IPreferenceStore prefStore) {
        final int severities[] = getSeverities();

        for (int i = 0; i < severities.length; i++) {
            final String key = getKeyById(i);
            prefStore.setValue(key, mapDiagToSeverity(severities[i]).toString());
        }
    }

    /**
     * Reverts the model to it's defaults.  Does not commit to pref store. 
     */
    public void setDefaults() {
        setEnableBuildValidation(DEFAULT_ENABLE_BUILD_VALIDATION);
        setEnableIncrementalValidation(DEFAULT_ENABLE_INCREMENTAL_VALIDATION);
        setProblemSeverityDefaults();
    }

    private void setProblemSeverityDefaults() {
        final int[] severities = getSeverities();

        for (int i = 0; i < DiagnosticFactory.NUM_IDS; i++) {
            severities[i] = getDefaultSeverity(i);
        }
    }

    public Object getValueByKey(IScopeContext context, String key) {
        // ignore context for now; will be used when we have project overrides
        if (KEY_ENABLE_BUILD_VALIDATION.equals(key)) {
            return Boolean.valueOf(isEnableBuildValidation());
        } else if (KEY_ENABLE_INCREMENTAL_VALIDATION.equals(key)) {
            return Boolean.valueOf(isEnableIncrementalValidation());
        } else {
            try {
                final Severity severity = getSeverity(key);
                return severity.toString();
            } catch (IllegalArgumentException e) {
                // getIdByKey will throw this exception if key is not a valid
                // severity key.  Ignore the exception here and fall-through
            }
        }

        return null; // not found
    }

    /* (non-Javadoc)
     * @see org.eclipse.jst.jsf.core.internal.IJSFPreferenceModel#getStoredValueByKey(org.eclipse.core.runtime.preferences.IScopeContext, java.lang.String)
     */
    public Object getStoredValueByKey(IScopeContext context, String key) {
        // ignore context for now; will be used when we have project overrides
        if (KEY_ENABLE_BUILD_VALIDATION.equals(key)) {
            return Boolean.valueOf(context.getNode("org.eclipse.jst.jsf.ui").getBoolean(key, true)); //$NON-NLS-1$
        } else if (KEY_ENABLE_INCREMENTAL_VALIDATION.equals(key)) {
            return Boolean.valueOf(context.getNode("org.eclipse.jst.jsf.ui").getBoolean(key, false)); //$NON-NLS-1$
        } else {
            try {
                return context.getNode("org.eclipse.jst.jsf.core").get(key, //$NON-NLS-1$
                        mapDiagToSeverity(getDefaultSeverity(getIdByKey(key))).toString());
            } catch (IllegalArgumentException e) {
                // getIdByKey will throw this exception if key is not a valid
                // severity key.  Ignore the exception here and fall-through
            }
        }

        return null; // not found
    }

    /* (non-Javadoc)
     * @see org.eclipse.jst.jsf.core.internal.IJSFPreferenceModel#setValueByKey(org.eclipse.core.runtime.preferences.IScopeContext, java.lang.String, java.lang.Object)
     */
    public Object setValueByKey(IScopeContext context, String key, Object value) {
        // ignore context for now; will be used when we have project overrides
        if (KEY_ENABLE_BUILD_VALIDATION.equals(key)) {
            boolean oldValue = isEnableBuildValidation();
            boolean newValue = ((Boolean) value).booleanValue();
            setEnableBuildValidation(newValue);
            return Boolean.valueOf(oldValue);
        } else if (KEY_ENABLE_INCREMENTAL_VALIDATION.equals(key)) {
            boolean oldValue = isEnableIncrementalValidation();
            boolean newValue = ((Boolean) value).booleanValue();
            setEnableIncrementalValidation(newValue);
            return Boolean.valueOf(oldValue);
        } else {
            final Severity oldValue = getSeverity(key);
            setSeverity(key, (Severity) value);
            return oldValue;
        }
    }

    /**
     * @return the build validation enablement
     */
    public boolean isEnableBuildValidation() {
        return _enableBuildValidation;
    }

    /**
     * @return the incremental validation enablement
     */
    public boolean isEnableIncrementalValidation() {
        return _enableIncrementalValidation;
    }

    /**
     * @param enableBuildValidation
     */
    public void setEnableBuildValidation(boolean enableBuildValidation) {
        _enableBuildValidation = enableBuildValidation;
    }

    /**
     * @param enableIncrementalValidation
     */
    public void setEnableIncrementalValidation(boolean enableIncrementalValidation) {
        _enableIncrementalValidation = enableIncrementalValidation;
    }

    /**
     * @param key
     * @return the severity
     */
    public Severity getSeverity(final String key) {
        final int severityDiag = _severities[getIdByKey(key)];
        final Severity severity = mapDiagToSeverity(severityDiag);
        return severity;
    }

    /**
     * @param key
     * @param severity
     */
    public void setSeverity(final String key, final Severity severity) {
        final int newSeverityDiag = mapSeverityToDiag(severity.toString());
        final int diagId = getIdByKey(key);
        _severities[diagId] = newSeverityDiag;
    }

    /**
     * @param diagnosticId
     * @return the severity as configured for diagnosticId.  The value
     * is relative to the Diagnostic class severity scheme
     */
    public final int getDiagnosticSeverity(final int diagnosticId) {
        return getSeverities()[diagnosticId];
    }

    private int[] getSeverities() {
        if (_severities == null) {
            _severities = new int[DiagnosticFactory.NUM_IDS];
        }

        return _severities;
    }

    /**
     * @param diagSeverity
     * @return a Severity preference value for a diagnostic severity
     */
    public static Severity mapDiagToSeverity(int diagSeverity) {
        switch (diagSeverity) {
        case Diagnostic.ERROR:
            return Severity.ERROR;
        case Diagnostic.WARNING:
            return Severity.WARNING;
        default:
            return Severity.IGNORE;
        }
    }

    /**
     * @param severity
     * @return a Diagnostic severity level for a severity pref string
     */
    public static int mapSeverityToDiag(String severity) {
        if ("error".equals(severity)) //$NON-NLS-1$
        {
            return Diagnostic.ERROR;
        } else if ("warning".equals(severity)) //$NON-NLS-1$
        {
            return Diagnostic.WARNING;
        } else if ("ignore".equals(severity)) //$NON-NLS-1$
        {
            return Diagnostic.OK;
        } else {
            throw new IllegalArgumentException("Invalid enum name: " + severity); //$NON-NLS-1$
        }
    }

    /**
     * @param diagnosticId
     * @return the default severity of a diagnostic
     */
    public static int getDefaultSeverity(final int diagnosticId) {
        switch (diagnosticId) {
        case DiagnosticFactory.BINARY_OP_BOTH_OPERANDS_NULL_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_POSSIBLE_DIVISION_BY_ZERO_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_NO_AVAILABLE_TYPE_COERCION_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID:
            return Diagnostic.WARNING; /* Bug 243674 */
        case DiagnosticFactory.TERNARY_OP_CHOICE_IS_ALWAYS_SAME_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.MEMBER_NOT_FOUND_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.VARIABLE_NOT_FOUND_ID:
            return Diagnostic.INFO;
        case DiagnosticFactory.MISSING_CLOSING_EXPR_BRACKET_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.GENERAL_SYNTAX_ERROR_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.EMPTY_EL_EXPRESSION_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_DOT_WITH_VALUEB_NULL_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME_ID:
            return Diagnostic.WARNING;
        case DiagnosticFactory.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID:
            return Diagnostic.ERROR;
        case DiagnosticFactory.MEMBER_IS_INTERMEDIATE_ID:
            return Diagnostic.WARNING;
        default:
            throw new IllegalArgumentException("Diagnostic Id: " + diagnosticId + " is out of range"); //$NON-NLS-1$ //$NON-NLS-2$
        }
    }

    /**
     * @param diagnosticId
     * @return the preference key for the corresponding diagnosticId in the el DiagnosticFactory
     */
    public static String getKeyById(final int diagnosticId) {
        switch (diagnosticId) {
        case DiagnosticFactory.BINARY_OP_BOTH_OPERANDS_NULL_ID:
            return BINARY_OP_BOTH_OPERANDS_NULL;
        case DiagnosticFactory.BINARY_OP_POSSIBLE_DIVISION_BY_ZERO_ID:
            return BINARY_OP_POSSIBLE_DIVISION_BY_ZERO;
        case DiagnosticFactory.BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID:
            return BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION;
        case DiagnosticFactory.BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME_ID:
            return BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME;
        case DiagnosticFactory.BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME_ID:
            return BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME;
        case DiagnosticFactory.BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID:
            return BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN;
        case DiagnosticFactory.BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS_ID:
            return BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS;
        case DiagnosticFactory.BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME_ID:
            return BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME;
        case DiagnosticFactory.BINARY_OP_NO_AVAILABLE_TYPE_COERCION_ID:
            return BINARY_OP_NO_AVAILABLE_TYPE_COERCION;
        case DiagnosticFactory.BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS_ID:
            return BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS;
        case DiagnosticFactory.UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME_ID:
            return UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME;
        case DiagnosticFactory.UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE_ID:
            return UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE;
        case DiagnosticFactory.UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO_ID:
            return UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO;
        case DiagnosticFactory.UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID:
            return UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION;
        case DiagnosticFactory.UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID:
            return UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN;
        case DiagnosticFactory.TERNARY_OP_CHOICE_IS_ALWAYS_SAME_ID:
            return TERNARY_OP_CHOICE_IS_ALWAYS_SAME;
        case DiagnosticFactory.TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN_ID:
            return TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN;
        case DiagnosticFactory.UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED_ID:
            return UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED;
        case DiagnosticFactory.CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING_ID:
            return CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING;
        case DiagnosticFactory.MEMBER_NOT_FOUND_ID:
            return MEMBER_NOT_FOUND;
        case DiagnosticFactory.VARIABLE_NOT_FOUND_ID:
            return VARIABLE_NOT_FOUND;
        case DiagnosticFactory.MISSING_CLOSING_EXPR_BRACKET_ID:
            return MISSING_CLOSING_EXPR_BRACKET;
        case DiagnosticFactory.GENERAL_SYNTAX_ERROR_ID:
            return GENERAL_SYNTAX_ERROR;
        case DiagnosticFactory.EMPTY_EL_EXPRESSION_ID:
            return EMPTY_EL_EXPRESSION;
        case DiagnosticFactory.BINARY_OP_DOT_WITH_VALUEB_NULL_ID:
            return BINARY_OP_DOT_WITH_VALUEB_NULL;
        case DiagnosticFactory.BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY_ID:
            return BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY;
        case DiagnosticFactory.POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS_ID:
            return POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS;
        case DiagnosticFactory.BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME_ID:
            return BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME;
        case DiagnosticFactory.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID:
            return BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE;
        case DiagnosticFactory.MEMBER_IS_INTERMEDIATE_ID:
            return MEMBER_IS_INTERMEDIATE;
        default:
            throw new IllegalArgumentException("Diagnostic Id: " + diagnosticId + " is out of range"); //$NON-NLS-1$ //$NON-NLS-2$
        }
    }

    /**
     * @param key
     * @return the preference key for the corresponding diagnosticId in the el DiagnosticFactory
     */
    public static int getIdByKey(final String key) {
        if (BINARY_OP_BOTH_OPERANDS_NULL.equals(key)) {
            return DiagnosticFactory.BINARY_OP_BOTH_OPERANDS_NULL_ID;
        } else if (BINARY_OP_POSSIBLE_DIVISION_BY_ZERO.equals(key)) {
            return DiagnosticFactory.BINARY_OP_POSSIBLE_DIVISION_BY_ZERO_ID;
        } else if (BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION.equals(key)) {
            return DiagnosticFactory.BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID;
        } else if (BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME.equals(key)) {
            return DiagnosticFactory.BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME_ID;
        } else if (BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME.equals(key)) {
            return DiagnosticFactory.BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME_ID;
        } else if (BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN.equals(key)) {
            return DiagnosticFactory.BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID;
        } else if (BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS.equals(key)) {
            return DiagnosticFactory.BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS_ID;
        } else if (BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME.equals(key)) {
            return DiagnosticFactory.BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME_ID;
        } else if (BINARY_OP_NO_AVAILABLE_TYPE_COERCION.equals(key)) {
            return DiagnosticFactory.BINARY_OP_NO_AVAILABLE_TYPE_COERCION_ID;
        } else if (BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS.equals(key)) {
            return DiagnosticFactory.BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS_ID;
        } else if (UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME.equals(key)) {
            return DiagnosticFactory.UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME_ID;
        } else if (UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE.equals(key)) {
            return DiagnosticFactory.UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE_ID;
        } else if (UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO.equals(key)) {
            return DiagnosticFactory.UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO_ID;
        } else if (UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION.equals(key)) {
            return DiagnosticFactory.UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID;
        } else if (UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN.equals(key)) {
            return DiagnosticFactory.UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID;
        } else if (TERNARY_OP_CHOICE_IS_ALWAYS_SAME.equals(key)) {
            return DiagnosticFactory.TERNARY_OP_CHOICE_IS_ALWAYS_SAME_ID;
        } else if (TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN.equals(key)) {
            return DiagnosticFactory.TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN_ID;
        } else if (UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED.equals(key)) {
            return DiagnosticFactory.UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED_ID;
        } else if (CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING.equals(key)) {
            return DiagnosticFactory.CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING_ID;
        } else if (MEMBER_NOT_FOUND.equals(key)) {
            return DiagnosticFactory.MEMBER_NOT_FOUND_ID;
        } else if (VARIABLE_NOT_FOUND.equals(key)) {
            return DiagnosticFactory.VARIABLE_NOT_FOUND_ID;
        } else if (MISSING_CLOSING_EXPR_BRACKET.equals(key)) {
            return DiagnosticFactory.MISSING_CLOSING_EXPR_BRACKET_ID;
        } else if (GENERAL_SYNTAX_ERROR.equals(key)) {
            return DiagnosticFactory.GENERAL_SYNTAX_ERROR_ID;
        } else if (EMPTY_EL_EXPRESSION.equals(key)) {
            return DiagnosticFactory.EMPTY_EL_EXPRESSION_ID;
        } else if (BINARY_OP_DOT_WITH_VALUEB_NULL.equals(key)) {
            return DiagnosticFactory.BINARY_OP_DOT_WITH_VALUEB_NULL_ID;
        } else if (BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY.equals(key)) {
            return DiagnosticFactory.BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY_ID;
        } else if (POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS.equals(key)) {
            return DiagnosticFactory.POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS_ID;
        } else if (BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME.equals(key)) {
            return DiagnosticFactory.BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME_ID;
        } else if (BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE.equals(key)) {
            return DiagnosticFactory.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID;
        } else if (MEMBER_IS_INTERMEDIATE.equals(key)) {
            return DiagnosticFactory.MEMBER_IS_INTERMEDIATE_ID;
        } else {
            throw new IllegalArgumentException("Severity Key: " + key); //$NON-NLS-1$
        }
    }

    /**
     * e.g. createQualifiedKeyName("foo") -> org.eclipse.jst.jsf.core.foo
     * @param baseName
     * @return a plugin qualified key given the baseName
     * 
     */
    private static String createQualifiedKeyName(final String baseName) {
        return JSFCorePlugin.PLUGIN_ID + "." + baseName; //$NON-NLS-1$
    }

    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_BOTH_OPERANDS_NULL = createQualifiedKeyName(
            "BINARY_OP_BOTH_OPERANDS_NULL"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_POSSIBLE_DIVISION_BY_ZERO = createQualifiedKeyName(
            "BINARY_OP_POSSIBLE_DIVISION_BY_ZERO"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION = createQualifiedKeyName(
            "BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME = createQualifiedKeyName(
            "BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME = createQualifiedKeyName(
            "BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN = createQualifiedKeyName(
            "BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS = createQualifiedKeyName(
            "BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME = createQualifiedKeyName(
            "BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_NO_AVAILABLE_TYPE_COERCION = createQualifiedKeyName(
            "BINARY_OP_NO_AVAILABLE_TYPE_COERCION"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS = createQualifiedKeyName(
            "BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME = createQualifiedKeyName(
            "UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE = createQualifiedKeyName(
            "UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO = createQualifiedKeyName(
            "UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION = createQualifiedKeyName(
            "UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN = createQualifiedKeyName(
            "UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String TERNARY_OP_CHOICE_IS_ALWAYS_SAME = createQualifiedKeyName(
            "TERNARY_OP_CHOICE_IS_ALWAYS_SAME"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN = createQualifiedKeyName(
            "TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED = createQualifiedKeyName(
            "UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING = createQualifiedKeyName(
            "CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String MEMBER_NOT_FOUND = createQualifiedKeyName("MEMBER_NOT_FOUND"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String VARIABLE_NOT_FOUND = createQualifiedKeyName("VARIABLE_NOT_FOUND"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String MISSING_CLOSING_EXPR_BRACKET = createQualifiedKeyName(
            "MISSING_CLOSING_EXPR_BRACKET"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String GENERAL_SYNTAX_ERROR = createQualifiedKeyName("GENERAL_SYNTAX_ERROR"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String EMPTY_EL_EXPRESSION = createQualifiedKeyName("EMPTY_EL_EXPRESSION"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_DOT_WITH_VALUEB_NULL = createQualifiedKeyName(
            "BINARY_OP_DOT_WITH_VALUEB_NULL"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY = createQualifiedKeyName(
            "BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS = createQualifiedKeyName(
            "POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME = createQualifiedKeyName(
            "BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME"); //$NON-NLS-1$
    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE = createQualifiedKeyName(
            "BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE"); //$NON-NLS-1$

    /**
     * preference key.  Match to DiagnosticFactory constants
     */
    public final static String MEMBER_IS_INTERMEDIATE = createQualifiedKeyName("MEMBER_IS_INTERMEDIATE"); //$NON-NLS-1$
}