Package org.eclipse.jst.jsf.validation.internal.el.diagnostics

Source Code of org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory

/*******************************************************************************
* Copyright (c) 2006 Oracle Corporation7
* 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.el.diagnostics;

import java.text.MessageFormat;

import org.eclipse.emf.common.util.BasicDiagnostic;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.jst.jsf.validation.internal.ELValidationPreferences;
import org.eclipse.osgi.util.NLS;

/**
* Factory for all operator diagnostics.  Class should
* not be implemented, instantiated or sub-classed.
*
* @author cbateman
*
*/
public final class DiagnosticFactory
{
    /**
     * The id used in the source field of all Diagnostic's created by this factory
     * to uniquely identify EL validation as their source type.
     */
    public final static String      SOURCE_ID = "org.eclipse.jst.jsf.validation.el.Diagnostics";//$NON-NLS-1$
   
    /**
     * Problem id
     */
    public final static int BINARY_OP_BOTH_OPERANDS_NULL_ID = 0;
    /**
     * Problem id
     */
    public final static int BINARY_OP_POSSIBLE_DIVISION_BY_ZERO_ID = 1;
    /**
     * Problem id
     */
    public final static int BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID = 2;
    /**
     * Problem id
     */
    public final static int BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME_ID = 3;
    /**
     * Problem id
     */
    public final static int BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME_ID = 4;
    /**
     * Problem id
     */
    public final static int BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID = 5;
    /**
     * Problem id
     */
    public final static int BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS_ID = 6;
    /**
     * Problem id
     */
    public final static int BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME_ID = 7;
    /**
     * Problem id
     */
    public final static int BINARY_OP_NO_AVAILABLE_TYPE_COERCION_ID = 8;
    /**
     * Problem id
     */
    public final static int BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS_ID = 9;
    /**
     * Problem id
     */
    public final static int UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME_ID = 10;
    /**
     * Problem id
     */
    public final static int UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE_ID = 11;
    /**
     * Problem id
     */
    public final static int UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO_ID = 12;
    /**
     * Problem id
     */
    public final static int UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID = 13;
    /**
     * Problem id
     */
    public final static int UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID = 14;
    /**
     * Problem id
     */
    public final static int TERNARY_OP_CHOICE_IS_ALWAYS_SAME_ID = 15;
    /**
     * Problem id
     */
    public final static int TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN_ID = 16;
    /**
     * Problem id
     */
    public final static int UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED_ID = 17;
    /**
     * Problem id
     */
    public final static int CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING_ID = 18;
    /**
     * Problem id
     */
    public final static int MEMBER_NOT_FOUND_ID = 19;
    /**
     * Problem id
     */
    public final static int VARIABLE_NOT_FOUND_ID = 20;
    /**
     * Problem id
     */
    public final static int MISSING_CLOSING_EXPR_BRACKET_ID = 21;
    /**
     * Problem id
     */
    public final static int GENERAL_SYNTAX_ERROR_ID = 22;
    /**
     * Problem id
     */
    public final static int EMPTY_EL_EXPRESSION_ID = 23;
   
    /**
     *
     */
    public final static int BINARY_OP_DOT_WITH_VALUEB_NULL_ID = 24;
   
    /**
     * Identifies a problem where we have x.y and x is a map.  In this case
     * the recommend syntax is x['y']
     */
    public final static int BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY_ID = 25;
   
    /**
     * Indicates that a numeric array accessor is being used with a value
     * which is either < 0 or may be greater than the assumed size of the array
     */
    public final static int POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS_ID = 26;
   
    /**
     * Identifies the problem where an expr like bean.enumProp == 'blah'
     * but 'blah' does not match any of the possible enum constants, meaning
     * that the operation will always resolve to a constant value (in this case false)
     */
    public final static int BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME_ID = 27;
   
