001 package com.hammurapi.eventbus.tests.fastfood;
002
003 import java.util.concurrent.atomic.AtomicBoolean;
004 import java.util.concurrent.atomic.AtomicInteger;
005
006 public class Dish {
007
008 private static AtomicInteger INSTANCE_COUNTER = new AtomicInteger();
009
010 private AtomicBoolean consumed = new AtomicBoolean(false);
011
012 private final int instanceId = INSTANCE_COUNTER.incrementAndGet();
013
014 /**
015 * Consumes dish
016 * @return true if dish successfully consumed. Dish can be consumed only once.
017 */
018 public boolean consume() {
019 if (consumed.getAndSet(true)) {
020 System.err.println("Already consumed: "+this);
021 }
022 return true;
023 }
024
025 public boolean isConsumed() {
026 return consumed.get();
027 }
028
029 @Override
030 public String toString() {
031 String cName = getClass().getName();
032 int idx = cName.lastIndexOf('.');
033 return cName.substring(idx+1)+" ("+instanceId+")";
034 }
035
036 }