Package jfix.zk

Source Code of jfix.zk.ObjectEditor

/*
    Copyright (C) 2010 maik.jablonski@gmail.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package jfix.zk;

import jfix.util.I18N;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Hbox;

public abstract class ObjectEditor<E> extends Formbox implements Objectable<E>,
    Refreshable {

  private E object;
  private boolean initialized = false;
  private StringBuilder errorMessage = new StringBuilder();
  private Button saveButton = new Button(I18N.get("Save"),
      Images.DocumentSave);
  private Button copyButton = new Button(I18N.get("Copy"), Images.EditCopy);
  private Button deleteButton = new Button(I18N.get("Delete"),
      Images.UserTrashFull);
  private Button loadButton = new Button(I18N.get("Refresh"),
      Images.ViewRefresh);
  private Hbox buttons = new Hbox();

  public abstract void init() throws Exception;

  public abstract void load() throws Exception;

  public abstract void save() throws Exception;

  public abstract void delete() throws Exception;

  public abstract void validate() throws Exception;

  public void copy() throws Exception {
  }

  public ObjectEditor() {
    saveButton.setTooltiptext(I18N.get("Use_Right_Mouse_Button_for_Save_and_Close"));
    saveButton.addClickListener(new ActionListener() {
      public void actionPerformed(Event event) {
        invokeSave();
      }
    });
    saveButton.addEventListener(Events.ON_RIGHT_CLICK,
        new ActionListener() {
          public void actionPerformed(Event event) {
            invokeSave();
            if (errorMessage.length() == 0) {
              exit();
            }
          }
        });

    copyButton.addClickListener(new ActionListener() {
      public void actionPerformed(Event event) {
        invokeCopy();
      }
    });

    deleteButton.addClickListener(new ActionListener() {
      public void actionPerformed(Event event) {
        invokeDelete();
      }
    });

    loadButton.addClickListener(new ActionListener() {
      public void actionPerformed(Event event) {
        invokeLoad();
      }
    });

    buttons.appendChild(saveButton);
    buttons.appendChild(copyButton);
    buttons.appendChild(deleteButton);
    buttons.appendChild(loadButton);
  }

  public void refresh() {
    invokeInit();
    invokeLoad();
  }

  protected void invokeInit() {
    try {
      if (!initialized) {
        doInit();
        add("", buttons);
        initialized = true;
      }
    } catch (Exception e) {
      Modal.exception(e);
    }
  }

  protected void invokeLoad() {
    try {
      synchronized (getMonitor()) {
        doLoad();
      }
    } catch (Exception e) {
      Modal.exception(e);
    }
    disableButtons(false);
    focus();
  }

  protected void invokeSave() {
    try {
      errorMessage = new StringBuilder();
      synchronized (getMonitor()) {
        doValidate();
        if (errorMessage.length() == 0) {
          doSave();
        }
      }
      if (errorMessage.length() == 0) {
        fireChange();
        refresh();
      } else {
        Modal.error(errorMessage.toString());
      }
    } catch (Exception e) {
      Modal.exception(e);
    }
  }

  protected void invokeDelete() {
    Modal.confirm(I18N.get("Delete"), new ActionListener() {
      public void actionPerformed(Event event) {
        try {
          synchronized (getMonitor()) {
            doDelete();
          }
          fireChange();
          fireClose();
        } catch (Exception e) {
          Modal.exception(e);
        }
      }
    });
  }

  protected void invokeCopy() {
    try {
      copyObject();
      synchronized (getMonitor()) {
        doCopy();
      }
    } catch (Exception e) {
      Modal.exception(e);
    }
    disableButtons(true);
    saveButton.setDisabled(false);
    focus();
  }

  protected void copyObject() {
    try {
      setObject((E) getObject().getClass().newInstance());
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }

  protected void disableButtons(boolean disabled) {
    saveButton.setDisabled(disabled);
    copyButton.setDisabled(disabled);
    deleteButton.setDisabled(disabled);
    loadButton.setDisabled(disabled);
  }

  public String getError() {
    return errorMessage.toString();
  }

  public void addError(String text) {
    errorMessage.append(text).append(". ");
  }

  public void validate(boolean condition, String text) {
    if (condition) {
      addError(text);
    }
  }

  public void validate(String message) {
    validate(message != null, message);
  }

  public Component getButtons() {
    return buttons;
  }

  public Button getSaveButton() {
    return saveButton;
  }

  public Button getCopyButton() {
    return copyButton;
  }

  public Button getDeleteButton() {
    return deleteButton;
  }

  public Button getLoadButton() {
    return loadButton;
  }

  public void hideButtons() {
    saveButton.setVisible(false);
    copyButton.setVisible(false);
    deleteButton.setVisible(false);
    loadButton.setVisible(false);
  }

  protected void fireChange() {
    Events.sendEvent(new Event(Events.ON_CHANGE, this));
  }

  protected void fireClose() {
    Events.sendEvent(new Event(Events.ON_CLOSE, this));
  }

  public void exit() {
    fireClose();
  }

  public void addChangeListener(final ActionListener actionListener) {
    addEventListener(Events.ON_CHANGE, new EventListener() {
      public void onEvent(Event e) throws Exception {
        actionListener.actionPerformed(e);
      }
    });
  }

  public void addCloseListener(final ActionListener actionListener) {
    addEventListener(Events.ON_CLOSE, new EventListener() {
      public void onEvent(Event e) throws Exception {
        actionListener.actionPerformed(e);
      }
    });
  }

  public void setObject(E object) {
    this.object = object;
  }

  public E getObject() {
    return object;
  }

  protected void doInit() throws Exception {
    init();
  };

  protected void doLoad() throws Exception {
    load();
  };

  protected void doSave() throws Exception {
    save();
  };

  protected void doCopy() throws Exception {
    copy();
  };

  protected void doDelete() throws Exception {
    delete();
  };

  protected void doValidate() throws Exception {
    validate();
  };

  protected Object getMonitor() {
    return getObject() != null ? getObject() : this;
  }

  public String toString() {
    return String.valueOf(object);
  }
}
TOP

Related Classes of jfix.zk.ObjectEditor

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.