    /**
     * Identifies a problem where two enum variables are compared but the enums are
     * not compatible.  i.e. bean.enum1 < bean.enum2.  Enum.compareTo() may throw
     * an exception in this case (CCE).
     */
    public final static int BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID = 28;
   
    /**
     * Indicates a situation such as x.y where x is a bundle and
     * 'x.y.z' exists, but x.y while partially valid, does not have a value
     * associated.
     */
    public final static int MEMBER_IS_INTERMEDIATE_ID = 29;
   
    /**
     * Count of ids
     */
    public final static int NUM_IDS = 30;
   
    /**
     * @param operatorName
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_BOTH_OPERANDS_NULL(final String operatorName)
    {
        final String message = NLS.bind(
                Messages.BINARY_OP_BOTH_OPERANDS_NULL, operatorName);
        return create(BINARY_OP_BOTH_OPERANDS_NULL_ID, message);
    }
   
    private static Diagnostic DIAGNOSTIC_POSSIBLE_DIV_BY_ZERO;
   
    /**
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_POSSIBLE_DIVISION_BY_ZERO()
    {
        if (DIAGNOSTIC_POSSIBLE_DIV_BY_ZERO == null)
        {
            final String message = Messages.POSSIBLE_DIV_BY_ZERO;
            DIAGNOSTIC_POSSIBLE_DIV_BY_ZERO =
                create(BINARY_OP_POSSIBLE_DIVISION_BY_ZERO_ID, message);
        }
        return DIAGNOSTIC_POSSIBLE_DIV_BY_ZERO;
    }
   
    /**
     * @param operatorName
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION(final String operatorName)
    {
        final String message =
            NLS.bind(Messages.BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION, operatorName);
        return create(BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID, message);
    }
   
    /**
     * @param operatorName
     * @param value
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME(final String operatorName, final String value)
    {
        final String message = 
            NLS.bind(Messages.BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME,operatorName, value);
        return create(BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME_ID, message);
    }
   
    /**
     * @param value
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME(final String value)
    {
        final String message =
            NLS.bind(Messages.BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME, value);
        return create(BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME_ID, message);
    }

    /**
     * @param whichArgument
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN(final String whichArgument)
    {
        final String message =
            NLS.bind(Messages.BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN, whichArgument);
        return create(BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID, message);
    }
   
    /**
     * @param shortCircuitValue
     * @param operatorName
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS(boolean shortCircuitValue, String operatorName)
    {
        final String message =
            NLS.bind(Messages.BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS,
                    Boolean.valueOf(shortCircuitValue), operatorName);
        return create(BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS_ID, message);
    }
   
    /**
     * @param shortCircuitValue
     * @param operatorName
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME(final boolean shortCircuitValue, final String operatorName)
    {
        final String message =
            NLS.bind(Messages.BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME,
                    Boolean.valueOf(shortCircuitValue), operatorName);
       
        return create(BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME_ID, message);
    }

    private static Diagnostic DIAGNOSTIC_NO_AVAILABLE_TYPE_COERCION;
       
    /**
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_NO_AVAILABLE_TYPE_COERCION()
    {
        if (DIAGNOSTIC_NO_AVAILABLE_TYPE_COERCION == null)
        {
            DIAGNOSTIC_NO_AVAILABLE_TYPE_COERCION =
              create(BINARY_OP_NO_AVAILABLE_TYPE_COERCION_ID,
                    Messages.BINARY_OP_NO_AVAILABLE_TYPE_COERCION);
        }
       
        return DIAGNOSTIC_NO_AVAILABLE_TYPE_COERCION;
    }

    private static Diagnostic DIAGNOSTIC_COULD_NOT_COERCE_LITERALS;
   
    /**
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS()
    {
        if (DIAGNOSTIC_COULD_NOT_COERCE_LITERALS == null)
        {
            DIAGNOSTIC_COULD_NOT_COERCE_LITERALS =
                create(BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS_ID,
                    Messages.BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS);
        }
       
        return DIAGNOSTIC_COULD_NOT_COERCE_LITERALS;
    }
   
    /**
     * @param operatorName
     * @param value
     * @return a configured diagnostic
     */
    public Diagnostic create_UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME_ID(final String operatorName, final String value)
    {
        final String message =
            NLS.bind(Messages.UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME,
                    operatorName, value);
        return create(UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME_ID, message);
    }
   
