@Test public void quick() throws Exception { Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(MockProvisioning.DEFAULT_ACCOUNT_ID); Contact contact = mbox.createContact( null, new ParsedContact( Collections.singletonMap(ContactConstants.A_email, "*****@*****.**")), Mailbox.ID_FOLDER_CONTACTS, null); MailboxTestUtil.index(mbox); mbox.createContact( null, new ParsedContact(Collections.singletonMap(ContactConstants.A_email, "*****@*****.**")), Mailbox.ID_FOLDER_CONTACTS, null); SearchParams params = new SearchParams(); params.setQueryString("test"); params.setSortBy(SortBy.NONE); params.setTypes(EnumSet.of(MailItem.Type.CONTACT)); params.setQuick(true); ZimbraQuery query = new ZimbraQuery(new OperationContext(mbox), SoapProtocol.Soap12, mbox, params); ZimbraQueryResults result = query.execute(); Assert.assertTrue(result.hasNext()); Assert.assertEquals(contact.getId(), result.getNext().getItemId()); Assert.assertFalse(result.hasNext()); Closeables.closeQuietly(result); }
@Override public void visit(GalContact contact) throws ServiceException { Map<String, Object> attrs = contact.getAttrs(); String id = contact.getId(); mappings.remove(id); attrs.put(ContactConstants.A_dn, id); ZimbraLog.gal.debug("processing gal contact " + id); DataSourceItem dsItem = DbDataSource.getReverseMapping(getDataSource(), id); addFileAsStr(attrs); if (dsItem.itemId == 0) { ZimbraLog.gal.debug("creating new contact " + id); dsItem.remoteId = id; ParsedContact pc = new ParsedContact(attrs); dsItem.itemId = mbox.createContact(octxt, pc, fid, null).getId(); DbDataSource.addMapping(getDataSource(), dsItem); } else { Contact mboxContact = mbox.getContactById(octxt, dsItem.itemId); // check for update conditions String syncDate = mboxContact.get(MODIFY_TIMESTAMP); String modifiedDate = (String) contact.getAttrs().get(MODIFY_TIMESTAMP); if (!force && syncDate != null && syncDate.equals(modifiedDate)) { ZimbraLog.gal.debug("gal contact %s has not been modified", id); return; } if (!force && allFieldsMatch(attrs, mboxContact.getAllFields())) { ZimbraLog.gal.debug("no field has changed in gal contact %s", id); return; } ZimbraLog.gal.debug("modifying contact " + id); ParsedContact pc = new ParsedContact(attrs); mbox.modifyContact(octxt, dsItem.itemId, pc); } }