示例#1
0
  /** This hook is called when the user signals the desire to start a search. */
  public boolean onSearchRequested() {
    final SearchManager searchManager =
        (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);

    // associate search with owner activity
    final ComponentName appName = getAssociatedActivity();
    if (appName != null && searchManager.getSearchableInfo(appName) != null) {
      searchManager.startSearch(null, false, appName, null, false);
      dismiss();
      return true;
    } else {
      return false;
    }
  }
示例#2
0
  @Override
  public void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    Thread.setDefaultUncaughtExceptionHandler(
        new org.geometerplus.zlibrary.ui.android.library.UncaughtExceptionHandler(this));
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);

    final SearchManager manager = (SearchManager) getSystemService(SEARCH_SERVICE);
    manager.setOnCancelListener(null);

    final TabHost host = getTabHost();
    LayoutInflater.from(this).inflate(R.layout.bookmarks, host.getTabContentView(), true);

    myBook = SerializerUtil.deserializeBook(getIntent().getStringExtra(FBReader.BOOK_KEY));
  }
  /** Run the thread, performing the requested search. */
  @Override
  public void run() {
    while (!interrupted()) {
      try {
        Thread.sleep(500);
      } catch (InterruptedException e) {
        return;
      }

      searchMan.performLoadManagement();
    }
  }
示例#4
0
  protected void setColumnTips(TableMeta meta, ServerRequest request) {

    TableServerRequest req = new TableServerRequest("LSSTCatalogDD");
    req.setPageSize(1000);
    req.setParam(CatalogRequest.CATALOG, request.getParam(ServerParams.REQUESTED_DATA_SET));

    SearchManager sm = new SearchManager();
    DataGroupPart dgp = new DataGroupPart();

    try {
      dgp = sm.getDataGroup(req);
    } catch (Exception e) {
    }

    DataGroup dg = dgp.getData();
    if (dg != null) {
      for (int i = 0; i < dg.size(); i++) {
        DataObject dObj = dg.get(i);
        String tipStr = "";

        String descStr = (String) dObj.getDataElement("description");
        if (!StringUtils.isEmpty(descStr) && !descStr.equalsIgnoreCase("null")) {
          tipStr += descStr;
        }

        String unitStr = (String) dObj.getDataElement("unit");
        if (!StringUtils.isEmpty(unitStr) && !unitStr.equalsIgnoreCase("null")) {
          if (tipStr.length() > 0) {
            tipStr += " ";
          }
          tipStr += "(" + unitStr + ")";
        }

        String nameStr = (String) dObj.getDataElement("name");
        meta.setAttribute(makeAttribKey(DESC_TAG, nameStr.toLowerCase()), tipStr);
      }
    }
  }
