//
// Created by Grishul Eugeny
//
// Copyright © Grishul Eugeny 2008
//

import java.awt.Toolkit;
import java.awt.Window;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.io.File;
import java.io.FileInputStream;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.TransferHandler;

public class EditEmployeeForm extends javax.swing.JDialog {
	public DbLayer DbLayerInstance;
	private DbEmployee _currentEmployee;
	private boolean _createEmployeeMode = false;

	public EditEmployeeForm( DbLayer dblayerInstance, Window parent, DbEmployee employee ) {
		super( parent, ModalityType.DOCUMENT_MODAL );

		try {
			initComponents();
			DbLayerInstance = dblayerInstance;
			_photography.setTransferHandler( this.new FileDropHandler() );

			_createEmployeeMode = employee == null;
			_currentEmployee = employee;

			refreshInformation();
		} catch( Throwable excpt ) {
			JOptionPane.showMessageDialog( this, excpt.getMessage() );
		}
		
		setLocationRelativeTo( parent );
	}

	public void refreshInformation() throws Throwable {
		if( _currentEmployee != null ) {
			_login.setText( _currentEmployee.Login );

			if( !_createEmployeeMode )
				_password.setText( _currentEmployee.Password );

			_passport.setText( _currentEmployee.Passport );
			_name.setText( _currentEmployee.Name );
			_surname.setText( _currentEmployee.Surname );
			_patronymic.setText( _currentEmployee.Patronymic );
			_birthDate.setValue( new Date( _currentEmployee.BirthDate.getTime() ) );
			_description.setText( _currentEmployee.Description );
			_photography.setBackgroundImage( _currentEmployee.Photography );
			_role.setSelectedIndex( _currentEmployee.Role.getValue() );
		} else {
			_login.setText( "" );
			_password.setText( "" );
			_name.setText( "" );
			_surname.setText( "" );
			_patronymic.setText( "" );
			_birthDate.setText( "" );
			_description.setText( "" );
			_photography.setBackgroundImage( null );
			_role.setSelectedIndex( 1 );
		}
	}
	private class FileDropHandler extends TransferHandler {
		@Override
		public boolean canImport( JComponent arg0, DataFlavor[] arg1 ) {
			for( int i = 0; i < arg1.length; i++ ) {
				DataFlavor flavor = arg1[i];

				if( flavor.equals( DataFlavor.javaFileListFlavor ) )
					return true;

				System.err.println( "Непонятный дроп: " + flavor );
			}
			return false;
		}

		@Override
		public boolean importData( JComponent comp, Transferable t ) {
			try {
				DataFlavor[] flavors = t.getTransferDataFlavors();
				for( int i = 0; i < flavors.length; i++ ) {
					DataFlavor flavor = flavors[i];
					if( flavor.equals( DataFlavor.javaFileListFlavor ) ) {
						List l = ( List ) t.getTransferData( DataFlavor.javaFileListFlavor );
						Iterator iter = l.iterator();

						while( iter.hasNext() ) {
							File droppedFile = ( File ) iter.next();

							FileInputStream droppedFileReader = null;

							byte[] droppedFileContents = new byte[( int ) droppedFile.length()];
							try {
								droppedFileReader = new FileInputStream( droppedFile );
								droppedFileReader.read( droppedFileContents );
								
								_photography.setBackgroundImage( droppedFileContents );
							} finally {
								if( droppedFileReader != null )
									droppedFileReader.close();
							}
						}

						return true;
					}
				}

				Toolkit.getDefaultToolkit().beep();
			} catch( Throwable excpt ) {
				JOptionPane.showMessageDialog( comp, excpt.getMessage() );
			}
			return false;
		}
	}
	@SuppressWarnings( "unchecked" )
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        _changePhotoMenu = new javax.swing.JPopupMenu();
        _findPhoto = new javax.swing.JMenuItem();
        _surnameLabel = new javax.swing.JLabel();
        _nameLabel = new javax.swing.JLabel();
        _patronymicLabel = new javax.swing.JLabel();
        _roleLabel = new javax.swing.JLabel();
        _birthDateLabel = new javax.swing.JLabel();
        _descriptionLabel = new javax.swing.JLabel();
        _surname = new javax.swing.JTextField();
        _name = new javax.swing.JTextField();
        _patronymic = new javax.swing.JTextField();
        _login = new javax.swing.JTextField();
        _descriptionScroll = new javax.swing.JScrollPane();
        _description = new javax.swing.JTextArea();
        _ok = new javax.swing.JButton();
        _cancel = new javax.swing.JButton();
        _passportLabel = new javax.swing.JLabel();
        _passport = new javax.swing.JTextField();
        _loginLabel = new javax.swing.JLabel();
        _passwordLabel = new javax.swing.JLabel();
        _role = new javax.swing.JComboBox();
        _password = new javax.swing.JTextField();
        _birthDate = new javax.swing.JFormattedTextField();
        _photography = new ImagePanel();

