1   /*
2    * $Id: FruitBowl.java 11283 2008-03-09 11:32:42Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.tck.testmodels.fruit;
12  
13  import java.util.ArrayList;
14  import java.util.Collections;
15  import java.util.HashMap;
16  import java.util.Iterator;
17  import java.util.List;
18  import java.util.Map;
19  
20  import org.apache.commons.logging.Log;
21  import org.apache.commons.logging.LogFactory;
22  
23  public class FruitBowl
24  {
25      /** logger used by this class */
26      private static final Log logger = LogFactory.getLog(FruitBowl.class);
27  
28      private final Map bowl = Collections.synchronizedMap(new HashMap());
29  
30      public FruitBowl()
31      {
32          super();
33      }
34  
35      public FruitBowl(Fruit fruit[])
36      {
37          for (int i = 0; i < fruit.length; i++)
38          {
39              bowl.put(fruit[i].getClass(), fruit[i]);
40          }
41      }
42  
43      public FruitBowl(Apple apple, Banana banana)
44      {
45          bowl.put(Apple.class, apple);
46          bowl.put(Banana.class, banana);
47      }
48  
49      public boolean hasApple()
50      {
51          return bowl.get(Apple.class) != null;
52      }
53  
54      public boolean hasBanana()
55      {
56          return bowl.get(Banana.class) != null;
57      }
58  
59      public Fruit[] addAppleAndBanana(Apple apple, Banana banana)
60      {
61          bowl.put(Apple.class, apple);
62          bowl.put(Banana.class, banana);
63          return new Fruit[]{apple, banana};
64      }
65  
66      public Fruit[] addBananaAndApple(Banana banana, Apple apple)
67      {
68          bowl.put(Apple.class, apple);
69          bowl.put(Banana.class, banana);
70          return new Fruit[]{banana, apple};
71  
72      }
73  
74      public List getFruit()
75      {
76          return new ArrayList(bowl.values());
77      }
78  
79      public Object consumeFruit(FruitLover fruitlover)
80      {
81          logger.debug("Got a fruit lover who says: " + fruitlover.speak());
82          for (Iterator iter = bowl.values().iterator(); iter.hasNext();)
83          {
84              ((Fruit) iter.next()).bite();
85          }
86          return fruitlover;
87      }
88  
89      public void setFruit(Fruit[] fruit)
90      {
91          for (int i = 0; i < fruit.length; i++)
92          {
93              bowl.put(fruit[i].getClass(), fruit[i]);
94          }
95      }
96  
97      public void setFruit(List fruit)
98      {
99          this.setFruit((Fruit[]) fruit.toArray(new Fruit[fruit.size()]));
100     }
101 
102     public Apple getApple()
103     {
104         return (Apple) bowl.get(Apple.class);
105     }
106 
107     public void setApple(Apple apple)
108     {
109         bowl.put(Apple.class, apple);
110     }
111 
112     public Banana getBanana()
113     {
114         return (Banana) bowl.get(Banana.class);
115     }
116 
117     public void setBanana(Banana banana)
118     {
119         bowl.put(Banana.class, banana);
120     }
121 
122 }