From e61b3037f33c8175d3fff77d472b999e64ad689c Mon Sep 17 00:00:00 2001
From: Dominique Blouin <dominique.blouin@telecom-paristech.fr>
Date: Fri, 12 Jun 2015 10:18:15 +0000
Subject: [PATCH] check GUI exceptions

---
 bin/config.xml                                |   2 +-
 crawler/bin/client.jar                        | Bin 24002 -> 23993 bytes
 crawler/bin/crawler.jar                       | Bin 24003 -> 23994 bytes
 crawler/bin/derby.log                         |   2 +-
 .../src/myutil/externalSearch/Message.java    |  61 ++-
 src/myutil/externalSearch/Client.java         | 351 ++++++++---------
 src/myutil/externalSearch/Message.java        |  61 ++-
 src/myutil/externalSearch/Record.java         |  48 ++-
 src/ui/TDiagramMouseManager.java              |   1 -
 src/ui/window/JDialogSearchBox.java           | 356 ++++++++++--------
 10 files changed, 500 insertions(+), 382 deletions(-)

diff --git a/bin/config.xml b/bin/config.xml
index d7974345f7..66b674926f 100755
--- a/bin/config.xml
+++ b/bin/config.xml
@@ -65,7 +65,7 @@
 
 <ExternalServer data="localhost:12345"/>
 
-<LastWindowAttributes x="547" y="86" width="792" height="597" max="false" />
+<LastWindowAttributes x="468" y="59" width="788" height="597" max="false" />
 
 
 </TURTLECONFIGURATION>
diff --git a/crawler/bin/client.jar b/crawler/bin/client.jar
index 4285912653b34b89c8d0dd27d690eb3532307ee3..a757d749e3595c6efe45608fdcc32b24c7e34bdb 100644
GIT binary patch
delta 2812
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

