diff --git a/ChatService/src/java/org/ChatService/SendMessage.java b/ChatService/src/java/org/ChatService/SendMessage.java
index 6c39db8ab2936e2aa8ee7bbe2a3733eb7d7e0da6..441ac62454900ed67e8ee8e3448f798e44b32a91 100644
--- a/ChatService/src/java/org/ChatService/SendMessage.java
+++ b/ChatService/src/java/org/ChatService/SendMessage.java
@@ -50,7 +50,7 @@ public class SendMessage extends HttpServlet {
                 String username = request.getParameter("username");
                 String usernamereceiver = request.getParameter("usernamereceiver");
                 String message = request.getParameter("message");
-                sql = "SELECT * FROM chattoken WHERE usernamereceiver=\""+usernamereceiver+"\";";
+                sql = "SELECT * FROM chattoken WHERE username=\""+usernamereceiver+"\";";
                 ResultSet rs = stmt.executeQuery(sql);
                 if(rs.next()){
                     JSONObject json = new JSONObject();
@@ -68,13 +68,14 @@ public class SendMessage extends HttpServlet {
                     json1.put("to",usernamereceiver);
                     json1.put("message",message);
                     json.put("data",json1);
-                    System.out.println(json.toString());
+                    System.out.println("Masuk sini "+json.toString());
                     String url = "https://fcm.googleapis.com/fcm/send";
                     URL obj = new URL(url);
                     HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                     con.setRequestMethod("POST");
+                    con.setDoOutput(true);
                     con.setRequestProperty("Content-Type","application/json");
-                    con.setRequestProperty("Authorization","key:AIzaSyAQ2WIB6GWOxmtwMdGd8eHawL4PWxK8evU");
+                    con.setRequestProperty("Authorization","key=AIzaSyBkDljDoMLYg9F-HZOxVdsVryEScwF3DWE");
                     DataOutputStream wr = new DataOutputStream(con.getOutputStream());
                     String urlParameters = json.toString();
                     wr.writeBytes(urlParameters);
@@ -82,31 +83,15 @@ public class SendMessage extends HttpServlet {
                     wr.close();
                     con.setReadTimeout(15*1000);
                     con.connect();
-                    /* OutputStreamWriter outputWriter = new OutputStreamWriter(con.getOutputStream());
-                    outputWriter.write(urlParameters);
-                    outputWriter.flush(); */
-
                     BufferedReader br = new BufferedReader(new InputStreamReader((con.getInputStream())));
                     StringBuilder sb = new StringBuilder();
                     String output;
                     while ((output = br.readLine()) != null) {
                         sb.append(output);
                     }
+                    PrintWriter out = response.getWriter();
+                    out.println(sb);
                 }
-                
-                /* format 
-                https://fcm.googleapis.com/fcm/send
-                Content-Type:application/json
-                Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA
-
-                { "data": {
-                    "score": "5x1",
-                    "time": "15:10"
-                },
-                  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
-                }
-
-                */
             }
             else{
                 try (PrintWriter out = response.getWriter()) {
diff --git a/IdentService/build/web/WEB-INF/classes/org/IdentService/register.class b/IdentService/build/web/WEB-INF/classes/org/IdentService/register.class
index 7a2a9b0ce89fc92347cd547e313812f040103aa9..89d6cedc71b6ff4513b6dd573382bf496a3ea9fa 100644
Binary files a/IdentService/build/web/WEB-INF/classes/org/IdentService/register.class and b/IdentService/build/web/WEB-INF/classes/org/IdentService/register.class differ
diff --git a/IdentService/dist/IdentService.war b/IdentService/dist/IdentService.war
index 6c77fc900fa8231d6cebbe1cb121b47fa9163203..25c4485aefa7fbce7fb4ada7340ceb87ae91dfe2 100644
Binary files a/IdentService/dist/IdentService.war and b/IdentService/dist/IdentService.war differ
diff --git a/IdentService/nbproject/private/private.properties b/IdentService/nbproject/private/private.properties
index 17b05e1fd355984e3470323a00669e8abef06ddb..28552d4ee798943351d4484319b203bb00c39ea6 100644
--- a/IdentService/nbproject/private/private.properties
+++ b/IdentService/nbproject/private/private.properties
@@ -1,7 +1,7 @@
-deploy.ant.properties.file=/home/khrs/.netbeans/8.2/config/GlassFishEE6/Properties/gfv3-2049786751.properties
+deploy.ant.properties.file=C:\\Users\\Frys\\AppData\\Roaming\\NetBeans\\8.2\\config\\GlassFishEE6\\Properties\\gfv31137312071.properties
 j2ee.platform.is.jsr109=true
-j2ee.server.domain=/home/khrs/glassfish-4.1.1/glassfish/domains/domain1
-j2ee.server.home=/home/khrs/glassfish-4.1.1/glassfish
-j2ee.server.instance=[/home/khrs/glassfish-4.1.1/glassfish:/home/khrs/glassfish-4.1.1/glassfish/domains/domain1]deployer:gfv3ee6wc:localhost:4848
-j2ee.server.middleware=/home/khrs/glassfish-4.1.1
+j2ee.server.domain=C:/Users/Frys/GlassFish_Server/glassfish/domains/domain-client
+j2ee.server.home=C:/Users/Frys/GlassFish_Server/glassfish
+j2ee.server.instance=[C:\\Users\\Frys\\GlassFish_Server\\glassfish;C:\\Users\\Frys\\GlassFish_Server\\glassfish\\domains\\domain-client]deployer:gfv3ee6wc:localhost:4848
+j2ee.server.middleware=C:/Users/Frys/GlassFish_Server
 user.properties.file=/home/khrs/.netbeans/8.2/build.properties
diff --git a/IdentService/nbproject/project.properties b/IdentService/nbproject/project.properties
index 28548e29efd8a7fc5f43c22c14d86942eae450e3..a0430600ebb76a4a8491598571e99105f567a528 100644
--- a/IdentService/nbproject/project.properties
+++ b/IdentService/nbproject/project.properties
@@ -41,8 +41,8 @@ j2ee.platform=1.7-web
 =======
 >>>>>>> bcf1435806005cb1ed3347eeb593de560332f805
 j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
-j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
-j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
+j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
+j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
 j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar
 j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar
 j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar
diff --git a/IdentService/src/java/org/IdentService/register.java b/IdentService/src/java/org/IdentService/register.java
index b31cda0a8ab0e15f87b108d172d4b454dcc0a6bf..f49434004cefe9b9fa4748039ab8982228e465f8 100644
--- a/IdentService/src/java/org/IdentService/register.java
+++ b/IdentService/src/java/org/IdentService/register.java
@@ -28,7 +28,7 @@ import org.json.simple.JSONObject;
  */
 public class register extends HttpServlet {
     
-    RandomString tokenGenerator = new RandomString(7);
+    RandomString tokenGenerator = new RandomString(5);
 
     
     /**
@@ -103,7 +103,6 @@ public class register extends HttpServlet {
                         +email+"\")";
                 ResultSet rs = stmt.executeQuery(sql);
                 if (!rs.next()){
-                   String generatedToken = tokenGenerator.nextString();
                    Calendar cal = Calendar.getInstance();
                    int hours = cal.get(Calendar.HOUR_OF_DAY);
                    if(hours != 23)
@@ -113,7 +112,7 @@ public class register extends HttpServlet {
                    Date dt = cal.getTime();
                    //token akan expire dalam 20 menit
                    Timestamp ts = new Timestamp(dt.getTime());
-                   generatedToken +=  ts.getTime();
+                   String generatedToken = generateToken(request);
                    
                     //System.out.println("tes1");
                     sql = "INSERT INTO account(fullname,username,email,password,address,postal_code,phone_number)"
@@ -122,7 +121,7 @@ public class register extends HttpServlet {
 
                     stmt.executeUpdate(sql);
  
-                                       System.out.println("tes1");
+                    System.out.println("tes1");
 
                    sql = "select * from account where (username=\""+username+"\")";
                    rs = stmt.executeQuery(sql);
@@ -166,5 +165,13 @@ public class register extends HttpServlet {
     public String getServletInfo() {
         return "Short description";
     }// </editor-fold>
+    
+    public String generateToken(HttpServletRequest request){
+        String token;
+        String user_agent = request.getParameter("user_agent");
+        String ip = request.getParameter("ip");
+        token = tokenGenerator.nextString() + "|" + user_agent + '|' + ip;
+        return token;
+    }
 
 }
diff --git a/KAA-JSP/build/web/WEB-INF/classes/org/saleproject/KAA/tokenParser.class b/KAA-JSP/build/web/WEB-INF/classes/org/saleproject/KAA/tokenParser.class
index e9947b4f2d90b0b0d65f91b5576095848d3b067e..616683539244637a7013eecf109e7a46c248a286 100644
Binary files a/KAA-JSP/build/web/WEB-INF/classes/org/saleproject/KAA/tokenParser.class and b/KAA-JSP/build/web/WEB-INF/classes/org/saleproject/KAA/tokenParser.class differ
diff --git a/KAA-JSP/build/web/catalog.jsp b/KAA-JSP/build/web/catalog.jsp
index b8adfec7c8163bb15f8688b4358324062ebb8754..bb83ad564c5ded0e6a7a2b0211f6dca3e31b984e 100644
--- a/KAA-JSP/build/web/catalog.jsp
+++ b/KAA-JSP/build/web/catalog.jsp
@@ -42,7 +42,24 @@
 
         <!--Application -->
         <script src="scripts/app.js"></script>
-
+        <script type="text/javascript">
+            // Fungsi AJAX untuk memproses likes (tambah, kurang, atau tampilkan)
+            function getState(username, product_id) {
+                var xmlhttp = new XMLHttpRequest();
+                xmlhttp.onreadystatechange = function () {
+                    if (this.readyState == 4 && this.status == 200) {
+                        var obj = JSON.parse(this.responseText);
+                        if (obj.status === 'ON') {
+                            document.getElementById("status" + username + product_id).innerHTML = "<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/on.png\">";
+                        } else {
+                            document.getElementById("status" + username + product_id).innerHTML = "<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/off.png\">";
+                        }
+                    }
+                };
+                xmlhttp.open("GET", "http://localhost:8080/ChatService/RetrieveStatus?username=" + username, true);
+                xmlhttp.send();
+            };
+        </script>
 
     </head>
     <body ng-app="chatApp" ng-controller="chatController">
@@ -246,18 +263,10 @@
                             out.print("<p>No product to be sold.</p>");
                         } else {
                             for (int i = 0; i < result.size(); i++) {
-                                urlParamChat = "username=" + result.get(i).getUsername();
-                                RestAPI_consumer consumer2 = new RestAPI_consumer(urlRequest2, urlParamChat);
-                                consumer2.execute();
-                                responseJSON = consumer2.getOutput();
-                                if (responseJSON.get("status").equals("ON")) {
-                                    out.print("<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/on.png\">");
-                                    out.print("<a href=\"\"><div ng-click=\"setReceiver('" + result.get(i).getUsername() + "')\"><p><b>" + result.get(i).getUsername() + "</a></b><br/>");
-                                } else {
-                                    out.print("<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/off.png\">");
-                                    out.print("<a href=\"\"><div ng-click=\"setReceiver('" + result.get(i).getUsername() + "')\"><p><b>" + result.get(i).getUsername() + "</a></b><br/>");
-                                }
-                                out.print("added this on " + result.get(i).getDate().getDate() + "</p></div>");
+                                out.print("<script>setInterval(function(){ getState('" + result.get(i).getUsername() + "','" + result.get(i).getProductId() + "'); }, 1000);</script>");
+                                out.print("<div id=\"status" + result.get(i).getUsername() + result.get(i).getProductId() +"\"></div>");
+                                out.print("<a href=\"\"><div ng-click=\"setReceiver('" + result.get(i).getUsername() + "')\"><p><b>" + result.get(i).getUsername() + "</a></b><br/></div>");
+                                out.print("added this on " + result.get(i).getDate().getDate() + "</p>");
                                 out.print("<hr/>");
                                 out.print("<table>");
                                 out.print("<tr class = \"container\">");
@@ -341,7 +350,7 @@
                     }
                 }
             %>
-            
+
             {{user}}
             <br>
             <div class="popup-box chat-popup" id="1" ng-show="isReceiverSet()" style="right: 0px; display: block;">
@@ -351,7 +360,7 @@
                     <div style="clear: both"></div>
                 </div>
                 <div class="popup-messages">
-                    
+
                     <li ng-repeat="message in messages" style="list-style-type:none">
                         <div ng-if="(message.name === receiver) && (message.to === user)" class="talk-bubble tri-right left-top">
                             <div class="talktext">
diff --git a/KAA-JSP/build/web/register.jsp b/KAA-JSP/build/web/register.jsp
index 786f725289c8822cf9ee8a2ac67a38198dce5625..a098886236506e0926e612a33eda1764cad87c4e 100644
--- a/KAA-JSP/build/web/register.jsp
+++ b/KAA-JSP/build/web/register.jsp
@@ -4,6 +4,7 @@
     Author     : khrs
 --%>
 
+<%@page import="org.saleproject.KAA.GetIP"%>
 <%@page import="java.io.OutputStreamWriter"%>
 <%@page import="java.io.DataOutputStream"%>
 <%@page import="java.nio.charset.StandardCharsets"%>
@@ -30,6 +31,8 @@
                 String fulladdress = request.getParameter("fulladdress");
                 String postalcode = request.getParameter("postalcode");
                 String phonenumber = request.getParameter("phonenumber");
+                String userAgent = request.getHeader("user-agent");
+                String userIP = GetIP.getClientIpAddress(request);
                 
 
                 String urlParameters  = 
@@ -39,35 +42,20 @@
                         "&email="+email+
                         "&fulladdress=" +fulladdress+
                         "&postalcode=" + postalcode + 
-                        "&phonenumber=" + phonenumber;
+                        "&phonenumber=" + phonenumber+
+                        "&user_agent=" + userAgent + "&ip=" + userIP;
 
-                String urlRequest = "http://localhost:8080/IdentService/register";
-                
+                String urlRequest = "http://localhost:8080/IdentService/register";       
                 obj = new URL(urlRequest);
                 HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                  con.setDoOutput( true );
                 con.setRequestMethod( "POST" );
-
-                /*byte[] postData       = urlParameters.getBytes();
-                int    postDataLength = postData.length; */       
-               
-//                con.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
-               // con.setRequestProperty( "charset", "utf-8");
-                //con.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
-/*                con.setUseCaches( false );
-                try( DataOutputStream wr = new DataOutputStream( con.getOutputStream())) {
-                   wr.write( postData );
-                } */
                 DataOutputStream wr = new DataOutputStream(con.getOutputStream());
                 wr.writeBytes(urlParameters);
                 wr.flush();
                 wr.close();
                 con.setReadTimeout(15*1000);
                 con.connect();
-                /* OutputStreamWriter outputWriter = new OutputStreamWriter(con.getOutputStream());
-                outputWriter.write(urlParameters);
-                outputWriter.flush(); */
-
                 BufferedReader br = new BufferedReader(new InputStreamReader((con.getInputStream())));
                 StringBuilder sb = new StringBuilder();
                 String output;
@@ -89,18 +77,6 @@
                 else{
                     message = (String) responseJSON.get("message");
                 }
-
-
-                /* Consuming API using GET method */
-/*                String user = request.getParameter("username");
-                String pass = request.getParameter("password");
-                String urlParameter = "username="+user+"&password="+pass;
-                //String urlRequest = "http://localhost:8080/IdentService/login?"+
-                        //urlParameter;
-                obj = new URL(urlRequest);
-                //HttpURLConnection con = (HttpURLConnection) obj.openConnection();*/
-                
-
             }
             catch(Exception e){
                 e.printStackTrace();
@@ -175,6 +151,7 @@
                 <div style="padding-left: 91%;">
                     <input type="submit" value="REGISTER">
                 </div>
+                <input type="hidden" name="chattoken" id="chattoken">
             </form>
             </div>
             <div>
@@ -244,6 +221,46 @@
             }
             return (true);
 	}
-	</script>
+	</script
+        <!-- Firebase -->
+        <script src="https://www.gstatic.com/firebasejs/3.6.1/firebase.js"></script>
+        <script>
+            var config = {
+                apiKey: "AIzaSyAQ2WIB6GWOxmtwMdGd8eHawL4PWxK8evU",
+                authDomain: "tugas-besar-wbd.firebaseapp.com",
+                databaseURL: "https://tugas-besar-wbd.firebaseio.com",
+                storageBucket: "tugas-besar-wbd.appspot.com",
+                messagingSenderId: "1049009619420"
+            };
+            firebase.initializeApp(config);
+            
+            messaging = firebase.messaging();
+
+            messaging.requestPermission()
+                    .then(function () {
+                        console.log('Notification permission granted.');
+                        return messaging.getToken();
+                        // TODO(developer): Retrieve an Instance ID token for use with FCM.
+                        // ...
+
+                    })
+                    .then(function (token) {
+                        document.getElementById("chattoken").value = token;
+                        console.log(token);
+                    })
+                    .catch(function (err) {
+                        console.log('Unable to get permission to notify.', err);
+                    });
+
+            
+              var chattoken= messaging.getToken();
+              
+                console.log(chattoken);
+              
+              var getChatToken=function(){  
+                console.log(chattoken); 
+                document.getElementById("chattoken").value = chattoken; 
+               };
+        </script>
     </body>
 </html>
diff --git a/KAA-JSP/build/web/scripts/app.js b/KAA-JSP/build/web/scripts/app.js
index 71337e273b04dc4152f0f6c767bcd6d24a93af65..d75f7f2a140b0dc9f5b91915ab13aadd22667ecd 100644
--- a/KAA-JSP/build/web/scripts/app.js
+++ b/KAA-JSP/build/web/scripts/app.js
@@ -58,19 +58,20 @@ app.controller('chatController', ['$scope','$http','Message', function($scope,$h
             message: newmessage
         };
         
-        $scope.fetch = function() {
-        $scope.code = null;
-        $scope.response = null;
-
-        $http({method: "GET", url: "localhost:8080/ChatService/SendMessage?", params: paramSend}).
+       console.log("mau ngirim");
+       console.log(paramSend);
+       
+        $http({method: "GET", url: "http://localhost:8080/ChatService/SendMessage", params: paramSend}).
         then(function(response) {
+          console.log("harusnya berhasil");
+
           $scope.status = response.status;
           $scope.data = response.data;
         }, function(response) {
           $scope.data = response.data || 'Request failed';
           $scope.status = response.status;
         });
-    };
+          console.log("berhasil keluar");
         
     };
     
diff --git a/KAA-JSP/dist/KAA-JSP.war b/KAA-JSP/dist/KAA-JSP.war
index 5b796704304f25654bc513b4eecbbde91f91772b..f6c37564ec486e1979698a7128ab7df399bdde62 100644
Binary files a/KAA-JSP/dist/KAA-JSP.war and b/KAA-JSP/dist/KAA-JSP.war differ
diff --git a/KAA-JSP/nbproject/private/private.properties b/KAA-JSP/nbproject/private/private.properties
index 17b05e1fd355984e3470323a00669e8abef06ddb..28552d4ee798943351d4484319b203bb00c39ea6 100644
--- a/KAA-JSP/nbproject/private/private.properties
+++ b/KAA-JSP/nbproject/private/private.properties
@@ -1,7 +1,7 @@
-deploy.ant.properties.file=/home/khrs/.netbeans/8.2/config/GlassFishEE6/Properties/gfv3-2049786751.properties
+deploy.ant.properties.file=C:\\Users\\Frys\\AppData\\Roaming\\NetBeans\\8.2\\config\\GlassFishEE6\\Properties\\gfv31137312071.properties
 j2ee.platform.is.jsr109=true
-j2ee.server.domain=/home/khrs/glassfish-4.1.1/glassfish/domains/domain1
-j2ee.server.home=/home/khrs/glassfish-4.1.1/glassfish
-j2ee.server.instance=[/home/khrs/glassfish-4.1.1/glassfish:/home/khrs/glassfish-4.1.1/glassfish/domains/domain1]deployer:gfv3ee6wc:localhost:4848
-j2ee.server.middleware=/home/khrs/glassfish-4.1.1
+j2ee.server.domain=C:/Users/Frys/GlassFish_Server/glassfish/domains/domain-client
+j2ee.server.home=C:/Users/Frys/GlassFish_Server/glassfish
+j2ee.server.instance=[C:\\Users\\Frys\\GlassFish_Server\\glassfish;C:\\Users\\Frys\\GlassFish_Server\\glassfish\\domains\\domain-client]deployer:gfv3ee6wc:localhost:4848
+j2ee.server.middleware=C:/Users/Frys/GlassFish_Server
 user.properties.file=/home/khrs/.netbeans/8.2/build.properties
diff --git a/KAA-JSP/nbproject/project.properties b/KAA-JSP/nbproject/project.properties
index bc730ea6c1f156db88038de8337500b5e2b71952..3867ee90e62678d5db9ce6a9f680cd49fa662d5c 100644
--- a/KAA-JSP/nbproject/project.properties
+++ b/KAA-JSP/nbproject/project.properties
@@ -40,9 +40,9 @@ j2ee.platform=1.7-web
 <<<<<<< HEAD
 =======
 >>>>>>> bcf1435806005cb1ed3347eeb593de560332f805
-j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
-j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
 j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
+j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
+j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
 j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar
 j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar
 j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar
diff --git a/KAA-JSP/web/catalog.jsp b/KAA-JSP/web/catalog.jsp
index b8adfec7c8163bb15f8688b4358324062ebb8754..bb83ad564c5ded0e6a7a2b0211f6dca3e31b984e 100644
--- a/KAA-JSP/web/catalog.jsp
+++ b/KAA-JSP/web/catalog.jsp
@@ -42,7 +42,24 @@
 
         <!--Application -->
         <script src="scripts/app.js"></script>
-
+        <script type="text/javascript">
+            // Fungsi AJAX untuk memproses likes (tambah, kurang, atau tampilkan)
+            function getState(username, product_id) {
+                var xmlhttp = new XMLHttpRequest();
+                xmlhttp.onreadystatechange = function () {
+                    if (this.readyState == 4 && this.status == 200) {
+                        var obj = JSON.parse(this.responseText);
+                        if (obj.status === 'ON') {
+                            document.getElementById("status" + username + product_id).innerHTML = "<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/on.png\">";
+                        } else {
+                            document.getElementById("status" + username + product_id).innerHTML = "<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/off.png\">";
+                        }
+                    }
+                };
+                xmlhttp.open("GET", "http://localhost:8080/ChatService/RetrieveStatus?username=" + username, true);
+                xmlhttp.send();
+            };
+        </script>
 
     </head>
     <body ng-app="chatApp" ng-controller="chatController">
@@ -246,18 +263,10 @@
                             out.print("<p>No product to be sold.</p>");
                         } else {
                             for (int i = 0; i < result.size(); i++) {
-                                urlParamChat = "username=" + result.get(i).getUsername();
-                                RestAPI_consumer consumer2 = new RestAPI_consumer(urlRequest2, urlParamChat);
-                                consumer2.execute();
-                                responseJSON = consumer2.getOutput();
-                                if (responseJSON.get("status").equals("ON")) {
-                                    out.print("<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/on.png\">");
-                                    out.print("<a href=\"\"><div ng-click=\"setReceiver('" + result.get(i).getUsername() + "')\"><p><b>" + result.get(i).getUsername() + "</a></b><br/>");
-                                } else {
-                                    out.print("<img style=\"border: none; padding: 0px 10px 0px 0px; float:left\" height=15px width=15px src=\"img/off.png\">");
-                                    out.print("<a href=\"\"><div ng-click=\"setReceiver('" + result.get(i).getUsername() + "')\"><p><b>" + result.get(i).getUsername() + "</a></b><br/>");
-                                }
-                                out.print("added this on " + result.get(i).getDate().getDate() + "</p></div>");
+                                out.print("<script>setInterval(function(){ getState('" + result.get(i).getUsername() + "','" + result.get(i).getProductId() + "'); }, 1000);</script>");
+                                out.print("<div id=\"status" + result.get(i).getUsername() + result.get(i).getProductId() +"\"></div>");
+                                out.print("<a href=\"\"><div ng-click=\"setReceiver('" + result.get(i).getUsername() + "')\"><p><b>" + result.get(i).getUsername() + "</a></b><br/></div>");
+                                out.print("added this on " + result.get(i).getDate().getDate() + "</p>");
                                 out.print("<hr/>");
                                 out.print("<table>");
                                 out.print("<tr class = \"container\">");
@@ -341,7 +350,7 @@
                     }
                 }
             %>
-            
+
             {{user}}
             <br>
             <div class="popup-box chat-popup" id="1" ng-show="isReceiverSet()" style="right: 0px; display: block;">
@@ -351,7 +360,7 @@
                     <div style="clear: both"></div>
                 </div>
                 <div class="popup-messages">
-                    
+
                     <li ng-repeat="message in messages" style="list-style-type:none">
                         <div ng-if="(message.name === receiver) && (message.to === user)" class="talk-bubble tri-right left-top">
                             <div class="talktext">
diff --git a/KAA-JSP/web/register.jsp b/KAA-JSP/web/register.jsp
index 786f725289c8822cf9ee8a2ac67a38198dce5625..a098886236506e0926e612a33eda1764cad87c4e 100644
--- a/KAA-JSP/web/register.jsp
+++ b/KAA-JSP/web/register.jsp
@@ -4,6 +4,7 @@
     Author     : khrs
 --%>
 
+<%@page import="org.saleproject.KAA.GetIP"%>
 <%@page import="java.io.OutputStreamWriter"%>
 <%@page import="java.io.DataOutputStream"%>
 <%@page import="java.nio.charset.StandardCharsets"%>
@@ -30,6 +31,8 @@
                 String fulladdress = request.getParameter("fulladdress");
                 String postalcode = request.getParameter("postalcode");
                 String phonenumber = request.getParameter("phonenumber");
+                String userAgent = request.getHeader("user-agent");
+                String userIP = GetIP.getClientIpAddress(request);
                 
 
                 String urlParameters  = 
@@ -39,35 +42,20 @@
                         "&email="+email+
                         "&fulladdress=" +fulladdress+
                         "&postalcode=" + postalcode + 
-                        "&phonenumber=" + phonenumber;
+                        "&phonenumber=" + phonenumber+
+                        "&user_agent=" + userAgent + "&ip=" + userIP;
 
-                String urlRequest = "http://localhost:8080/IdentService/register";
-                
+                String urlRequest = "http://localhost:8080/IdentService/register";       
                 obj = new URL(urlRequest);
                 HttpURLConnection con = (HttpURLConnection) obj.openConnection();
                  con.setDoOutput( true );
                 con.setRequestMethod( "POST" );
-
-                /*byte[] postData       = urlParameters.getBytes();
-                int    postDataLength = postData.length; */       
-               
-//                con.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
-               // con.setRequestProperty( "charset", "utf-8");
-                //con.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
-/*                con.setUseCaches( false );
-                try( DataOutputStream wr = new DataOutputStream( con.getOutputStream())) {
-                   wr.write( postData );
-                } */
                 DataOutputStream wr = new DataOutputStream(con.getOutputStream());
                 wr.writeBytes(urlParameters);
                 wr.flush();
                 wr.close();
                 con.setReadTimeout(15*1000);
                 con.connect();
-                /* OutputStreamWriter outputWriter = new OutputStreamWriter(con.getOutputStream());
-                outputWriter.write(urlParameters);
-                outputWriter.flush(); */
-
                 BufferedReader br = new BufferedReader(new InputStreamReader((con.getInputStream())));
                 StringBuilder sb = new StringBuilder();
                 String output;
@@ -89,18 +77,6 @@
                 else{
                     message = (String) responseJSON.get("message");
                 }
-
-
-                /* Consuming API using GET method */
-/*                String user = request.getParameter("username");
-                String pass = request.getParameter("password");
-                String urlParameter = "username="+user+"&password="+pass;
-                //String urlRequest = "http://localhost:8080/IdentService/login?"+
-                        //urlParameter;
-                obj = new URL(urlRequest);
-                //HttpURLConnection con = (HttpURLConnection) obj.openConnection();*/
-                
-
             }
             catch(Exception e){
                 e.printStackTrace();
@@ -175,6 +151,7 @@
                 <div style="padding-left: 91%;">
                     <input type="submit" value="REGISTER">
                 </div>
+                <input type="hidden" name="chattoken" id="chattoken">
             </form>
             </div>
             <div>
@@ -244,6 +221,46 @@
             }
             return (true);
 	}
-	</script>
+	</script
+        <!-- Firebase -->
+        <script src="https://www.gstatic.com/firebasejs/3.6.1/firebase.js"></script>
+        <script>
+            var config = {
+                apiKey: "AIzaSyAQ2WIB6GWOxmtwMdGd8eHawL4PWxK8evU",
+                authDomain: "tugas-besar-wbd.firebaseapp.com",
+                databaseURL: "https://tugas-besar-wbd.firebaseio.com",
+                storageBucket: "tugas-besar-wbd.appspot.com",
+                messagingSenderId: "1049009619420"
+            };
+            firebase.initializeApp(config);
+            
+            messaging = firebase.messaging();
+
+            messaging.requestPermission()
+                    .then(function () {
+                        console.log('Notification permission granted.');
+                        return messaging.getToken();
+                        // TODO(developer): Retrieve an Instance ID token for use with FCM.
+                        // ...
+
+                    })
+                    .then(function (token) {
+                        document.getElementById("chattoken").value = token;
+                        console.log(token);
+                    })
+                    .catch(function (err) {
+                        console.log('Unable to get permission to notify.', err);
+                    });
+
+            
+              var chattoken= messaging.getToken();
+              
+                console.log(chattoken);
+              
+              var getChatToken=function(){  
+                console.log(chattoken); 
+                document.getElementById("chattoken").value = chattoken; 
+               };
+        </script>
     </body>
 </html>
diff --git a/KAA-JSP/web/scripts/app.js b/KAA-JSP/web/scripts/app.js
index 71337e273b04dc4152f0f6c767bcd6d24a93af65..d75f7f2a140b0dc9f5b91915ab13aadd22667ecd 100644
--- a/KAA-JSP/web/scripts/app.js
+++ b/KAA-JSP/web/scripts/app.js
@@ -58,19 +58,20 @@ app.controller('chatController', ['$scope','$http','Message', function($scope,$h
             message: newmessage
         };
         
-        $scope.fetch = function() {
-        $scope.code = null;
-        $scope.response = null;
-
-        $http({method: "GET", url: "localhost:8080/ChatService/SendMessage?", params: paramSend}).
+       console.log("mau ngirim");
+       console.log(paramSend);
+       
+        $http({method: "GET", url: "http://localhost:8080/ChatService/SendMessage", params: paramSend}).
         then(function(response) {
+          console.log("harusnya berhasil");
+
           $scope.status = response.status;
           $scope.data = response.data;
         }, function(response) {
           $scope.data = response.data || 'Request failed';
           $scope.status = response.status;
         });
-    };
+          console.log("berhasil keluar");
         
     };
     
diff --git a/MarketPlaceService/dist/MarketPlaceService.war b/MarketPlaceService/dist/MarketPlaceService.war
index 72a56f1906956d0883b8b0e0ede390c4629b1b44..c4a58ab1945b218b6a178f5efb675e38a8a550b0 100644
Binary files a/MarketPlaceService/dist/MarketPlaceService.war and b/MarketPlaceService/dist/MarketPlaceService.war differ
diff --git a/MarketPlaceService/nbproject/private/private.properties b/MarketPlaceService/nbproject/private/private.properties
index 17b05e1fd355984e3470323a00669e8abef06ddb..28552d4ee798943351d4484319b203bb00c39ea6 100644
--- a/MarketPlaceService/nbproject/private/private.properties
+++ b/MarketPlaceService/nbproject/private/private.properties
@@ -1,7 +1,7 @@
-deploy.ant.properties.file=/home/khrs/.netbeans/8.2/config/GlassFishEE6/Properties/gfv3-2049786751.properties
+deploy.ant.properties.file=C:\\Users\\Frys\\AppData\\Roaming\\NetBeans\\8.2\\config\\GlassFishEE6\\Properties\\gfv31137312071.properties
 j2ee.platform.is.jsr109=true
-j2ee.server.domain=/home/khrs/glassfish-4.1.1/glassfish/domains/domain1
-j2ee.server.home=/home/khrs/glassfish-4.1.1/glassfish
-j2ee.server.instance=[/home/khrs/glassfish-4.1.1/glassfish:/home/khrs/glassfish-4.1.1/glassfish/domains/domain1]deployer:gfv3ee6wc:localhost:4848
-j2ee.server.middleware=/home/khrs/glassfish-4.1.1
+j2ee.server.domain=C:/Users/Frys/GlassFish_Server/glassfish/domains/domain-client
+j2ee.server.home=C:/Users/Frys/GlassFish_Server/glassfish
+j2ee.server.instance=[C:\\Users\\Frys\\GlassFish_Server\\glassfish;C:\\Users\\Frys\\GlassFish_Server\\glassfish\\domains\\domain-client]deployer:gfv3ee6wc:localhost:4848
+j2ee.server.middleware=C:/Users/Frys/GlassFish_Server
 user.properties.file=/home/khrs/.netbeans/8.2/build.properties
diff --git a/MarketPlaceService/nbproject/project.properties b/MarketPlaceService/nbproject/project.properties
index 92afac1b58933b80846abbcadd56c1341a77cc84..e1f402b312c3857d5bcbc9707c6e65ed3d1627b8 100644
--- a/MarketPlaceService/nbproject/project.properties
+++ b/MarketPlaceService/nbproject/project.properties
@@ -40,9 +40,9 @@ j2ee.platform=1.7-web
 <<<<<<< HEAD
 =======
 >>>>>>> bcf1435806005cb1ed3347eeb593de560332f805
-j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
 j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
 j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
+j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/cdi-api.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar
 j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar
 j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar
 j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar