All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.ennwifi.webframe.ui.client.common.MetaBoxs Maven / Gradle / Ivy

There is a newer version: 2.3.0
Show newest version
package cn.ennwifi.webframe.ui.client.common;

import java.util.ArrayList;
import java.util.List;

import cn.ennwifi.webframe.ui.client.data.MetaDataProvider;
import cn.ennwifi.webframe.ui.shared.repository.S_METAObj;
import cn.mapway.ui.client.mvc.Observable;
import cn.mapway.ui.client.mvc.Observer;
import cn.mapway.ui.client.widget.common.CheckBoxEx;
import cn.mapway.ui.client.widget.common.IValidator;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.ksyzt.gwt.client.event.HasMessageHandlers;
import com.ksyzt.gwt.client.event.MessageEvent;
import com.ksyzt.gwt.client.event.MessageHandler;

/**
 * 多选的元数据框
 *
 * @author zhangjianshe
 */
public class MetaBoxs extends HTMLPanel implements HasMessageHandlers, Observer, IValidator {


    /**
     * Instantiates a new Meta boxs.
     */
    public MetaBoxs() {
    this("div");
  }

  @Override
  public HandlerRegistration addMessageHandler(MessageHandler handler) {
    return addHandler(handler, MessageEvent.TYPE);
  }

    /**
     * Instantiates a new Meta boxs.
     *
     * @param tag the tag
     */
    public MetaBoxs(String tag) {
    super(tag);
    setStyleName("gwtEx-width-12");
    getElement().getStyle().setTextAlign(com.google.gwt.dom.client.Style.TextAlign.LEFT);
    MetaDataProvider.get().addObserver(this);
  }

  private String mCatalog = "";
  private ClickHandler checkBoxClicked = new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
      CheckBoxEx check = (CheckBoxEx) event.getSource();
      if (check.getValue()) {
        MessageEvent ev = new MessageEvent(MessageEvent.SELECT, check.getData());
        fireEvent(ev);
      } else {
        MessageEvent ev = new MessageEvent(MessageEvent.CANCEL, check.getData());
        fireEvent(ev);
      }
    }
  };

    /**
     * Sets catalog.
     *
     * @param catalog the catalog
     */
    public void setCatalog(String catalog) {
    mCatalog = catalog;
    refreshView();
  }

  @Override
  public void update(Observable sender, Object data) {
    refreshView();
  }

    /**
     * 刷新页面
     */
    public void refreshView() {
    this.clear();
    if (mCatalog != null && mCatalog.length() > 0) {
      List datas = MetaDataProvider.get().findByCatalog(mCatalog);
      for (S_METAObj d : datas) {
        CheckBoxEx checkBox = new CheckBoxEx();
        checkBox.setText(d.getName());
        checkBox.setData(d);
        checkBox.addClickHandler(checkBoxClicked);
        this.add(checkBox);
      }
    }
    updateData(true);
  }

    /**
     * The M codes.
     */
    List mCodes = new ArrayList();

    /**
     * 设置代码数据
     *
     * @param codes ,00,01,
     */
    public void setValue(String codes) {
    mCodes = new ArrayList();
    if (codes != null) {
      String[] codelist = codes.split(",");
      for (int i = 0; i < codelist.length; i++) {
        String code = codelist[i];
        code = code.trim();
        if (code != null && code.length() > 0) {
          mCodes.add(code);
        }
      }
    }
    updateData(true);
  }

    /**
     * 获取选中的数值
     *
     * @return value
     */
    public String getValue() {
    List selected = updateData(false);
    mCodes = new ArrayList();
    for (S_METAObj meta : selected) {
      mCodes.add(meta.getCode());
    }
    if (mCodes.size() == 0) {
      return "";
    } else {
      String r = ",";
      for (String c : mCodes) {
        r = r + c + ",";
      }
      return r;
    }
  }

  /**
   * 数据绑定操作
   * @param toUI true data toUI
   * @return
   */
  private List updateData(boolean toUI) {

    List ds = new ArrayList();
    if (toUI) {
      // 向界面上绑定数据
      for (int i = 0; i < getWidgetCount(); i++) {
        CheckBoxEx checkBox = (CheckBoxEx) getWidget(i);
        checkBox.setValue(false);
        S_METAObj meta = (S_METAObj) checkBox.getData();
        for (String c : mCodes) {
          if (meta.getCode().equals(c)) {
            checkBox.setValue(true);
            break;
          }
        }
      }
    } else {
      // 从界面获取数据
      for (int i = 0; i < getWidgetCount(); i++) {
        CheckBoxEx checkBox = (CheckBoxEx) getWidget(i);
        if (checkBox.getValue()) {
          ds.add((S_METAObj) checkBox.getData());
        }
      }
    }
    return ds;
  }


  @Override
  public void setMessage(String msg) {
    this.msg = msg;
  }

  private String msg = "";
  private boolean required = false;

  @Override
  public String getMessage() {
    return msg;
  }

  @Override
  public void setPattern(String pattern) {

  }

  @Override
  public void setRequired(boolean b) {
    required = b;
  }

  @Override
  public boolean isValidate() {

    if (required) {
      List datas = updateData(false);
      if (datas.size() == 0) {
        return false;
      }

      if (minLength != null) {
        if (datas.size() < minLength) {
          return false;
        }
      }

      if (maxLength != null) {
        if (datas.size() > maxLength) {
          return false;
        }

      }

      return true;

    } else {
      return true;
    }
  }


    /**
     * The Min length.
     */
    Integer minLength = null;
    /**
     * The Max length.
     */
    Integer maxLength = null;


    /**
     * 设置最小个数
     *
     * @param minLength the min length
     */
    void setMinLength(int minLength) {
    this.minLength = minLength;

  }

    /**
     * 设置最大个数
     *
     * @param maxLength the max length
     */
    public void setMaxLength(int maxLength) {
    this.maxLength = maxLength;
  }


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy