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

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

/*******************************************************************************
* 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.bindings.BindingsInfo;
import com.google.gdt.eclipse.designer.gxt.databinding.model.bindings.FieldBindingInfo;
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.TabContainerConfiguration;
import org.eclipse.wb.internal.core.databinding.ui.editor.contentproviders.TabContainerUiContentProvider;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.custom.CTabItem;

import java.util.List;

/**
*
* @author lobas_av
*
*/
public class BindingsUiContentProvider extends TabContainerUiContentProvider {
  protected final DatabindingsProvider m_provider;
  protected final BindingsInfo m_binding;
  private List<WidgetObserveInfo> m_fields;

  ////////////////////////////////////////////////////////////////////////////
  //
  // Constructor
  //
  ////////////////////////////////////////////////////////////////////////////
  public BindingsUiContentProvider(DatabindingsProvider provider,
      TabContainerConfiguration configuration,
      BindingsInfo binding) {
    super(configuration);
    m_provider = provider;
    m_binding = binding;
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // TabContainerUIContentProvider
  //
  ////////////////////////////////////////////////////////////////////////////
  private static void fillFields(List<WidgetObserveInfo> fields, WidgetObserveInfo field) {
    if (field.isField()) {
      fields.add(field);
    }
    for (WidgetObserveInfo childField : field.getChildren()) {
      fillFields(fields, childField);
    }
  }

  @Override
  protected void chooseAddPage(MenuManager menuManager, final int insertIndex) throws Exception {
    if (m_fields == null) {
      m_fields = Lists.newArrayList();
      WidgetObserveInfo root =
          (WidgetObserveInfo) m_provider.getWidgetsContainer().getObservables().get(0);
      fillFields(m_fields, root);
    }
    //
    for (final WidgetObserveInfo field : m_fields) {
      menuManager.add(new Action(field.getPresentation().getTextForBinding()) {
        @Override
        public void run() {
          try {
            FieldBindingInfo binding = m_binding.createFieldBinding(field);
            createPage(insertIndex, new UIContentContainer<FieldBindingInfo>(m_provider,
                binding,
                "Binding: "), true);
            configure();
            m_listener.calculateFinish();
          } catch (Throwable e) {
            DesignerPlugin.log(e);
          }
        }
      });
    }
  }

  @Override
  protected IUiContentProvider createNewPageContentProvider() throws Exception {
    return null;
  }

  @Override
  @SuppressWarnings("unchecked")
  protected void configute(CTabItem tabItem, int index, IUiContentProvider provider) {
    try {
      UIContentContainer<FieldBindingInfo> fieldProvider =
          (UIContentContainer<FieldBindingInfo>) provider;
      tabItem.setText(getBindingText(fieldProvider.getBinding()));
    } catch (Throwable e) {
      DesignerPlugin.log(e);
    }
  }

  protected String getBindingText(FieldBindingInfo binding) throws Exception {
    return binding.getTargetPresentationText();
  }

  ////////////////////////////////////////////////////////////////////////////
  //
  // Update
  //
  ////////////////////////////////////////////////////////////////////////////
  public void updateFromObject() throws Exception {
    List<IUiContentProvider> providers = Lists.newArrayList();
    for (FieldBindingInfo binding : m_binding.getFieldBindings()) {
      providers.add(new UIContentContainer<FieldBindingInfo>(m_provider, binding, "Binding: "));
    }
    updateFromObject(providers);
  }

  @Override
  @SuppressWarnings("unchecked")
  protected void saveToObject(List<IUiContentProvider> providers) throws Exception {
    List<FieldBindingInfo> bindings = Lists.newArrayList();
    //
    for (IUiContentProvider provider : providers) {
      UIContentContainer<FieldBindingInfo> fieldProvider =
          (UIContentContainer<FieldBindingInfo>) provider;
      bindings.add(fieldProvider.getBinding());
    }
    //
    m_binding.setFieldBindings(bindings, m_provider);
  }
}
TOP

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

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.