예제 #1
0
파일: PIMImpl.java 프로젝트: sfsy1989/j2me
  /**
   * Does the same as openPIMList, without any validation
   *
   * @param pimListType CONTACT_LIST, EVENT_LIST or TODO_LIST
   * @param mode READ_ONLY, WRITE_ONLY or READ_WRITE
   * @param name name of the list
   * @return handle to opened PIM list
   * @throws PIMException if the list is not found
   */
  private PIMList openPIMListImpl(int pimListType, int mode, String name) throws PIMException {

    AbstractPIMList list;
    PIMHandler handler = PIMHandler.getInstance();
    Object listHandle = handler.openList(pimListType, name, mode);

    switch (pimListType) {
      case PIM.CONTACT_LIST:
        list = new ContactListImpl(name, mode, listHandle);
        break;
      case PIM.EVENT_LIST:
        list = new EventListImpl(name, mode, listHandle);
        break;
      case PIM.TODO_LIST:
        list = new ToDoListImpl(name, mode, listHandle);
        break;
      default:
        // pimListType has been verified
        throw new Error("Unreachable code");
    }
    Object[] keys = handler.getListKeys(listHandle);
    for (int i = 0; i < keys.length; i++) {
      byte[] data = handler.getListElement(listHandle, keys[i]);
      String[] categories = handler.getListElementCategories(listHandle, keys[i]);
      try {
        PIMItem[] items = fromSerialFormat(new ByteArrayInputStream(data), "UTF-8", list);
        for (int j = 0; j < items.length; j++) {
          AbstractPIMItem item = (AbstractPIMItem) items[j];
          item.setKey(keys[i]);
          list.addItem(item);
          item.setDefaultValues();
          for (int index = 0; index < categories.length; index++) {
            item.addToCategory(categories[index]);
          }
          item.setModified(false);
        }
      } catch (UnsupportedEncodingException e) {
        throw new Error("UTF-8 not supported");
      } catch (PIMException e) {
        // skip element
      }
    }
    return list;
  }