package open.dolphin.order;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import open.dolphin.helper.ComponentMemory;
import open.dolphin.infomodel.IInfoModel;
import open.dolphin.infomodel.ModuleModel;
/**
* Stamp 編集用の外枠を提供する Dialog.
*
* @author Kazushi Minagawa, Digital Globe, Inc.
*/
public class StampEditor implements PropertyChangeListener {
private AbstractStampEditor editor;
private JDialog dialog;
/**
* Constructor. Use layered inititialization pattern.
* @param stamp
* @param listener
*/
public StampEditor(final ModuleModel stamp, final PropertyChangeListener listener) {
Runnable r = new Runnable() {
@Override
public void run() {
String entity = stamp.getModuleInfoBean().getEntity();
if (entity.equals(IInfoModel.ENTITY_MED_ORDER)) {
// RP
editor = new RpEditor(entity);
} else if (entity.equals(IInfoModel.ENTITY_RADIOLOGY_ORDER)) {
// Injection
editor = new RadEditor(entity);
} else if (entity.equals(IInfoModel.ENTITY_INJECTION_ORDER)) {
// Rad
editor = new InjectionEditor(entity);
} else {
//
editor = new BaseEditor(entity);
}
editor.addPropertyChangeListener(AbstractStampEditor.VALUE_PROP, listener);
editor.addPropertyChangeListener(AbstractStampEditor.EDIT_END_PROP, StampEditor.this);
editor.setValue(stamp);
dialog = new JDialog(new JFrame(), true);
dialog.setTitle(editor.getOrderName());
dialog.getContentPane().add(editor.getView(), BorderLayout.CENTER);
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
editor.getSearchTextField().requestFocus();
}
@Override
public void windowClosing(WindowEvent e) {
dialog.dispose();
dialog.setVisible(false);
}
});
dialog.pack();
ComponentMemory cm = new ComponentMemory(dialog, new Point(200,100), dialog.getPreferredSize(), this);
cm.setToPreferenceBounds();
dialog.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
public StampEditor(String entity, final PropertyChangeListener listener, final Window lock) {
Runnable r = new Runnable() {
@Override
public void run() {
editor = new DiseaseEditor();
editor.addPropertyChangeListener(AbstractStampEditor.VALUE_PROP, listener);
editor.addPropertyChangeListener(AbstractStampEditor.EDIT_END_PROP, StampEditor.this);
dialog = new JDialog((Frame) lock, true);
dialog.setTitle(editor.getOrderName());
dialog.getContentPane().add(editor.getView(), BorderLayout.CENTER);
dialog.addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
editor.getSearchTextField().requestFocus();
}
@Override
public void windowClosing(WindowEvent e) {
dialog.dispose();
dialog.setVisible(false);
}
});
dialog.pack();
ComponentMemory cm = new ComponentMemory(dialog, new Point(200,100), dialog.getPreferredSize(), this);
cm.setToPreferenceBounds();
dialog.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(AbstractStampEditor.EDIT_END_PROP)) {
Boolean b = (Boolean) evt.getNewValue();
if (b) {
dialog.dispose();
dialog.setVisible(false);
}
}
}
}