    /**
     * @return a configured diagnostic
     */
    public Diagnostic create_UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE()
    {
        return create(UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE_ID,
             Messages.UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE);
    }
   
    /**
     * @return a configured diagnostic
     */
    public Diagnostic create_UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO()
    {
        return create(UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO_ID,
            Messages.UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO);
    }
   
    /**
     * @param operatorName
     * @return a configured diagnostic
     */
    public Diagnostic create_UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION(final String operatorName)
    {
        final String message =
            NLS.bind(Messages.UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION,
                    operatorName);
        return create(UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION_ID, message);
    }
   
    /**
     * @param operatorName
     * @return a configured diagnostic
     */
    public Diagnostic create_UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED(final String operatorName)
    {
        final String message =
            NLS.bind(Messages.UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED,
                                operatorName);
        return create(UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED_ID, message);
    }
   
    /**
     * @return a configured diagnostic
     */
    public Diagnostic create_UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN()
    {
        return create(UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN_ID,
                Messages.UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN);
    }
   
    /**
     * @param result
     * @param whichSelected
     * @return a configured diagnostic
     */
    public Diagnostic create_TERNARY_OP_CHOICE_IS_ALWAYS_SAME(boolean result, String whichSelected)
    {
        final String message =
            NLS.bind(Messages.TERNARY_OP_CHOICE_IS_ALWAYS_SAME,
                    Boolean.valueOf(result), whichSelected);
        return create(TERNARY_OP_CHOICE_IS_ALWAYS_SAME_ID, message);
    }
   
    /**
     * @return a configured diagnostic
     */
    public Diagnostic create_TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN()
    {
        return create(TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN_ID,
                Messages.TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN_ID);
    }
   
    /**
     * Method bindings cannot participate in expressions involving operators
     * Per JSP 1.1 spec section 5.2.1
     *
     * @return a configured message
     */
    public Diagnostic create_CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING()
    {
        return create(CANNOT_APPLY_OPERATOR_TO_METHOD_BINDING_ID,
                Messages.CANNOT_APPLY_OPERATORS_TO_MB);
    }

    /**
     * @param curMemberSymbol
     * @param owningMember
     * @return a configured message
     */
    public Diagnostic create_MEMBER_NOT_FOUND(String curMemberSymbol, String owningMember)
    {
        return create(MEMBER_NOT_FOUND_ID,
                NLS.bind(Messages.VM_PROP_NAME_NOT_FOUND, curMemberSymbol, owningMember));
    }

    /**
     * @param variableName
     * @return a configured message
     */
    public Diagnostic create_VARIABLE_NOT_FOUND(String variableName)
    {
        return create(VARIABLE_NOT_FOUND_ID
                , NLS.bind(Messages.VM_ROOT_NAME_NOT_FOUND, variableName));
    }

    /**
     * @return a configured message
     */
    public Diagnostic create_MISSING_CLOSING_EXPR_BRACKET()
    {
        return create(MISSING_CLOSING_EXPR_BRACKET_ID
                , Messages.MISSING_CLOSING_EXPR_BRACKET);
    }
   
    /**
     * @return a configured message
     */
    public Diagnostic create_GENERAL_SYNTAX_ERROR()
    {
        return create(GENERAL_SYNTAX_ERROR_ID, Messages.GENERAL_SYNTAX_ERROR);
    }

    /**
     * @return a configured message
     */
    public Diagnostic create_EMPTY_EL_EXPRESSION()
    {
        return create(EMPTY_EL_EXPRESSION_ID, Messages.EMPTY_EL_EXPRESSION);
    }

