Package com.google.gdt.eclipse.designer.gxt.databinding.ui.contentproviders

Source Code of com.google.gdt.eclipse.designer.gxt.databinding.ui.contentproviders.FormBindingUiContentProvider

/*******************************************************************************
* Copyright 2011 Google Inc. All Rights Reserved.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.google.gdt.eclipse.designer.gxt.databinding.ui.contentproviders;

import com.google.common.collect.Lists;
import com.google.gdt.eclipse.designer.gxt.databinding.DatabindingsProvider;
import com.google.gdt.eclipse.designer.gxt.databinding.model.beans.BeanObserveInfo;
import com.google.gdt.eclipse.designer.gxt.databinding.model.bindings.FieldBindingInfo;
import com.google.gdt.eclipse.designer.gxt.databinding.model.bindings.FormBindingInfo;
import com.google.gdt.eclipse.designer.gxt.databinding.model.widgets.WidgetObserveInfo;

import org.eclipse.wb.internal.core.DesignerPlugin;
import org.eclipse.wb.internal.core.databinding.ui.editor.IUiContentProvider;
import org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.ChooseClassUiContentProvider;
import org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.MultiTargetRunnable;
import org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.TabContainerConfiguration;
import org.eclipse.wb.internal.core.utils.dialogfields.BooleanDialogField;
import org.eclipse.wb.internal.core.utils.dialogfields.DialogField;
import org.eclipse.wb.internal.core.utils.dialogfields.IDialogFieldListener;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;

import java.util.List;

/**
*
* @author lobas_av
*
*/
public class FormBindingUiContentProvider extends BindingsUiContentProvider {
  private final BooleanDialogField m_autoBindEditor;
  private final MultiTargetRunnable m_multiTargetRunnable;

  ////////////////////////////////////////////////////////////////////////////
  //
  // Constructor
  //
  ////////////////////////////////////////////////////////////////////////////
  public FormBindingUiContentProvider(DatabindingsProvider provider,
      TabContainerConfiguration configuration,
      BooleanDialogField autoBindEditor,
      MultiTargetRunnable multiTargetRunnable,
      FormBindingInfo binding) {
    super(provider, configuration, binding);
    m_autoBindEditor = autoBindEditor;
    m_multiTargetRunnable = multiTargetRunnable;
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // TabContainerUIContentProvider
  //
  ////////////////////////////////////////////////////////////////////////////
  @Override
  @SuppressWarnings("unchecked")
  protected void chooseAddPage(MenuManager menuManager, final int insertIndex) throws Exception {
    List<IUiContentProvider> providers = getProviders();
    WidgetObserveInfo formPanel = (WidgetObserveInfo) m_binding.getTarget();
    for (final WidgetObserveInfo field : formPanel.getChildren()) {
      boolean free = true;
      for (IUiContentProvider provider : providers) {
        UIContentContainer<FieldBindingInfo> fieldProvider =
            (UIContentContainer<FieldBindingInfo>) provider;
        if (field == fieldProvider.getBinding().getTarget()) {
          free = false;
          break;
        }
      }
      if (free) {
        menuManager.add(new Action(field.getPresentation().getTextForBinding()) {
          @Override
          public void run() {
            try {
              FieldBindingInfo binding = m_binding.createFieldBinding(field);
              UIContentContainer<FieldBindingInfo> provider =
                  new UIContentContainer<FieldBindingInfo>(m_provider, binding, "Binding: ");
              createPage(insertIndex, provider, true);
              if (m_multiTargetRunnable != null) {
                addTargetRouter(provider, true);
              }
              configure();
              m_listener.calculateFinish();
            } catch (Throwable e) {
              DesignerPlugin.log(e);
            }
          }
        });
      }
    }
  }

  @Override
  protected String getBindingText(FieldBindingInfo binding) throws Exception {
    String text = super.getBindingText(binding);
    if (binding.isAutobind()) {
      text += " [AUTO]";
    }
    return text;
  }

  @SuppressWarnings("unchecked")
  private void handleAutobind(boolean autobind) {
    try {
      if (autobind) {
        List<FieldBindingInfo> bindings = Lists.newArrayList();
        ((FormBindingInfo) m_binding).createAutobindings(bindings);
        //
        for (FieldBindingInfo binding : bindings) {
          createPage(
              -1,
              new UIContentContainer<FieldBindingInfo>(m_provider, binding, "Binding: "),
              false);
        }
        //
        if (!bindings.isEmpty()) {
          configure();
          m_listener.calculateFinish();
        }
      } else {
        boolean refresh = false;
        for (IUiContentProvider provider : getProviders()) {
          UIContentContainer<FieldBindingInfo> fieldProvider =
              (UIContentContainer<FieldBindingInfo>) provider;
          if (fieldProvider.getBinding().isAutobind()) {
            deleteTabItem(providerToItem(provider));
            refresh = true;
          }
        }
        if (refresh) {
          postDelete();
        }
      }
    } catch (Throwable e) {
      DesignerPlugin.log(e);
    }
  }

  @Override
  @SuppressWarnings("unchecked")
  protected void postDelete(IUiContentProvider _provider) throws Exception {
    if (m_multiTargetRunnable != null) {
      UIContentContainer<FieldBindingInfo> provider =
          (UIContentContainer<FieldBindingInfo>) _provider;
      for (IUiContentProvider iprovider : provider.getProviders()) {
        if (iprovider instanceof ChooseClassAndPropertiesUiContentProvider) {
          m_multiTargetRunnable.removeTarget((ChooseClassUiContentProvider) iprovider);
          break;
        }
      }
    }
  }

  private void addTargetRouter(UIContentContainer<FieldBindingInfo> provider, boolean update) {
    for (IUiContentProvider iprovider : provider.getProviders()) {
      if (iprovider instanceof ChooseClassAndPropertiesUiContentProvider) {
        m_multiTargetRunnable.addTarget((ChooseClassUiContentProvider) iprovider, update);
        break;
      }
    }
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Update
  //
  ////////////////////////////////////////////////////////////////////////////
  @Override
  @SuppressWarnings("unchecked")
  public void updateFromObject() throws Exception {
    super.updateFromObject();
    //
    m_autoBindEditor.setDialogFieldListener(new IDialogFieldListener() {
      public void dialogFieldChanged(DialogField field) {
        handleAutobind(m_autoBindEditor.getSelection());
      }
    });
    //
    if (m_multiTargetRunnable != null) {
      for (IUiContentProvider provider : getProviders()) {
        UIContentContainer<FieldBindingInfo> fieldProvider =
            (UIContentContainer<FieldBindingInfo>) provider;
        if (!fieldProvider.getBinding().isAutobind()) {
          addTargetRouter(fieldProvider, false);
        }
      }
    }
  }

  @Override
  @SuppressWarnings("unchecked")
  public void saveToObject() throws Exception {
    BeanObserveInfo gridSelectionModel = ((FormBindingInfo) m_binding).getGridSelectionModel();
    for (IUiContentProvider provider : getProviders()) {
      UIContentContainer<FieldBindingInfo> fieldProvider =
          (UIContentContainer<FieldBindingInfo>) provider;
      fieldProvider.getBinding().setGridSelectionModel(gridSelectionModel);
      fieldProvider.getBinding().updateGridSelectionModel();
    }
    //
    super.saveToObject();
  }
}
TOP

Related Classes of com.google.gdt.eclipse.designer.gxt.databinding.ui.contentproviders.FormBindingUiContentProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.