//package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Airplane implements Cloneable {

	class Engine {
		private boolean onFire = false;
		void catchOnFire(){
			if(!onFire){
				faultCounter++;
				onFire = true;
			}
		}
		void reset(){onFire = false;}
		public Object clone(){
			// to be implemented
			return null;
		}
	}

	private Engine[] engines = new Engine[4];
	private int faultCounter = 0;

	public Airplane(){
		for (int i=0; i<engines.length; i++){
			engines[i] = new Engine();
		}
	}

	public boolean isWarningLightOn(){return faultCounter > 0;}

	public void setOnFire(int index){
		engines[index].catchOnFire();
	}

	public void reset(){
		faultCounter = 0;
		for(int i=0; i<engines.length; i++){
			engines[i].reset();
		}
	}


	public Object clone(){
		// to be implemented
		//return null;
		try{ return super.clone();}
		catch(CloneNotSupportedException e){ return null;}
	}

}

class AirplaneTest extends JFrame {
	public static void main(String[] args){
		JFrame f = new AirplaneTest();
		f.setDefaultCloseOperation(EXIT_ON_CLOSE);
		f.setSize(200,200);
		f.setVisible(true);
	}

	public AirplaneTest(){
		final Airplane a = new Airplane();
		final Airplane b = (Airplane)a.clone();

		JPanel p = new JPanel(new java.awt.GridLayout(2,2));
		getContentPane().add(p, java.awt.BorderLayout.CENTER);

		JButton fireA = new JButton("Fire");
		p.add(fireA);
		fireA.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e){
					a.setOnFire(0);
					repaint();
				}
			}
		);
		p.add(
			new JComponent(){
				public void paint(Graphics g){
					Dimension d = getSize();
					int size = Math.min(d.width, d.height)-8;
					g.setColor(a.isWarningLightOn() ? Color.red : Color.green);
					g.fillOval((d.width-size)/2, (d.height-size)/2, size, size);
				}
			}
		);

		JButton fireB = new JButton("Fire");
		p.add(fireB);
		fireB.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e){
					b.setOnFire(0);
					repaint();
				}
			}
		);
		p.add(
			new JComponent(){
				public void paint(Graphics g){
					Dimension d = getSize();
					int size = Math.min(d.width, d.height)-8;
					g.setColor(b.isWarningLightOn() ? Color.red : Color.green);
					g.fillOval((d.width-size)/2, (d.height-size)/2, size, size);
				}
			}
		);

		JButton reset = new JButton("Reset");
		getContentPane().add(reset, java.awt.BorderLayout.SOUTH);
		reset.addActionListener(
			new ActionListener(){
				public void actionPerformed(ActionEvent e){
					a.reset();
					b.reset();
					repaint();
				}
			}
		);

	}
}
