|
javax.microedition.pim
옵션 패키지 설명
JSR 75은 J2ME 개발자들이 PDA에서 흔히 볼 수 있는 중요한 기능에 액세스할 수 있도록 CLDC를 확대/강화하는 두 가지 옵션 패키지를 정의합니다.
CLDC 1.0을 지원하는 모든 장치는 JSR 75 지원이 가능한데, 이는 CLDC 1.0 이상을 지원하는 어떠한 J2ME 프로파일에도 PIM API가 배치될 수 있음을 의미합니다. CLDC는 이를테면 CDC(Connected Device Configuration)의 부분집합이기 때문에, PIM/ FC 옵션 패키지는 CLDC/CDC 기반 장치 모두에 배치가 가능합니다. 단, 두 패키지는 모두 옵션사양이며 서로 별개인 점에 유의하시기 바랍니다.
누가 옵션 패키지를 장치에 장착하는가 ? 주어진 장치에서 옵션 패키지를 지원할지 여부는 플랫폼 소프트웨어의 관리를 책임지는 곳(보통은 장치 제조업체)에서 결정합니다. 일반적으로, 최종 사용자나 애플리케이션 개발자는 옵션 패키지를 다운로드하여 장치에 설치할 수 없으며, 옵션 패키지에 의존하는 애플리케이션의 경우 제조업체가 먼저 옵션 패키지를 장치에 통합하기 전에는 실행이 불가능합니다.
PIM API의 주된 목적은 J2ME 장치로 하여금 원시 애플리케이션이 액세스하고 있는 것과 동일한 개인 데이터에 액세스할 수 있도록 하는 것입니다. 이 옵션 패키지의 주요 목표는 다음과 같습니다.
PIM 옵션 패키지 API는 PIM 리스트라고 불리는 세 가지 유형의 PIM 데이터를 정의합니다.
모든 장치가 세 유형을 모두 지원하지는 않지만, 적어도 한가지 이상의 유형을 지원해야 PIM 옵션 패키지를 지원하는 장치라고 말할 수 있습니다.
PIM API는 javax.microedition.io.pim
패키지에 정의되고, 이 패키지는4개의 예외 타입이 포함하여 8개의 인터페이스와 6개의 클래스로 구성됩니다.
인터페이스 | 설명 |
PIMItem |
항목이 단일 PIM 엔트리(Contact , Event , 또는 ToDo )의 데이터 집합인 PIM 리스트에 저장되는 항목의 공통 슈퍼인터페이스 |
PIMList |
각각 PIMItems를 포함할 수 있는 ContactList , EventList , ToDoList 의 공통 슈퍼 인터페이스 |
Contact |
연락처(contact) 데이터베이스의 단일 엔트리. 이 인터페이스의 정적 필드는 vCard 스펙에 정의된 필드의 부분집합입니다. |
ContactList |
Contact 항목의 리스트 |
Event |
일정 데이터베이스의 단일 엔트리 |
EventList |
Event 항목의 리스트 |
ToDo |
작업(to-do) 데이터베이스의 단일 항목 |
ToDoList |
ToDo 항목의 리스트 |
클래스 | 설명 |
PIM |
PIMList 에 관한 정보를 찾고 액세스를 획득하기 위한 정적 메소드 집합을 제공합니다. |
RepeatRule |
관련 이벤트가 발생할 시기를 지정하는 Event 항목의 반복 패턴에 대한 설명. 이 클래스의 정적 필드는 vCalendar 1.0 스펙에 정의된 VEVENT 내 RRULE 필드의 기능들의 부분집합입니다. |
FieldEmptyException |
Thrown when an attempt is made to access a field that doesn't have any data values associated with it 관련 데이터 값을 가지지 않는 필드에 액세스하려는 시도가 있을 때 throw됩니다. |
FieldFullException |
가용 데이터 값 슬롯이 이미 할당된 필드에 데이터를 추가하려는 시도가 있을 때 throw됩니다. |
PIMException |
PIM 클래스에 의해 throw됩니다. |
UnsupportedException |
참조된 필드가 엘리먼트가 속한 PIM 리스트에서 지원되지 않을 때 throw됩니다. |
모든 J2ME 플랫폼에서 PIM 옵션 패키지를 이용하지 못할 수도 있습니다. 주어진 장치의 구현 여부를 확인하려면 microedition.pim.version
키로 System.getproperty()
를 호출합니다. 지원할 경우에는 메소드가 API의 버전 번호를 리턴하고 지원하지 않을 경우에는 null
을 리턴합니다.
![]() | ||||
![]() |
![]() |
![]() | ||
![]() |
주: CLDC는 구현 시 존재하지 않는 클래스를 참조하는 애플리케이션의 로드를 거부할 수 있게 해주므로, 이를 지원하지 않는 장치에서 PIM API의 지원에 대한 런타임 체크를 수행하는 것이 불가능할 수도 있습니다. 이런 경우에는 두 가지의 서로 다른 버전의 애플리케이션(이 중 하나는 PIM API를 사용하고 나머지는 사용하지 않는)의 패키지를 준비해야 합니다. |
![]() | ||
![]() | ||||
![]() |
PIM API 보안을 지원하는 보안 모델을 제공하는 것은 PIM API가 배치된 J2ME의 책임이고, 구현은 포함하는 프로파일 또는 플랫폼의 몫입니다. 이 경우, 다음과 같은 특정 요건이 적용됩니다.
SecurityException
을 throw하는 javax.microedition.pim
패키지의 메소드 안에서 적용되어야 합니다. 데이터 액세스에 대한 엔트리 포인트는, PIM 인스턴스 획득을 위한 팩토리 메소드를 제공하는 PIM
클래스를 통해 이루어집니다.
import javax.microedition.pim.*;
PIM singleton = PIM.getInstance();
이와 더불어, PIM
은 예를 들어 fromSerialFormat()
및 toSerialFormat()
과 같은 가져오기/내보내기 기능을 제공합니다.
모든 PIM 리스트는 PIMList 인터페이스와 세 가지의 서브인터페이스: ContactList, EventList, ToDoList로 표현됩니다.
PIM 리스트를 액세스하는 데는 openPIMList()
메소드를 이용합니다. 첫 번째 매개변수는 리스트 타입: PIM.CONTACT_LIST
또는 PIM.EVENT_LIST,
PIM.TODO_LIST
를 나타내고, 두 번째 매개변수는 모드: PIM.READ_ONLY
또는 PIM.READ_WRITE,
PIM.WRITE_ONLY
를 지정합니다. 세 번째의 옵션 매개변수는 원하는 PIM 리스트의 이름을 지정합니다. 이 매개변수를 생략하면 openPIMList()
는 내장 PIM 애플리케이션이 사용하는 지정 타입의 리스트인 기본값 PIM 리스트를 리턴하고, 메소드가 찾을 수 없는 리스트를 지정할 경우에는 PIMException
이 throw됩니다.
...
PIM pim = PIM.getInstance();
ToDoList list = null;
try {
list = (ToDoList) pim.openPIMList(PIM.TODO_LIST, PIM.READ_ONLY, "list-name");
// use the list
} catch (PIMException pe) {
// no such list
} catch (SecurityException se) {
// MIDlet is not allowed access to the specified list
}
...
PIM 리스트에는 PIMItem
인터페이스와 해당 서브인터페이스 Contact
, Event
, ToDo
로 표현되는 항목이 포함됩니다. 이 리스트의 items()
메소드를 이용하면 PIM 리스트에 포함된 항목의 Enumeration
을 얻을 수 있습니다.
...
Enumeration enum = list.items();
while(enum.hasMoreElements()) {
ToDo task = (ToDo) enum.nextElement();
// do something with task
}
...
다음 예제는 연락처 리스트를 여는 방법과 연락처 값을 검색하고 추가하는 방법을 보여줍니다.
...
// Open default contact list
PIM pim = PIM.getInstance();
ContactList clist;
try {
clist = (ContactList) pim.openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
} catch(Exception e) {
// security or other exception
}
// Retrieve contact values
// The countValues() method returns the number of data values currently
// set in a particular field.
Enumeration contacts = clist.items();
Contact c = (Contact) contacts.nextElement();
int phoneNumbers = c.countValues(Contact.TEL);
for(int i = 0; i < phoneNumbers; i++) {
if((c.getAttributes(Contact.TEL) != 0) & Contact.ATTR_HOME != 0) {
// Home number
String home = c.getString(Contact.TEL, i);
}
}
//Add contact values
Contact c = clist.createContact();
int attrs = Contact.ATTR_HOME;
c.addString(Contact.TEL, attrs, "416-799-1313");
// Some fields can be added without attributes
c.addString(Contact.ORG, PIMItem.ATTR_NONE, "someName Corporation");
// Add the item to the native contact database
c.commit();
...
PIM API의 공식적인 구현은 IBM 사이트의 PDA 옵션 패키지(영문)에서 참조할 수 있습니다. 이 구현의 타깃은 PocketPC 운영체제이므로 PocketPC용 J9 자바 가상 머신을 필요로 합니다.
썬 마이크로시스템즈의 J2ME Wireless Toolkit 2.2에는 JSR 75 구현이 포함되어 있는데, 필자는 이 툴킷을 사용하여 본 문서의 예제를 테스트했습니다.
다음은 PIM 구현과 관련한 주의사항입니다.
ContactList
를 가질 수 있는 경우가 그것입니다. 이 리스트들은 이름 별로 구분이 이루어지며, PIM.listPIMLists()
를 호출하여 이름을 검색하면 주어진 유형의 모든 PIM 리스트 이름의 목록을 리턴합니다.
PIMException
을 throw해야 합니다.
아울러, 모든 장치가 모든 필드를 지원하지는 않는다는 점에 유의할 필요가 있습니다. 예컨대 사용자는 원시 데이터베이스에 저장될 수 없는 필드가 포함된 vCard를 가져올 수 있습니다. 사용자는 이 문제에 대해 테스트할 수 있는데, 즉, PIM.isSupportedField() 메소드는 주어진 PIM 리스트 필드의 지원 여부를 나타냅니다. 이런 문제점에 대한 일반적인 해결책이 없을 수 있지만 적어도 정보가 손실되기 전에 문제점을 알아 차릴 수는 있는 것입니다.
J2ME Wireless Toolkit 2.2에는 연락처, 일정, 작업 리스트를 관리할 수 있게 해주는 PIM 데모가 포함되어 있습니다. 실행을 위해 다음의 절차를 따릅니다.
![]() | ||||
![]() |
![]() |
![]() | ||
![]() |
주 툴킷 에뮬레이터에서, PIM API는 여러분의 데스크톱 컴퓨터의 하드디스크에 저장된 PIM 리스트에 대한 액세스를 제공합니다(toolkit/appdb/DefaultColorPhone/pim/events/Events , toolkit/appdb/DefaultColorPhone/pim/todo/To Do ). 연락처는 vCard 포맷으로, 그리고 일정과 작업은 vCalendar 포맷으로 저장됩니다. |
![]() | ||
![]() | ||||
![]() |
자체 vCard가 있는 경우에는 이를 toolkit/appdb/DefaultColorPhone/pim/contacts/Contacts
에 파일 형태로 저장하고, 그렇지 않은 경우에는 다음의 예제 vCard를 sample.vcf
로 저장합니다.
BEGIN:VCARD
VERSION:2.1
N:Mahmoud;Qusay;H.
FN:Qusay H. Mahmoud
ORG:JavaCourses
TITLE:Developer
NOTE:Helping You With Java!
TEL;WORK;VOICE:(416) 999-1111 ext 1000
TEL;WORK;FAX:(416) 333-9999
ADR;WORK;ENCODING=QUOTED-PRINTABLE:;;1500 Java Ave.=0D=0ASuite 101;Toronto;ON;M9V1L1;Canada
LABEL;WORK;ENCODING=QUOTED-PRINTABLE:1500 Java Ave.=0D=0ASuite 101=0D=0AToronto, ON M9V1L1=0D=0ACanada
URL;WORK:http://www.javacourses.com
EMAIL;PREF;INTERNET:qmahmoud@javacourses.com
REV:20043335T124220Z
END:VCARD
그림 1에 표시된 화면에서 Contact Lists를 선택하면 그림 2와 같은 결과가 나타납니다.
여기에 나타나듯이, 데모는 선택된 연락처 항목을 열람, 삭제하거나 새로운 항목을 작성할 수 있게 해줍니다. 강조 표시된 항목을 선택하면 그림 3과 같이 vCard에서 읽혀지는 전체 세부사항을 볼 수 있습니다.
데모는 또한 그림 4에서 보는 것처럼 필드를 편집할 수 있게 해줍니다.
vCalendar 포맷의 엔트리를 내보내기할 수 있는 일정 애플리케이션을 가지고 있는 경우에는 하나의 엔트리를 toolkit/appdb/DefaultColorPhone/pim/events/Eevnts
로 복사합니다. 그렇지 않은 경우에는 다음의 예제 vCalendar 항목을 이용하여 sample.vcs
로 저장합니다.
BEGIN:VCALENDAR VERSION:1.0 BEGIN:VEVENT DTSTART:19980114T210000Z DTEND:19980114T230000Z LOCATION:My office CATEGORIES:Business DESCRIPTION;ENCODING=QUOTED-PRINTABLE:
This is a note associated with the meeting=0D=0A SUMMARY:Meeting to discuss new architecture PRIORITY:3 END:VEVENT END:VCALENDAR
이제 그림 1에 표시된 옵션 중에서 Event Lists를 선택합니다. 그림 5와 유사한 결과가 표시됩니다.
J2ME 플랫폼을 위한 옵션 패키지인 JSR 75는 Personal Information Management와 FileConnection의 두 가지 옵션 패키지를 정의하는데, PIM 패키지의 API는 J2ME 장치가 세 가지 유형의 범용 개인 데이터에 항시 액세스할 수 있게 해줍니다. 본 문서에서는 PIM API를 검토하고 그 사용법에 관한 튜토리얼을 제시해 보았으며, 또한 예제 코드를 통해서 원시 연락처, 일정, 작업 정보를 읽고 쓰는 MIDlet을 개발하는 일이 얼마나 간단한지 알 수 있었습니다. 이제 여러분은 약간의 클래스와 인터페이스만으로도 PIM API 옵션 패키지 지원 장치의 개인 정보를 처리하는 MIDlet 개발 작업에 착수할 수 있습니다.