/**
   * Manages the return exception of a dict query.
   *
   * @param dix The exception returned by the adapter
   * @param database The dictionary used
   * @return Exception message
   */
  private String manageException(DictException dix, String database) {
    int errorCode = dix.getErrorCode();

    // We change the text only for exception 550 (invalid dictionary) and 551 (invalid strategy)
    if (errorCode == DictReturnCode.INVALID_DATABASE) {
      return DictActivator.getResources()
          .getI18NString("plugin.dictaccregwizz.INVALID_DATABASE", new String[] {database});
    } else if (errorCode == DictReturnCode.INVALID_STRATEGY) {
      return DictActivator.getResources().getI18NString("plugin.dictaccregwizz.INVALID_STRATEGY");
    } else if (errorCode == DictReturnCode.NO_MATCH) {
      return DictActivator.getResources().getI18NString("plugin.dictaccregwizz.NO_MATCH");
    }

    return dix.getMessage();
  }
  /**
   * Create, execute and display a query to a dictionary (ContactDictImpl)
   *
   * @param dictContact the contact containing the database name
   * @param message the message containing the word
   */
  private void submitDictQuery(ContactDictImpl dictContact, Message message) {
    Message msg = this.createMessage("");

    String database = dictContact.getContactID();
    DictConnection conn = this.parentProvider.getConnection();
    boolean doMatch = false;

    String word;

    // Formatting the query message, if the word as one or more spaces we
    // put it between quotes to prevent errors
    word = message.getContent().replace("\"", "").trim();
    if (word.indexOf(' ') > 0) {
      word = "\"" + word + "\"";
    }

    // Try to get the definition of the work
    try {
      List<Definition> definitions = conn.define(database, word);
      msg = this.createMessage(retrieveDefine(definitions, word));
    } catch (DictException dx) {
      if (dx.getErrorCode()
          == DictReturnCode.NO_MATCH) { // No word found, we are going to try the match command
        doMatch = true;
      } else { // Otherwise we display the error returned by the server
        msg = this.createMessage(manageException(dx, database));
      }
    }

    if (doMatch) {
      // Trying the match command
      try {
        List<MatchWord> matchWords = conn.match(database, word, this.accountID.getStrategy());
        msg = this.createMessage(retrieveMatch(matchWords, word));
      } catch (DictException dx) {
        msg = this.createMessage(manageException(dx, database));
      }
    }

    // Send message
    fireMessageReceived(msg, dictContact);
  }