Package com.cxy.redisclient.presentation.hash

Source Code of com.cxy.redisclient.presentation.hash.HashDataContent

package com.cxy.redisclient.presentation.hash;

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;

import com.cxy.redisclient.integration.I18nFile;
import com.cxy.redisclient.presentation.RedisClient;
import com.cxy.redisclient.presentation.WatchDialog;
import com.cxy.redisclient.presentation.component.DataContent;
import com.cxy.redisclient.presentation.component.EditListener;
import com.cxy.redisclient.service.HashService;

public class HashDataContent extends DataContent {
  private Table table;
  private Button btnDelete;
  private HashService service = new HashService();
  private Status currentStatus;
  private Button btnAdd;
  private Button btnCancel;
  private Button btnApply;
  private Button btnRefresh;
  private Button btnWatch;
  private EditListener listener;
  private CurrentData currentData = new CurrentData();

  private Group grpValues;

  private TableColumn tblclmnNewColumn;

  private TableColumn tblclmnMember;
 
  public HashDataContent(CTabItem tabItem, Image image, int id, String server, int db, String key,
      String dataTitle) {
    super(tabItem, image, id, server, db, key, dataTitle);
    currentStatus = Status.Normal;
  }

  @Override
  public void refreshLangUI() {
    grpValues.setText(RedisClient.i18nFile.getText(I18nFile.VALUES));
    tblclmnNewColumn.setText(RedisClient.i18nFile.getText(I18nFile.FIELD));
    tblclmnMember.setText(RedisClient.i18nFile.getText(I18nFile.VALUE));
    btnAdd.setText(RedisClient.i18nFile.getText(I18nFile.ADD));
    btnDelete.setText(RedisClient.i18nFile.getText(I18nFile.DELETE));
    btnApply.setText(RedisClient.i18nFile.getText(I18nFile.APPLY));
    btnCancel.setText(RedisClient.i18nFile.getText(I18nFile.CANCEL));
    btnRefresh.setText(RedisClient.i18nFile.getText(I18nFile.REFRESH));
    btnWatch.setText(RedisClient.i18nFile.getText(I18nFile.WATCH));
    super.refreshLangUI();
  }

