Package com.tll.client.mvc.view.intf

Source Code of com.tll.client.mvc.view.intf.InterfacesView$IntfSlectDlg

/**
* The Logic Lab
* @author jpk
* Feb 24, 2008
*/
package com.tll.client.mvc.view.intf;

import java.util.LinkedHashMap;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.PushButton;
import com.tll.client.data.rpc.AuxDataCacheHelper;
import com.tll.client.data.rpc.AuxDataCommand;
import com.tll.client.data.rpc.CrudCommand;
import com.tll.client.data.rpc.IRpcCommand;
import com.tll.client.model.ModelAssembler;
import com.tll.client.model.ModelChangeEvent;
import com.tll.client.mvc.view.AbstractRpcAndModelAwareView;
import com.tll.client.mvc.view.StaticViewInitializer;
import com.tll.client.mvc.view.ViewClass;
import com.tll.client.ui.Dialog;
import com.tll.client.ui.GridRenderer;
import com.tll.client.ui.field.FieldFactory;
import com.tll.client.ui.field.FieldGroup;
import com.tll.client.ui.field.FieldPanel;
import com.tll.client.ui.field.FlowFieldPanel;
import com.tll.client.ui.field.IFieldRenderer;
import com.tll.client.ui.field.RadioGroupField;
import com.tll.client.ui.field.intf.MultiOptionInterfacePanel;
import com.tll.client.ui.field.intf.SwitchInterfacePanel;
import com.tll.client.ui.view.ViewToolbar;
import com.tll.common.data.AuxDataPayload;
import com.tll.common.data.AuxDataRequest;
import com.tll.common.model.Model;
import com.tll.common.model.ModelKey;
import com.tll.common.model.SmbizEntityType;
import com.tll.common.search.NamedQuerySearch;
import com.tll.common.search.PrimaryKeySearch;

/**
* InterfacesView - AbstractView for managing Interfaces and the sub-entities.
* @author jpk
*/
@SuppressWarnings("synthetic-access")
public class InterfacesView extends AbstractRpcAndModelAwareView<StaticViewInitializer> implements ClickHandler {

  public static final Class klas = new Class();

  public static final class Class extends ViewClass {

    @Override
    public String getName() {
      return "interfacesView";
    }

    @Override
    public InterfacesView newView() {
      return new InterfacesView();
    }

  } // Class

  /**
   * IntfSlectDlg
   * @author jpk
   */
  final class IntfSlectDlg extends Dialog {

    /**
     * InterfaceTypeSelectPanel
     * @author jpk
     */
    final class InterfaceTypeSelectPanel extends FlowFieldPanel {

      SmbizEntityType intfType;

      @Override
      protected FieldGroup generateFieldGroup() {
        final FieldGroup fg = new FieldGroup("Interface Type Selection");
        final LinkedHashMap<SmbizEntityType, String> data = new LinkedHashMap<SmbizEntityType, String>();
        data.put(SmbizEntityType.INTERFACE_SWITCH, "Switch");
        data.put(SmbizEntityType.INTERFACE_SINGLE, "Single");
        data.put(SmbizEntityType.INTERFACE_MULTI, "Multi");
        final RadioGroupField<SmbizEntityType> f =
          FieldFactory.fradiogroup("interfaceType", "interfaceType", null, "Interface Type", data, new GridRenderer(
              1, null));
        f.addValueChangeHandler(new ValueChangeHandler<SmbizEntityType>() {

          @Override
          public void onValueChange(ValueChangeEvent<SmbizEntityType> event) {
            intfType = event.getValue();
            assert intfType != null;
            final Model m = ModelAssembler.assemble(intfType);
            assert m != null;
            intfStack.addInterface(m, false);
            IntfSlectDlg.this.hide();
            intfStack.showInterface(intfStack.getNumInterfaces() - 1);
          }
        });
        fg.addField(f);
        return fg;
      }

      @Override
      protected IFieldRenderer<FlowPanel> getRenderer() {
        return new IFieldRenderer<FlowPanel>() {

          @Override
          public void render(FlowPanel widget, FieldGroup fg) {
            final HorizontalPanel hp = new HorizontalPanel();
            hp.setStyleName("addIntf");
            hp.add(fg.getFieldByName("interfaceType").getWidget());
            hp.add(new Button("Cancel", new ClickHandler() {

              @Override
              public void onClick(ClickEvent event) {
                IntfSlectDlg.this.hide();
              }
            }));
            widget.add(hp);
          }
        };
      }

    } // InterfaceTypeSelectPanel

