public boolean hasCapability(int capability) {
   if (capability == CAPABILITY_MULTIPLESOURCES) {
     return true;
   }
   if (dataProviders != null && !dataProviders.isEmpty()) {
     int count = dataProviders.size();
     for (int i = 0; i < count; i++) {
       INamePickerData e = dataProviders.get(i);
       // If one provider miss the capability, then it is not available...
       if (!e.hasCapability(capability)) {
         return false;
       }
     }
     // Else, we have it
     return true;
   }
   return false;
 }
  public String[] getSourceLabels() {
    if (dataProviders != null && !dataProviders.isEmpty()) {
      ArrayList<String> list = new ArrayList<String>();

      int count = dataProviders.size();
      for (int i = 0; i < count; i++) {
        INamePickerData data = dataProviders.get(i);
        String[] labels = data.getSourceLabels();
        if (labels != null) {
          for (int j = 0; j < labels.length; j++) {
            list.add(labels[j]);
          }
        }
      }

      return list.toArray(new String[list.size()]);
    }
    return null;
  }
 public IPickerResult readEntries(IPickerOptions options) {
   if (dataProviders != null && !dataProviders.isEmpty()) {
     //			// Aggregated results?
     //			int count = dataProviders.size();
     //			for(int i=0; i<count; i++) {
     //				IPickerResult r = dataProviders.get(i).readEntries(options);
     //				NamePickerAggregatorEntry e = dataProviders.get(i);
     //			}
     int source = options.getSource();
     int off = 0;
     for (int i = 0; i < dataProviders.size(); i++) {
       INamePickerData pd = dataProviders.get(i);
       int srcCount = pd.getSourceLabels().length;
       int relIdx = source - off;
       if (relIdx < srcCount) {
         IPickerOptions newOptions = new AggregatedPickerOptions(options, relIdx);
         return pd.readEntries(newOptions);
       }
       off += srcCount;
     }
   }
   return null;
 }