use of com.zimbra.cs.index.ProxiedHit in project zm-mailbox by Zimbra.
the class ContactAutoComplete method queryFolders.
private void queryFolders(String str, String generatedQuery, Map<ItemId, Mountpoint> mountpoints, int limit, AutoCompleteResult result) throws ServiceException {
Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(getRequestedAcctId());
SearchParams params = new SearchParams();
params.setQueryString(generatedQuery);
params.setDefaultField("contact:");
params.setTypes(CONTACT_TYPES);
params.setSortBy(SortBy.NONE);
params.setLimit(limit + 1);
params.setPrefetch(true);
params.setFetchMode(SearchParams.Fetch.NORMAL);
ZimbraLog.gal.debug("querying contact folders: %s", params.getQueryString());
try (ZimbraQueryResults qres = mbox.index.search(SoapProtocol.Soap12, octxt, params)) {
while (qres.hasNext()) {
ZimbraHit hit = qres.getNext();
Map<String, String> fields = null;
ItemId id = null;
int fid = 0;
if (hit instanceof ContactHit) {
Contact c = ((ContactHit) hit).getContact();
ZimbraLog.gal.debug("hit: %d", c.getId());
fields = c.getFields();
id = new ItemId(c);
fid = c.getFolderId();
if (returnFullContactData) {
List<Attachment> contactAttachments = c.getAttachments();
if (contactAttachments != null && contactAttachments.size() != 0) {
fields.put("image", c.getId() + "_" + contactAttachments.get(0).getName());
}
}
} else if (hit instanceof ProxiedHit) {
fields = new HashMap<String, String>();
Element top = ((ProxiedHit) hit).getElement();
id = new ItemId(top.getAttribute(MailConstants.A_ID), (String) null);
ZimbraLog.gal.debug("hit: %s", id);
ItemId fiid = new ItemId(top.getAttribute(MailConstants.A_FOLDER), (String) null);
Mountpoint mp = mountpoints.get(fiid);
if (mp != null) {
// if the hit came from a descendant folder of
// the mountpoint, we don't have a peer folder ID.
fid = mp.getId();
} else {
fid = FOLDER_ID_MOUNTPOINT_SUBFOLDER;
}
for (Element elt : top.listElements(MailConstants.E_ATTRIBUTE)) {
try {
String name = elt.getAttribute(MailConstants.A_ATTRIBUTE_NAME);
fields.put(name, elt.getText());
} catch (ServiceException se) {
ZimbraLog.gal.warn("error handling proxied query result " + hit);
}
}
if (returnFullContactData) {
if (fields.containsKey("image")) {
fields.put("image", id.getAccountId() + "_" + id.getId() + "_image");
}
}
} else {
continue;
}
addMatchedContacts(str, fields, fid, id, result);
if (!result.canBeCached) {
return;
}
}
} catch (IOException e) {
}
}
use of com.zimbra.cs.index.ProxiedHit in project zm-mailbox by Zimbra.
the class SearchResponse method add.
/* We need to pass in a boolean signifying whether to expand the message or not (bug 75990)
*/
void add(ZimbraHit hit, boolean expandMsg) throws ServiceException {
Element el = null;
if (params.getFetchMode() == SearchParams.Fetch.IDS) {
if (hit instanceof ConversationHit) {
// need to expand the contained messages
el = element.addElement(MailConstants.E_HIT);
el.addAttribute(MailConstants.A_ID, ifmt.formatItemId(hit.getParsedItemID()));
} else {
el = element.addElement(MailConstants.E_HIT);
el.addAttribute(MailConstants.A_ID, ifmt.formatItemId(hit.getParsedItemID()));
}
} else if (hit instanceof ProxiedHit) {
element.addElement(((ProxiedHit) hit).getElement().detach());
size++;
return;
} else {
if (hit instanceof ConversationHit) {
el = add((ConversationHit) hit);
} else if (hit instanceof MessageHit) {
el = add((MessageHit) hit, expandMsg);
} else if (hit instanceof MessagePartHit) {
el = add((MessagePartHit) hit);
} else if (hit instanceof ContactHit) {
el = add((ContactHit) hit);
} else if (hit instanceof NoteHit) {
el = add((NoteHit) hit);
} else if (hit instanceof CalendarItemHit) {
// el could be null
el = add((CalendarItemHit) hit);
} else if (hit instanceof DocumentHit) {
el = add((DocumentHit) hit);
} else {
LOG.error("Got an unknown hit type putting search hits: " + hit);
return;
}
}
if (el != null) {
size++;
el.addAttribute(MailConstants.A_SORT_FIELD, hit.getSortField(sortOrder).toString());
if (includeMailbox) {
el.addAttribute(MailConstants.A_ID, new ItemId(hit.getAcctIdStr(), hit.getItemId()).toString());
}
}
}
Aggregations