/* * The MIT License (MIT) * * Copyright (c) 2015 Camil Staps * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package com.camilstaps.bar; import java.util.ArrayList; import java.util.List; /** * A bar * @author Camil Staps, s4498062 */ public class Bar { private final Tap tap; private final List glasses; private final List drinkers; /** * Create a new Bar. Under the hood, a new Tap is created as well. * @param numberOfGlasses the number of glasses in the bar */ public Bar (int numberOfGlasses) { tap = new Tap(); glasses = new ArrayList<>(); for (int i = 0; i < numberOfGlasses; i++) { glasses.add(new Glass()); } drinkers = new ArrayList<>(); } /** * Get a glass from the bar * @return Glass if there is one available, null otherwise */ public synchronized Glass getGlass() { if (glasses.isEmpty()) return null; return glasses.remove(0); } /** * Put a glass back * @param glass */ public void putGlass(Glass glass) { glasses.add(glass); } /** * Add some number of drinkers * @param number */ public void addDrinkers(int number) { for (int i = 0; i < number; i++) { drinkers.add(new ParchedMan(i, this, tap)); } } /** * Open the bar */ public void startDrinking() { for (ParchedMan man : drinkers) { (new Thread(man)).start(); } } }