Definir uma classe EntityBasedSearchable para seus objetos SearchableEntity

Sua implementação da interface EntityBasedSearchable gerencia a relação entre o serviço de pesquisa unificada e as entidades pesquisáveis que você cria. Cada objeto EntityBasedSearchable gerencia um grupo de objetos SearchableEntity que têm as mesmas propriedades pesquisáveis.
  1. Importe as classes e interfaces necessárias.
    import net.rim.device.api.unifiedsearch.SearchField;
    import net.rim.device.api.unifiedsearch.searchables.EntityBasedSearchable;
    import net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants;
    import net.rim.device.api.unifiedsearch.searchables.Searchable;
  2. Crie variáveis de instância para armazenar informações relevantes para o EntityBasedSearchable.
    private MySearchableEntity[] _myEntities; // You will need this in steps 8 and 11
    private long _registrationID;
    private SearchField[] _searchFields;
    private Image _icon;
    private final Object _monitor = new Object();
    private boolean _wait = false;
  3. No construtor, crie uma matriz de objetos SearchField. Cada SearchField armazena o nome de uma propriedade pesquisável de seus dados. No exemplo de código a seguir, os objetos de dados do aplicativo que são gerenciados por essa classe têm três propriedades pesquisáveis. Por exemplo, se os dados do seu aplicativo tiverem modelado livros, esses campos talvez incluam o título, o editor e o número de páginas.
    class MyEBS implements EntityBasedSearchable
    {
        _searchFields = new SearchField[3];
  4. Atribua um nome significativo a cada SearchField.
        _searchFields[0] = new SearchField("Title");
        _searchFields[1] = new SearchField("Publisher");
        _searchFields[2] = new SearchField("Number of pages");
    }
  5. Crie um ícone para ser exibido nos resultados de pesquisa que incluem entidades pesquisáveis gerenciadas por esse EntityBasedSearchable. Para obter mais informações sobre a criação de ícones, consulte "Personalizar a aparência dos dados nos resultados de pesquisa".
  6. Implemente getType(). Retorne o tipo de conteúdo que melhor corresponde aos dados do seu aplicativo. Para obter uma lista de tipos válidos de conteúdo, consulte a interface net.rim.device.api.unifiedsearch.searchables.SearchableContentTypeConstants na referência de API.
    public long getType() {
        return SearchableContentTypeConstants.CONTENT_TYPE_MEMO;
  7. Escolha os iniciadores de pesquisa que devem receber os resultados de pesquisa de seu aplicativo. Para obter mais informações sobre como expor seus dados para pesquisas, consulte a classe net.rim.device.api.unifiedsearch.entity.ExposureLevel na referência de API.
    public int getPrivacyLevel() {
        return ExposureLevel.LEVEL_PUBLIC;
    }
  8. Implemente load(). Se o aparelho BlackBerry estiver ocupado ou o nível de bateria estiver baixo, talvez seja preciso pausar a operação desse método e retomá-lo quando solicitado.
    1. Para seu EntityBasedSearchable, determine quantos objetos de dados existem atualmente em seu aplicativo.
      public void load (NotificationListener observer, int loadType) {
          Vector myObjects = MyObjectManager.getDataObjects();
          if (myObjects != null) {
              int size = myObjects.size()
              if(size < 1) {
                  _myEntities = new MySearchableEntity[0]; 
              } else {
                  _myEntities = new MySearchableEntity[size];
              }
          } else {
              // handle the condition where you have no data objects
          }
    2. Use um loop while para preencher uma matriz de entidades pesquisáveis.
          Enumeration objects = myObjects.elements();
          int count = 0;
          while (objects.hasMoreElements()) {
    3. Verifique se o serviço de pesquisa unificada enviou um comando pause. Em caso positivo, pause a operação que preenche sua matriz de entidades pesquisáveis e notifique o serviço.
              if (_wait){ 
                  try {
                      synchronized(_monitor) { 
                      observer.partiallyCompleted(this, null, NotificationListener.TYPE_SEARCHABLE);
                      _monitor.wait();
                      }
                  } catch (InterruptedException e){
                      observer.error(e);
                      return;
                  }
              }
    4. Quando seu aplicativo tiver novamente controle do thread, continue a preencher sua matriz de entidades pesquisáveis.
              MyObject dataObject = (MyObject) objects.nextElement();
              _myEntities[count++] = new MySearchableEntity(dataObject, this);
          }
    5. Notifique ao serviço de pesquisa unificada que você acabou de carregar os dados.
          observer.completed(this, NotificationListener.TYPE_SEARCHABLE);
      }
    O serviço de pesquisa unificada invoca getSearchableEntities() para recuperar a matriz que você preencheu.
  9. Em pause(), altere o valor da variável _wait para true. O serviço de pesquisa unificada chama esse método quando deseja que seu aplicativo pare de carregar dados.
    public void pause() {
        _wait = true;
    }
  10. Em resume(), altere o valor da variável _wait para false. Além disso, notifique ao método load() que é possível continuar a execução. O serviço de pesquisa unificada invoca resume() quando deseja que seu aplicativo volte a carregar dados.
    public void resume() {
        _wait = false;
        synchronized(_monitor) {
            _monitor.notifyAll();
        }
    }
  11. Em getSearchableEntities(), retorne a matriz _myEntities que você criou na etapa 8.
    public SearchableEntity[] getSearchableEntities() {
        return _myEntities;
    }

Estas informações foram úteis? Gostaríamos de receber seus comentários.