@Override
 public Object get(int index) {
   if (index < 0 || index >= masterList.size()) {
     throw new IndexOutOfBoundsException();
   }
   // We should have an element, now check to see if we've already
   // mapped it to an observable value.
   if (index >= observableValueList.size()) {
     // Just null-padding entries that we should have, but haven't
     // been explicitly requested.
     while (this.observableValueList.size() <= index) {
       this.observableValueList.add(null);
     }
   }
   // I'm assuming get is Realm-bound, so there are no concurrency issues
   // to worry about.
   if (observableValueList.get(index) == null) {
     IObservableValue value = aggregateProperty.observe(masterList.get(index));
     if (listener != null) {
       value.addValueChangeListener(listener);
     }
     observableValueList.set(index, value);
   }
   return observableValueList.get(index).getValue();
 }
  public void testChange_OrderOfNotifications() throws Exception {
    final List listeners = new ArrayList();
    IChangeListener changeListener =
        new IChangeListener() {
          public void handleChange(ChangeEvent event) {
            listeners.add(this);
          }
        };

    IValueChangeListener valueChangeListener =
        new IValueChangeListener() {
          public void handleValueChange(ValueChangeEvent event) {
            listeners.add(this);
          }
        };

    observable.addChangeListener(changeListener);
    observable.addValueChangeListener(valueChangeListener);

    delegate.change(observable);

    assertTrue(formatFail("Change Listeners were not notified on change."), listeners.size() > 0);

    // not asserting the fact that both are notified as this is asserted in
    // other tests
    assertEquals(
        formatFail("Change listeners should be notified before value change listeners."),
        changeListener,
        listeners.get(0));
    assertEquals(
        formatFail("Value change listeners should be notified after change listeners."),
        valueChangeListener,
        listeners.get(1));
  }
