// Demo XPages - Name : xspSelectName <?xml version="1.0" encoding="UTF-8"?> <xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex"> <xp:panel style="padding:100px;"> <xp:panel style="padding:10px; height:50px; width:100%; border:1px solid #000"> <xe:namePicker id="namePicker1" pickerText="Select User" for="djName"> <xe:this.dataProvider> <xe:beanNamePicker dataBean="org.openntf.ferhat.DominoDirectoryNamePicker" loaded="true"> </xe:beanNamePicker> </xe:this.dataProvider> </xe:namePicker> <xp:br></xp:br> <xp:br></xp:br> <xe:djextNameTextBox id="djName" multipleSeparator="," multipleTrim="true"> </xe:djextNameTextBox> </xp:panel> </xp:panel> </xp:view> // Class // Package : org.openntf.ferhat // Name : DominoDirectoryNamePicker /** * DominoDirectoryNamePicker V2.0 (Updated at May 31, 2012 12:09 AM) * * Author : Ferhat BULUT * Email : ferhat@bestcoder.net * Blog : http://www.bestcoder.net * * This Java class generates custom data for ExtLib NamePicker after search. * */ package org.openntf.ferhat; import java.util.ArrayList; import java.util.List; import javax.faces.context.FacesContext; import lotus.domino.Database; import lotus.domino.Document; import lotus.domino.DocumentCollection; import lotus.domino.NotesException; import com.ibm.commons.util.QuickSort; import com.ibm.commons.util.StringUtil; import com.ibm.xsp.FacesExceptionEx; import com.ibm.xsp.complex.ValueBindingObjectImpl; import com.ibm.xsp.extlib.component.picker.data.INamePickerData; import com.ibm.xsp.extlib.component.picker.data.IPickerEntry; import com.ibm.xsp.extlib.component.picker.data.IPickerOptions; import com.ibm.xsp.extlib.component.picker.data.IPickerResult; import com.ibm.xsp.extlib.component.picker.data.SimplePickerResult; public class DominoDirectoryNamePicker extends ValueBindingObjectImpl implements INamePickerData { static String oldStartKey = ""; static String[] entryList = null; public DominoDirectoryNamePicker() { // } public IPickerResult readEntries(IPickerOptions options) { List<IPickerEntry> entries = new ArrayList<IPickerEntry>(); String startKey = options.getStartKey(); int i = 0; System.out.println("DominoDirectoryNamePicker > readEntries >>> startKey:" + startKey); if (startKey != null && !startKey.equals(oldStartKey)) { try { FacesContext context = FacesContext.getCurrentInstance(); Database currentDatabase = com.ibm.xsp.model.domino.DominoUtils.getCurrentDatabase(context); if (currentDatabase.isFTIndexed()) { String ftSearchKey = "[Form] = \"Contact\" AND ([FirstName] CONTAINS \"" + startKey + "\" OR [LastName] CONTAINS \"" + startKey + "\")"; DocumentCollection docCollection = currentDatabase.FTSearch(ftSearchKey, 50, Database.FT_SCORES, Database.FT_DATABASE | Database.FT_FUZZY); if (docCollection.getCount() > 0) { oldStartKey = startKey; entryList = new String[docCollection.getCount()]; i = 0; Document contactDoc = docCollection.getFirstDocument(); while (contactDoc != null) { String label = contactDoc.getItemValueString("FirstName") + " " + contactDoc.getItemValueString("LastName"); String value = contactDoc.getItemValueString("FirstName") + " " + contactDoc.getItemValueString("LastName") + " (" + contactDoc.getItemValueString("EMail") + ")"; entryList[i] = label + "~" + value; Document tmpDoc = docCollection.getNextDocument(contactDoc); contactDoc.recycle(); contactDoc = tmpDoc; i++; } (new QuickSort.StringArray(entryList) { @Override public int compare(String arg0, String arg1) { return StringUtil.compareToIgnoreCase(arg0, arg1); } }).sort(); for(i = 0; i < entryList.length; i++) { String[] entryValues = entryList[i].split("~"); entries.add(new SimplePickerResult.Entry(entryValues[1], entryValues[0])); } } docCollection.recycle(); } } catch (NotesException e) { throw new FacesExceptionEx("NotesException - " + e.getMessage()); } } else { if (entryList != null) { entries.clear(); for(i = 0; i < entryList.length; i++) { String[] entryValues = entryList[i].split("~"); IPickerEntry pickerEntry = new SimplePickerResult.Entry(entryValues[1], entryValues[0]); entries.add(pickerEntry); } } } return new SimplePickerResult(entries,-1); } public String[] getSourceLabels() { return null; } public boolean hasCapability(int capability) { return false; } public List<IPickerEntry> loadEntries(Object[] ids, String[] attributeNames) { return null; } }