/* Copyright (c) 2010 Zhihua (Dennis) Jiang * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.gwtmobile.phonegap.kitchensink.client; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JsArray; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; import com.gwtmobile.phonegap.client.Contacts; import com.gwtmobile.phonegap.client.Contacts.Callback; import com.gwtmobile.phonegap.client.Contacts.Contact; import com.gwtmobile.phonegap.client.Contacts.ContactError; import com.gwtmobile.phonegap.client.Contacts.ContactFields; import com.gwtmobile.phonegap.client.Contacts.ContactFindCallback; import com.gwtmobile.phonegap.client.Contacts.ContactFindOptions; import com.gwtmobile.phonegap.client.Contacts.ContactName; import com.gwtmobile.ui.client.event.SelectionChangedEvent; import com.gwtmobile.ui.client.page.Page; public class ContactsUi extends Page { @UiField HTML text; String watchId; private static ContactsUiUiBinder uiBinder = GWT .create(ContactsUiUiBinder.class); interface ContactsUiUiBinder extends UiBinder<Widget, ContactsUi> { } public ContactsUi() { initWidget(uiBinder.createAndBindUi(this)); } @UiHandler("list") void onListSelectionChanged(SelectionChangedEvent e) { switch (e.getSelection()) { case 0: create(); break; case 1: find(); break; case 2: cloneContact(); break; case 3: delete(); break; } } public void create() { final Contact contact = Contacts.newInstance(); contact.setDisplayName("Plumber"); contact.setNickname("Plumber"); ContactName name = ContactName.newInstance(); name.setGivenName("Jane"); name.setFamilyName("Doe"); contact.setDisplayName(name.getGivenName() + " " + name.getFamilyName()); contact.setName(name); contact.save(new Callback() { @Override public void onSuccess() { text.setHTML("Contact " + contact.getName().getGivenName() + " " + contact.getName().getFamilyName() + " created."); } @Override public void onError(ContactError error) { text.setHTML("Contact creation failed.<br/>" + error.getCode()); } }); } public void find() { try { Contacts.find(new ContactFields("nickname", "name"), new ContactFindCallback() { @Override public void onSuccess(JsArray<Contact> contacts) { text.setHTML("Find contact " + contacts.length()); for (int i = 0; i < contacts.length(); i++) { text.setHTML(text.getHTML() + "<br/> " + contacts.get(i).getNickname() + " (" + contacts.get(i).getName().getGivenName() + " " + contacts.get(i).getName().getFamilyName() + ")"); } } @Override public void onError(ContactError error) { text.setHTML("Contact find failed.<br/>" + error.getCode()); } }, ContactFindOptions.newInstance().filter("Plumber")); } catch (Exception exception) { text.setHTML(exception.getCause().toString()); } } private void delete() { Contacts.find(new ContactFields("nickname", "name"), new ContactFindCallback() { @Override public void onSuccess(JsArray<Contact> contacts) { if (contacts.length() > 0) { for (int i = 0; i < contacts.length(); i++) { final Contact contact = contacts.get(i); contact.remove(new Callback() { @Override public void onSuccess() { text.setHTML(contact.getNickname() + " (" + contact.getName().getGivenName() + " " + contact.getName().getFamilyName() + ") removed.<br/>" + text.getHTML()); } @Override public void onError(ContactError error) { text.setHTML(text.getHTML() + "<br/> Failed to remove contact. " + error.getCode()); } }); } } else { text.setHTML("Contact to delete not found.<br/>"); } } @Override public void onError(ContactError error) { text.setHTML("Failed to find contact to delete.<br/>" + error.getCode()); } }, ContactFindOptions.newInstance().filter("Plumber")); } private void cloneContact() { Contacts.find(new ContactFields("nickname", "name"), new ContactFindCallback() { @Override public void onSuccess(JsArray<Contact> contacts) { if (contacts.length() > 0) { final Contact contact = contacts.get(0); final Contact clone = contact.clone(); clone.getName().setGivenName(clone.getName().getGivenName() + "-Clone"); clone.getName().setFamilyName(clone.getName().getFamilyName() + "-Clone"); clone.setNickname(clone.getNickname() + "-Clone"); clone.setDisplayName(clone.getDisplayName() + "-Clone"); clone.save(new Callback() { @Override public void onSuccess() { text.setHTML(clone.getNickname() + " (" + clone.getName().getGivenName() + " " + clone.getName().getFamilyName() + ") saved.<br/>"); } @Override public void onError(ContactError error) { text.setHTML(text.getHTML() + "<br/> Failed to save cloned contact. " + error.getCode()); } }); } else { text.setHTML(text.getHTML() + "<br/> Contact to clone not found.<br/>"); } } @Override public void onError(ContactError error) { text.setHTML("Failed to find contact to clone.<br/>" + error.getCode()); } }, ContactFindOptions.newInstance().filter("Plumber")); } }