Package com.tll.client.ui.field.account

Source Code of com.tll.client.ui.field.account.AccountPanel$AccountAddressPanel

/**
* The Logic Lab
* @author jpk Sep 14, 2007
*/
package com.tll.client.ui.field.account;

import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Widget;
import com.tll.client.model.ModelAssembler;
import com.tll.client.ui.field.AddressFieldsRenderer;
import com.tll.client.ui.field.FieldGroup;
import com.tll.client.ui.field.FlowFieldPanel;
import com.tll.client.ui.field.FlowPanelFieldComposer;
import com.tll.client.ui.field.IFieldGroupProvider;
import com.tll.client.ui.field.IFieldRenderer;
import com.tll.client.ui.field.IFieldWidget;
import com.tll.client.ui.field.IIndexedFieldBoundWidget;
import com.tll.client.ui.field.TabbedIndexedFieldPanel;
import com.tll.common.model.Model;
import com.tll.common.model.PropertyPathException;
import com.tll.common.model.SmbizEntityType;
import com.tll.model.AccountStatus;
import com.tll.model.AddressType;

/**
* AccountPanel
* @author jpk
*/
public class AccountPanel extends FlowFieldPanel {

  /**
   * AccountAddressPanel
   * @author jpk
   */
  static final class AccountAddressPanel extends FlowFieldPanel {

    @Override
    protected FieldGroup generateFieldGroup() {
      return (new AccountAddressFieldProvider()).getFieldGroup();
    }

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

        public void render(FlowPanel pnl, FieldGroup fg) {
          final FlowPanelFieldComposer cmpsr = new FlowPanelFieldComposer();
          cmpsr.setCanvas(pnl);

          // account address type/name row
          cmpsr.addField(fg.getFieldWidget("aatype"));
          cmpsr.addField(fg.getFieldWidget("aa" + Model.NAME_PROPERTY));

          // address row
          cmpsr.newRow();
          final FlowPanel fp = new FlowPanel();
          final AddressFieldsRenderer r = new AddressFieldsRenderer();
          r.render(fp, (FieldGroup) fg.getFieldByName("address"));
          cmpsr.addWidget(fp);
        }
      };
    }
  } // AccountAddressPanel

  /**
   * AddressesPanel
   * @author jpk
   */
  static final class AddressesPanel extends TabbedIndexedFieldPanel<AccountAddressPanel> {

    /**
     * Constructor
     */
    public AddressesPanel() {
      super("Addresses", "addresses", true, true);
    }

    @Override
    protected String getIndexTypeName() {
      return "Account Address";
    }

    @Override
    protected String getInstanceName(AccountAddressPanel index) {
      AddressType type;
      String aaName;
      try {
        type = (AddressType) index.getModel().getProperty("type");
        aaName = (String) index.getModel().getProperty("name");
      }
      catch(final PropertyPathException e) {
        throw new IllegalStateException(e);
      }

      return aaName + " (" + type.getName() + ")";
    }

    @Override
    protected Model createPrototypeModel() {
      return ModelAssembler.assemble(SmbizEntityType.ACCOUNT_ADDRESS);
    }

    @Override
    protected AccountAddressPanel createIndexPanel() {
      return new AccountAddressPanel();
    }

  } // AddressesPanel

  protected final DisclosurePanel dpPaymentInfo = new DisclosurePanel("Payment Info", false);
  protected final PaymentInfoPanel paymentInfoPanel = new PaymentInfoPanel();

  protected final DisclosurePanel dpAddresses = new DisclosurePanel("Addresses", false);
  protected final AddressesPanel addressesPanel = new AddressesPanel();

  @SuppressWarnings("unchecked")
  @Override
  protected FieldGroup generateFieldGroup() {
    final FieldGroup fg = (new IFieldGroupProvider() {

      public FieldGroup getFieldGroup() {
        final FieldGroup fgroup = (new AccountFieldsProvider()).getFieldGroup();
        fgroup.addField("paymentInfo", paymentInfoPanel.getFieldGroup());
        fgroup.addField("addresses", addressesPanel.getFieldGroup());
        return fgroup;
      }
    }).getFieldGroup();

    paymentInfoPanel.getFieldGroup().setWidget(dpPaymentInfo);
    addressesPanel.getFieldGroup().setWidget(dpAddresses);

    fg.getFieldWidget("acntParentName").setReadOnly(true);

    ((IFieldWidget<AccountStatus>) fg.getFieldWidget("acntStatus"))
    .addValueChangeHandler(new ValueChangeHandler<AccountStatus>() {

      @Override
      public void onValueChange(ValueChangeEvent<AccountStatus> event) {
        final boolean closed = event.getValue() == AccountStatus.CLOSED;
        final IFieldWidget<?> f = getFieldGroup().getFieldWidget("acntDateCancelled");
        f.setVisible(closed);
        f.setRequired(closed);
      }
    });

    ((IFieldWidget<Boolean>) fg.getFieldWidget("acntPersistPymntInfo"))
    .addValueChangeHandler(new ValueChangeHandler<Boolean>() {

      public void onValueChange(ValueChangeEvent<Boolean> event) {
        paymentInfoPanel.enable(event.getValue());
      }
    });

    return fg;
  }

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

      @Override
      public void render(FlowPanel widget, FieldGroup fg) {
        final FlowPanelFieldComposer cmpsr = new FlowPanelFieldComposer();
        cmpsr.setCanvas(widget);

        // first row
        cmpsr.addField(fg.getFieldWidget("acnt" + Model.NAME_PROPERTY));
        cmpsr.addField(fg.getFieldWidget("acntStatus"));
        cmpsr.addField(fg.getFieldWidget("acntDateCancelled"));
        cmpsr.addField(fg.getFieldWidget("acntCurrencyId"));
        cmpsr.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER);
        cmpsr.addField(fg.getFieldWidget("acntParentName"));
        cmpsr.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
        cmpsr.addField(fg.getFieldWidget("acnt" + Model.DATE_CREATED_PROPERTY));
        cmpsr.stopFlow();
        cmpsr.addField(fg.getFieldWidget("acnt" + Model.DATE_MODIFIED_PROPERTY));

        // second row (billing)
        cmpsr.newRow();
        cmpsr.addField(fg.getFieldWidget("acntBillingModel"));
        cmpsr.addField(fg.getFieldWidget("acntBillingCycle"));
        cmpsr.addField(fg.getFieldWidget("acntDateLastCharged"));
        cmpsr.addField(fg.getFieldWidget("acntNextChargeDate"));

        // third row
        cmpsr.newRow();
        // account addresses block
        dpAddresses.add(addressesPanel);
        cmpsr.addWidget(dpAddresses);

        // fourth row
        cmpsr.newRow();
        // payment info block
        final FlowPanel fp = new FlowPanel();
        fp.add((Widget) fg.getFieldWidget("acntPersistPymntInfo"));
        fp.add(paymentInfoPanel);
        dpPaymentInfo.add(fp);
        cmpsr.addWidget(dpPaymentInfo);
      }
    };
  }

  @Override
  public IIndexedFieldBoundWidget[] getIndexedChildren() {
    return new IIndexedFieldBoundWidget[] { addressesPanel };
  }
}
TOP

Related Classes of com.tll.client.ui.field.account.AccountPanel$AccountAddressPanel

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.