    final InterfaceTypeSelectPanel fldPnl = new InterfaceTypeSelectPanel();

    /**
     * Constructor
     */
    public IntfSlectDlg() {
      super();
      setText("Select the interface type to add");
      add(new InterfaceTypeSelectPanel());
    }

  } // IntfSlectDlg

  static final AuxDataRequest auxDataRequest = new AuxDataRequest();

  static {
    auxDataRequest.requestEntityPrototype(SmbizEntityType.INTERFACE_SWITCH);
    auxDataRequest.requestEntityPrototype(SmbizEntityType.INTERFACE_SINGLE);
    auxDataRequest.requestEntityPrototype(SmbizEntityType.INTERFACE_MULTI);
    auxDataRequest.requestEntityPrototype(SmbizEntityType.INTERFACE_OPTION);
    auxDataRequest.requestEntityPrototype(SmbizEntityType.INTERFACE_OPTION_PARAMETER_DEFINITION);
  }

  private final PushButton btnAddIntf = new PushButton("Add Interface");

  private IntfSlectDlg dlg;

  private InterfaceStack intfStack;

  /**
   * Constructor
   */
  public InterfacesView() {
    super();
    btnAddIntf.addClickHandler(this);
  }

  @Override
  protected Class getViewClass() {
    return klas;
  }

  @Override
  public String getLongViewName() {
    return "Interfaces";
  }

  @Override
  protected String getViewStyle() {
    return "interfaces";
  }

  @Override
  protected void doInitialization(StaticViewInitializer initializer) {
    // now we are ready to create the intf stack as we have a valid view
    // container ref
    intfStack =
      new InterfaceStack(new NamedQuerySearch(SmbizEntityType.INTERFACE, "interface.summaryList", true),
          auxDataRequest, new InterfaceStack.IFieldPanelResolver() {

        @Override
        public FieldPanel<?> resolveFieldPanel(ModelKey mkey) {
          final SmbizEntityType type = (SmbizEntityType) mkey.getEntityType();
          switch(type) {
          case INTERFACE_SWITCH:
            return new SwitchInterfacePanel();
          case INTERFACE_SINGLE:
            return new MultiOptionInterfacePanel(true);
          case INTERFACE_MULTI:
            return new MultiOptionInterfacePanel(false);
          }
          throw new IllegalArgumentException("Unhandled interface type");
        }
      }, new InterfaceStack.IFieldPanelDataLoader() {

        @Override
        public IRpcCommand load(ModelKey intfKey, AuxDataRequest adr) {
          final CrudCommand c = new CrudCommand();
          c.load(new PrimaryKeySearch(intfKey), adr);
          return c;
        }
      }, true);
    addWidget(intfStack);
  }

  @Override
  protected void decorateToolbar(ViewToolbar toolbar) {
    // add add interface button
    toolbar.addViewOpButton(this.btnAddIntf, "Add Interface");
  }

  @Override
  protected boolean shouldHandleModelChangeEvent(ModelChangeEvent event) {
    final SmbizEntityType set = (SmbizEntityType) event.getModelKey().getEntityType();
    return set.isInterfaceType();
  }

  @Override
  protected void doRefresh() {
    intfStack.refreshData();
  }

  @Override
  protected void doDestroy() {
    intfStack.clearData();
  }

  private void showAddIntfDlg() {
    // show the interface type selection dialog
    if(dlg == null) dlg = new IntfSlectDlg();
    dlg.center();
  }

  @Override
  public void onClick(ClickEvent event) {
    if(event.getSource() == btnAddIntf) {
      // ensure we have the aux data cached
      final AuxDataRequest adr = AuxDataCacheHelper.filterRequest(auxDataRequest);
      if(adr != null) {
        (new AuxDataCommand(adr) {

          @Override
          protected void handleSuccess(AuxDataPayload result) {
            super.handleSuccess(result);
            showAddIntfDlg();
          }

        }).execute();
      }
      else {
        showAddIntfDlg();
      }
    }
  }
}
TOP

Related Classes of com.tll.client.mvc.view.intf.InterfacesView$IntfSlectDlg

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.