示例#5
0
  @Override
  public void run() {
    try {
      int size = 0;
      LogUtils.debug(
          log,
          "LOG_LDAP_REQ_SEARCH",
          currentMessageId,
          dn,
          scope,
          sizeLimit,
          timelimit,
          ldapFilter.toString(),
          returningAttributes);
      if (scope == Ldap.SCOPE_BASE_OBJECT) {
        log.debug("Check type of search... scope is BASE OBJECT");
        if ("".equals(dn)) {
          size = 1;
          log.info("send root DSE");
          responseHandler.sendRootDSE(currentMessageId);
        } else if (Ldap.BASE_CONTEXT.equals(dn)) {
          size = 1;
          // root
          // root
          log.info("send base context");
          responseHandler.sendBaseContext(currentMessageId);
        } else if (dn.startsWith("uid=") && dn.indexOf(',') > 0) {
          if (user != null) {
            // single user request
            // single user request
            String uid = dn.substring("uid=".length(), dn.indexOf(','));
            Set<LdapContact> persons = null;
            // first search in contact
            // first search in contact
            try {
              // check if this is a contact uid
              Integer.parseInt(uid);
              persons =
                  contactFind(conditions.isEqualTo("imapUid", uid), returningAttributes, sizeLimit);
            } catch (NumberFormatException e) {
              // ignore, this is not a contact uid
            }
            // then in GAL
            if (persons == null || persons.isEmpty()) {
              List<LdapContact> galContacts = null;
              try {
                log.info("do GAL search: " + uid);
                galContacts = userFactory.galFind(conditions.isEqualTo("imapUid", uid), sizeLimit);
              } catch (NotAuthorizedException ex) {
                log.error("not auth", ex);
              } catch (BadRequestException ex) {
                log.error("bad req", ex);
              }
              if (galContacts != null && galContacts.size() > 0) {
                LdapContact person = galContacts.get(0);
                if (persons == null) {
                  persons = new HashSet<LdapContact>();
                }
                persons.add(person);
              }
            }
            size = persons == null ? 0 : persons.size();
            try {
              sendPersons(
                  currentMessageId, dn.substring(dn.indexOf(',')), persons, returningAttributes);
            } catch (NotAuthorizedException ex) {
              log.error("Not authorised", ex);
            } catch (BadRequestException ex) {
              log.error("bad req", ex);
            }
          } else {
            LogUtils.debug(
                log, "LOG_LDAP_REQ_SEARCH_ANONYMOUS_ACCESS_FORBIDDEN", currentMessageId, dn);
          }
        } else {
          LogUtils.debug(log, "LOG_LDAP_REQ_SEARCH_INVALID_DN (1)", currentMessageId, dn);
        }
      } else if (Ldap.COMPUTER_CONTEXT.equals(dn) || Ldap.COMPUTER_CONTEXT_LION.equals(dn)) {
        size = 1;
        // computer context for iCal
        log.info("send computer context");
        responseHandler.sendComputerContext(currentMessageId, returningAttributes);
      } else if ((dn.equals("") // Outlook 2010 by default sends no DN
              || Ldap.BASE_CONTEXT.equalsIgnoreCase(dn)
              || Ldap.OD_USER_CONTEXT.equalsIgnoreCase(dn))
          || Ldap.MSLIVE_BASE_CONTEXT.equals(dn)
          || Ldap.OD_USER_CONTEXT_LION.equalsIgnoreCase(dn)) {
        log.info("not a weird search... check for normal conditions");
        if (user != null) {
          log.debug("we have a user...");
          Set<LdapContact> persons = new HashSet<LdapContact>();
          if (ldapFilter.isFullSearch()) {
            // append personal contacts first
            log.info("do personcal contact search");
            Set<LdapContact> contacts = contactFind(null, returningAttributes, sizeLimit);
            LogUtils.debug(log, "fullSearch: results:", contacts.size());
            for (LdapContact person : contacts) {
              persons.add(person);
              if (persons.size() == sizeLimit) {
                break;
              }
            }

            // full search
            for (char c = 'A'; c <= 'Z'; c++) {
              if (!abandon && persons.size() < sizeLimit) {
                Condition startsWith = conditions.startsWith("cn", String.valueOf(c));
                Collection<LdapContact> galContacts = null;
                try {
                  log.info("now do GAL search");
                  galContacts = userFactory.galFind(startsWith, sizeLimit);
                } catch (NotAuthorizedException ex) {
                  log.error("not auth", ex);
                } catch (BadRequestException ex) {
                  log.error("bad req", ex);
                }
                if (galContacts != null) {
                  LogUtils.debug(log, "doSearch: results:", contacts.size());
                  for (LdapContact person : galContacts) {
                    persons.add(person);
                    if (persons.size() == sizeLimit) {
                      break;
                    }
                  }
                }
              }
              if (persons.size() == sizeLimit) {
                break;
              }
            }
          } else {
            // append only personal contacts
            log.info("do personcal contact search only");
            Condition filter = ldapFilter.getContactSearchFilter();
            LogUtils.debug(log, "not full search:", filter);
            // if ldapfilter is not a full search and filter is null,
            // ignored all attribute filters => return empty results
            if (ldapFilter.isFullSearch() || filter != null) {
              Set<LdapContact> contacts = contactFind(filter, returningAttributes, sizeLimit);
              for (LdapContact person : contacts) {
                persons.add(person);
                if (persons.size() == sizeLimit) {
                  log.debug("EXceeded size limit1");
                  break;
                }
              }
              LogUtils.trace(log, "local contacts result size: ", persons.size());
              if (!abandon && persons.size() < sizeLimit) {
                List<LdapContact> galContacts = null;
                try {
                  galContacts =
                      ldapFilter.findInGAL(user, returningAttributes, sizeLimit - persons.size());
                } catch (NotAuthorizedException ex) {
                  log.error("not auth", ex);
                } catch (BadRequestException ex) {
                  log.error("bad req", ex);
                }
                if (galContacts != null) {
                  LogUtils.trace(log, "gal contacts result size: ", galContacts.size());
                  for (LdapContact person : galContacts) {
                    if (persons.size() >= sizeLimit) {
                      log.debug("EXceeded size limit2");
                      break;
                    }
                    LogUtils.trace(log, "add contact to results: ", person.getName());
                    persons.add(person);
                  }
                }
              }
            }
          }
          LogUtils.debug(
              log, "LOG_LDAP_REQ_SEARCH_FOUND_RESULTS", currentMessageId, persons.size());
          try {
            sendPersons(currentMessageId, ", " + dn, persons, returningAttributes);
          } catch (NotAuthorizedException ex) {
            log.error("not auth", ex);
          } catch (BadRequestException ex) {
            log.error("bad req", ex);
          }
          LogUtils.debug(log, "LOG_LDAP_REQ_SEARCH_END", currentMessageId);
        } else {
          LogUtils.debug(
              log, "LOG_LDAP_REQ_SEARCH_ANONYMOUS_ACCESS_FORBIDDEN", currentMessageId, dn);
        }
      } else if (dn != null
          && dn.length() > 0
          && !Ldap.OD_CONFIG_CONTEXT.equals(dn)
          && !Ldap.OD_GROUP_CONTEXT.equals(dn)) {
        LogUtils.debug(log, "LOG_LDAP_REQ_SEARCH_INVALID_DN (2)", currentMessageId, dn);
        log.debug(
            "DN is not equal to: "
                + Ldap.OD_CONFIG_CONTEXT
                + " or "
                + Ldap.OD_GROUP_CONTEXT
                + " or any other valid pattern. Is: "
                + dn);
      } else {
        log.warn(
            "Search criteria didnt match any of the expected patterns. Perhaps the user name is missing a context? DN="
                + dn
                + ", expected something like: "
                + Ldap.OD_USER_CONTEXT);
      }
      // iCal: do not send LDAP_SIZE_LIMIT_EXCEEDED on apple-computer search by cn with sizelimit 1
      if (size > 1 && size == sizeLimit) {
        LogUtils.debug(log, "LOG_LDAP_REQ_SEARCH_SIZE_LIMIT_EXCEEDED", currentMessageId);
        responseHandler.sendClient(
            currentMessageId, Ldap.LDAP_REP_RESULT, Ldap.LDAP_SIZE_LIMIT_EXCEEDED, "");
      } else {
        log.debug("No search results");
        LogUtils.debug(log, "LOG_LDAP_REQ_SEARCH_SUCCESS", currentMessageId);
        responseHandler.sendClient(currentMessageId, Ldap.LDAP_REP_RESULT, Ldap.LDAP_SUCCESS, "");
      }
    } catch (SocketException e) {
      log.warn("closed connection", e);
    } catch (IOException e) {
      log.error("", e);
      try {
        responseHandler.sendErr(currentMessageId, Ldap.LDAP_REP_RESULT, e);
      } catch (IOException e2) {
        LogUtils.debug(log, "LOG_EXCEPTION_SENDING_ERROR_TO_CLIENT", e2);
      }
    } finally {
      log.debug("search complete");
      searchManager.searchComplete(uuid, currentMessageId);
    }
  }
示例#6
0
 /** {@inheritDoc} */
 public Query getQuery(Node node) throws InvalidQueryException, RepositoryException {
   sanityCheck();
   return searchMgr.createQuery(session, itemMgr, node);
 }
示例#7
0
 /** {@inheritDoc} */
 public Query createQuery(String statement, String language)
     throws InvalidQueryException, RepositoryException {
   sanityCheck();
   return searchMgr.createQuery(session, itemMgr, statement, language);
 }
示例#8
0
 /** @return the query handler implementation. */
 public QueryHandler getQueryHandler() {
   return searchMgr.getHandler();
 }