delta 2973
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
aN|*?7VQvFYMgjn^oLnV(0Kn7yclLij^jw1g

diff --git a/crawler/bin/crawler.jar b/crawler/bin/crawler.jar
index ba7b380b2f4df3393a3e6b79f711224685c4d804..d18b857d1739146b7e24ffc9418cb229da1dafa4 100755
GIT binary patch
delta 2816
zcmY*bc{tQ<8yzIFg-qFZqhTTxV^FeF_NB=fOH8)x%TV}5_PqvWmyl%`OPI(~3^HS%
zMvDlU2xVR+OYxQWy1wiCo`23c_c`}@{=NG;nL0X|xUDX;91#Gqv$KP?P?USz2$nz4
zWX8<&7jc$MaKOnPyzh)q`-a&yBd;3W$%DEU)@QWk_&9Q!BK+L*plVZzPjw@TBTbJ&
z)ZAtZtDur;oa`J#Nd*NZFIF(e6nCwFU1~Y83|Yo3tt2U}u&|Z%qch+uOb9Y50emXK
zj_S-|$8>(qgve*@|J-K-!TK)#UhW@hMP^yn5=mJAG;+!I`u0=73o<v`eYWwX!=LS<
zoCO0m-4(h&4xVDjfnB!T5&pEm&hZ}U973ww6T$AP1)huaj}~AT0!d@ToEy6nq!I2-
zG$wV$Q1mT&!#Qa>3%-QJ=$Gz2iF@Z}2=jLy?&c*1aPHhmysLMidR|JZ=ka`}UW{d5
zpPo1{xsjYbH@(3kCGmPgUka$0SCInn^YVK8c70><QBHkh3BM8&<>P-<CidxFsF{aK
zmC^zYhFoeQj7TjCCAMY$%WHzk@md0cA5P`Jr{q=S3;U$N^9_8wDvO*?q;Dt+@*EHS
zj<+s*MX2PU8>okKg~s3YoA{^;j~LapJj)MwqfQmUCuky2a|*j(a(Ln`wvM>pEYXiP
zgjFqbtM*+{$XKOT6XVlY4!mvFKfIX|=X&tn1dtV8v;OEQ$-*bCMGKj<FZY`mHF?^i
zZ_#kf=sluy>C>&zcv`~y<f4;2M(W|lX&;4HyW*9J0;f5YFfiNeGC>geJPS>SVe7Mi
zRw)UOGiiH@QKd&<Uxq&%dS`O|GzRfDy|V04!B}nc_oOyw4^mNX9f_&JxYz)Jkzg?s
zFVNj-%YTJ8%nq=Z&JA=>gg@%`apf))h(JsR8J+Lay4QTGMFv%Wg*sDEQTa@v%BL*O
z)2vI-bGk=G*6m_lYL|}*Za_0Moy#5w38rLz6{kdKf1*d@hTO9-@9DfJn!P636|lFp
zg*xzzrcj8p!CoTliM|~fznkcT9Z{xphMjBg{t`J=U$aY*{UKwbpTLhe>UE9pHGfBq
zm2q48hkysH&>ZQV!mH$X(dl<`Ti2S>F$jk@9r3lcSKd&bKRbiTx|Uzw%0L2~rugRF
zGgL}^In8(^9bJ1zZMD;Q0A1bsp-C00Ce%c^a+7Fy3tzNGo!!j4gA=WN5#BN~3@?^3
zFq&Fl<k8=xYTWep97~1YSX&Sep?38v#MCcDUhs|T*!IaSV?JTtd4%Kn57avm^_p$&
z!o6CgO&b>=TRhT_Z#_1_843t}=I6`Kl#&f|V#g)f$=wtS8uzy1Vp*m!m}AHe;X(U)
z%Yr01kI>kZ&@`m3@q-PKm&vJfE89BzWv<RIF7<y2PHG<YqRp!~(%JV$ynIXs(;`d<
zB@E%pi;iM|UNbMQuyr{Qq61NVv<Uw7?5yGBs8!%?N^sg$QXOJH4(L&+4mrV}oL^&T
zA(<P_jH>T-MHHqgTQM}m2(e@(${tstx@WzeE`*xOwssRX0OP)ad&OYou!zzBRa|p@
z`#M1*C1W3Lob_fmEdu?*)Sfox61UAPcEC$6bwvp^Xf&R2^BnPbsZQd_I}0vam|!?N
z6xQMf2fd7qD0bRFb|VXIs9Npo^aSSxzmQ$k6{?l1N4bcn{`IY#<wo$(CxYihl7Omu
zhaa#1W<ueL^Yj<z&+N+PwAgwXSm+o$ATBd`d+S|OXrd<=oT|LkZG=$oDA4iOI(ecU
zN_aMHY+QQTO$$=@)d>sn*Srz;WBeOGPmA~zLY>oa3>glnuNcUNrZw(Vj>y3Y6yJ;r
zO_w)SpZ!)@-&z@o&auAK{&q0yz3*E6yn8Jyp*9(rf5g(;c)z}$53Av#LVq}QpEqoL
zvP4Yusj7pM^OVhc)i8mnv>?^<YFldJ$WzYME$vcWj<-VB2iPGuQ{rFwBA4}W@x8P~
zF|w>d`wAW)eCI;dM7#=VZX+iQ2Q-O1#-7b@P1?~PH$6q*sBiLkM>m@y_Lzi+=E%FE
z7?aBRDbw%$Xqc5uBI)H?MN6d%#wm)$9g0WiO{l7gysjR<4`n4^UV)N#3O#Gq>pkTG
zE@?%70c5YlTJcAgxM$U1^!<YsYHHs6urpNO2Jp}RM-<v;V^ooD_RM<N+-A!(vLWZU
zjelNnTFz(F$nKm|#Ac(=$gBUDy5dnEz6l;IU^+-WFOKcPVvf5#oIB<y4D~(zJ7cfx
zocj8u5gn?4Q$GW~KX=q){)Ku20wSao&M?hn?kTyzf$1eF_G^gu=Ilprti`r}Ur}rt
zjRhVo!mnYof7lF!2wA*XQd%_;@-@GgYh5!qaEtXCL3Y*NqpJY_E##VQFrn_WPELy%
zek3j+2wZi1d{bBzO@>9Ws|9t<L>D+mnPQ5_UVNGbZ;2waRbAt|+w;CBC33xgvA^=a
z6D#69BA{`rW2TzsMdkmd{ODK1Z+9z3kRxyt&aaYXBRfORrJ@b7rM}M--1DB;Zyud4
zFq=j#B@R^k5jYqQdj7cVARnz-y{O#m_hiWjC$Z7BFhuEX_T1auci95v&pZI9g~kEq
zl?UkWJ)L;CG9h!*VIjDGJ&*V^n4bCt?jq-ZG3aORd;{#{8=>aj8&@2i615IMLIBVG
z^-EU<^)U%y;579ysw}5(tz=D&iEVe8IOLVoeQoJu2K7CqVJHNc58qxh{PrS5O2Wh3
zxsM-fY4}#p(cZ3hG7Mz9_bs9O_|(=S@hi*2(LMFY#w&iRnE|uMA7_Ct;DDBng5!^T
z8B&xg)!Xu;{y$(1n`@+*Vq{4>4DkLzjl8w0&4%g<ExsCj-Z46DHL9Ub0TwoUSL+dW
zE)B8R-vu`v!a+r_DxWaOSch5iiTpf&=wq($%>I4lvm=?pxuoYT@>Z$!ZK{^Ni`0@{
zE>XxAQ}H!hWb%`gi+WVI@=V@MQR}fr?NSU+>1T5wRztk#r-WRJF)2&|Xt>I7%f%w+
zKe~|J#11m=Piwe!EUPY^o?e;`)9p+ZIS1J_nvo?RKuU_>FEANN<AI>f-M3kEtj78v
zRA*#>u`|OqGo!rx{+Q*M#TD=lJWSc5Gf7}7P*}tI4PDQMMY*ZLnNCr}H(u2|K&%to
z_<%0;1s7y0(1|MG90RN^s6-XOt{>Y6NZMs&RE<wagkC;E9Ea<$eTYEuFuA+&q^0kQ
z3a1Z<7NpZfPl{X)_EMQG>C;ND)P$*x4!J!Gy1}EEj-_uXJwBh5J5Vb+>xUnmhb^v&
zzDwT{MWmnCJd)9>iC26bqP$lp*cD~{JIegYrd%;;x+U|onnfvL(K||Lbw@#oo<__e
z%yV>m)<tajMXl5RX<c35Y>$nOkx|~b@%54$S>W|X$^nzrWj6Mub3u~j$3UP80TAf_
zF1(h@oG*|5z3p0f`Mo&~NtEdEe@P}pg8OjNs8-B&NUXFjf&UU*CPWNphCbCYWQAru
zbWS@s965Ai9pQ)g-0>p!pQO=$f5x$+3=SPjlnB##oG(i8Q01dUn0NVb68yrraTM3#
zXzowo25t|fcBoXGM3^HWxE{4rIE<69#NSR<h-IS<8wfPR0|H5c{`VE&N}QAr*T(;>
nA+&HVS~56Z^uN6lXc49uoEBR3FcA1h@#E6bDo4E?|5p455fxP&

delta 2953
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
S3_zI)0fjc_PkUSbuKXWnXkYyR

diff --git a/crawler/bin/derby.log b/crawler/bin/derby.log
index 4b7bc14fb3..ebb67fadcb 100755
--- a/crawler/bin/derby.log
+++ b/crawler/bin/derby.log
@@ -1,4 +1,4 @@
-Mon Jun 08 12:05:31 CEST 2015 : Could not listen on port 1527 on host 127.0.0.1:
+Fri Jun 12 11:32:26 CEST 2015 : Could not listen on port 1527 on host 127.0.0.1:
  java.net.BindException: Address already in use
 An exception was thrown during network server startup. DRDA_ListenPort.S:Could not listen on port 1527 on host 127.0.0.1:
  java.net.BindException: Address already in use
diff --git a/crawler/src/myutil/externalSearch/Message.java b/crawler/src/myutil/externalSearch/Message.java
index 7cd104b974..5da8716d25 100644
--- a/crawler/src/myutil/externalSearch/Message.java
+++ b/crawler/src/myutil/externalSearch/Message.java
@@ -1,3 +1,48 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+
+ ludovic.apvrille AT enst.fr
+
+ This software is a computer program whose purpose is to allow the
+ edition of TURTLE analysis, design and deployment diagrams, to
+ allow the generation of RT-LOTOS or Java code from this diagram,
+ and at last to allow the analysis of formal validation traces
+ obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ from INRIA Rhone-Alpes.
+
+ This software is governed by the CeCILL  license under French law and
+ abiding by the rules of distribution of free software.  You can  use,
+ modify and/ or redistribute the software under the terms of the CeCILL
+ license as circulated by CEA, CNRS and INRIA at the following URL
+ "http://www.cecill.info".
+
+ As a counterpart to the access to the source code and  rights to copy,
+ modify and redistribute granted by the license, users are provided only
+ with a limited warranty  and the software's author,  the holder of the
+ economic rights,  and the successive licensors  have only  limited
+ liability.
+
+ In this respect, the user's attention is drawn to the risks associated
+ with loading,  using,  modifying and/or developing or reproducing the
+ software by the user in light of its specific status of free software,
+ that may mean  that it is complicated to manipulate,  and  that  also
+ therefore means  that it is reserved for developers  and  experienced
+ professionals having in-depth computer knowledge. Users are therefore
+ encouraged to load and test the software's suitability as regards their
+ requirements in conditions enabling the security of their systems and/or
+ data to be ensured and,  more generally, to use and operate it in the
+ same conditions as regards security.
+
+ The fact that you are presently reading this means that you have had
+ knowledge of the CeCILL license and that you accept its terms.
+
+ /**
+ * JDialogSearchBox
+ * unity message for client and server.
+ * Creation: 22/03/2015
+ * @version 1.0 11/03/2015
+ * @author Dan VO
+ * @see
+ */
 package myutil.externalSearch;
 
 import java.awt.image.BufferedImage;
@@ -10,9 +55,6 @@ import java.util.ArrayList;
 import java.io.Serializable;
 import javax.imageio.ImageIO;
 
-/**
- * Created by Dan on 3/22/15.
- */
 
 
 //Message format
@@ -48,17 +90,19 @@ public class Message implements Serializable {
     public static String OPTION_SCORE = "score";
     public static String OPTION_NUMBER = "number";
     public static String OPTION_SYSTEM = "system";
-    public static String OPTION_FILE_BIN = "filebin";
-    public static String OPTION_FILE_XML = "filexml";
+    //public static String OPTION_FILE_BIN = "filebin";
+    //public static String OPTION_FILE_XML = "filexml";
 
 
     public static String CMD_SEARCH = "search";
     public static String CMD_STATISTIC = "stat";
     public static String CMD_DETAIL = "detail";
+    public static String CMD_HISTOGRAM = "histo";
 
     public static String RESULT_SEARCH = "resultSearch";
     public static String RESULT_STATISTIC = "resultStat";
     public static String RESULT_DETAIL = "resultDetail";
+    public static String RESULT_HISTOGRAM = "resultHistogram";
 
 
     private String cmd;
@@ -158,7 +202,6 @@ public class Message implements Serializable {
 
     public ArrayList<Object> parseMessage(Message msg)
     {
-            //TODO Parse the message
         return msg.content;
     }
 
@@ -176,7 +219,6 @@ public class Message implements Serializable {
             }
 
         } catch (IOException e) {
-            // TODO Auto-generated catch block
             System.out.println("Image can't not be found!");
         }
 
@@ -195,12 +237,11 @@ public class Message implements Serializable {
                 BufferedImage img = ImageIO.read(inStream);
 
                 ImageIO.write(img, "png", new File(PIC_DES));
-                System.out.println("Image has been created successfully!");
+                //System.out.println("Image has been created successfully!");
 
 
             } catch (IOException e) {
-                // TODO Auto-generated catch block
-                System.out.println("Image can't not be created!");
+                // System.out.println("Image can't not be created!");
             }
         }
 
diff --git a/src/myutil/externalSearch/Client.java b/src/myutil/externalSearch/Client.java
index a0705b88b3..e94970a3af 100644
--- a/src/myutil/externalSearch/Client.java
+++ b/src/myutil/externalSearch/Client.java
@@ -1,251 +1,198 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+
+ ludovic.apvrille AT enst.fr
+
+ This software is a computer program whose purpose is to allow the
+ edition of TURTLE analysis, design and deployment diagrams, to
+ allow the generation of RT-LOTOS or Java code from this diagram,
+ and at last to allow the analysis of formal validation traces
+ obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ from INRIA Rhone-Alpes.
+
+ This software is governed by the CeCILL  license under French law and
+ abiding by the rules of distribution of free software.  You can  use,
+ modify and/ or redistribute the software under the terms of the CeCILL
+ license as circulated by CEA, CNRS and INRIA at the following URL
+ "http://www.cecill.info".
+
+ As a counterpart to the access to the source code and  rights to copy,
+ modify and redistribute granted by the license, users are provided only
+ with a limited warranty  and the software's author,  the holder of the
+ economic rights,  and the successive licensors  have only  limited
+ liability.
+
+ In this respect, the user's attention is drawn to the risks associated
+ with loading,  using,  modifying and/or developing or reproducing the
+ software by the user in light of its specific status of free software,
+ that may mean  that it is complicated to manipulate,  and  that  also
+ therefore means  that it is reserved for developers  and  experienced
+ professionals having in-depth computer knowledge. Users are therefore
+ encouraged to load and test the software's suitability as regards their
+ requirements in conditions enabling the security of their systems and/or
+ data to be ensured and,  more generally, to use and operate it in the
+ same conditions as regards security.
+
+ The fact that you are presently reading this means that you have had
+ knowledge of the CeCILL license and that you accept its terms.
+
+ /**
+ * JDialogSearchBox
+ * dialog for external search with key words
+ * Creation: 11/03/2015
+ * @version 1.0 11/03/2015
+ * @author Dan VO & Huy TRUONG
+ * @see
+ */
 package myutil.externalSearch;
 
 import java.io.IOException;
-import java.io.PrintStream;
-import java.lang.reflect.Array;
-import java.net.Socket;
-import java.net.SocketException;
-import java.net.UnknownHostException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.Scanner;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.util.ArrayList;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
-
-
-
+import myutil.TraceManager;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 import org.jsoup.parser.Parser;
-
 import org.jsoup.nodes.Document;
 
 public class Client {
-    //public static String dbaddr="localhost";
-    //public static int dpport=9999;
     public  Object parserAnswerMessage(Message answerMsg) {
         //Analyse the message from the server,
         //Depends on the cmd, we can determine the values
         String cmd = answerMsg.getCmd();
-        // System.out.println(cmd);
+
         if (cmd == null) {
-            System.out.println(Message.ERR_CMD);
+            TraceManager.addDev("Wrong message format - no cmd");
             return null;
         } else if (cmd.equals(Message.RESULT_SEARCH)) {
             ArrayList<Record> lrecord = new ArrayList<>();
-
-           // try {
-                //byte[] encoded = Files.readAllBytes(Paths.get("/home/trhuy/Downloads/02-51-34.xml"));
-
-                //ArrayList<Object> res = new ArrayList();
-                //res = answerMsg.getContent();
-                //System.out.println("\n"+res);
-
-
-                //byte[] encoded = (byte[])answerMsg.getContent().get(0);
-
-                String resultxml = (String)answerMsg.getContent().get(0);
-
-                //System.out.print(resultxml);
-
-                Document doc = Jsoup.parse(resultxml);
-                for (Element e : doc.select("Row")) {
-                    Record r = new Record();
-                    Document eachRow = Jsoup.parse(e.toString());
-                    Element e_id = eachRow.select("cve_id").first();
-                    Element e_title = eachRow.select("name").first();
-                    Element e_des = eachRow.select("summary").first();
-                    r.setCve_id(e_id.text());
-                    r.setName(e_title.text());
-                    r.setSummary(e_des.text());
-                    lrecord.add(r);
-                }
-           // } catch (IOException e) {
-               // e.printStackTrace();
-           // }
-            //System.out.println(lrecord.toArray());
-            return (Object)lrecord;
+            //get content of return result
+            String resultxml = (String)answerMsg.getContent().get(0);
+            Document doc = Jsoup.parse(resultxml);
+            //parser content to get value by tag name.
+            for (Element e : doc.select("Row")) {
+                Record r = new Record();
+                Document eachRow = Jsoup.parse(e.toString());
+                Element e_id = eachRow.select("cve_id").first();
+                Element e_title = eachRow.select("name").first();
+                Element e_des = eachRow.select("summary").first();
+                r.setCve_id(e_id.text());
+                r.setName(e_title.text());
+                r.setSummary(e_des.text());
+                lrecord.add(r);
+            }
+        return lrecord;
 
 
         } else if (cmd.equals(Message.RESULT_DETAIL)) {
             Record r = new Record();
-           // try {
-                //byte[] encoded = Files.readAllBytes(Paths.get("/home/trhuy/Downloads/02-40-06.xml"));
-//                /byte[] encoded = (byte[])answerMsg.getContent().get(0);
-                String resultxml = (String)answerMsg.getContent().get(0);
-                //String resultxml = new String(encoded, "UTF-8");
-
-                Document doc = Jsoup.parse(resultxml);
-                for (Element e : doc.select("Row")) {
-
-                    Document eachRow = Jsoup.parse(e.toString());
-                    Element cve_id = eachRow.select("cve_id").first();
-                    Element pub_date = eachRow.select("pub_date").first();
-                    Element mod_date = eachRow.select("mod_date").first();
-                    Element score = eachRow.select("score").first();
-                    Element access_vector = eachRow.select("access_vector").first();
-                    Element access_complexity = eachRow.select("access_complexity").first();
-                    Element authentication = eachRow.select("authentication").first();
-                    Element confidentiality_impact = eachRow.select("confidentiality_impact").first();
-                    Element integrity_impact = eachRow.select("integrity_impact").first();
-                    Element availability_impact = eachRow.select("availability_impact").first();
-                    Element gen_date = eachRow.select("gen_date").first();
-                    Element cwe_id = eachRow.select("cwe_id").first();
-                    Element summary = eachRow.select("summary").first();
-                    Element ref_type = eachRow.select("ref_type").first();
-                    Element source = eachRow.select("source").first();
-                    Element link = eachRow.select("link").first();
-                    Element name = eachRow.select("name").first();
-
-                    r.setCve_id(cve_id.text());
-                    r.setPub_date(pub_date.text());
-                    r.setMod_date(mod_date.text());
-                    r.setScore(score.text());
-                    r.setAccess_vector(access_vector.text());
-                    r.setAccess_complexity(access_complexity.text());
-                    r.setAuthentication(authentication.text());
-                    r.setConfidentiality_impact(confidentiality_impact.text());
-                    r.setIntegrity_impact(integrity_impact.text());
-                    r.setAvailability_impact(availability_impact.text());
-                    r.setGen_date(gen_date.text());
-                    r.setCwe_id(cwe_id.text());
-                    r.setSummary(summary.text());
-                    r.setRef_type(ref_type.text());
-                    r.setSource(source.text());
-                    r.setLink(link.text());
-
-
-                    System.out.print(r.toString());
-
-                }
-           // } catch (IOException e) {
-            //    e.printStackTrace();
-            //}
-
-            return (Object)r;
+            //get content of return result
+            String resultxml = (String)answerMsg.getContent().get(0);
+
+            //parser content to get value by tag name.
+            Document doc = Jsoup.parse(resultxml);
+            for (Element e : doc.select("Row")) {
+
+                Document eachRow = Jsoup.parse(e.toString());
+                Element cve_id = eachRow.select("cve_id").first();
+                Element pub_date = eachRow.select("pub_date").first();
+                Element mod_date = eachRow.select("mod_date").first();
+                Element score = eachRow.select("score").first();
+                Element access_vector = eachRow.select("access_vector").first();
+                Element access_complexity = eachRow.select("access_complexity").first();
+                Element authentication = eachRow.select("authentication").first();
+                Element confidentiality_impact = eachRow.select("confidentiality_impact").first();
+                Element integrity_impact = eachRow.select("integrity_impact").first();
+                Element availability_impact = eachRow.select("availability_impact").first();
+                Element gen_date = eachRow.select("gen_date").first();
+                Element cwe_id = eachRow.select("cwe_id").first();
+                Element summary = eachRow.select("summary").first();
+                Element ref_type = eachRow.select("ref_type").first();
+                Element source = eachRow.select("source").first();
+                Element link = eachRow.select("link").first();
+                Element name = eachRow.select("name").first();
+
+                r.setCve_id(cve_id.text());
+                r.setPub_date(pub_date.text());
+                r.setMod_date(mod_date.text());
+                r.setScore(score.text());
+                r.setAccess_vector(access_vector.text());
+                r.setAccess_complexity(access_complexity.text());
+                r.setAuthentication(authentication.text());
+                r.setConfidentiality_impact(confidentiality_impact.text());
+                r.setIntegrity_impact(integrity_impact.text());
+                r.setAvailability_impact(availability_impact.text());
+                r.setGen_date(gen_date.text());
+                r.setCwe_id(cwe_id.text());
+                r.setSummary(summary.text());
+                r.setRef_type(ref_type.text());
+                r.setSource(source.text());
+                r.setLink(link.text());
+                r.setName(name.text());
+
+                //System.out.print(r.toString());
+
+            }
+
+            return r;
 
         } else if (cmd.equals(Message.RESULT_STATISTIC)) {
-            //show picture
-            //Use a function to convert binary to image
+            // the content are image.
             byte[] encoded = (byte[]) answerMsg.getContent().get(0);
+            return encoded;
 
-            return (Object)encoded;
-
-            //Call Huy's function to load Image
-        } else System.out.print(Message.ERR_CMD2);
+        } else
+            TraceManager.addDev("The command is not supported\n");
         return null;
     }
 
-
-
+    /**
+     *
+     * @param cmd     strings in Message class.
+     * @param options list of options corresponds to list of values.
+     * @param values
+     * @return  Message.
+     */
     public  Message createRequestMessage(String cmd, ArrayList<String> options, ArrayList<String> values)
     {
         Message requestMsg = new Message(cmd,options,values);
-        System.out.println(Message.SUC_CREATE_REQ_MESSAGE);
+        //System.out.println(Message.SUC_CREATE_REQ_MESSAGE);
         return requestMsg;
     }
 
-    public Message send(Message msg, String server, int port){
+    /**
+     *
+     * @param msg       Message
+     * @param server    server address
+     * @param port      port of service
+     * @return  Message from Server.
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    public Message send(Message msg, String server, int port) throws IOException, ClassNotFoundException {
         SSLSocket sslClient = null;
-        try {
-            //Socket client = new Socket(dbaddr,dpport);
-            SSLSocketFactory sslSocketFactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
-            sslClient = (SSLSocket)sslSocketFactory.createSocket(server,port);
-
-            sslClient.setEnabledCipherSuites(sslClient.getSupportedCipherSuites());
-            System.out.println("Client has been created successfully!");
-
-            ObjectOutputStream outputStream = new ObjectOutputStream(sslClient.getOutputStream());
-            ObjectInputStream inputStream = new ObjectInputStream(sslClient.getInputStream());
-
-            outputStream.writeObject(msg);
-
-            //Get back the message from server
-            Message answerMsg = new Message();
-            try {
-                answerMsg = (Message) inputStream.readObject();
-            } catch (ClassNotFoundException ex) {
-               // Logger.getLogger(MultiThreadServer.class.getName()).log(Level.SEVERE, null, ex);
-            }
-
-
-            outputStream.close();
-            inputStream.close();
-            sslClient.close();
-            return answerMsg;
-
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-            return null;
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-            return null;
-        }
-
-
-    }
-
-    public void main(String[] args){
-        try {
-            Socket client = new Socket("LocalHost",1234);
-            System.out.println("Client has been created successfully!");
-
-            ObjectOutputStream outputStream = new ObjectOutputStream(client.getOutputStream());
-            ObjectInputStream inputStream = new ObjectInputStream(client.getInputStream());
-
-            //Create a temporary data to tests
-            String cmd ="stat";
-            ArrayList<String> options = new ArrayList();
-            ArrayList<String> values = new ArrayList();
-
-            options.add("keyword");
-            options.add("year");
-            options.add("system");
-
-            values.add("Stuxnet");
-            values.add("2014");
-            values.add("windows");
-
-            //Create a msg with constructors
-            Message msg = createRequestMessage(cmd, options, values);
-
-            //Push the message to server
-            outputStream.writeObject(msg);
-
-            //Get back the message from server
-            Message answerMsg = new Message();
-            try {
-                answerMsg = (Message) inputStream.readObject();
-            } catch (ClassNotFoundException ex) {
-               // Logger.getLogger(MultiThreadServer.class.getName()).log(Level.SEVERE, null, ex);
-            }
+        //crate a ssl socket.
+        SSLSocketFactory sslSocketFactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
+        sslClient = (SSLSocket)sslSocketFactory.createSocket(server,port);
 
-            //Print out the content from the server
-            // System.out.println(answerMsg.getContent());
+        sslClient.setEnabledCipherSuites(sslClient.getSupportedCipherSuites());
+        TraceManager.addDev("Client has been created successfully!");
 
-            parserAnswerMessage(answerMsg);
-            // Message.convertByteToImage(answerMsg.getImageByte());
+        ObjectOutputStream outputStream = new ObjectOutputStream(sslClient.getOutputStream());
+        ObjectInputStream inputStream = new ObjectInputStream(sslClient.getInputStream());
 
-            outputStream.close();
-            inputStream.close();
-            client.close();
+        outputStream.writeObject(msg);
 
-        } catch (UnknownHostException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+        //Get back the message from server
+        Message answerMsg = (Message) inputStream.readObject();
 
+        outputStream.close();
+        inputStream.close();
+        sslClient.close();
+        return answerMsg;
     }
 
 }
diff --git a/src/myutil/externalSearch/Message.java b/src/myutil/externalSearch/Message.java
index 7cd104b974..a6dfda2068 100644
--- a/src/myutil/externalSearch/Message.java
+++ b/src/myutil/externalSearch/Message.java
@@ -1,3 +1,48 @@
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+
+ ludovic.apvrille AT enst.fr
+
+ This software is a computer program whose purpose is to allow the
+ edition of TURTLE analysis, design and deployment diagrams, to
+ allow the generation of RT-LOTOS or Java code from this diagram,
+ and at last to allow the analysis of formal validation traces
+ obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ from INRIA Rhone-Alpes.
+
+ This software is governed by the CeCILL  license under French law and
+ abiding by the rules of distribution of free software.  You can  use,
+ modify and/ or redistribute the software under the terms of the CeCILL
+ license as circulated by CEA, CNRS and INRIA at the following URL
+ "http://www.cecill.info".
+
+ As a counterpart to the access to the source code and  rights to copy,
+ modify and redistribute granted by the license, users are provided only
+ with a limited warranty  and the software's author,  the holder of the
+ economic rights,  and the successive licensors  have only  limited
+ liability.
+
+ In this respect, the user's attention is drawn to the risks associated
+ with loading,  using,  modifying and/or developing or reproducing the
+ software by the user in light of its specific status of free software,
+ that may mean  that it is complicated to manipulate,  and  that  also
+ therefore means  that it is reserved for developers  and  experienced
+ professionals having in-depth computer knowledge. Users are therefore
+ encouraged to load and test the software's suitability as regards their
+ requirements in conditions enabling the security of their systems and/or
+ data to be ensured and,  more generally, to use and operate it in the
+ same conditions as regards security.
+
+ The fact that you are presently reading this means that you have had
+ knowledge of the CeCILL license and that you accept its terms.
+
+ /**
+ * JDialogSearchBox
+ * unity message for client and server.
+ * Creation: 22/03/2015
+ * @version 1.0 11/03/2015
+ * @author Dan VO
+ * @see
+ */
 package myutil.externalSearch;
 
 import java.awt.image.BufferedImage;
@@ -10,9 +55,6 @@ import java.util.ArrayList;
 import java.io.Serializable;
 import javax.imageio.ImageIO;
 
-/**
- * Created by Dan on 3/22/15.
- */
 
 
 //Message format
@@ -48,17 +90,19 @@ public class Message implements Serializable {
     public static String OPTION_SCORE = "score";
     public static String OPTION_NUMBER = "number";
     public static String OPTION_SYSTEM = "system";
-    public static String OPTION_FILE_BIN = "filebin";
-    public static String OPTION_FILE_XML = "filexml";
+    //public static String OPTION_FILE_BIN = "filebin";
+    //public static String OPTION_FILE_XML = "filexml";
 
 
     public static String CMD_SEARCH = "search";
     public static String CMD_STATISTIC = "stat";
     public static String CMD_DETAIL = "detail";
+    public static String CMD_HISTOGRAM = "histo";
 
     public static String RESULT_SEARCH = "resultSearch";
     public static String RESULT_STATISTIC = "resultStat";
     public static String RESULT_DETAIL = "resultDetail";
+    public static String RESULT_HISTOGRAM = "resultHistogram";
 
 
     private String cmd;
@@ -158,7 +202,6 @@ public class Message implements Serializable {
 
     public ArrayList<Object> parseMessage(Message msg)
     {
-            //TODO Parse the message
         return msg.content;
     }
 
@@ -176,7 +219,6 @@ public class Message implements Serializable {
             }
 
         } catch (IOException e) {
-            // TODO Auto-generated catch block
             System.out.println("Image can't not be found!");
         }
 
@@ -195,12 +237,11 @@ public class Message implements Serializable {
                 BufferedImage img = ImageIO.read(inStream);
 
                 ImageIO.write(img, "png", new File(PIC_DES));
-                System.out.println("Image has been created successfully!");
+                //System.out.println("Image has been created successfully!");
 
 
             } catch (IOException e) {
-                // TODO Auto-generated catch block
-                System.out.println("Image can't not be created!");
+               // System.out.println("Image can't not be created!");
             }
         }
 
diff --git a/src/myutil/externalSearch/Record.java b/src/myutil/externalSearch/Record.java
index 756d6b3e44..35ecae7f1e 100644
--- a/src/myutil/externalSearch/Record.java
+++ b/src/myutil/externalSearch/Record.java
@@ -1,11 +1,51 @@
 package myutil.externalSearch;
 
-/**
- * Created by trhuy on 5/12/15.
+/**Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
+
+ ludovic.apvrille AT enst.fr
+
+ This software is a computer program whose purpose is to allow the
+ edition of TURTLE analysis, design and deployment diagrams, to
+ allow the generation of RT-LOTOS or Java code from this diagram,
+ and at last to allow the analysis of formal validation traces
+ obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
+ from INRIA Rhone-Alpes.
+
+ This software is governed by the CeCILL  license under French law and
+ abiding by the rules of distribution of free software.  You can  use,
+ modify and/ or redistribute the software under the terms of the CeCILL
+ license as circulated by CEA, CNRS and INRIA at the following URL
+ "http://www.cecill.info".
+
+ As a counterpart to the access to the source code and  rights to copy,
+ modify and redistribute granted by the license, users are provided only
+ with a limited warranty  and the software's author,  the holder of the
+ economic rights,  and the successive licensors  have only  limited
+ liability.
+
+ In this respect, the user's attention is drawn to the risks associated
+ with loading,  using,  modifying and/or developing or reproducing the
+ software by the user in light of its specific status of free software,
+ that may mean  that it is complicated to manipulate,  and  that  also
+ therefore means  that it is reserved for developers  and  experienced
+ professionals having in-depth computer knowledge. Users are therefore
+ encouraged to load and test the software's suitability as regards their
+ requirements in conditions enabling the security of their systems and/or
+ data to be ensured and,  more generally, to use and operate it in the
+ same conditions as regards security.
+
+ The fact that you are presently reading this means that you have had
+ knowledge of the CeCILL license and that you accept its terms.
+
+ /**
+ * JDialogSearchBox
+ * format of return message from CVE database
+ * Creation: 12/03/2015
+ * @version 1.0 11/03/2015
+ * @author Huy TRUONG
+ * @see
  */
 public class Record {
-    //private String id;
-    //private String n;
     private String summary;
     private String cve_id ;
     private String pub_date ;
diff --git a/src/ui/TDiagramMouseManager.java b/src/ui/TDiagramMouseManager.java
index 6db772510b..1d869443fe 100755
--- a/src/ui/TDiagramMouseManager.java
+++ b/src/ui/TDiagramMouseManager.java
@@ -347,7 +347,6 @@ public class TDiagramMouseManager implements MouseListener, MouseMotionListener
 		//open a Search Dialog with seleted component's value
 		if ( (e.getButton() == MouseEvent.BUTTON1) && e.isAltDown()) {
 			byte info = tdp.hoveredComponent(e.getX(), e.getY());
-			System.out.print (info);
 			if (info > 1) {
 				tgc = tdp.componentHovered();
 				String search = tgc.getValue();
diff --git a/src/ui/window/JDialogSearchBox.java b/src/ui/window/JDialogSearchBox.java
index be00814ddd..3affd3e827 100644
--- a/src/ui/window/JDialogSearchBox.java
+++ b/src/ui/window/JDialogSearchBox.java
@@ -53,7 +53,6 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
 import javax.imageio.ImageIO;
-import java.io.File;
 import javax.swing.*;
 import javax.swing.event.*;
 import javax.swing.text.*;
@@ -94,6 +93,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     private javax.swing.JComboBox combobox_Score;
     private javax.swing.JComboBox combobox_System;
     private javax.swing.JComboBox combobox_Year;
+    private javax.swing.JComboBox combobox_Diagram;
     private javax.swing.JCheckBox databaseCb;
     private javax.swing.JTextPane detailText_db;
     private javax.swing.JTextPane detailText_google;
@@ -125,6 +125,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     //private TableSorter resultTable_google;
     private javax.swing.JTextField searchBox;
     private javax.swing.JButton searchBt;
+    private javax.swing.JButton drawBt;
 
     private javax.swing.JLabel jLabel_Keyword;
     private javax.swing.JLabel jLabel_Result;
@@ -142,11 +143,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
 
     private DefaultListModel listModel;
-    ArrayList<GoogleSearch> resultGoogle;
+    //ArrayList<GoogleSearch> resultGoogle;
     int searchGoogle;
-    ArrayList<GoogleSearch> resultGoogleScholar;
+    //ArrayList<GoogleSearch> resultGoogleScholar;
     int searchGoogleScholar;
-    ArrayList<GoogleSearch> resultDatabase;
+    //ArrayList<GoogleSearch> resultDatabase;
     int searchDatabase;
 
     TDiagramMouseManager tdmm ;
@@ -161,7 +162,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         this.tdmm = tdmm;
         this.setTitle("External Search");
          GraphicLib.centerOnParent(this);
-         String s="";
+         //String s="";
          for (int i =0; i< l.size(); i++){
         	 addValueListKeyword(l.get(i));
          }
@@ -216,9 +217,12 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         jScrollPane8= new JScrollPane();
         jScrollPane9= new JScrollPane();
         jTextaddressDB = new JTextField();
+        combobox_Diagram = new javax.swing.JComboBox();
+        drawBt = new JButton();
 
+        String DIAGRAM_LIST[] = {"None","Statistic","Histogram","pie"};
         String SYSTEM_LIST[] = {"all", "linux", "windows", "others"};
-        String TIME_LIST[]= {"all", "last year", "last 5 years", "last 10 years"};
+        String TIME_LIST[]= {"all", "last year", "last 3 years"};
         String SCORE_LIST[] = {"all", "5-7", "7-8", "8-9"};
         String COLUMNTITLE_G[] ={"No", "Title", "Link"} ;
         String COLUMNTITLE_GS[]= {"No", "Title", "Author", "Link"};
@@ -252,8 +256,10 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         removeBt.setText("Remove");
         removeBt.setActionCommand("Remove");
         removeBt.setEnabled(false);
-
+        drawBt.setText("Draw");
+        drawBt.setEnabled(false);
         searchBt.setText("Search");
+        combobox_Diagram.setEnabled(false);
 
         searchBox.setText("Key words");
 
@@ -370,7 +376,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         jTabbedPane2.addTab(GOOGLE_SCHOLAR, jPanel_GoogleScholarTab);
 
-    /////
+        /////
 
         resultTable_db.setModel(new javax.swing.table.DefaultTableModel(new Object[][]{}, COLUMNTITLE_DB) {
             @Override
@@ -404,12 +410,14 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         jTabbedPane2.addTab(DB, jPanel_DBTab);
 
+
         combobox_System.setModel(new javax.swing.DefaultComboBoxModel(SYSTEM_LIST));
 
         combobox_Year.setModel(new javax.swing.DefaultComboBoxModel(TIME_LIST));
 
         combobox_Score.setModel(new javax.swing.DefaultComboBoxModel(SCORE_LIST));
 
+        combobox_Diagram.setModel(new javax.swing.DefaultComboBoxModel(DIAGRAM_LIST));
 
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
@@ -434,8 +442,9 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                                                         .addComponent(removeBt))
                                                                 .addGap(100, 100, 100)))
                                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                                                        .addComponent(jButton_Setting, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                                        .addComponent(jButton_Statistic, javax.swing.GroupLayout.DEFAULT_SIZE, 88, Short.MAX_VALUE))
+                                                                .addComponent(jButton_Setting, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                                                .addComponent(combobox_Diagram, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                                )
                                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                         .addComponent(jLabel_Score)
@@ -443,16 +452,20 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                                         .addComponent(jLabel_System))
                                                 .addGap(37, 37, 37)
                                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                                                        .addComponent(combobox_Score, 0, 142, Short.MAX_VALUE)
-                                                        .addComponent(combobox_Year, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                                        .addComponent(combobox_System, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
+                                                                .addComponent(combobox_Score, 0, 142, Short.MAX_VALUE)
+                                                                .addComponent(combobox_Year, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                                                .addComponent(combobox_System, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+                                                ))
                                         .addGroup(layout.createSequentialGroup()
                                                 .addComponent(jLabel_Status)
                                                 .addGap(0, 0, Short.MAX_VALUE))
+
                                         .addGroup(layout.createSequentialGroup()
                                                 .addComponent(searchBox)
-                                                .addGap(18, 18, 18)
-                                                .addComponent(searchBt, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)))
+                                                .addGap(10, 10, 10)
+                                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
+                                                        .addComponent(searchBt, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                        .addComponent(drawBt, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))))
                                 .addContainerGap())
         );
         layout.setVerticalGroup(
@@ -471,8 +484,9 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                                                 .addComponent(combobox_System, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
-                                                        .addComponent(googleScholarCb)
-                                                        .addComponent(jButton_Statistic))
+                                                                .addComponent(googleScholarCb)
+                                                                .addComponent(combobox_Diagram, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                )
                                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                                 .addComponent(removeBt))
                                         .addGroup(layout.createSequentialGroup()
@@ -485,9 +499,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                                         .addComponent(combobox_Year, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                         .addComponent(jLabel_Year))))
                                 .addGap(24, 24, 24)
+                                .addComponent(drawBt)
                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                         .addComponent(searchBox, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                                         .addComponent(searchBt))
+
                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                 .addComponent(jTabbedPane2)
                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
@@ -521,19 +537,22 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
             public void checkandsetSearchBt() {
 
 
-
                 if (searchBox.getText().length() <= 0 || searchBox.getText().length() > MAXLENGTH_INPUT) {
                     if (searchBox.getText().length() > MAXLENGTH_INPUT)
                         JOptionPane.showMessageDialog(null, ERROR_INPUT_TOO_LONG, "Warning",
                                 JOptionPane.WARNING_MESSAGE);
                     searchBt.setEnabled(false);
+                    drawBt.setEnabled(false);
                 } else
+                    if (combobox_Diagram.getSelectedItem() != "None")
+                        drawBt.setEnabled(true);
                     searchBt.setEnabled(true);
 
-                if ( ! isPrintableString(searchBox.getText())) {
+                if (!isPrintableString(searchBox.getText())) {
                     JOptionPane.showMessageDialog(null, "Not printable character", "Warning",
                             JOptionPane.WARNING_MESSAGE);
                     searchBt.setEnabled(false);
+                    drawBt.setEnabled(false);
                 }
             }
         });
@@ -547,7 +566,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         googleCb.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
-                if (googleCb.isSelected() && ListKeywords.getModel().getSize()>0)
+                if (googleCb.isSelected() && ListKeywords.getModel().getSize() > 0)
                     searchBt.setEnabled(true);
                 googleCbActionPerformed(evt);
             }
@@ -555,16 +574,32 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         databaseCb.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
-                if (databaseCb.isSelected() && ListKeywords.getModel().getSize()>0)
+                if (databaseCb.isSelected()){
+                    combobox_Diagram.setEnabled(true);
+                    if (combobox_Diagram.getSelectedItem()!="None")
+                        drawBt.setEnabled(true);
+                    else drawBt.setEnabled(false);
+                }else {
+                    combobox_Diagram.setEnabled(false);
+                    drawBt.setEnabled(false);
+                }
+                if (databaseCb.isSelected() && ListKeywords.getModel().getSize() > 0){
                     searchBt.setEnabled(true);
+                }
                 databaseCbActionPerformed(evt);
             }
         });
 
         googleScholarCb.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
-                if (googleScholarCb.isSelected() && ListKeywords.getModel().getSize()>0)
+                if (googleScholarCb.isSelected() && ListKeywords.getModel().getSize() > 0) {
                     searchBt.setEnabled(true);
+                    drawBt.setEnabled(true);
+                }else
+                {
+                    //searchBt.setEnabled(false);
+                    drawBt.setEnabled(false);
+                }
                 googleScholarCbActionPerformed(evt);
             }
         });
@@ -642,13 +677,15 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                     Message msg = new Message(Message.CMD_DETAIL);
                     msg.addKeywordMessage(st);
 
-                    //Client cl = new Client();
+                    //Client cl = new Client();)
                     Message returnMsg = sendMessage(msg);
                     //Message returnMsg  = new Message(Message.RESULT_DETAIL);
 
                     //Record r = (Record)cl.parserAnswerMessage(returnMsg);
-                    Record r = (Record) parserMessage(returnMsg);
-                    printDetailRecord(r);
+                    if (returnMsg != null) {
+                        Record r = (Record) parserMessage(returnMsg);
+                        printDetailRecord(r);
+                    }
                 }
 
             }
