2017-10-05 2 views
0

J'ai mis en place une classe java que je veux utiliser pour un xe: beanNamePicker. D'une manière ou d'une autre, je ne suis pas capable d'ajouter un SimplePickerResult créé dans le jeu de résultats.xe: beanNamePicker, ne peux pas obtenir mes valeurs d'une vue de notes dans l'ensemble de résultats

package se.myorg.myproject.app; 

import java.io.IOException; 
import java.util.List; 
import java.util.Properties; 
import java.util.TreeSet; 

import se.sebank.namis.utils.Utils; 

import lotus.domino.Database; 
import lotus.domino.Document; 
import lotus.domino.DocumentCollection; 
import lotus.domino.NotesException; 
import lotus.domino.View; 

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 DirectoryNamePicker extends ValueBindingObjectImpl implements INamePickerData { 

    private Utils utils; 

    Properties props; 

    public DirectoryNamePicker(){ 
     //constructor 
     utils = new Utils(); 
     utils.printToConsole(this.getClass().getSimpleName().toString() + " - DirectoryNamePicker() // constructor"); 
     try { 
      props = utils.getDataSourceProperties(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public String[] getSourceLabels() { 
    // TODO Auto-generated method stub 
    return null; 
    } 

    public boolean hasCapability (final int arg0) { 
    // TODO Auto-generated method stub 
    return false; 
    } 

    public List<IPickerEntry> loadEntries (final Object[] arg0, final String[] arg1) { 
    // TODO Auto-generated method stub 
    return null; 
    } 

    @SuppressWarnings("unchecked") 
public IPickerResult readEntries (final IPickerOptions options) { 
    String startKey = options.getStartKey(); 
    int count = options.getCount(); 
    TreeSet<IPickerEntry> entries = new TreeSet<IPickerEntry>(); 
    if (startKey != null) { 
     // User is performing a search 
     try { 
      entries = this.dirLookup(startKey, count); 
     } catch (NotesException e) { 
      System.err.println("Exception trying to perform directory lookup: " + e.getMessage()); 
      e.printStackTrace(); 
     } 
     } 
    return new SimplePickerResult((List<IPickerEntry>) entries, -1); 
    } 

    public TreeSet<IPickerEntry> dirLookup(final String search, final int limit) throws NotesException { 
    TreeSet<IPickerEntry> result = new TreeSet<IPickerEntry>(); 

    String server = props.getProperty("server_notesname"); 
    String filepath = props.getProperty("db_project_data"); 
    Database db = utils.getSession().getDatabase(server, filepath); 

    View vw = db.getView("vw_all_todo_namespicker"); 
    vw.setAutoUpdate(false); 

    DocumentCollection dc = vw.getAllDocumentsByKey(search, false); 
    int count = 0; 
    Document tmpdoc; 
    Document doc = dc.getFirstDocument(); 

    while (doc != null && count < limit) { 
     String person = doc.getItemValueString("app_ProjMgrName"); 
     IPickerEntry entry = new SimplePickerResult.Entry(person, person); 
     result.add(entry); 
     // result.add(entry does not seem to work 
     tmpdoc = dc.getNextDocument(); 
     doc.recycle(); 
     doc = tmpdoc; 
     count = count +1; 
     }  
    vw.setAutoUpdate(true); 
    return result; 
    } 

} 

Y at-il quelqu'un qui peut me dire ce que je fais mal? J'ai choisi un treeet au lieu d'un arraylist. C'est parce que je vais à une vue avec beaucoup d'entrées multiples, donc je ne veux pas de doublons et le faire trier par valeurs.

+0

Cela fonctionne-t-il si vous effectuez une recherche dans la boîte de dialogue du sélecteur de nom? Votre code renvoie uniquement un ensemble de résultats rempli lors de la recherche. –

+0

oui il fait une recherche. si j'imprime le nombre de documents dans ma collection de documents, je vois qu'il a trouvé des documents correspondants –

Répondre

2

Vous coulée TreeSet à (Liste) à la ligne:

return new SimplePickerResult((List<IPickerEntry>) entries, -1); 

parce que le SimplePickerResult a besoin d'une liste (il n'acceptera une collection), mais TreeSet ne met pas en œuvre la liste, de sorte que cast va échouer. Vous devrez probablement le redéfinir sur ArrayList. Pour trier, essayez d'utiliser java.util.Collections.sort (Liste de listes, Comparateur c) avec un comparateur personnalisé qui compare la valeur entry.getLabel(), car SimplePickerResult.Entry n'a pas de méthode de comparaison intégrée.