package fileLock;

import java.io.*;



public class Flock_test {
    static final String resource_name[]={"plane_reserve","hotel_reserve"};
    static final int PLANE =0;
    static final int HOTEL =1;
    static final int MAX_RESOURCE = 2;
    
    FileResource resource[]; // we con't need this, but sometime we will use it...
            
    /**
     * @param args
     * @throws IOException
     * 
     * Test routine for FileResoruce
     * 
     * javac fileLock/*.java
     * echo 1 > plane_reserve
     * echo 1 > hotel_reserve
     * java fileLock/Flock_test Adam & java file/Flock_test1 Betty
     *      You have to create Flock_test1 or try some other method to
     *      create dead lock situation. 
     * 
     */
    Flock_test() {
        resource = new FileResource[MAX_RESOURCE];
    }
    
    public static void main(String args[]) throws IOException, FileNotFoundException, InterruptedException {
        Flock_test self = new Flock_test();
        // We need an instance to make wait(int) happy. It is better than using static class.
        // For example, we can extend this example using Thread.
        self.run(args);
    }
    
    public synchronized void run(String args[]) throws IOException, InterruptedException {

        if (args[0]==null) {
            System.out.println("Please specify my name in command line.");
            return;
        }
        String myself = args[0];
        FileResource plane = resource[PLANE] = new FileResource(resource_name[PLANE]);
        FileResource hotel = resource[HOTEL] = new FileResource(resource_name[HOTEL]);
        
        plane.open_with_lock();
        if (!plane.reserve()) return;
        plane.release();
        System.out.println(plane.resource_name()+" is reserved by "+myself+".");
        
        wait(10);

        hotel.open_with_lock();
        if (!hotel.reserve()) return;
        hotel.release();        
        System.out.println(hotel.resource_name()+" is reserved "+myself+".");
    }
}