public List<ApiObject> requestList(int method, ApiObject[] parameters) {
   try {
     switch (method) {
       case LIST_OPTION_GROUPS:
         return ApiObject.envelopeStringList(getOptionGroups());
       case LIST_OPTION_NAMES:
         return ApiObject.envelopeStringList(
             getOptionNames(((ApiObject.String) parameters[0]).Value));
       case LIST_BOOK_TAGS:
         return ApiObject.envelopeStringList(getBookTags());
       case LIST_ACTIONS:
         return ApiObject.envelopeStringList(listActions());
       case LIST_ACTION_NAMES:
         {
           final ArrayList<String> actions = new ArrayList<String>(parameters.length);
           for (ApiObject o : parameters) {
             actions.add(((ApiObject.String) o).Value);
           }
           return ApiObject.envelopeStringList(listActionNames(actions));
         }
       case LIST_ZONEMAPS:
         return ApiObject.envelopeStringList(listZoneMaps());
       case GET_PARAGRAPH_WORDS:
         return ApiObject.envelopeStringList(
             getParagraphWords(((ApiObject.Integer) parameters[0]).Value));
       case GET_PARAGRAPH_WORD_INDICES:
         return ApiObject.envelopeIntegerList(
             getParagraphWordIndices(((ApiObject.Integer) parameters[0]).Value));
       default:
         return Collections.<ApiObject>singletonList(unsupportedMethodError(method));
     }
   } catch (Throwable e) {
     return Collections.<ApiObject>singletonList(exceptionInMethodError(method, e));
   }
 }
 public ApiObject request(int method, ApiObject[] parameters) {
   try {
     switch (method) {
       case GET_FBREADER_VERSION:
         return ApiObject.envelope(getFBReaderVersion());
       case GET_OPTION_VALUE:
         return ApiObject.envelope(
             getOptionValue(
                 ((ApiObject.String) parameters[0]).Value,
                 ((ApiObject.String) parameters[1]).Value));
       case SET_OPTION_VALUE:
         setOptionValue(
             ((ApiObject.String) parameters[0]).Value,
             ((ApiObject.String) parameters[1]).Value,
             ((ApiObject.String) parameters[2]).Value);
         return ApiObject.Void.Instance;
       case GET_BOOK_LANGUAGE:
         if (parameters.length == 0) {
           return ApiObject.envelope(getBookLanguage());
         } else {
           return ApiObject.envelope(getBookLanguage(((ApiObject.Long) parameters[0]).Value));
         }
       case GET_BOOK_TITLE:
         if (parameters.length == 0) {
           return ApiObject.envelope(getBookTitle());
         } else {
           return ApiObject.envelope(getBookTitle(((ApiObject.Long) parameters[0]).Value));
         }
       case GET_BOOK_FILE_PATH:
         if (parameters.length == 0) {
           return ApiObject.envelope(getBookFilePath());
         } else {
           return ApiObject.envelope(getBookFilePath(((ApiObject.Long) parameters[0]).Value));
         }
       case GET_BOOK_HASH:
         if (parameters.length == 0) {
           return ApiObject.envelope(getBookHash());
         } else {
           return ApiObject.envelope(getBookHash(((ApiObject.Long) parameters[0]).Value));
         }
       case GET_BOOK_UNIQUE_ID:
         if (parameters.length == 0) {
           return ApiObject.envelope(getBookUniqueId());
         } else {
           return ApiObject.envelope(getBookUniqueId(((ApiObject.Long) parameters[0]).Value));
         }
       case GET_BOOK_LAST_TURNING_TIME:
         if (parameters.length == 0) {
           return ApiObject.envelope(getBookLastTurningTime());
         } else {
           return ApiObject.envelope(
               getBookLastTurningTime(((ApiObject.Long) parameters[0]).Value));
         }
       case GET_PARAGRAPHS_NUMBER:
         return ApiObject.envelope(getParagraphsNumber());
       case GET_PARAGRAPH_ELEMENTS_COUNT:
         return ApiObject.envelope(
             getParagraphElementsCount(((ApiObject.Integer) parameters[0]).Value));
       case GET_PARAGRAPH_TEXT:
         return ApiObject.envelope(getParagraphText(((ApiObject.Integer) parameters[0]).Value));
       case GET_PAGE_START:
         return getPageStart();
       case GET_PAGE_END:
         return getPageEnd();
       case IS_PAGE_END_OF_SECTION:
         return ApiObject.envelope(isPageEndOfSection());
       case IS_PAGE_END_OF_TEXT:
         return ApiObject.envelope(isPageEndOfText());
       case SET_PAGE_START:
         setPageStart((TextPosition) parameters[0]);
         return ApiObject.Void.Instance;
       case HIGHLIGHT_AREA:
         {
           highlightArea((TextPosition) parameters[0], (TextPosition) parameters[1]);
           return ApiObject.Void.Instance;
         }
       case CLEAR_HIGHLIGHTING:
         clearHighlighting();
         return ApiObject.Void.Instance;
       case GET_BOTTOM_MARGIN:
         return ApiObject.envelope(getBottomMargin());
       case SET_BOTTOM_MARGIN:
         setBottomMargin(((ApiObject.Integer) parameters[0]).Value);
         return ApiObject.Void.Instance;
       case GET_TOP_MARGIN:
         return ApiObject.envelope(getTopMargin());
       case SET_TOP_MARGIN:
         setTopMargin(((ApiObject.Integer) parameters[0]).Value);
         return ApiObject.Void.Instance;
       case GET_LEFT_MARGIN:
         return ApiObject.envelope(getLeftMargin());
       case SET_LEFT_MARGIN:
         setLeftMargin(((ApiObject.Integer) parameters[0]).Value);
         return ApiObject.Void.Instance;
       case GET_RIGHT_MARGIN:
         return ApiObject.envelope(getRightMargin());
       case SET_RIGHT_MARGIN:
         setRightMargin(((ApiObject.Integer) parameters[0]).Value);
         return ApiObject.Void.Instance;
       case GET_KEY_ACTION:
         return ApiObject.envelope(
             getKeyAction(
                 ((ApiObject.Integer) parameters[0]).Value,
                 ((ApiObject.Boolean) parameters[1]).Value));
       case SET_KEY_ACTION:
         setKeyAction(
             ((ApiObject.Integer) parameters[0]).Value,
             ((ApiObject.Boolean) parameters[1]).Value,
             ((ApiObject.String) parameters[2]).Value);
         return ApiObject.Void.Instance;
       case GET_ZONEMAP:
         return ApiObject.envelope(getZoneMap());
       case SET_ZONEMAP:
         setZoneMap(((ApiObject.String) parameters[0]).Value);
         return ApiObject.Void.Instance;
       case GET_ZONEMAP_HEIGHT:
         return ApiObject.envelope(getZoneMapHeight(((ApiObject.String) parameters[0]).Value));
       case GET_ZONEMAP_WIDTH:
         return ApiObject.envelope(getZoneMapWidth(((ApiObject.String) parameters[0]).Value));
       case GET_TAPZONE_ACTION:
         return ApiObject.envelope(
             getTapZoneAction(
                 ((ApiObject.String) parameters[0]).Value,
                 ((ApiObject.Integer) parameters[1]).Value,
                 ((ApiObject.Integer) parameters[2]).Value,
                 ((ApiObject.Boolean) parameters[3]).Value));
       case GET_TAP_ACTION_BY_COORDINATES:
         return ApiObject.envelope(
             getTapActionByCoordinates(
                 ((ApiObject.String) parameters[0]).Value,
                 ((ApiObject.Integer) parameters[1]).Value,
                 ((ApiObject.Integer) parameters[2]).Value,
                 ((ApiObject.Integer) parameters[3]).Value,
                 ((ApiObject.Integer) parameters[4]).Value,
                 ((ApiObject.Boolean) parameters[5]).Value));
       case SET_TAPZONE_ACTION:
         setTapZoneAction(
             ((ApiObject.String) parameters[0]).Value,
             ((ApiObject.Integer) parameters[1]).Value,
             ((ApiObject.Integer) parameters[2]).Value,
             ((ApiObject.Boolean) parameters[3]).Value,
             ((ApiObject.String) parameters[4]).Value);
         return ApiObject.Void.Instance;
       case CREATE_ZONEMAP:
         createZoneMap(
             ((ApiObject.String) parameters[0]).Value,
             ((ApiObject.Integer) parameters[1]).Value,
             ((ApiObject.Integer) parameters[2]).Value);
         return ApiObject.Void.Instance;
       case IS_ZONEMAP_CUSTOM:
         return ApiObject.envelope(isZoneMapCustom(((ApiObject.String) parameters[0]).Value));
       case DELETE_ZONEMAP:
         deleteZoneMap(((ApiObject.String) parameters[0]).Value);
         return ApiObject.Void.Instance;
       default:
         return unsupportedMethodError(method);
     }
   } catch (Throwable e) {
     return new ApiObject.Error("Exception in method " + method + ": " + e);
   }
 }