    /**
     * @param operatorName
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_DOT_WITH_VALUEB_NULL(final String operatorName)
    {
        return create(BINARY_OP_DOT_WITH_VALUEB_NULL_ID
                , Messages.bind(Messages.BINARY_OP_DOT_WITH_VALUEB_NULL, operatorName));
    }
   
    /**
     * @param valAName
     * @param valueBName
     * @return a configured diagnostic
     */
    public Diagnostic create_BINARY_OP_DOT_WITH_VALUEA_MAP_SHOULD_USE_ARRAY(final String valAName, final String valueBName)
    {
        final Object[] formatArgs = new Object[] {valAName, valueBName};
        return create(BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY_ID,
                MessageFormat.format(Messages.BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY,formatArgs));
    }
   
    /**
     * @param value
     * @return an array index out of bounds diagnostic
     */
    public Diagnostic create_POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS(final Integer value)
    {
        final Object[] formatArgs = new Object[] {value};

        return create(POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS_ID
                , MessageFormat.format(Messages.POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS,formatArgs));
    }
   
    /**
     * @param operatorName
     * @param invariantResult
     * @param enumName
     * @param fieldName
     * @return a diagnostic
     */
    public Diagnostic create_BINARY_COMPARISON_WITH_ENUM_AND_CONST_ALWAYS_SAME(final String operatorName, final boolean invariantResult, final String enumName,  final String fieldName)
    {
        return create(BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME_ID
                , MessageFormat.format(Messages.BINARY_COMPARISON_WITH_ENUM_AND_CONST_ALWAYS_SAME
                                      , new Object[] {operatorName
                                      , Boolean.valueOf(invariantResult), enumName, fieldName}));
    }

    /**
     * @param operatorName
     * @param invariantResult
     * @param enumName1
     * @param enumName2
     * @return a diagnostic
     */
    public Diagnostic create_BINARY_COMPARISON_WITH_TWO_ENUMS_ALWAYS_SAME(final String operatorName, final boolean invariantResult, final String enumName1, final String enumName2)
    {
        return create(BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME_ID
                , MessageFormat.format(Messages.BINARY_COMPARISON_WITH_TWO_ENUMS_ALWAYS_SAME
                                      , new Object[] {operatorName
                                      , Boolean.valueOf(invariantResult), enumName1, enumName2}));
    }
   
    /**
     * @param operatorName
     * @param invariantResult
     * @param enumName
     * @param nonEnum
     * @return a diagnostic
     */
    public Diagnostic create_BINARY_COMPARISON_WITH_ENUM_AND_UNCOERCABLE_NONCONST_ALWAYS_SAME(final String operatorName, final boolean invariantResult, final String enumName, final String nonEnum)
    {
        return create(BINARY_COMPARISON_WITH_ENUM_ALWAYS_SAME_ID
                , MessageFormat.format(Messages.BINARY_COMPARISON_WITH_ENUM_AND_UNCOERCABLE_NONCONST_ALWAYS_SAME
                                      , new Object[] {operatorName
                                      , Boolean.valueOf(invariantResult), enumName, nonEnum}));
    }
   
    /**
     * @return a diagnostic
     */
    public Diagnostic create_BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE()
    {
        return create(BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE_ID
                , Messages.BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE);
    }

    /**
     * @param intermediateMemberName
     * @return a diagnostic
     */
    public Diagnostic create_MEMBER_IS_INTERMEDIATE(final String intermediateMemberName)
    {
        return create(MEMBER_IS_INTERMEDIATE_ID
                        ,  NLS.bind(Messages.MEMBER_IS_INTERMEDIATE
                                , intermediateMemberName));
    }
   
    private BasicDiagnostic create(int diagnosticId, String message)
    {
        final int severity = ELValidationPreferences.getDefaultSeverity(diagnosticId);
        return new BasicDiagnostic(severity, SOURCE_ID
                , diagnosticId
                , message
                , null);
    }
}
TOP

Related Classes of org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.