All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sakaiproject.tool.assessment.util.SamigoExpressionError Maven / Gradle / Ivy

There is a newer version: 23.3
Show newest version
/**
 * Copyright (c) 2005-2013 The Apereo Foundation
 *
 * Licensed under the Educational Community License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *             http://opensource.org/licenses/ecl2
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.sakaiproject.tool.assessment.util;

public class SamigoExpressionError extends Exception {

  /**
   * Create an error with given message id and fill in given string in message
   * @PARAM id    id of the message
   * @PARAM str   a string which will be filled in in the message
   */
  public SamigoExpressionError(final int id, final String str)
  { 
    row_ = -1;
    col_ = -1;
    id_ = id;
  
    msg_ = String.format(errorMsg(id_), str);
  }

  /**
   * Create an error with given message id and fill in given string in message
   * @PARAM id    id of the message
   */
  SamigoExpressionError(final int id)
  { 
    row_ = -1;
    col_ = -1;
    id_ = id;
  
    msg_ = errorMsg(id_);
  }

  /**
   * Create an error with given message id and fill in given string in message
   * @PARAM row   row where the error occured
   * @PARAM col   column where the error occured 
   * @PARAM id    id of the message
   * @PARAM str   a string which will be filled in in the message
   */
  SamigoExpressionError(final int row, final int col, final int id, final String str)
  { 
    row_ = row;
    col_ = col;
    id_ = id;
  
    msg_ = String.format(errorMsg(id_), str);
  }

  /**
   * Create an error with given message id and fill in given string in message
   * @PARAM row   row where the error occured 
   * @PARAM col   column where the error occured 
   * @PARAM id    id of the message
   */
  SamigoExpressionError(final int row, final int col, final int id)
  { 
    row_ = row;
    col_ = col;
    id_ = id;
  
    msg_ = errorMsg(id_);
  }

  /**
   * Returns the error message, including line and column number
   */
  public final String get()
  {
    String res;
    if (row_ == -1)
    {
      if (col_ == -1)
      {
        res = String.format("Error: %s", msg_);
      }
      else
      {
        res = String.format("Error: %s (col %d)", msg_, col_);
      }
    }
    else
    {
      res = String.format("Error: %s (ln %d, col %d)", msg_, row_, col_);
    }
    return res;
  }

  public int get_id()
  {
    return id_;
  }

/// Private functions

  /**
   * Returns a pointer to the message description for the given message id.
   * Returns "Unknown error" if id was not recognized.
   */
  private String errorMsg(final int id)
  {
    switch (id)
    {
      // syntax errors
      case 1: return "Syntax error in part \"%s\"";
      case 2: return "Syntax error";
      case 3: return "Parentesis ) missing";
      case 4: return "Empty expression";
      case 5: return "Unexpected part \"%s\"";
      case 6: return "Unexpected end of expression";
      case 7: return "Value expected";

      // wrong or unknown operators, functions, variables
      case 101: return "Unknown operator %s";
      case 102: return "Unknown function %s";
      case 103: return "Unknown variable %s";
      case 104: return "Unknown operator";

      // domain errors
      case 200: return "Too long expression, maximum number of characters exceeded";
      
      // error in assignments of variables
      case 300: return "Defining variable failed";
      
      // error in functions
      case 400: return "Integer value expected in function %s";
      case 401: return "Result of %s is not a number (NaN)";
      case 402: return "Result of %s is infinity (Infinity)";
      
      // unknown error
      case 500: return "%s";
    }

    return "Unknown error";
  }  

/// Data  
  private int row_;    /// row where the error occured
  private int col_;    /// column (position) where the error occured
  private int id_;     /// id of the error
  private String msg_;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy