/*
	Application to generate file for registrar.
	Written 4/97 by Kim Bruce
	Updated 4/98 by Kim Bruce for Java 1.1 event model
*/

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Register extends JFrame {

	protected CardLayout cardManager;	// Layout manager allowing different panels to show
	
	// Card showing display when start game
	protected JPanel startPanel = new JPanel();			// JPanel for entire start screen
	protected JPanel topStartPanel = new JPanel();	// subJPanels to make it look nicer
	protected JPanel bottomStartPanel = new JPanel();
	
		// Buttons (and label) for actions in start screen
	protected JButton startButton = new JButton("Create new data file");
	protected JButton quitButton = new JButton("Quit");

	// Card showing display when entering new student
	protected JPanel newEntryPanel = new JPanel();	// JPanel for entering new student course selections
	
	protected JLabel studentLabel = new JLabel("Student name:",Label.RIGHT); // prompt for name
	protected JTextField studentField = new JTextField(30);	// slot for student name
	protected JLabel courseLabel = new JLabel(
					"Please enter 4 courses",JLabel.CENTER);				// prompt for courses
	protected JTextField[] courseField = new JTextField[4];	// fields for courses
	protected JPanel[] courseJPanel = new JPanel[4];					// four subJPanels for course info
	
	protected JButton enterButton = new JButton("Enter Data");	// Button to add data to file
	protected JButton eraseButton = new JButton("Clear Data");	// Button to erase data
	protected JButton noMoreButton = new JButton("No more students");	// Button to quit entering data
	protected JLabel message = new JLabel("",JLabel.CENTER);

	protected JPanel studentPanel = new JPanel();			// subJPanel for student name (and JLabel)
	protected JPanel buttonPanel = new JPanel();			// subJPanel for buttons on entry JPanel.
	
	Container contentPane;
	
	DataOutputStream outFile; // File holding course info
	/*
		post:  Creates a frame for program to run in.
	*/
	public static void main(String[] args)
	{
			// Set up and show frame
		new Register();
	}

	/*
		Set up all JPanels for program and initialize animalTree for playing.
	*/
	public Register() {
		super("Registrar data entry");
		cardManager = new CardLayout();
		contentPane = getContentPane();
		contentPane.setLayout(cardManager);
		
		startButton.setBackground(Color.green);
		startButton.addActionListener(new StartListener());
		startPanel.add(startButton);
		
		quitButton.setBackground(Color.red);
		quitButton.addActionListener(new QuitListener());
		startPanel.add(quitButton);
		
		contentPane.add("Start",startPanel);
		
		// set up data entry card
		newEntryPanel.setLayout(new GridLayout(8,1));
		studentPanel.add(studentLabel);
		studentPanel.add(studentField);
		studentField.setBackground(Color.white);
		
		newEntryPanel.add(studentPanel);
		newEntryPanel.add(courseLabel);
		
		for (int courseNo = 0; courseNo < 4; courseNo++)
		{
			courseField[courseNo] = new JTextField(30);
			courseJPanel[courseNo] = new JPanel();
			courseJPanel[courseNo].add(courseField[courseNo]);
			newEntryPanel.add(courseJPanel[courseNo]);
			courseField[courseNo].setBackground(Color.white);
		}

		enterButton.setBackground(Color.green);
		enterButton.addActionListener(new EnterListener());
		buttonPanel.add(enterButton);
		
		eraseButton.setBackground(Color.cyan);
		eraseButton.addActionListener(new EraseListener());
		buttonPanel.add(eraseButton);
		
		noMoreButton.setBackground(Color.red);
		noMoreButton.addActionListener(new NoMoreListener());
		buttonPanel.add(noMoreButton);
		
		newEntryPanel.add(buttonPanel);
		newEntryPanel.add(message);
		contentPane.add("New entry",newEntryPanel);
		
		cardManager.first(contentPane);				// Set frame so at starting JPanel	
		
		setSize(600,600);
		show();

	}		
	
	/*
		On Enter card
		post:  Clear all text fields
	*/
	public void doClear()
	{
		message.setText("");							// Clear all text fields
		studentField.setText("");
		for (int courseNo = 0; courseNo < 4; courseNo++)
			courseField[courseNo].setText("");
	}

	// Listener for start button on start card
	protected class StartListener implements ActionListener{
	
		// Open file and go to data entry field when click on start button
		public void actionPerformed(ActionEvent evt){
			String fileName;
			do{
				FileDialog dialog = new FileDialog(Register.this,"New file for students:",FileDialog.SAVE);
				dialog.show();
				fileName = dialog.getFile();
			}	while (fileName == null);
			
			try
			{
				outFile = new DataOutputStream(new FileOutputStream(fileName));
				cardManager.last(contentPane);					
			}
			catch(IOException e)															// error with file operation
			{
//				directions.setText("Not legal name!  Re-enter file name:");
			}
		}
	}
	
	// Listener for quit button on start card
	protected class QuitListener implements ActionListener{
	
		// Delete window when click on quit button
		public void actionPerformed(ActionEvent evt){
			setVisible(false);
			dispose();
		}
	}

	// Listener for enter button on Enter card
	protected class EnterListener implements ActionListener{
	
		// Store student info when click on enter button
		public void actionPerformed(ActionEvent evt){
			String name = studentField.getText();	// name of student
			String[] courses= new String[4];			// courses selected
			for (int courseNo = 0; courseNo < 4; courseNo++)
				courses[courseNo] = courseField[courseNo].getText();
			if (!name.equals("") && !courses[0].equals("") && !courses[1].equals("") && 
						!courses[2].equals("") && !courses[3].equals(""))
			{
				try{
					outFile.writeUTF(name);
					for (int courseNo = 0; courseNo < 4; courseNo++)
					{
						outFile.writeUTF(courses[courseNo]);
					}
						
					doClear();
				}
				catch (IOException e) {
					message.setText("Bad data caused write failure");
				}
			}
			else		// Some fields were blank
				message.setText("Please fill in name and all course slots");
		}
	}

	// Listener for erase button on Enter card
	protected class EraseListener implements ActionListener{
	
		// Clear all fields when click on erase button
		public void actionPerformed(ActionEvent evt){
			doClear();
		}
	}

	// Listener for "no more students" button on Enter card
	protected class NoMoreListener implements ActionListener{
	
		// Return to start card when "no more students" button
		public void actionPerformed(ActionEvent evt){
			try{
				outFile.writeUTF("$$");
				outFile.close();
			} catch(IOException e)															// error with file operation
			{
				System.out.println("File close failed!");
			}
			message.setText("");
			cardManager.first(contentPane);
		}
	}
}


