protected List<ModelWrapper<?>> search() throws Exception {
    List<ModelWrapper<?>> wrappers = new ArrayList<ModelWrapper<?>>();
    if (radioWaybill.getSelection()) {
      wrappers.addAll(
          OriginInfoWrapper.getShipmentsByWaybill(
              SessionManager.getAppService(), treeText.getText().trim()));
      wrappers.addAll(
          DispatchWrapper.getDispatchesByWaybill(
              SessionManager.getAppService(), treeText.getText().trim()));
      return wrappers;

    } else if (radioDateReceived.getSelection()) {
      Date date = dateWidget.getDate();
      if (date != null) {
        wrappers.addAll(
            OriginInfoWrapper.getShipmentsByDateReceived(
                SessionManager.getAppService(),
                date,
                SessionManager.getUser().getCurrentWorkingCenter()));
        wrappers.addAll(
            DispatchWrapper.getDispatchesByDateReceived(
                SessionManager.getAppService(),
                date,
                SessionManager.getUser().getCurrentWorkingCenter()));
        return wrappers;
      }
    } else {
      Date date = dateWidget.getDate();
      if (date != null) {
        wrappers.addAll(
            OriginInfoWrapper.getShipmentsByDateSent(
                SessionManager.getAppService(),
                date,
                SessionManager.getUser().getCurrentWorkingCenter()));
        wrappers.addAll(
            DispatchWrapper.getDispatchesByDateSent(
                SessionManager.getAppService(),
                date,
                SessionManager.getUser().getCurrentWorkingCenter()));
        return wrappers;
      }
    }
    return null;
  }
 @Override
 protected void internalSearch() {
   try {
     List<? extends ModelWrapper<?>> searchedObject = search();
     if (searchedObject == null || searchedObject.size() == 0) {
       String msg;
       if (radioWaybill.getSelection()) {
         msg =
             NLS.bind(Messages.SpecimenTransitView_notfound_waybill_error_msg, treeText.getText());
       } else {
         msg =
             NLS.bind(
                 Messages.SpecimenTransitView_notfound_date_error_msg,
                 DateFormatter.formatAsDate(dateWidget.getDate()));
       }
       BgcPlugin.openMessage(Messages.SpecimenTransitView_notfound_error_title, msg);
     } else {
       showSearchedObjectsInTree(searchedObject, true);
       getTreeViewer().expandToLevel(searchedNode, 2);
     }
   } catch (Exception e) {
     BgcPlugin.openError(Messages.SpecimenTransitView_search_error_msg, e);
   }
 }
  @Override
  protected void createTreeTextOptions(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout(3, false);
    layout.horizontalSpacing = 0;
    layout.marginHeight = 0;
    layout.verticalSpacing = 0;
    composite.setLayout(layout);

    radioWaybill = new Button(composite, SWT.RADIO);
    radioWaybill.setText(Messages.SpecimenTransitView_waybill_label);
    radioWaybill.setSelection(true);
    radioWaybill.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            if (radioWaybill.getSelection()) {
              showTextOnly(true);
            }
          }
        });

    radioDateReceived = new Button(composite, SWT.RADIO);
    radioDateReceived.setText(Messages.SpecimenTransitView_received_label);
    radioDateReceived.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            if (radioDateReceived.getSelection()) {
              showTextOnly(false);
            }
          }
        });

    radioDateSent = new Button(composite, SWT.RADIO);
    radioDateSent.setText(Messages.SpecimenTransitView_packed_label);
    radioDateSent.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            if (radioDateSent.getSelection()) {
              showTextOnly(false);
            }
          }
        });

    dateComposite = new Composite(parent, SWT.NONE);
    layout = new GridLayout(2, false);
    layout.horizontalSpacing = 0;
    layout.marginHeight = 0;
    layout.verticalSpacing = 0;
    dateComposite.setLayout(layout);
    GridData gd = new GridData();
    gd.exclude = true;
    dateComposite.setLayoutData(gd);

    dateWidget = new DateTimeWidget(dateComposite, SWT.DATE, new Date());
    dateWidget.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetDefaultSelected(SelectionEvent e) {
            internalSearch();
          }
        });
    Button searchButton = new Button(dateComposite, SWT.PUSH);
    searchButton.setText(Messages.SpecimenTransitView_go_label);
    searchButton.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            internalSearch();
          }
        });
  }