From bff34cfd2175a14c0931602b16dba589f1880273 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= <iluwatar@gmail.com>
Date: Sun, 24 May 2015 21:47:57 +0300
Subject: [PATCH] Finished example.

---
 .../src/main/java/com/iluwatar/App.java       | 20 ++++++++++++++++++
 .../main/java/com/iluwatar/ObjectPool.java    | 21 +++++++++++++++++--
 .../src/main/java/com/iluwatar/Oliphaunt.java | 18 +++++++++++++++-
 3 files changed, 56 insertions(+), 3 deletions(-)

diff --git a/object-pool/src/main/java/com/iluwatar/App.java b/object-pool/src/main/java/com/iluwatar/App.java
index 5c0007cfd..1ad35a147 100644
--- a/object-pool/src/main/java/com/iluwatar/App.java
+++ b/object-pool/src/main/java/com/iluwatar/App.java
@@ -3,5 +3,25 @@ package com.iluwatar;
 public class App {
 	
     public static void main( String[] args ) {
+    	OliphauntPool pool = new OliphauntPool();
+    	System.out.println(pool);
+    	Oliphaunt oliphaunt1 = pool.checkOut();
+    	System.out.println("Checked out " + oliphaunt1);
+    	System.out.println(pool);
+    	Oliphaunt oliphaunt2 = pool.checkOut();
+    	System.out.println("Checked out " + oliphaunt2);
+    	Oliphaunt oliphaunt3 = pool.checkOut();
+    	System.out.println("Checked out " + oliphaunt3);
+    	System.out.println(pool);
+    	System.out.println("Checking in " + oliphaunt1);
+    	pool.checkIn(oliphaunt1);
+    	System.out.println("Checking in " + oliphaunt2);
+    	pool.checkIn(oliphaunt2);
+    	System.out.println(pool);
+       	Oliphaunt oliphaunt4 = pool.checkOut();
+    	System.out.println("Checked out " + oliphaunt4);
+       	Oliphaunt oliphaunt5 = pool.checkOut();
+    	System.out.println("Checked out " + oliphaunt5);
+    	System.out.println(pool);
     }
 }
diff --git a/object-pool/src/main/java/com/iluwatar/ObjectPool.java b/object-pool/src/main/java/com/iluwatar/ObjectPool.java
index 23bb16a6a..3f9d6f3aa 100644
--- a/object-pool/src/main/java/com/iluwatar/ObjectPool.java
+++ b/object-pool/src/main/java/com/iluwatar/ObjectPool.java
@@ -1,14 +1,31 @@
 package com.iluwatar;
 
+import java.util.HashSet;
+
 public abstract class ObjectPool<T> {
 
+	HashSet<T> available = new HashSet<>();
+	HashSet<T> inUse = new HashSet<>();
+	
 	protected abstract T create();
 	
 	public synchronized T checkOut() {
-		return null;
+		if (available.size() <= 0) {
+			available.add(create());
+		}
+		T instance = available.iterator().next();
+		available.remove(instance);
+		inUse.add(instance);
+		return instance;
 	}
 	
 	public synchronized void checkIn(T instance) {
-		
+		inUse.remove(instance);
+		available.add(instance);
+	}
+	
+	@Override
+	public String toString() {
+		return String.format("Pool available=%d inUse=%d", available.size(), inUse.size());
 	}
 }
diff --git a/object-pool/src/main/java/com/iluwatar/Oliphaunt.java b/object-pool/src/main/java/com/iluwatar/Oliphaunt.java
index 61e926b57..928168dfe 100644
--- a/object-pool/src/main/java/com/iluwatar/Oliphaunt.java
+++ b/object-pool/src/main/java/com/iluwatar/Oliphaunt.java
@@ -1,5 +1,21 @@
 package com.iluwatar;
 
 public class Oliphaunt {
-
+	
+	private static int counter = 1;
+	
+	private final int id;
+	
+	public Oliphaunt() {
+		id = counter++;
+	}
+	
+	public int getId() {
+		return id;
+	}
+	
+	@Override
+	public String toString() {
+		return String.format("Oliphaunt id=%d", id);
+	}
 }