/** * 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; }