<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to ProductService</title><link>https://sourceforge.net/p/garyproject00/wiki/ProductService/</link><description>Recent changes to ProductService</description><atom:link href="https://sourceforge.net/p/garyproject00/wiki/ProductService/feed" rel="self"/><language>en</language><lastBuildDate>Fri, 20 Apr 2018 23:19:07 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/garyproject00/wiki/ProductService/feed" rel="self" type="application/rss+xml"/><item><title>ProductService modified by Gary Cheng</title><link>https://sourceforge.net/p/garyproject00/wiki/ProductService/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v3
+++ v4
@@ -1,42 +1,62 @@
 ~~~
-package com.ezshop.product.impl;
+package com.ezshop.product;

-import com.ezshop.product.ProductService;
-import io.vertx.core.AsyncResult;
-import io.vertx.core.Future;
-import io.vertx.core.Handler;
-import io.vertx.core.json.JsonArray;
+import io.vertx.ext.unit.Async;
+import io.vertx.ext.unit.TestContext;
+import io.vertx.ext.unit.junit.VertxUnitRunner;
+import io.vertx.reactivex.core.Vertx;
 import io.vertx.reactivex.ext.jdbc.JDBCClient;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;

+import static org.junit.Assert.assertNotNull;
+
 /**
- * ProductServiceImpl
+ * ProductServiceTest
  *
  * @author Gary Cheng
  */