  /**
   * @wbp.parser.entryPoint
   */
  @Override
  protected void initData(Composite dataComposite) {
    grpValues = new Group(dataComposite, SWT.NONE);
    grpValues.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4,
        1));
    grpValues.setText(RedisClient.i18nFile.getText(I18nFile.VALUES));
    grpValues.setLayout(new GridLayout(4, false));

    table = new Table(grpValues, SWT.BORDER | SWT.FULL_SELECTION
        | SWT.MULTI);
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 6));
    table.setHeaderVisible(true);
    table.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        tableItemSelected();
      }
    });
    table.setLinesVisible(true);
   
    tblclmnNewColumn = new TableColumn(table, SWT.NONE);
    tblclmnNewColumn.setWidth(132);
    tblclmnNewColumn.setText(RedisClient.i18nFile.getText(I18nFile.FIELD));

    tblclmnMember = new TableColumn(table, SWT.NONE);
    tblclmnMember.setWidth(236);
    tblclmnMember.setText(RedisClient.i18nFile.getText(I18nFile.VALUE));

    btnAdd = new Button(grpValues, SWT.NONE);
    btnAdd.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
    btnAdd.setText(RedisClient.i18nFile.getText(I18nFile.ADD));

    btnDelete = new Button(grpValues, SWT.NONE);
    btnDelete.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false,
        1, 1));
    btnDelete.setText(RedisClient.i18nFile.getText(I18nFile.DELETE));
   
    btnApply = new Button(grpValues, SWT.NONE);
    btnApply.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
    btnApply.setText(RedisClient.i18nFile.getText(I18nFile.APPLY));
   
    btnCancel = new Button(grpValues, SWT.NONE);
    btnCancel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
    btnCancel.setText(RedisClient.i18nFile.getText(I18nFile.CANCEL));
   
    listener = new EditListener(table, true);
    table.addListener(SWT.MouseDown, listener);

    btnRefresh = new Button(grpValues, SWT.NONE);
    btnRefresh.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
    btnRefresh.setText(RedisClient.i18nFile.getText(I18nFile.REFRESH));
    btnRefresh.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        refresh();
      }
    });
   
    btnWatch = new Button(grpValues, SWT.NONE);
    btnWatch.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1));
    btnWatch.setText(RedisClient.i18nFile.getText(I18nFile.WATCH));
    btnWatch.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        WatchDialog dialog = new WatchDialog(shell.getParent()
            .getShell(), image, currentData.getValue());
        dialog.open();
      }
    });
   
    btnApply.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        switch(currentStatus){
        case Normal:
          break;
        case Add:
          break;
        case Adding:
          addData();
         
          break;
        case Edit:
          break;
        case Editing:
          addData();
         
          break;
        }
      }
    });
   
    btnCancel.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        switch(currentStatus){
        case Normal:
          break;
        case Add:
          TableItem[] addItems = table.getSelection();
          addItems[0].dispose();
         
          currentStatus = Status.Normal;
          table.setSelection(-1);
          currentData.setItem(null);
          statusChanged();
          break;
        case Adding:
          TableItem[] addingItems = table.getSelection();
          addingItems[0].dispose();
         
          currentStatus = Status.Normal;
          table.setSelection(-1);
          currentData.setItem(null);
          statusChanged();
          break;
        case Edit:
          table.setSelection(-1);
          currentStatus = Status.Normal;
          currentData.setItem(null);
          statusChanged();
          break;
        case Editing:
          currentData.reset();
          currentStatus = Status.Edit;
          listener.clickRow(currentData.getItem(), 0);
          addModifyTextListener();
          statusChanged();
          break;
        }
      }
    });
   
    btnAdd.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        switch(currentStatus){
        case Normal:
          add();
          break;
        case Add:
          break;
        case Adding:
          break;
        case Edit:
          add();
          break;
        case Editing:
          break;
        }
       
      }
    });
   
    btnDelete.addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        if(table.getSelectionCount() > 0){
          switch(currentStatus){
          case Normal:
            break;
          case Add:
            delete();
            break;
          case Adding:
            boolean ok = MessageDialog.openConfirm(shell.getParent().getShell(), RedisClient.i18nFile.getText(I18nFile.DELETE), RedisClient.i18nFile.getText(I18nFile.DELETEHASH));
            if(ok){
              delete();
            }
            break;
          case Edit:
            ok = MessageDialog.openConfirm(shell.getParent().getShell(), RedisClient.i18nFile.getText(I18nFile.DELETE), RedisClient.i18nFile.getText(I18nFile.DELETEHASH));
            if(ok){
              deleteData();
              refresh();
            }
            break;
          case Editing:
            currentData.reset();
           
            ok = MessageDialog.openConfirm(shell.getParent().getShell(), RedisClient.i18nFile.getText(I18nFile.DELETE), RedisClient.i18nFile.getText(I18nFile.DELETEHASH));
            if(ok){
              deleteData();
              refresh();
            }
            break;
          }
        }else
          statusChanged();
       
       
      }
    });
   
    initHash();
    statusChanged();
  }

  private void initHash() {
    Map<String, String> value = service.read(id, db, key);
   
    Set<Entry<String, String>> set = value.entrySet();
    Iterator<Entry<String, String>> i = set.iterator();
   
    while(i.hasNext()) {
      Map.Entry<String, String> entry = (Map.Entry<String, String>) i.next();
      TableItem item = new TableItem(table, SWT.NONE);
      String[] values = new String[]{entry.getKey(), entry.getValue()};
     
      item.setText(values);
    }
  }
  private void refresh(){
    table.removeAll();
    initHash();
    currentStatus = Status.Normal;
    statusChanged();
  }
 
  protected void tableItemSelected() {
    addModifyTextListener();
   
    TableItem[] items = table.getSelection();
    if(items.length > 0 && currentData.isItemChanged(items[0])){
     
      switch(currentStatus){
      case Normal:
        currentStatus = Status.Edit;
        statusChanged();
       
        break;
      case Add:
        currentData.getItem().dispose();
        currentStatus = Status.Edit;
        statusChanged();
       
        break;
      case Adding:
        currentData.getItem().dispose();
        currentStatus = Status.Edit;
        statusChanged();
        break;
       
      case Edit:
        break;
       
      case Editing:
        currentData.reset();
        currentStatus = Status.Edit;
        statusChanged();
        break;
      }
      currentData.setItem(items[0]);
     
    }
   
  }
   
  public void statusChanged(){
    switch(currentStatus){
    case Normal:
      btnAdd.setEnabled(true);
      btnDelete.setEnabled(false);
      setApply(false);
      btnCancel.setEnabled(false);
      btnRefresh.setEnabled(true);
      btnWatch.setEnabled(false);
      break;
    case Add:
      btnAdd.setEnabled(false);
      btnDelete.setEnabled(true);
      setApply(false);
      btnCancel.setEnabled(true);
      btnRefresh.setEnabled(true);
      btnWatch.setEnabled(false);
      break;
    case Adding:
      btnAdd.setEnabled(false);
      btnDelete.setEnabled(true);
      setApply(true);
      btnCancel.setEnabled(true);
      btnRefresh.setEnabled(false);
      btnWatch.setEnabled(false);
      break;
    case Edit:
      btnAdd.setEnabled(true);
      btnDelete.setEnabled(true);
      setApply(false);
      btnCancel.setEnabled(true);
      btnRefresh.setEnabled(true);
      btnWatch.setEnabled(true);
      break;
    case Editing:
      btnAdd.setEnabled(false);
      btnDelete.setEnabled(true);
      setApply(true);
      btnCancel.setEnabled(true);
      btnRefresh.setEnabled(false);
      btnWatch.setEnabled(false);
      break;
     
    }
  }

  private void add() {
    TableItem item = new TableItem(table, SWT.NONE, 0);
    table.setSelection(item);
    listener.clickRow(item, 0);
    currentStatus = Status.Add;
    currentData.setItem(item);
    addModifyTextListener();
    statusChanged();
  }

  private void addModifyTextListener() {
    Text editor = listener.getText();
    if(!editor.isDisposed()){
      editor.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
          switch(currentStatus){
          case Normal:
            break;
          case Add:
            currentStatus = Status.Adding;
            statusChanged();
           
            break;
          case Adding:
            break;
          case Edit:
            currentStatus = Status.Editing;
            statusChanged();
           
            break;
          case Editing:
            break;
          }
        }
      });
    }
  }

  private void delete() {
    TableItem[] items = table.getSelection();
    String[] fields  = new String[items.length];
    for(int i = 0; i < items.length; i ++){
      fields[i] = items[i].getText(0);
      items[i].dispose();
    }
    currentStatus = Status.Normal;
    statusChanged();
  }
 
  private void deleteData(){
    TableItem[] items = table.getSelection();
    String[] fields  = new String[items.length];
    for(int i = 0; i < items.length; i ++){
      fields[i] = items[i].getText(0);
      items[i].dispose();
    }
    service.delField(id, db, key, fields);
    currentStatus = Status.Normal;
    statusChanged();
  }

  private void addData() {
    TableItem[] items = table.getSelection();
    String field = items[0].getText(0);
    String value = items[0].getText(1);
   
    if(currentStatus == Status.Adding){
      if(service.isFieldExist(id, db, key, field)){
        boolean ok = MessageDialog.openConfirm(shell.getParent().getShell(), RedisClient.i18nFile.getText(I18nFile.UPDATE), RedisClient.i18nFile.getText(I18nFile.UPDATEFIELD));
        if(ok){
          service.setField(id, db, key, field, value);
          refresh();
          currentStatus = Status.Normal;
          statusChanged();
          gotoField(field);
        }
      }else{
        service.setField(id, db, key, field, value);
        refresh();
        currentStatus = Status.Normal;
        statusChanged();
        gotoField(field);
      }
    }
    if(currentStatus == Status.Editing){
      if(currentData.isFieldChanged(field) && service.isFieldExist(id, db, key, field)){
        boolean ok = MessageDialog.openConfirm(shell.getParent().getShell(), RedisClient.i18nFile.getText(I18nFile.UPDATE), RedisClient.i18nFile.getText(I18nFile.UPDATEFIELD));
        if(ok){
          service.setField(id, db, key, field, value);
          refresh();
          currentStatus = Status.Normal;
          statusChanged();
          gotoField(field);
        }
      }else{
        service.setField(id, db, key, field, value);
        refresh();
        currentStatus = Status.Normal;
        statusChanged();
        gotoField(field);
      }
    }
  }
 
  private void gotoField(String field){
    TableItem[] items = table.getItems();
   
    for(TableItem item: items){
      if(item.getText(0).equals(field)){
        table.setSelection(item);
        table.setSelection(-1);
      }
    }
  }

  @Override
  public Button getApplyButtion() {
    return btnApply;
  }
}
TOP

Related Classes of com.cxy.redisclient.presentation.hash.HashDataContent

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.