        _findPhoto.setText("найти фотографию");
        _findPhoto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _findPhotoActionPerformed(evt);
            }
        });
        _changePhotoMenu.add(_findPhoto);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Редактировать сотрудника");
        setResizable(false);

        _surnameLabel.setText("Фамилия:");

        _nameLabel.setText("Имя:");

        _patronymicLabel.setText("Отчество:");

        _roleLabel.setText("Роль:");

        _birthDateLabel.setText("Дата рождения:");

        _descriptionLabel.setText("Характеристика:");

        _description.setColumns(20);
        _description.setFont(new java.awt.Font("Tahoma", 0, 11)); // NOI18N
        _description.setRows(5);
        _descriptionScroll.setViewportView(_description);

        _ok.setText("OK");
        _ok.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _okActionPerformed(evt);
            }
        });

        _cancel.setText("Отмена");
        _cancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                _cancelActionPerformed(evt);
            }
        });

        _passportLabel.setText("Паспорт:");

        _passport.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                _passportKeyReleased(evt);
            }
        });

        _loginLabel.setText("Логин:");

        _passwordLabel.setText("Пароль:");

        _role.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Руководитель", "Научный сотрудник", "Тестировщик", "Сотрудник службы безопасности", "Сотрудник технической поддержки" }));

        _birthDate.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.DateFormatter()));

        _photography.setToolTipText("фотография");
        _photography.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                _photographyMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout _photographyLayout = new javax.swing.GroupLayout(_photography);
        _photography.setLayout(_photographyLayout);
        _photographyLayout.setHorizontalGroup(
            _photographyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 236, Short.MAX_VALUE)
        );
        _photographyLayout.setVerticalGroup(
            _photographyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 455, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(_passportLabel)
                    .addComponent(_surnameLabel)
                    .addComponent(_nameLabel)
                    .addComponent(_patronymicLabel)
                    .addComponent(_birthDateLabel)
                    .addComponent(_roleLabel)
                    .addComponent(_loginLabel)
                    .addComponent(_passwordLabel)
                    .addComponent(_descriptionLabel))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(_ok, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(_cancel))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(45, 45, 45)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(_password, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
                            .addComponent(_login, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
                            .addComponent(_descriptionScroll, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)))
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(45, 45, 45)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(_passport, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
                            .addComponent(_birthDate, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
                            .addComponent(_surname, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
                            .addComponent(_name, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
                            .addComponent(_patronymic, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE)
                            .addComponent(_role, javax.swing.GroupLayout.Alignment.TRAILING, 0, 274, Short.MAX_VALUE))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(_photography, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(_photography, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_passportLabel)
                            .addComponent(_passport, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(9, 9, 9)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_surname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(_surnameLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_name, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(_nameLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_patronymic, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(_patronymicLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_birthDate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(_birthDateLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_roleLabel)
                            .addComponent(_role, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_loginLabel)
                            .addComponent(_login, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(_password, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(_passwordLabel))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(_descriptionScroll, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                    .addComponent(_cancel)
                                    .addComponent(_ok)))
                            .addComponent(_descriptionLabel))))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void _passportKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event__passportKeyReleased
	try {
		if( _createEmployeeMode ) {
			_currentEmployee = DbLayerInstance.getEmployeeInfoByPassport( _passport.getText() );
			refreshInformation();
		}
	} catch( Throwable excpt ) {
		JOptionPane.showMessageDialog( this, excpt.getMessage() );
	}
}//GEN-LAST:event__passportKeyReleased

private void _okActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__okActionPerformed
	try {
		if( _createEmployeeMode )
			_currentEmployee = new DbEmployee();

		_currentEmployee.Login = _login.getText();
		_currentEmployee.Password = _password.getText();
		_currentEmployee.Passport = _passport.getText();
		_currentEmployee.Name = _name.getText();
		_currentEmployee.Surname = _surname.getText();
		_currentEmployee.Patronymic = _patronymic.getText();
		_currentEmployee.BirthDate = new Timestamp( ( ( Date ) _birthDate.getValue() ).getTime() );
		_currentEmployee.Description = _description.getText();
		_currentEmployee.Role = EnterpriseRole.fromValue( _role.getSelectedIndex() );
		_currentEmployee.Photography = _photography.getBackgroundImage();

		if( _login.getText().equals( "" ) ) {
			JOptionPane.showMessageDialog( this, "Напиши в логине хоть чего-нибудь!" );
			_login.requestFocus();
			return;
		}

		if( _password.getText().equals( "" ) ) {
			JOptionPane.showMessageDialog( this, "Напиши в пароле хоть чего-нибудь!" );
			_password.requestFocus();
			return;
		}

		if( _passport.getText().equals( "" ) ) {
			JOptionPane.showMessageDialog( this, "Напиши в паспорте хоть чего-нибудь!" );
			_passport.requestFocus();
			return;
		}

		if( _name.getText().equals( "" ) ) {
			JOptionPane.showMessageDialog( this, "Напиши в имени хоть чего-нибудь!" );
			_name.requestFocus();
			return;
		}

		if( _surname.getText().equals( "" ) ) {
			JOptionPane.showMessageDialog( this, "Напиши в фамилии хоть чего-нибудь!" );
			_surname.requestFocus();
			return;
		}

		if( _patronymic.getText().equals( "" ) ) {
			JOptionPane.showMessageDialog( this, "Напиши в отчестве хоть чего-нибудь!" );
			_patronymic.requestFocus();
			return;
		}

		if( _description.getText().equals( "" ) ) {
			JOptionPane.showMessageDialog( this, "Напиши в характеристике хоть чего-нибудь!" );
			_patronymic.requestFocus();
			return;
		}


		if( _createEmployeeMode )
			DbLayerInstance.addEmployee( _currentEmployee );
		else
			DbLayerInstance.updateEmployeeInfo( _currentEmployee );

		dispose();
	} catch( Throwable excpt ) {
		JOptionPane.showMessageDialog( this, excpt.getMessage() );
	}
}//GEN-LAST:event__okActionPerformed

private void _cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__cancelActionPerformed
	dispose();
}//GEN-LAST:event__cancelActionPerformed

private void _findPhotoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event__findPhotoActionPerformed
try {
		JFileChooser openFileDialog = new JFileChooser();

		if( openFileDialog.showOpenDialog( this ) == JFileChooser.APPROVE_OPTION ) {
			FileInputStream selectedFileReader = null;

			byte[] imageData = new byte[( int ) openFileDialog.getSelectedFile().length()];
			try {
				selectedFileReader = new FileInputStream( openFileDialog.getSelectedFile() );
				selectedFileReader.read( imageData );

				_photography.setBackgroundImage( imageData );
			} finally {
				if( selectedFileReader != null )
					selectedFileReader.close();
			}
		}
	} catch( Throwable excpt ) {
		JOptionPane.showMessageDialog( this, excpt.getMessage() );
	}
}//GEN-LAST:event__findPhotoActionPerformed

private void _photographyMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event__photographyMouseClicked
try {
		if( SwingUtilities.isRightMouseButton( evt ) ) {
			_changePhotoMenu.show( _photography, evt.getX(), evt.getY() );
		}
	} catch( Throwable excpt ) {
		JOptionPane.showMessageDialog( this, excpt.getMessage() );
	}
}//GEN-LAST:event__photographyMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JFormattedTextField _birthDate;
    private javax.swing.JLabel _birthDateLabel;
    private javax.swing.JButton _cancel;
    private javax.swing.JPopupMenu _changePhotoMenu;
    private javax.swing.JTextArea _description;
    private javax.swing.JLabel _descriptionLabel;
    private javax.swing.JScrollPane _descriptionScroll;
    private javax.swing.JMenuItem _findPhoto;
    private javax.swing.JTextField _login;
    private javax.swing.JLabel _loginLabel;
    private javax.swing.JTextField _name;
    private javax.swing.JLabel _nameLabel;
    private javax.swing.JButton _ok;
    private javax.swing.JTextField _passport;
    private javax.swing.JLabel _passportLabel;
    private javax.swing.JTextField _password;
    private javax.swing.JLabel _passwordLabel;
    private javax.swing.JTextField _patronymic;
    private javax.swing.JLabel _patronymicLabel;
    private ImagePanel _photography;
    private javax.swing.JComboBox _role;
    private javax.swing.JLabel _roleLabel;
    private javax.swing.JTextField _surname;
    private javax.swing.JLabel _surnameLabel;
    // End of variables declaration//GEN-END:variables
}
Соседние файлы в папке src