Exemple #3
0
 protected void registerObservable(final IObservable observable) {
   if (observable instanceof IObservableValue) {
     ((IObservableValue) observable).addValueChangeListener(fValueListener);
   }
   if (observable instanceof IObservableSet) {
     ((IObservableSet) observable).addSetChangeListener(fValueListener);
   }
 }
 /**
  * Copies the current value of the source observable to the destination observable, and upon value
  * change events fired by the source observable, updates the destination observable accordingly,
  * until the source observable is disposed. This method assumes that both observables are on the
  * same realm.
  *
  * @param source the source observable
  * @param destination the destination observable
  * @since 1.2
  */
 public static void pipe(IObservableValue source, final IObservableValue destination) {
   destination.setValue(source.getValue());
   source.addValueChangeListener(
       new IValueChangeListener() {
         public void handleValueChange(ValueChangeEvent event) {
           destination.setValue(event.diff.getNewValue());
         }
       });
 }
  public Control createControl(Composite composite, String label, int style) {

    // create a separate label to the LEFT of the checkbox, otherwise the grid layout will
    // be off by one column for all other widgets that are created after this one.
    createLabel(composite, label);

    button = getToolkit().createButton(composite, "", SWT.CHECK);
    button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
    button.setSelection((Boolean) object.eGet(feature));
    IObservableValue buttonObserver = SWTObservables.observeSelection(button);
    buttonObserver.addValueChangeListener(
        new IValueChangeListener() {

          @SuppressWarnings("restriction")
          @Override
          public void handleValueChange(ValueChangeEvent event) {

            if (!object.eGet(feature).equals(button.getSelection())) {
              TransactionalEditingDomain editingDomain = getDiagramEditor().getEditingDomain();
              editingDomain
                  .getCommandStack()
                  .execute(
                      new RecordingCommand(editingDomain) {
                        @Override
                        protected void doExecute() {
                          object.eSet(feature, button.getSelection());
                        }
                      });

              //					if (getDiagramEditor().getDiagnostics()!=null) {
              //						// revert the change and display error errorList message.
              //						button.setSelection((Boolean) object.eGet(feature));
              //						ErrorUtils.showErrorMessage(getDiagramEditor().getDiagnostics().getMessage());
              //					}
              //					else
              //						ErrorUtils.showErrorMessage(null);
              button.setSelection((Boolean) object.eGet(feature));
            }
          }
        });

    button.addFocusListener(
        new FocusListener() {

          @Override
          public void focusGained(FocusEvent e) {}

          @Override
          public void focusLost(FocusEvent e) {
            ErrorUtils.showErrorMessage(null);
          }
        });

    return button;
  }
 @Override
 protected void firstListenerAdded() {
   // First time we add a listener to this observableList, we need to hook
   // up a listener to the masterList, as well as all observable values
   // we've already created.
   listener = new Listener();
   this.masterList.addListChangeListener(listener);
   this.masterList.addStaleListener(listener);
   for (IObservableValue value : this.observableValueList) {
     value.addValueChangeListener(listener);
   }
 }
  /**
   * Create a new detail viewer.
   *
   * @param parent the parent composite
   * @param style the widget style
   * @param editingDomain the editing domain
   * @param master the master object for which the details are shown
   */
  protected AbstractDetailViewer(
      Composite parent, int style, EditingDomain editingDomain, IObservableValue master) {
    super(parent, style | SWT.V_SCROLL | SWT.H_SCROLL);
    this.editingDomain = editingDomain;
    this.master = master;
    // this.setAlwaysShowScrollBars( true );
    dataBindingContext = new DataBindingContext();

    // set-up layout
    GridLayout gridLayout = new GridLayout(1, true);
    this.setLayout(gridLayout);

    // create label for detail viewer
    Label label = new Label(this, SWT.NONE);
    label.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true, 1, 1));
    label.setText(Activator.INSTANCE.getString("_UI_DetailViewer_title") + ":");

    // Create composite holding the UI elements of the
    detailComposite = new Composite(this, SWT.BORDER);
    detailComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    detailComposite.setLayout(new GridLayout(2, true));
    this.setContent(detailComposite);

    // create UI elements for attributes
    this.createDetails();
    this.setContent(detailComposite);

    this.setExpandHorizontal(true);
    this.setExpandVertical(true);

    master.addValueChangeListener(
        new IValueChangeListener() {

          /** Redraw the detail viewer when the master object changes */
          @Override
          public void handleValueChange(ValueChangeEvent event) {

            Object newValue = event.diff.getNewValue();

            AbstractDetailViewer.this.disposeDetails();

            // create new ui elements
            if (newValue != null) {
              AbstractDetailViewer.this.createDetails();
            }

            // we need this so that the modified content will be drawn
            detailComposite.layout();
          }
        });
  }
  protected void bindFields() {
    if (dataBindingContext != null) {
      dataBindingContext.dispose();
    }
    dataBindingContext = new EMFDataBindingContext();
    if (downloadOnly != null) {
      if (ModelHelper.getForm(element) instanceof ViewForm) {
        downloadOnly.setSelection(true);
        downloadOnly.setEnabled(false);
      } else {
        dataBindingContext.bindValue(
            SWTObservables.observeSelection(downloadOnly),
            EMFEditObservables.observeValue(
                editingDomain, element, FormPackage.Literals.FILE_WIDGET__DOWNLOAD_ONLY));
      }
    }

    dataBindingContext.bindValue(
        SWTObservables.observeSelection(imagePreview),
        EMFEditObservables.observeValue(
            editingDomain, element, FormPackage.Literals.FILE_WIDGET__USE_PREVIEW));

    IObservableValue value =
        EMFObservables.observeValue(element, FormPackage.Literals.DUPLICABLE__DUPLICATE);

    value.addValueChangeListener(
        new IValueChangeListener() {

          public void handleValueChange(ValueChangeEvent arg0) {
            if (useDocumentButton != null
                && !useDocumentButton.isDisposed()
                && element.getInputType() == FileWidgetInputType.DOCUMENT) {
              useDocumentButton.notifyListeners(SWT.Selection, new Event());
              /*}else if(!useResourceButton.isDisposed() && element.getInputType() == FileWidgetInputType.URL){
              useURLButton.notifyListeners(SWT.Selection,new Event());*/
            } else if (!useResourceButton.isDisposed()
                && element.getInputType() == FileWidgetInputType.RESOURCE) {
              useResourceButton.notifyListeners(SWT.Selection, new Event());
            }
            if (inputExpressionViewer != null
                && !getInputExpressionHint()
                    .equals(inputExpressionViewer.getMessage(IStatus.INFO))) {
              inputExpressionViewer.setMessage(getInputExpressionHint(), IStatus.INFO);
            }
          }
        });

    bindInputExpressionViewer();
    bindResourceText();
  }
  @SuppressWarnings("unchecked")
  private IValueChangeListener addSelectedConnectionChangedListener(
      final IObservableValue selectedConnection, final DataBindingContext dbc) {
    IValueChangeListener listener =
        new IValueChangeListener() {

          @Override
          public void handleValueChange(ValueChangeEvent event) {
            onSelectedConnectionChanged(selectedConnection);
            DataBindingUtils.validateTargetsToModels(dbc);
          }
        };
    selectedConnection.addValueChangeListener(listener);
    return listener;
  }
  public void testChange_ValueChangeEventFiredAfterValueIsSet() throws Exception {
    class ValueChangeListener implements IValueChangeListener {
      Object value;

      public void handleValueChange(ValueChangeEvent event) {
        this.value = event.getObservableValue().getValue();
      }
    }

    ValueChangeListener listener = new ValueChangeListener();
    observable.addValueChangeListener(listener);
    delegate.change(observable);
    assertEquals(
        formatFail(
            "When a value change event is fired the new value should be applied before firing the change event."),
        listener.value,
        observable.getValue());
  }
  public void testDisposeWhileFiringEvents() {
    IObservableValue master = new WritableValue();
    WritableListFactory factory = new WritableListFactory();
    master.setValue("");

    final IObservableList[] detailObservable = new IObservableList[1];

    master.addValueChangeListener(
        new IValueChangeListener() {
          @Override
          public void handleValueChange(ValueChangeEvent event) {
            detailObservable[0].dispose();
          }
        });

    detailObservable[0] = MasterDetailObservables.detailList(master, factory, null);

    master.setValue("New Value");
  }
  @Override
  protected void establishViewModelBinding() {
    IObservableValue textValue = SWTObservables.observeText(control);
    textValue.addValueChangeListener(
        new IValueChangeListener() {

          @Override
          public void handleValueChange(final ValueChangeEvent event) {
            try {
              V viewValue = fromString((String) event.diff.getNewValue());
              V modelValue = getModelValue();

              if (isChangeWithNullChecks(modelValue, viewValue)) {
                setModelValue(viewValue);
              }
            } catch (IllegalArgumentException e) {; // expected
            }
          }
        });
  }
  private void createImportModelControl(final Composite parent) {
    final Label label = new Label(parent, SWT.NONE);
    label.setText(Messages.getString("ImportAttachmentsPreviewPage.7")); // $NON-NLS-1$

    final ComboViewer viewer = new ComboViewer(parent, SWT.DROP_DOWN | SWT.READ_ONLY);
    viewer.setContentProvider(new ArrayContentProvider());
    viewer.setLabelProvider(new LabelProvider());
    viewer.setInput(ImportMode.values());

    final IViewerObservableValue target = ViewersObservables.observeSinglePostSelection(viewer);
    final IObservableValue model =
        BeansObservables.observeValue(m_data, DocumentsAttachmentsData.PROPERTY_IMPORT_MODE);
    m_binding.bindValue(target, model);

    // TRICKY: we need to refresh the table when the import mode changes, in order
    // to show the gray state correctly
    model.addValueChangeListener(
        new IValueChangeListener() {
          @Override
          public void handleValueChange(final ValueChangeEvent event) {
            handleImportModeChanged();
          }
        });
  }
  @SuppressWarnings({"unchecked", "rawtypes"})
  @Override
  protected void doCreateControls(final Composite parent, DataBindingContext dbc) {
    GridLayoutFactory.fillDefaults().numColumns(3).margins(10, 10).applyTo(parent);

    // userdoc link (JBIDE-20401)
    this.userdocLink = new StyledText(parent, SWT.WRAP); // text set in #showHideUserdocLink
    GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).span(3, 1).applyTo(userdocLink);
    showHideUserdocLink();
    IObservableValue userdocUrlObservable =
        BeanProperties.value(ConnectionWizardPageModel.PROPERTY_USERDOCURL).observe(pageModel);
    StyledTextUtils.emulateLinkAction(userdocLink, r -> onUserdocLinkClicked(userdocUrlObservable));
    userdocUrlObservable.addValueChangeListener(
        new IValueChangeListener() {

          @Override
          public void handleValueChange(ValueChangeEvent event) {
            showHideUserdocLink();
          }
        });

    IObservableValue connectionFactoryObservable =
        BeanProperties.value(ConnectionWizardPageModel.PROPERTY_CONNECTION_FACTORY)
            .observe(pageModel);

    // filler
    Label fillerLabel = new Label(parent, SWT.NONE);
    GridDataFactory.fillDefaults().span(3, 3).hint(SWT.DEFAULT, 6).applyTo(fillerLabel);

    // existing connections combo
    Label connectionLabel = new Label(parent, SWT.NONE);
    connectionLabel.setText("Connection:");
    GridDataFactory.fillDefaults()
        .align(SWT.LEFT, SWT.CENTER)
        .hint(100, SWT.DEFAULT)
        .applyTo(connectionLabel);
    Combo connectionCombo = new Combo(parent, SWT.DEFAULT);
    GridDataFactory.fillDefaults()
        .span(2, 1)
        .align(SWT.FILL, SWT.CENTER)
        .grab(true, false)
        .applyTo(connectionCombo);
    ComboViewer connectionComboViewer = new ComboViewer(connectionCombo);
    connectionComboViewer.setContentProvider(ArrayContentProvider.getInstance());
    connectionComboViewer.setLabelProvider(new ConnectionColumLabelProvider());
    connectionComboViewer.setInput(pageModel.getAllConnections());
    Binding selectedConnectionBinding =
        ValueBindingBuilder.bind(ViewerProperties.singleSelection().observe(connectionComboViewer))
            .validatingAfterGet(
                new IsNotNullValidator(
                    ValidationStatus.cancel("You have to select or create a new connection.")))
            .to(
                BeanProperties.value(
                        ConnectionWizardPageModel.PROPERTY_SELECTED_CONNECTION, IConnection.class)
                    .observe(pageModel))
            .in(dbc);
    ControlDecorationSupport.create(
        selectedConnectionBinding,
        SWT.LEFT | SWT.TOP,
        null,
        new RequiredControlDecorationUpdater());

    // server type
    Label connectionFactoryLabel = new Label(parent, SWT.NONE);
    connectionFactoryLabel.setText("Server type:");
    GridDataFactory.fillDefaults()
        .align(SWT.LEFT, SWT.CENTER)
        .hint(100, SWT.DEFAULT)
        .applyTo(connectionFactoryLabel);
    Combo connectionFactoryCombo = new Combo(parent, SWT.DEFAULT);
    GridDataFactory.fillDefaults()
        .span(2, 1)
        .align(SWT.FILL, SWT.CENTER)
        .grab(true, false)
        .applyTo(connectionFactoryCombo);
    ComboViewer connectionFactoriesViewer = new ComboViewer(connectionFactoryCombo);
    connectionFactoriesViewer.setContentProvider(ArrayContentProvider.getInstance());
    connectionFactoriesViewer.setLabelProvider(
        new ColumnLabelProvider() {

          @Override
          public String getText(Object element) {
            if (!(element instanceof IConnectionFactory)) {
              return element.toString();
            } else {
              return ((IConnectionFactory) element).getName();
            }
          }
        });
    connectionFactoriesViewer.setInput(pageModel.getAllConnectionFactories());
    final IViewerObservableValue selectedServerType =
        ViewerProperties.singleSelection().observe(connectionFactoriesViewer);
    ValueBindingBuilder.bind(selectedServerType).to(connectionFactoryObservable).in(dbc);

    // server
    Button useDefaultServerCheckbox = new Button(parent, SWT.CHECK);
    useDefaultServerCheckbox.setText("Use default server");
    GridDataFactory.fillDefaults()
        .span(3, 1)
        .align(SWT.FILL, SWT.FILL)
        .applyTo(useDefaultServerCheckbox);
    ValueBindingBuilder.bind(WidgetProperties.selection().observe(useDefaultServerCheckbox))
        .to(
            BeanProperties.value(
                    ConnectionWizardPageModel.PROPERTY_USE_DEFAULT_HOST, IConnection.class)
                .observe(pageModel))
        .in(dbc);

    IObservableValue hasDefaultHostObservable =
        BeanProperties.value(ConnectionWizardPageModel.PROPERTY_HAS_DEFAULT_HOST)
            .observe(pageModel);
    ValueBindingBuilder.bind(WidgetProperties.enabled().observe(useDefaultServerCheckbox))
        .notUpdating(hasDefaultHostObservable)
        .in(dbc);

    Label serverLabel = new Label(parent, SWT.NONE);
    serverLabel.setText("Server:");
    GridDataFactory.fillDefaults()
        .align(SWT.LEFT, SWT.CENTER)
        .hint(100, SWT.DEFAULT)
        .applyTo(serverLabel);
    Combo serversCombo = new Combo(parent, SWT.BORDER);
    ComboViewer serversViewer = new ComboViewer(serversCombo);
    serversViewer.setContentProvider(new ObservableListContentProvider());
    serversViewer.setInput(
        BeanProperties.list(ConnectionWizardPageModel.PROPERTY_ALL_HOSTS).observe(pageModel));
    GridDataFactory.fillDefaults()
        .align(SWT.FILL, SWT.FILL)
        .grab(true, false)
        .applyTo(serversCombo);
    final IObservableValue serverUrlObservable = WidgetProperties.text().observe(serversCombo);
    serversCombo.addFocusListener(onServerFocusLost(serverUrlObservable));
    ValueBindingBuilder.bind(serverUrlObservable)
        .converting(new TrimTrailingSlashConverter())
        .to(BeanProperties.value(ConnectionWizardPageModel.PROPERTY_HOST).observe(pageModel))
        .in(dbc);

    MultiValidator serverUrlValidator =
        new MultiValidator() {

          @Override
          protected IStatus validate() {
            Object value = serverUrlObservable.getValue();
            if (!(value instanceof String) || StringUtils.isEmpty((String) value)) {
              return ValidationStatus.cancel("Please provide an OpenShift server url.");
            } else if (!UrlUtils.isValid((String) value)) {
              return ValidationStatus.error("Please provide a valid OpenShift server url.");
            }
            return ValidationStatus.ok();
          }
        };
    ControlDecorationSupport.create(
        serverUrlValidator, SWT.LEFT | SWT.TOP, null, new RequiredControlDecorationUpdater());
    dbc.addValidationStatusProvider(serverUrlValidator);

    ValueBindingBuilder.bind(WidgetProperties.enabled().observe(serversCombo))
        .notUpdatingParticipant()
        .to(
            BeanProperties.value(ConnectionWizardPageModel.PROPERTY_USE_DEFAULT_HOST)
                .observe(pageModel))
        .converting(new InvertingBooleanConverter())
        .in(dbc);

    // connect error
    dbc.addValidationStatusProvider(
        new MultiValidator() {
          IObservableValue observable =
              BeanProperties.value(
                      ConnectionWizardPageModel.PROPERTY_CONNECTED_STATUS, IStatus.class)
                  .observe(pageModel);

          @Override
          protected IStatus validate() {
            return (IStatus) observable.getValue();
          }
        });

    // connection editors
    Group authenticationDetailsGroup = new Group(parent, SWT.NONE);
    authenticationDetailsGroup.setText("Authentication");
    GridDataFactory.fillDefaults()
        .align(SWT.FILL, SWT.FILL)
        .span(3, 1)
        .applyTo(authenticationDetailsGroup);
    GridLayoutFactory.fillDefaults().margins(0, 0).applyTo(authenticationDetailsGroup);
    // additional nesting required because of https://bugs.eclipse.org/bugs/show_bug.cgi?id=478618
    Composite authenticationDetailsContainer = new Composite(authenticationDetailsGroup, SWT.None);
    GridDataFactory.fillDefaults()
        .align(SWT.FILL, SWT.FILL)
        .grab(true, true)
        .applyTo(authenticationDetailsContainer);
    this.connectionEditors =
        new ConnectionEditorsStackedView(
            connectionFactoryObservable, this, authenticationDetailsContainer, dbc);
    connectionEditors.createControls();

    // adv editors
    Composite advEditorContainer = new Composite(parent, SWT.NONE);
    GridLayoutFactory.fillDefaults().margins(0, 0).applyTo(authenticationDetailsGroup);
    GridDataFactory.fillDefaults()
        .align(SWT.FILL, SWT.FILL)
        .span(3, 1)
        .grab(true, true)
        .applyTo(advEditorContainer);
    this.advConnectionEditors =
        new AdvancedConnectionEditorsStackedView(
            connectionFactoryObservable, pageModel, advEditorContainer, dbc);
    advConnectionEditors.createControls();
  }
  @Override
  public void createPartControl(Composite parent) {
    detailsViewerFlyout =
        new FlyoutControlComposite(parent, SWT.NONE, detailsViewerFlyoutPreferences);
    detailsViewerFlyout.setTitleText("Details / Filters");
    detailsViewerFlyout.setValidDockLocations(IFlyoutPreferences.DOCK_EAST);

    patternsViewerFlyout =
        new FlyoutControlComposite(
            detailsViewerFlyout.getClientParent(), SWT.NONE, patternsViewerFlyoutPreferences);
    patternsViewerFlyout.setTitleText("Pattern registry");
    patternsViewerFlyout.setValidDockLocations(IFlyoutPreferences.DOCK_WEST);

    matcherTreeViewer = new TreeViewer(patternsViewerFlyout.getClientParent());
    detailsTableViewer = new TableViewer(detailsViewerFlyout.getFlyoutParent(), SWT.FULL_SELECTION);

    // matcherTreeViewer configuration
    matcherTreeViewer.setContentProvider(
        new ObservableListTreeContentProvider(
            new QueryExplorerObservableFactory(), new QueryExplorerTreeStructureAdvisor()));
    matcherTreeViewer.setLabelProvider(new QueryExplorerLabelProvider());
    matcherTreeViewer.setInput(treeViewerRootContent);
    treeViewerRootContent.setViewer(matcherTreeViewer);
    ColumnViewerToolTipSupport.enableFor(matcherTreeViewer);
    matcherTreeViewer.setComparator(null);

    IObservableValue selection = ViewersObservables.observeSingleSelection(matcherTreeViewer);
    selection.addValueChangeListener(new RootContentSelectionChangeListener());

    DoubleClickListener listener = new DoubleClickListener();
    injector.injectMembers(listener);
    matcherTreeViewer.addDoubleClickListener(listener);

    // patternsViewer configuration
    patternsTreeViewer =
        new CheckboxTreeViewer(
            patternsViewerFlyout.getFlyoutParent(), SWT.CHECK | SWT.BORDER | SWT.MULTI);
    patternsTreeViewer.addCheckStateListener(new CheckStateListener());
    setPackagePresentation(mementoPackagePresentation, false);
    patternsTreeViewer.setInput(patternsViewerInput);

    // Create menu manager.
    MenuManager matcherTreeViewerMenuManager = new MenuManager();
    matcherTreeViewerMenuManager.setRemoveAllWhenShown(true);
    matcherTreeViewerMenuManager.addMenuListener(
        new IMenuListener() {
          @Override
          public void menuAboutToShow(IMenuManager mgr) {
            fillContextMenu(mgr);
          }
        });
    // Create menu for tree viewer
    Menu matcherTreeViewerMenu =
        matcherTreeViewerMenuManager.createContextMenu(matcherTreeViewer.getControl());
    matcherTreeViewer.getControl().setMenu(matcherTreeViewerMenu);
    getSite()
        .registerContextMenu(
            "org.eclipse.incquery.tooling.ui.queryexplorer.QueryExplorer.treeViewerMenu",
            matcherTreeViewerMenuManager,
            matcherTreeViewer);

    MenuManager patternsViewerMenuManager = new MenuManager();
    patternsViewerMenuManager.setRemoveAllWhenShown(true);
    patternsViewerMenuManager.addMenuListener(
        new IMenuListener() {
          @Override
          public void menuAboutToShow(IMenuManager mgr) {
            fillContextMenu(mgr);
          }
        });
    // Create menu for patterns viewer
    Menu patternsViewerMenu =
        patternsViewerMenuManager.createContextMenu(patternsTreeViewer.getControl());
    patternsTreeViewer.getControl().setMenu(patternsViewerMenu);
    getSite()
        .registerContextMenu(
            "org.eclipse.incquery.tooling.ui.queryexplorer.QueryExplorer.patternsViewerMenu",
            patternsViewerMenuManager,
            patternsTreeViewer);

    // tableView configuration
    Table table = detailsTableViewer.getTable();
    table.setHeaderVisible(true);
    table.setLinesVisible(true);

    GridData gridData = new GridData();
    gridData.verticalAlignment = GridData.FILL;
    gridData.horizontalSpan = 2;
    gridData.grabExcessHorizontalSpace = true;
    gridData.grabExcessVerticalSpace = true;
    gridData.horizontalAlignment = GridData.FILL;
    detailsTableViewer.getControl().setLayoutData(gridData);

    // Focus listening and selection providing
    getSite().setSelectionProvider(matcherTreeViewer);

    // removed listener due to new attach feature in
    // https://bugs.eclipse.org/bugs/show_bug.cgi?id=429858
    // initFileListener();
    initPatternsViewerWithGeneratedPatterns();
  }
  private DataBindingContext initDataBindings() {
    DataBindingContext bindingContext = new DataBindingContext();
    //
    IObservableValue btnCaseSensitiveObserveSelectionObserveWidget =
        SWTObservables.observeSelection(btnCaseSensitive);
    IObservableValue ecgModelCaseSensitiveObserveValue =
        PojoObservables.observeValue(ecgModel, "caseSensitive"); // $NON-NLS-1$
    bindingContext.bindValue(
        btnCaseSensitiveObserveSelectionObserveWidget,
        ecgModelCaseSensitiveObserveValue,
        null,
        null);
    //
    IObservableValue btnRegualrExpressionObserveSelectionObserveWidget =
        SWTObservables.observeSelection(btnRegualarExpression);
    IObservableValue ecgModelRegularExpressionObserveValue =
        PojoObservables.observeValue(ecgModel, "regularExpression"); // $NON-NLS-1$
    bindingContext.bindValue(
        btnRegualrExpressionObserveSelectionObserveWidget,
        ecgModelRegularExpressionObserveValue,
        null,
        null);
    //
    IObservableValue containingTextObserveTextObserveWidget =
        SWTObservables.observeSelection(containingText);
    IObservableValue ecgModelSearchStringObserveValue =
        PojoObservables.observeValue(ecgModel, "searchString"); // $NON-NLS-1$
    bindingContext.bindValue(
        containingTextObserveTextObserveWidget, ecgModelSearchStringObserveValue, null, null);
    //
    IObservableValue containingEndTextObserveTextObserveWidget =
        SWTObservables.observeSelection(containingEndText);
    IObservableValue ecgModelSearchEndStringObserveValue =
        PojoObservables.observeValue(ecgModel, "searchEndString"); // $NON-NLS-1$
    bindingContext.bindValue(
        containingEndTextObserveTextObserveWidget, ecgModelSearchEndStringObserveValue, null, null);
    //
    IObservableValue consoleListObserveSelectionObserveWidget =
        SWTObservables.observeSelection(consoleList);
    IObservableValue ecgModelSourceObserveValue =
        PojoObservables.observeValue(ecgModel, "source"); // $NON-NLS-1$
    UpdateValueStrategy name2TextConsoleStrategy = new UpdateValueStrategy();
    name2TextConsoleStrategy.setConverter(new Name2TextConsoleConverter());
    UpdateValueStrategy textConsole2NameStrategy = new UpdateValueStrategy();
    textConsole2NameStrategy.setConverter(new TextConsole2NameConverter());
    bindingContext.bindValue(
        consoleListObserveSelectionObserveWidget,
        ecgModelSourceObserveValue,
        name2TextConsoleStrategy,
        textConsole2NameStrategy);
    // Listener for update dispose-state
    ecgModelSourceObserveValue.addValueChangeListener(
        new IValueChangeListener() {

          @Override
          public void handleValueChange(ValueChangeEvent event) {
            // when we change back to the origin source console we must set the origin disposal
            // state
            if (ecgModelOrig.getSource() == ecgModel.getSource()) {
              ecgModel.setSourceDisposed(ecgModelOrig.isSourceDisposed());
            } else {
              ecgModel.setSourceDisposed(false);
            }
          }
        });
    //
    IObservableValue btnNotMatchingObserveSelectionObserveWidget =
        SWTObservables.observeSelection(btnNotMatching);
    IObservableValue ecgModelNotMatchingObserveValue =
        PojoObservables.observeValue(ecgModel, "notMatching"); // $NON-NLS-1$
    bindingContext.bindValue(
        btnNotMatchingObserveSelectionObserveWidget, ecgModelNotMatchingObserveValue, null, null);
    //
    IObservableValue btnWholeWordObserveSelectionObserveWidget =
        SWTObservables.observeSelection(btnWholeWord);
    IObservableValue ecgModelWholeWordObserveValue =
        PojoObservables.observeValue(ecgModel, "wholeWord"); // $NON-NLS-1$
    bindingContext.bindValue(
        btnWholeWordObserveSelectionObserveWidget, ecgModelWholeWordObserveValue, null, null);
    //
    IObservableValue btnSetEndMarkerObserveSelectionObserveWidget =
        SWTObservables.observeSelection(btnSetEndMarker);
    IObservableValue ecgModelRangeMatchingObserveValue =
        PojoObservables.observeValue(ecgModel, "rangeMatching"); // $NON-NLS-1$
    bindingContext.bindValue(
        btnSetEndMarkerObserveSelectionObserveWidget,
        ecgModelRangeMatchingObserveValue,
        null,
        null);
    //

    //
    ecgModelRangeMatchingObserveValue.addValueChangeListener(
        new IValueChangeListener() {

          @Override
          public void handleValueChange(ValueChangeEvent event) {
            updateRangeMatchingArrangement();
          }
        });

    //
    ecgModelRegularExpressionObserveValue.addValueChangeListener(
        new IValueChangeListener() {

          @Override
          public void handleValueChange(ValueChangeEvent event) {
            updateLblText();
          }
        });

    return bindingContext;
  }