2017-10-05 13 views
0

xe:beanNamePickerに使用するJavaクラスを設定しました。どうやら、私は、作成されたSimplePickerResultを結果セットに追加することができません。xe:beanNamePicker、ノートビューから私の値を結果セットに取得できない

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; 
    } 

} 

私が間違っていることを教えてくれる人がいますか?私はarraylistの代わりにtreesetを選んだ。これは、複数のエントリがたくさんあるビューに移動するので、重複は不要で、値でソートする必要があるからです。

+0

名前ピッカーダイアログで検索すると機能しますか?あなたのコードは、検索時に塗りつぶした結果セットのみを返します。 –

+0

はいそれは検索を行います。私が文書コレクションの文書の量を印刷すると、一致する文書が見つかりました –

答えて

2

あなたはラインで(一覧)にTreeSetのをキャストしている:そのキャストので、SimplePickerResultがリストを必要とするため(それがコレクションを受け付けません)

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

が、TreeSetのはリストを実装していません。失敗するでしょう。 おそらくそれをArrayListに戻す必要があります。 ソートするには、SimplePickerResult.Entryに組み込みの比較メソッドがないため、entry.getLabel()値を比較するカスタムコンパレータでjava.util.Collections.sort(リストリスト、コンパレータc)を使用してみます。

関連する問題