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    }