2013-11-29 3 views
0

Ну, я хотел бы предоставить результат QuickSearch внутри приложения и, конечно же, через поиск. Поиск работает хорошо, но найденный результат не отображается через глобальный поиск.Netbeans QuickSearch Результат поиска

Может кто-то помочь в решении этой проблемы?

Вот й код для QuickSearch:

public class QSERSCompany implements SearchProvider { 

@Override 
public void evaluate(SearchRequest request, SearchResponse response) { 
    try { 
     for (Company k : queries.ERSQuery.allCompanies()) { 

      if (k.getCompanyName().toLowerCase().contains(request.getText().toLowerCase())) { 
       if (!response.addResult(new SearchResult(k), k.getCompanyName())) { 
        return; 
       } 
      } 
     } 
    } catch (NullPointerException npe) { 
    } 
} 

private static class SearchResult implements Runnable, Lookup.Provider { 

    private final Company company; 
    private final InstanceContent ic = new InstanceContent(); 
    private final Lookup lookup = new AbstractLookup(ic); 

    public SearchResult(Company c) { 
     this.company= c; 
    } 

    @Override 
    public void run() { 
     ic.add(company); 

     try { 
      StatusDisplayer.getDefault().setStatusText(
        company.getCompanyName() 
        + ", " + company.getAddress() 
        + ", " + company.getCity()); 
     } catch (NullPointerException npe) { 
     } 
    } 

    @Override 
    public Lookup getLookup() { 
     return lookup; 
    } 
} 

}

И это partof код, который прослушивает объект компании:

public final class ManagementPodatakaTopComponent extends TopComponent {  
    private Lookup.Result<Company> companyLookup = null; 
    ... 
    private Company selectedCompany; 

    ... 

@Override 
public void componentOpened() { 
    companyLookup = Utilities.actionsGlobalContext().lookupResult(Company.class); 
    companyLookup .addLookupListener(new LookupListener() { 

     @Override 
     public void resultChanged(LookupEvent le) { 
      Lookup.Result k = (Lookup.Result) le.getSource(); 
      Collection<Company> cs = k.allInstances(); 

      for (Company k1 : cs) { 
       selectedCompany = k1; 
      } 

      setCompanyTextFields(selectedCompany); 

      jTP_DataManagement.setVisible(true); 
      jPanel_Entiteti.setVisible(true); 

     } 
    }); 
} 

ответ

0

A SEARCHRESULT, который обеспечивает поиск ? Никогда не видел этого в дикой природе.

Пожалуйста, обратитесь [email protected], чтобы получить лучшую обратную связь (вероятно, от одного из разработчиков NB)

+0

Здравствуйте! Ну, идея довольно проста с точки зрения NB: создать слабо связанную архитектуру. Итак, когда я что-то ищу, я хочу опубликовать его через поиск, поэтому компоненты, которые прослушивают, получат эти данные из поиска. Это все, что мне нужно, и не знаю, как реализовать. – dobrivoje

0

я, наконец, удалось каким-то образом, чтобы получить то, что я хочу:

Во-первых, определить интерфейс:

public interface ICodes { 
    public Code getCode(); 
} 

Затем, мы реализуем быстрый поиск:

@ServiceProvider(service = ICodes.class) 
public class ClientServicesQS implements SearchProvider, ICodes { 

     private static Code code = null; 

     @Override 
     public void evaluate(SearchRequest request, SearchResponse response) { 

      try { 
       for (Code c : INFSYS.queries.INFSistemQuery.ByersByName(request.getText())) { 
        if (!response.addResult(new SearchResult(c), 
          c.getName() + " ,Code: " + c.getByerCode() 
          + (c.getAddress() != null ? ", " + c.getAddress() : ""))) { 
         return; 
        } 
       } 

      } catch (NullPointerException npe) { 
       StatusDisplayer.getDefault().setStatusText("Error." + npe.getMessage()); 
      } 
     } 

     @Override 
     public Code getCode() { 
      return ClientServicesQS.sifra; 
     } 

     private static class SearchResult implements Runnable { 

      private final Code code; 

      public SearchResult(Code code) { 
       this.code= code; 
      } 

      @Override 
      public void run() { 
       try { 
        ClientServicesQS.code= this.code; 
        OpenTopComponent("ClientServicesTopComponent"); 
       } catch (NullPointerException e) { 
        Display.messageBaloon("Error.", e.toString() + ", " + e.getMessage(), Display.TYPE_MESSAGE.ERROR); 
       } 
      } 
     } 
    } 

Наконец, мы реализуем поиск в другом модуле через платформу. Потому что я хочу вызвать поиск, когда componentOpen, ае componentActivated вызывается, это полезно сначала определить:

private void QSCodeSearch() { 
      try { 
       ICode ic= Lookup.getDefault().lookup(ICode.class); 

       if ((code = ic.getCode()) != null) { 
        . 
        . 
        . 
        // setup UI components with data from lookup 
        . 
        . 
        . 
       } 
      } catch (Exception e) { 
     } 
    } 

И когда TopComponent активирована, мы называем QSCodeSearch() в:

@Override 
public void componentOpened() { 
    ... 
    QSCodeSearch() 
    ... 
} 

... 

@Override 
public void requestActive() { 
    ... 
    QSCodeSearch() 
    ... 
} 
Смежные вопросы