@@ -719,12 +756,14 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         );
 
-            jButton_Statistic.addActionListener(new ActionListener() {
-                @Override
-                public void actionPerformed(ActionEvent actionEvent) {
+        drawBt.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent actionEvent) {
+                //System.out.print(combobox_Diagram.getSelectedItem());
+                if (combobox_Diagram.getSelectedItem() == "statistic")
                     doStatistic();
-                }
-            });
+            }
+        });
 
         jTextaddressDB.getDocument().addDocumentListener(new DocumentListener() {
             @Override
@@ -744,11 +783,14 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         });
 
-        jTabbedPane2.addChangeListener(new ChangeListener() {
+
+        combobox_Diagram.addActionListener(new ActionListener() {
             @Override
-            public void stateChanged(ChangeEvent changeEvent) {
-                //detailText_db.setDocument(new HTMLDocument());
-                //detailText_google.setDocument(new HTMLDocument());
+            public void actionPerformed(ActionEvent actionEvent) {
+               if (combobox_Diagram.getSelectedItem() == "None" || searchBox.getText().length() <=0)
+                   drawBt.setEnabled(false);
+               else if  ((combobox_Diagram.getSelectedItem() != "None" && searchBox.getText().length() >0))
+                   drawBt.setEnabled(true);
             }
         });
 
@@ -760,11 +802,33 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         this.dispose();
     }
 
-    public Message sendMessage(Message msg){
+    /**
+     *
+     * @param msg
+     * @return
+     */
+    public Message sendMessage(Message msg) {
         Client cl = new Client();
-        return cl.send(msg,dbaddress,dbport);
+        try{
+            return cl.send(msg,dbaddress,dbport);
+        }catch (IOException e){
+            JOptionPane.showMessageDialog(null, "Cannot connect to server !!!", "Warning",
+                    JOptionPane.WARNING_MESSAGE);
+            return null;
+        } catch (ClassNotFoundException e) {
+            JOptionPane.showMessageDialog(null, "Cannot parse message!!!", "Warning",
+                    JOptionPane.WARNING_MESSAGE);
+            return null;
+        }
+
     }
 
+
+    /**
+     *
+     * @param msg
+     * @return Object
+     */
     public Object parserMessage(Message msg){
         Client cl = new Client();
         return cl.parserAnswerMessage(msg);
@@ -817,6 +881,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
     }
 
+
+    /**
+     *
+     * @param evt
+     */
     private void searchBtActionPerformed(java.awt.event.ActionEvent evt)  {
 
         //reset Tab title
@@ -824,14 +893,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         jTabbedPane2.setTitleAt(1, GOOGLE_SCHOLAR);
         jTabbedPane2.setTitleAt(2, DB);
 
-
-
         if (searchGoogle == 0 && searchGoogleScholar == 0 && searchDatabase == 0) {
             JOptionPane.showMessageDialog(null, "Please select the resource to search","Warning",
                     JOptionPane.WARNING_MESSAGE);
         }
 
-
         Thread t = new Thread(new Runnable() {
             @Override
             public void run() {
@@ -975,20 +1041,27 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         t.start();
     }
 
-
-    public void showtable(ArrayList<Object[]> list, DefaultTableModel model,int index){
+    /**
+     * Display content in table.
+     * @param list
+     * @param model
+     * @param objectType 0: google
+     *                   1: google scholar
+     *                   2: database
+     */
+    public void showtable(ArrayList<Object[]> list, DefaultTableModel model,int objectType){
         int id=0;
-        if (index ==1 || index ==0) {
+        if (objectType ==1 || objectType ==0) {
             for (Object[] o : list) {
                 id = (Integer) (o[0]);
                 GoogleSearch gs = (GoogleSearch) (o[1]);
-                if (index == 0)
+                if (objectType == 0)
                     model.addRow(new Object[]{id, gs.getTitle(), gs.getUrl()});
-                else if (index == 1)
+                else if (objectType == 1)
                     model.addRow(new Object[]{id, gs.getTitle(), gs.getAuthors(), gs.getUrl()});
 
             }
-        } else if (index == 2){
+        } else if (objectType == 2){
             for (Object[] o : list) {
                 id = (Integer) (o[0]);
                 Record r = (Record) (o[1]);
@@ -997,20 +1070,29 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         }
 
 
-        if (index ==0 ){
-            jTabbedPane2.setTitleAt(index, GOOGLE + " [" + model.getRowCount() + "]");
+        if (objectType ==0 ){
+            jTabbedPane2.setTitleAt(objectType, GOOGLE + " [" + model.getRowCount() + "]");
         }
-        else if (index ==1 ){
-            jTabbedPane2.setTitleAt(index, GOOGLE_SCHOLAR + " [" + model.getRowCount() + "]");
+        else if (objectType ==1 ){
+            jTabbedPane2.setTitleAt(objectType, GOOGLE_SCHOLAR + " [" + model.getRowCount() + "]");
         }
-        else if (index ==2 ){
-            jTabbedPane2.setTitleAt(index, DB + " [" + model.getRowCount() + "]");
+        else if (objectType ==2 ){
+            jTabbedPane2.setTitleAt(objectType, DB + " [" + model.getRowCount() + "]");
         }
         searchBt.setEnabled(true);
         jLabel_Status.setText("Finished");
-        //jTabbedPane2.updateUI();
     }
 
+    /**
+     *
+     * @param evt
+     * @param rows
+     * @param resultTable
+     * @param textpane
+     * @param typeObject 0: google
+     *                   1: google scholar
+     *                   2: database
+     */
     private void selectrow(ListSelectionEvent evt,ArrayList<Object[]> rows,JTable resultTable,JTextPane textpane,int typeObject) {
     	int rowindex = resultTable.getSelectedRow();
     	int id =0;
@@ -1076,15 +1158,20 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
             this.combobox_Score.setEnabled(false);
             this.combobox_Year.setEnabled(false);
         }
-    }    
-    
+    }
+
+
+    /**
+     * add new value into Keyword list.
+     * @param st
+     */
     public void addValueListKeyword(String st){
         if  (! this.listModel.contains(st)){
         	this.listModel.addElement(st);
 
         	String query = "";
-
         	if (this.listModel.getSize()>0)
+                //split the string
                 query = splitAndConcat((String) this.listModel.elementAt(0));
     	    	for (int i=1; i< this.listModel.getSize(); i++ ){
                     if (query != "")
@@ -1119,7 +1206,8 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
             i=i+1;
         }
     }
-    
+
+
     public void putGoogleScholarToTable(ArrayList<GoogleSearch> a)
     {
     	int i = this.rowsGoogleScholar.size()+1;
@@ -1129,12 +1217,20 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     	}
     }
 
+
     private void printDetailRecord(Record r){
         if (r!=null)
             this.detailText_db.setText(formatOutput_DB_DETAIL(r));
     }
 
-
+    /**
+     *
+     * @param obj
+     * @param typeObject 0: obj from google.
+     *                   1: obj from googleScholar
+     *                   2: obj from database
+     * @param textPane
+     */
     public void presentDataInDetail(Object obj, int typeObject, JTextPane textPane){
 
         textPane.setContentType("text/html");
@@ -1156,89 +1252,6 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         }
     }
 
-    public void presentDataInDetail1(Object obj, int typeObject, JTextPane textPane){
-        StyledDocument  doc = textPane.getStyledDocument();
-        textPane.setText("");
-
-        SimpleAttributeSet bold = new SimpleAttributeSet();
-        StyleConstants.setBold(bold, true);
-        StyleConstants.setFontSize(bold, 15);
-        SimpleAttributeSet underline = new SimpleAttributeSet();
-        StyleConstants.setUnderline(underline, true);
-        SimpleAttributeSet normal = new SimpleAttributeSet();
-        StyleConstants.setBold(normal, false);
-        StyleConstants.setFontSize(normal, 13);
-
-        if (typeObject ==1 || typeObject ==0 ){
-            int offset = 0;
-            GoogleSearch gs =  (GoogleSearch)obj;
-            if (gs != null)
-            {
-                String detail = "";
-                if (gs.getTitle()!=null) {
-                    //detail = detail + gs.getTitle() + "\n";
-                    try {
-                        doc.insertString(offset, gs.getTitle() + "\n", bold);
-                        offset = offset+ gs.getTitle().length()+1;
-                    } catch (BadLocationException e) {
-                        e.printStackTrace();
-                    }
-                }
-
-
-
-                if (gs.getAuthors()!=null) {
-                    //detail = detail + gs.getAuthors() + "\n";
-                    try {
-                        doc.insertString(offset, gs.getAuthors() + "\n", normal);
-                        offset =  offset+gs.getAuthors().length()+1;
-                    } catch (BadLocationException e) {
-                        e.printStackTrace();
-                    }
-                }
-                if (gs.getUrl()!=null){
-                    try {
-                        detail = detail + gs.getUrl()+"\n";
-                        doc.insertString(offset, gs.getUrl() + "\n", underline);
-                        offset =  offset+gs.getUrl().length()+1;
-                    } catch (BadLocationException e) {
-                        e.printStackTrace();
-                    }
-                }
-
-                if (gs.getCitedNumber()!=null){
-                    try {
-                        //detail = detail + gs.getCitedNumber()+"\n";
-                        doc.insertString(offset, gs.getCitedNumber() + "\n", normal);
-                        offset =  offset+gs.getCitedNumber().length()+1;
-                    } catch (BadLocationException e) {
-                        e.printStackTrace();
-                    }
-                }
-
-                if (gs.getDesc()!=null){
-                    try {
-                        //detail = detail + gs.getCitedNumber()+"\n";
-                        //detail = detail + gs.getDesc()+"\n";
-                        doc.insertString(offset, gs.getDesc() + "\n", normal);
-                        offset =  offset+gs.getDesc().length()+1;
-                    } catch (BadLocationException e) {
-                        e.printStackTrace();
-                    }
-                }
-
-
-                //textPane.setText(detail);
-            }
-        }else{
-            Record r = (Record)obj;
-            if (r!=null) {
-                String detail = r.getSummary();
-                textPane.setText(detail);
-            }
-        }
-
-    }
 
     //==========================================
     //database functions
@@ -1265,22 +1278,24 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
 
             Message ret = sendMessage(msg);
+            if (ret !=null)
+            {
             byte[] b = (byte[])parserMessage(ret);
-            if(b != null){
+            if(b != null) {
                 ByteArrayInputStream in = new ByteArrayInputStream(b);
-                img =  ImageIO.read(in);
-                ImageIcon icon=new ImageIcon(img);
-                JFrame frame=new JFrame();
-                frame.setLayout(new FlowLayout());
-                frame.setSize(200,300);
-                JLabel lbl=new JLabel();
-                lbl.setIcon(icon);
-                frame.add(lbl);
-                frame.setVisible(true);
-                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+                img = ImageIO.read(in);
+                ImageIcon icon = new ImageIcon(img);
+                Image scaleImage = icon.getImage().getScaledInstance(750, 200, Image.SCALE_DEFAULT);
+                icon = new ImageIcon(scaleImage);
+                JLabel imageLabel = new JLabel(icon);
+                JScrollPane scrollPane = new JScrollPane(imageLabel);
+                jTabbedPane2.addTab("HUY", scrollPane);
+
+            }
             }
         } catch (IOException e) {
-            e.printStackTrace();
+            JOptionPane.showMessageDialog(null, "Cannot display diagram !!!", "Warning",
+                    JOptionPane.WARNING_MESSAGE);
         }
 
     }
@@ -1303,7 +1318,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         return value;
     }
 
-
+    /**
+     * Check a string if it contains only number.
+     * @param str
+     * @return
+     */
     public boolean isNum(String str){
         try{
             Integer.parseInt(str);
@@ -1313,6 +1332,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         }
     }
 
+    /**
+     * create html format for content from Google Scholar
+     * @param gs
+     * @return String
+     */
     public String formatOutput_GoogleScholar (GoogleSearch gs){
         String html = "<html>" +
                 "<title>"+gs.getTitle()+"</title>" +
@@ -1326,6 +1350,12 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 "</html>";
         return html;
     }
+
+    /**
+     * create html format for content from Google
+     * @param gs
+     * @return String
+     */
     public String formatOutput_Google (GoogleSearch gs){
         String html = "<html>" +
                 "<title>"+gs.getTitle()+"</title>" +
@@ -1338,6 +1368,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         return html;
     }
 
+    /**
+     * create html format for content from Database (not detail)
+     * @param r
+     * @return String
+     */
     public String formatOutput_DB_SHORT (Record r){
         String html = "<html>" +
                 "<body  style=\"font-size: 14pt\">" +
@@ -1349,6 +1384,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         return html;
     }
 
+    /**
+     * create html format for content from Database (detail)
+     * @param r
+     * @return String
+     */
     public String formatOutput_DB_DETAIL (Record r){
         String html = "<html>" +
                 "<body  style=\"font-size: 14pt\">" +
@@ -1370,6 +1410,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         return html;
     }
 
+    /**
+     * Check the printable character.
+     * @param c
+     * @return
+     */
     public boolean isPrintableChar( char c ) {
         Character.UnicodeBlock block = Character.UnicodeBlock.of( c );
         return (!Character.isISOControl(c)) &&
@@ -1378,6 +1423,11 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 block != Character.UnicodeBlock.SPECIALS;
     }
 
+    /**
+     * Check the printable string
+     * @param s
+     * @return
+     */
     public boolean isPrintableString(String s){
         if (s==null)
             return false;
-- 
GitLab