-public class ProductServiceImpl implements ProductService {
-    private static final Logger logger = LoggerFactory.getLogger(ProductServiceImpl.class);
+@RunWith(VertxUnitRunner.class)
+public class ProductServiceTest {
+    private static final Logger logger = LoggerFactory.getLogger(ProductServiceTest.class);
+    private static final String CONFIG_FILE = "src/conf/config.json";
+    private Vertx vertx;
+    private ProductService productService;

-    private static final String SQL_GET_ALL_CATEGORIES = "SELECT * FROM CATEGORY ORDER BY CATEGORY_NAME";
-
-    private JDBCClient jdbc;
-
-    public ProductServiceImpl(JDBCClient jdbc) {
-        this.jdbc = jdbc;
+    @Before
+    public void prepare(TestContext context) {
+        Async async = context.async();
+        this.vertx = Vertx.vertx();
+        vertx.fileSystem().rxReadFile(CONFIG_FILE)
+                .map(buffer -&amp;gt; buffer.toJsonObject())
+                .map(json -&amp;gt; JDBCClient.createShared(vertx, json.getJsonObject("database")))
+                .map(ProductService::create)
+                .subscribe(productService -&amp;gt; {
+                    this.productService = productService;
+                    async.complete();
+                });
+        async.awaitSuccess(5000);
     }

-    @Override
-    public ProductService getAllCategories(Handler&amp;lt;AsyncResult&amp;lt;JsonArray&amp;gt;&amp;gt; resultHandler) {
-        logger.debug("getAllCategories invoked");
-        jdbc.rxGetConnection()
-                .flatMap(conn -&amp;gt; jdbc.rxQuery(SQL_GET_ALL_CATEGORIES)
-                        .doAfterTerminate(conn::close)
-                        .map(resultSet -&amp;gt; new JsonArray(resultSet.getRows()))
-                ).subscribe(results -&amp;gt; resultHandler.handle(Future.succeededFuture(results)), t -&amp;gt; resultHandler.handle(Future.failedFuture(t)));
-        return this;
+    @Test
+    public void getAllCategories(TestContext context) {
+        assertNotNull(this.productService);
+        Async async = context.async();
+        this.productService.getAllCategories(ar -&amp;gt; {
+            logger.debug(ar.result().encodePrettily());
+            async.complete();
+        });
+        async.awaitSuccess(10000);
+    }
+
+    @After
+    public void finish(TestContext context) {
+        this.vertx.close(context.asyncAssertSuccess());
     }
 }

-
 ~~~
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gary Cheng</dc:creator><pubDate>Fri, 20 Apr 2018 23:19:07 -0000</pubDate><guid>https://sourceforge.netb5bc93c68a33a8bb572e6262725c2ff44b01bcfb</guid></item><item><title>ProductService modified by Gary Cheng</title><link>https://sourceforge.net/p/garyproject00/wiki/ProductService/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -1,13 +1,42 @@
 ~~~
+package com.ezshop.product.impl;
+
+import com.ezshop.product.ProductService;
+import io.vertx.core.AsyncResult;
+import io.vertx.core.Future;
+import io.vertx.core.Handler;
+import io.vertx.core.json.JsonArray;
+import io.vertx.reactivex.ext.jdbc.JDBCClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
- * package-info
+ * ProductServiceImpl
  *
  * @author Gary Cheng
  */
+public class ProductServiceImpl implements ProductService {
+    private static final Logger logger = LoggerFactory.getLogger(ProductServiceImpl.class);

-@ModuleGen(name = "com-ezshop-product", groupPackage = "com.ezshop.product")
-package com.ezshop.product;
+    private static final String SQL_GET_ALL_CATEGORIES = "SELECT * FROM CATEGORY ORDER BY CATEGORY_NAME";

-import io.vertx.codegen.annotations.ModuleGen;
+    private JDBCClient jdbc;
+
+    public ProductServiceImpl(JDBCClient jdbc) {
+        this.jdbc = jdbc;
+    }
+
+    @Override
+    public ProductService getAllCategories(Handler&amp;lt;AsyncResult&amp;lt;JsonArray&amp;gt;&amp;gt; resultHandler) {
+        logger.debug("getAllCategories invoked");
+        jdbc.rxGetConnection()
+                .flatMap(conn -&amp;gt; jdbc.rxQuery(SQL_GET_ALL_CATEGORIES)
+                        .doAfterTerminate(conn::close)
+                        .map(resultSet -&amp;gt; new JsonArray(resultSet.getRows()))
+                ).subscribe(results -&amp;gt; resultHandler.handle(Future.succeededFuture(results)), t -&amp;gt; resultHandler.handle(Future.failedFuture(t)));
+        return this;
+    }
+}
+

 ~~~
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gary Cheng</dc:creator><pubDate>Fri, 20 Apr 2018 23:09:42 -0000</pubDate><guid>https://sourceforge.net719a4cb2ae2aa2a7fc5d3d6aae3ced0be2762a2b</guid></item><item><title>ProductService modified by Gary Cheng</title><link>https://sourceforge.net/p/garyproject00/wiki/ProductService/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -1,37 +1,13 @@
 ~~~
-package com.ezshop.product;
-
-import com.ezshop.product.impl.ProductServiceImpl;
-import io.vertx.codegen.annotations.Fluent;
-import io.vertx.codegen.annotations.GenIgnore;
-import io.vertx.codegen.annotations.ProxyGen;
-import io.vertx.codegen.annotations.VertxGen;
-import io.vertx.core.AsyncResult;
-import io.vertx.core.Handler;
-import io.vertx.core.json.JsonArray;
-import io.vertx.reactivex.core.Vertx;
-import io.vertx.reactivex.ext.jdbc.JDBCClient;
-
 /**
- * The interface of service which maintain products and categories
+ * package-info
  *
  * @author Gary Cheng
  */
-@ProxyGen
-@VertxGen
-public interface ProductService {
-    @GenIgnore
-    static ProductService create(JDBCClient jdbc) {
-        return new ProductServiceImpl(jdbc);
-    }

-    @GenIgnore
-    static com.ezshop.product.reactivex.ProductService createProxy(Vertx vertx, String address) {
-        return new com.ezshop.product.reactivex.ProductService(new ProductServiceVertxEBProxy(vertx.getDelegate(), address));
-    }
+@ModuleGen(name = "com-ezshop-product", groupPackage = "com.ezshop.product")
+package com.ezshop.product;

-    @Fluent
-    ProductService getAllCategories(Handler&amp;lt;AsyncResult&amp;lt;JsonArray&amp;gt;&amp;gt; resultHandler);
-}
+import io.vertx.codegen.annotations.ModuleGen;

 ~~~
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gary Cheng</dc:creator><pubDate>Fri, 20 Apr 2018 23:07:56 -0000</pubDate><guid>https://sourceforge.net594c2d3376dbc5d1aeeaf2a8aa1fcbd2c154c7d5</guid></item><item><title>ProductService modified by Gary Cheng</title><link>https://sourceforge.net/p/garyproject00/wiki/ProductService/</link><description>&lt;div class="markdown_content"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ezshop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;com.ezshop.product.impl.ProductServiceImpl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.codegen.annotations.Fluent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.codegen.annotations.GenIgnore&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.codegen.annotations.ProxyGen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.codegen.annotations.VertxGen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.core.AsyncResult&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.core.Handler&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.core.json.JsonArray&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.reactivex.core.Vertx&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;io.vertx.reactivex.ext.jdbc.JDBCClient&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;/**&lt;/span&gt;
 &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;interface&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt; &lt;span class="n"&gt;which&lt;/span&gt; &lt;span class="n"&gt;maintain&lt;/span&gt; &lt;span class="n"&gt;products&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;
 &lt;span class="o"&gt;*&lt;/span&gt;
 &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nd"&gt;@author&lt;/span&gt; &lt;span class="n"&gt;Gary&lt;/span&gt; &lt;span class="n"&gt;Cheng&lt;/span&gt;
 &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;span class="nd"&gt;@ProxyGen&lt;/span&gt;
&lt;span class="nd"&gt;@VertxGen&lt;/span&gt;
&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;interface&lt;/span&gt; &lt;span class="n"&gt;ProductService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@GenIgnore&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;ProductService&lt;/span&gt; &lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;JDBCClient&lt;/span&gt; &lt;span class="n"&gt;jdbc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ProductServiceImpl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jdbc&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@GenIgnore&lt;/span&gt;
    &lt;span class="n"&gt;static&lt;/span&gt; &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ezshop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reactivex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ProductService&lt;/span&gt; &lt;span class="n"&gt;createProxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Vertx&lt;/span&gt; &lt;span class="n"&gt;vertx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;com&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ezshop&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;product&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reactivex&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ProductService&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ProductServiceVertxEBProxy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vertx&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getDelegate&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Fluent&lt;/span&gt;
    &lt;span class="n"&gt;ProductService&lt;/span&gt; &lt;span class="n"&gt;getAllCategories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Handler&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;AsyncResult&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;JsonArray&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;resultHandler&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gary Cheng</dc:creator><pubDate>Fri, 20 Apr 2018 23:04:43 -0000</pubDate><guid>https://sourceforge.net092d090a716573b3abb1a25f86c60d28190b01bc</guid></item></channel></rss>