diff --git a/Makefile b/Makefile
index bd947c95b86393235cba56795afe4ec652256c53..b86ead4b4e03cebb9e2fed53f94a8e865452fabe 100755
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,7 @@ GZIP = gzip -9 -f
 DEBUG  = -g
 CLASSPATH = -classpath
 SOURCEPATH = -sourcepath
-PACKAGE = avatartranslator avatartranslator/toexecutable avatartranslator/directsimulation avatartranslator/tocppsim avatartranslator/touppaal avatartranslator/toturtle avatartranslator/toproverif avatartranslator/totpn automata compiler/tmlparser vcd nc ddtranslator launcher myutil tpndescription sddescription sdtranslator tepe translator tmltranslator tmltranslator/tmlcp tmltranslator/toautomata tmltranslator/tosystemc  tmltranslator/tomappingsystemc tmltranslator/tomappingsystemc2 tmltranslator/tomappingsystemc3 tmltranslator/touppaal tmltranslator/toturtle translator/tojava translator/tosimujava translator/totpn translator/touppaal  ui ui/avatarbd ui/avatardd ui/avatarsmd ui/avatarrd ui/avatarpd ui/avatarcd ui/avatarad ui/ad ui/cd ui/oscd ui/osad ui/dd ui/ebrdd ui/file ui/graph ui/iod ui/ncdd ui/procsd ui/prosmdui/prosmd/util ui/tmlad ui/tmlcd ui/tmldd ui/tmlcomp ui/req ui/sd ui/tree ui/ucd ui/window tmltranslator tmltranslator/toturtle req/ebrdd tmltranslator/tosystemc tmatrix proverifspec uppaaldesc fr/inria/oasis/vercors/cttool/model remotesimulation tmltranslator/ctranslator attacktrees
+PACKAGE = avatartranslator avatartranslator/toexecutable avatartranslator/directsimulation avatartranslator/tocppsim avatartranslator/touppaal avatartranslator/toturtle avatartranslator/toproverif avatartranslator/totpn automata compiler/tmlparser vcd nc ddtranslator launcher myutil tpndescription sddescription sdtranslator tepe translator tmltranslator tmltranslator/tmlcp tmltranslator/toautomata tmltranslator/tosystemc  tmltranslator/tomappingsystemc tmltranslator/tomappingsystemc2 tmltranslator/tomappingsystemc3 tmltranslator/touppaal tmltranslator/toturtle translator/tojava translator/tosimujava translator/totpn translator/touppaal  ui ui/avatarbd ui/avatardd ui/avatarsmd ui/avatarrd ui/avatarpd ui/avatarcd ui/avatarad ui/ad ui/cd ui/oscd ui/osad ui/dd ui/ebrdd ui/file ui/graph ui/iod ui/ncdd ui/procsd ui/prosmdui/prosmd/util ui/tmlad ui/tmlcd ui/tmldd ui/tmlcomp ui/req ui/sd ui/tree ui/ucd ui/window tmltranslator tmltranslator/toturtle req/ebrdd tmltranslator/tosystemc tmatrix proverifspec uppaaldesc fr/inria/oasis/vercors/cttool/model remotesimulation tmltranslator/ctranslator attacktrees myutil/externalSearch
 BUILDER = builder.jar
 BUILD_INFO = build.txt
 BUILD_TO_MODIFY = src/ui/DefaultText.java
@@ -108,7 +108,7 @@ jar: launcher ttooljar tiftranslator tmltranslator rundse remotesimulator
 ttooljar:
 	rm -f $(TTOOL_BIN)/$(TTOOL_BINARY)
 	cp $(TTOOL_SRC)/ui/images/$(STD_LOGO) $(TTOOL_SRC)/ui/images/$(LOGO) 
-	cd $(TTOOL_SRC);  $(JAR) cmf $(TTOOL_JAR_TXT) $(TTOOL_BIN)/$(TTOOL_BINARY) Main.class vcd/*.class avatartranslator/*.class avatartranslator/toexecutable/*.class avatartranslator/directsimulation/*.class avatartranslator/touppaal/*.class avatartranslator/toproverif/*.class avatartranslator/totpn/* avatartranslator/*.class avatartranslator/toturtle/*.java automata/*.class compiler/tmlparser/*.class nc/*.class  tepe/*.class tmltranslator/*.class tmltranslator/tmlcp/*.class tmltranslator/toautomata/*.class tmatrix/*.class tmltranslator/toturtle/*.class tmltranslator/touppaal/*.class tmltranslator/tosystemc/*.class tmltranslator/tomappingsystemc/*.class tmltranslator/tomappingsystemc2/*.class tmltranslator/tomappingsystemc3/*.class  tpndescription/*.class ddtranslator/*.class launcher/*.class myutil/*.class sddescription/*.class sdtranslator/*.class translator/*.class translator/tojava/*.class  translator/tosimujava/*.class translator/touppaal/*.class translator/totpn/*.class req/ebrdd/*.java ui/*.class ui/*/*.class ui/*/*/*.class proverifspec/*.class uppaaldesc/*.class ui/images/*.* ui/images/toolbarButtonGraphics/general/*.gif ui/images/toolbarButtonGraphics/navigation/*.gif  ui/images/toolbarButtonGraphics/media/*.gif $(TTOOL_BIN)/$(LAUNCHER_BINARY) RTLLauncher.class launcher/*.class fr/inria/oasis/vercors/cttool/model/*.class remotesimulation/*.class tmltranslator/ctranslator/*.class attacktrees/*.class #compiler/tmlCPparser/parser/*.class
+	cd $(TTOOL_SRC);  $(JAR) cmf $(TTOOL_JAR_TXT) $(TTOOL_BIN)/$(TTOOL_BINARY) Main.class vcd/*.class avatartranslator/*.class avatartranslator/toexecutable/*.class avatartranslator/directsimulation/*.class avatartranslator/touppaal/*.class avatartranslator/toproverif/*.class avatartranslator/totpn/* avatartranslator/*.class avatartranslator/toturtle/*.java automata/*.class compiler/tmlparser/*.class nc/*.class  tepe/*.class tmltranslator/*.class tmltranslator/tmlcp/*.class tmltranslator/toautomata/*.class tmatrix/*.class tmltranslator/toturtle/*.class tmltranslator/touppaal/*.class tmltranslator/tosystemc/*.class tmltranslator/tomappingsystemc/*.class tmltranslator/tomappingsystemc2/*.class tmltranslator/tomappingsystemc3/*.class  tpndescription/*.class ddtranslator/*.class launcher/*.class myutil/*.class sddescription/*.class sdtranslator/*.class translator/*.class translator/tojava/*.class  translator/tosimujava/*.class translator/touppaal/*.class translator/totpn/*.class req/ebrdd/*.java ui/*.class ui/*/*.class ui/*/*/*.class proverifspec/*.class uppaaldesc/*.class ui/images/*.* ui/images/toolbarButtonGraphics/general/*.gif ui/images/toolbarButtonGraphics/navigation/*.gif  ui/images/toolbarButtonGraphics/media/*.gif $(TTOOL_BIN)/$(LAUNCHER_BINARY) RTLLauncher.class launcher/*.class fr/inria/oasis/vercors/cttool/model/*.class remotesimulation/*.class tmltranslator/ctranslator/*.class attacktrees/*.class myutil/externalSearch/*.class #compiler/tmlCPparser/parser/*.class
 
 launcher:
 	rm -f $(TTOOL_BIN)/$(LAUNCHER_BINARY)
diff --git a/bin/config.xml b/bin/config.xml
index 79da2bb42c96e8dc8ebe5491a612577ea1209229..169b6f84d7915f966994751ebca3a70ac82e59d6 100755
--- a/bin/config.xml
+++ b/bin/config.xml
@@ -61,11 +61,11 @@
 <ExternalCommand2Host data="localhost"/>
 <ExternalCommand2 data="/packages/uppaal(4.0.11/uppaal /home/enrici/TURTLE/uppaal/spec.xml"/>
 
-<LastOpenFile data="/home/enrici/embb/trunk/baseband/docs/andreae/Zigbee/models/Zigbee.xml"/>
+<LastOpenFile data="/home/trhuy/TURTLE/stuxnet.xml"/>
 
 
 
-<LastWindowAttributes x="-1" y="27" width="1368" height="742" max="true" />
+<LastWindowAttributes x="-1" y="25" width="1368" height="743" max="true" />
 
 
 </TURTLECONFIGURATION>
diff --git a/src/myutil/CheckConnection.java b/src/myutil/CheckConnection.java
index 7f4f9acfd34895eeb5c814b2c8842f5e9f975c27..0ef70c9fdcf0533eae457a49ea5b6e8ea1fb4031 100644
--- a/src/myutil/CheckConnection.java
+++ b/src/myutil/CheckConnection.java
@@ -54,11 +54,8 @@ import java.lang.Runtime;
 
 public final class CheckConnection {
     // TODO: input: URL or IPADRESS in STRING FORMAT. //should return true or false
-    public static final int KO_RESOLVE_DOMAIN = 1;
-    public static final int OK_DEFAULT_URL = 2;
 
     private static final String default_url_1 = "google.com";
-    private static final String default_url_2 = "http://ttool.telecom-paristech.fr";
     private static final String default_ip= "8.8.8.8";
 
 
@@ -77,7 +74,7 @@ public final class CheckConnection {
     }
 
     public static final boolean checkConnectionWithAddr(String addr) throws IOException, InterruptedException {
-        Process ping = Runtime.getRuntime().exec("ping -c 1 " + addr);
+        Process ping = Runtime.getRuntime().exec("ping -c 2 " + addr);
         int returnVal = ping.waitFor();
         boolean reachable = (returnVal == 0);
         return reachable;
diff --git a/src/myutil/GoogleSearch.java b/src/myutil/GoogleSearch.java
index d3de1f97cdedbb1d78337569cfb7d7ecbcc62477..5f2d108e513d5567be7694d53ae8bdf922f88c18 100644
--- a/src/myutil/GoogleSearch.java
+++ b/src/myutil/GoogleSearch.java
@@ -79,26 +79,16 @@ public class GoogleSearch {
 		try{		
 		Document doc = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get();
 		
-		//System.out.println(doc.toString());
-		
-//		Element error = doc.select("span.gs_red").first();
-//		if (error.text().contains("Did you mean:")){
-//			String newrequest = "http://scholar.google.com" + doc.select("a.gs_pda").first().attr("href");
-//			doc = Jsoup.connect(newrequest).userAgent(userAgent).get();
-//		}	
-		
 		//get list of search result, each result begin with tag <li class="g">
 		Elements articles = doc.select("li.g");
-		//System.out.println(articles.toString());
-		
-		
+
 		if (articles.size()!=0){
 			for (Element l : articles){
 				gs = new GoogleSearch();
 				
 				//convert an article to a html in order to using parser again.
 				String htmlArticle = l.toString();
-				Document docArticle = Jsoup.parse(htmlArticle);
+				Document docArticle = Jsoup.parse(htmlArticle,charset);
 				
 				//get first tag <a href=....>
 				
@@ -147,34 +137,30 @@ public class GoogleSearch {
 	
 	
 	public static final ArrayList<GoogleSearch> getGoogleScholarResult(String search){
-		
 		ArrayList<GoogleSearch> r = new ArrayList<GoogleSearch>();
 		String title="";
 		String url="";
 		String desc="";
 		String authors="";
 		String citedNumber="";
-        	String citedLinks="";
-        	String related="";
+		String citedLinks="";
+		String related="";
         
-        	GoogleSearch gs;
+		GoogleSearch gs;
 		try{
-		//SSystem.out.println("call this");
-		Document doc = Jsoup.connect(googleScholar + URLEncoder.encode(search, charset)).userAgent(userAgent).get();
-		
-		//System.out.println(doc.toString());
+			Document doc = Jsoup.connect(googleScholar + URLEncoder.encode(search, charset)).userAgent(userAgent).get();
+
 		//get list of search result, each result begin with tag <li class="g">
-		Element error = doc.select("span.gs_red").first();
-		if (error.text().contains("Did you mean:")){
-			String newrequest = "http://scholar.google.com" + doc.select("a.gs_pda").first().attr("href");
-			doc = Jsoup.connect(newrequest).userAgent(userAgent).get();
-		}	
-		
-		Elements articles = doc.select("div.gs_ri");
-		
-		//System.out.println("=================================");
-		//System.out.println(articles.toString());
+			Element error = doc.select("span.gs_red").first();
+			if (error != null) {
+				if (error.text().contains("Did you mean:")) {
+					String newrequest = "http://scholar.google.com" + doc.select("a.gs_pda").first().attr("href");
+					doc = Jsoup.connect(newrequest).userAgent(userAgent).get();
+				}
+			}
 		
+			Elements articles = doc.select("div.gs_ri");
+
 			if(articles.size()!=0){
 			for (Element l : articles){
 				gs = new GoogleSearch();
@@ -182,7 +168,7 @@ public class GoogleSearch {
 				//convert an article to a html in order to using parser again.
 				String htmlArticle = l.toString();
 			
-				Document docArticle = Jsoup.parse(htmlArticle);
+				Document docArticle = Jsoup.parse(htmlArticle,charset);
 	//			
 	//			//get first tag <a href=....>
 				
@@ -219,16 +205,17 @@ public class GoogleSearch {
 	                	}
 	                }
 	            }
-            
-            
+
 	            //TraceManager.addDev("title-->"+title);
-	            //TraceManager.addDev("url-->"+url);
+				//TraceManager.addDev("url-->"+url);
 	            //TraceManager.addDev("desc-->"+desc);
 	            //TraceManager.addDev("author-->"+authors);
 	            //TraceManager.addDev("cited number-->"+citedNumber);
 	            //TraceManager.addDev("cited link-->"+citedLinks);
 	            //TraceManager.addDev("related link-->"+related);
-	            
+
+
+
 	            gs.authors=authors;
 	            gs.title=title;
 	            gs.url=url;
diff --git a/src/myutil/externalSearch/Client.java b/src/myutil/externalSearch/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..82c279cec370dcd871c920a95d433864dbae372a
--- /dev/null
+++ b/src/myutil/externalSearch/Client.java
@@ -0,0 +1,228 @@
+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 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);
+            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"));
+                String resultxml = new String(encoded, "UTF-8");
+
+                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;
+        } 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"));
+                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());
+
+
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            return (Object)r;
+
+        } else if (cmd.equals(Message.RESULT_STATISTIC)) {
+            //show picture
+            //Use a function to convert binary to image
+            ArrayList<Object> resultContent = new ArrayList();
+            resultContent = answerMsg.getContent();
+            byte[] imgByte = (byte[]) resultContent.get(0);
+            Message.convertByteToImage(imgByte);
+
+            //Call Huy's function to load Image
+        } else System.out.print(Message.ERR_CMD2);
+        return null;
+    }
+
+
+
+    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);
+        return requestMsg;
+    }
+
+    public Message send(Message msg){
+        try {
+            Socket client = new Socket(dbaddr,dpport);
+            System.out.println("Client has been created successfully!");
+
+            ObjectOutputStream outputStream = new ObjectOutputStream(client.getOutputStream());
+            ObjectInputStream inputStream = new ObjectInputStream(client.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();
+            client.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);
+            }
+
+            //Print out the content from the server
+            // System.out.println(answerMsg.getContent());
+
+            parserAnswerMessage(answerMsg);
+            // Message.convertByteToImage(answerMsg.getImageByte());
+
+            outputStream.close();
+            inputStream.close();
+            client.close();
+
+        } catch (UnknownHostException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+    }
+
+}
diff --git a/src/myutil/externalSearch/Message.java b/src/myutil/externalSearch/Message.java
new file mode 100644
index 0000000000000000000000000000000000000000..a8f90bd2834f3f3e2a357ffa74b73cb562897135
--- /dev/null
+++ b/src/myutil/externalSearch/Message.java
@@ -0,0 +1,213 @@
+package myutil.externalSearch;
+
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.io.Serializable;
+import javax.imageio.ImageIO;
+
+/**
+ * Created by Dan on 3/22/15.
+ */
+
+
+//Message format
+
+/**
+ CMD Options Values
+ *  CMD : A string of command, for example : search, detail, stats
+ * search : search with keywords
+ * detail : clients send CVE-ID and get back all information
+ * stats : -> Images
+ *  Options and Values ArrayLists,
+ *      "Options" contains names
+ *      "Values" contains values respectively
+ * RequestMessage
+ * AnswerMessage
+ */
+
+
+public class Message implements Serializable {
+
+    public static String PIC_SRC = "test2.png";
+    public static String PIC_DES = "clonetest2.png";
+    public static String ERR_CMD = "Message command is empty";
+    public static String ERR_CMD2 = "Wrong message command";
+
+    public static String SUC_CREATE_REQ_MESSAGE = "The request message is created ";
+    public static String SUC_CREATE_ANS_MESSAGE = "The answer message is created ";
+
+
+
+    public static String OPTION_KEY_WORDS = "keywords";
+    public static String OPTION_YEAR = "year";
+    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 CMD_SEARCH = "search";
+    public static String CMD_STATISTIC = "stat";
+    public static String CMD_DETAIL = "detail";
+
+    public static String RESULT_SEARCH = "resultSearch";
+    public static String RESULT_STATISTIC = "resultStat";
+    public static String RESULT_DETAIL = "resultDetail";
+
+
+    private String cmd;
+    private ArrayList<Object> content;
+    private ArrayList<String> options;
+    private ArrayList<String> values;
+
+
+
+    //Constructors
+
+    public Message(ArrayList<Object> content){
+        this.content = content;
+    }
+    public Message()
+    {
+        this.content = null;
+        this.options = new ArrayList<>();
+        this.values = new ArrayList<>();
+    }
+
+    public Message(String cmd){
+        this.cmd = cmd;
+        this.options = new ArrayList<>();
+        this.values = new ArrayList<>();
+    }
+
+    public  Message(String cmd, ArrayList<String> options , ArrayList<String> values){
+
+        this.cmd = cmd;
+        this.options = options;
+        this.values = values;
+
+    }
+    public void addOptionValueMessage (String option, String value){
+        this.options.add(option);
+        this.values.add(value);
+    }
+
+    public void addKeywordMessage(String value){
+        this.addOptionValueMessage("keyword",value);
+    }
+
+    //Get value of cmd
+    public String getCmd() {
+        return cmd;
+    }
+    //Get value of content
+    public ArrayList<Object> getContent() {
+        return content;
+    }
+
+    public ArrayList<String> getOptions() {
+        return options;
+    }
+
+    //Get value of values
+    public ArrayList<String> getValues() {
+        return values;
+    }
+
+    //Set value for cmd
+    public void setCmd(String cmd) {
+        this.cmd = cmd;
+    }
+
+    //Set value for content
+    public void setContent(ArrayList<Object> content) {
+        this.content = content;
+    }
+
+    //set values for options
+    public void setOptions(ArrayList<String> options) {
+        this.options = options;
+    }
+
+    //Set values for values
+    public void setValues(ArrayList<String> values) {
+        this.values = values;
+    }
+
+    //Create a request message for clients
+    public void createRequestMessage(String cmd, ArrayList<String> options, ArrayList<String> values)
+    {
+        this.cmd = cmd;
+        this.options = options;
+        this.values = values;
+    }
+
+    //Create an answer for server to send to the client
+    public void createAnswerMessage(String cmd, ArrayList<Object> content) {
+        this.content = content;
+        this.cmd = cmd;
+    }
+
+
+
+    public ArrayList<Object> parseMessage(Message msg)
+    {
+            //TODO Parse the message
+        return msg.content;
+    }
+
+
+    public static byte[] convertImageToByte(){
+        byte[] imgByte = null;
+
+        try {
+            BufferedImage img = ImageIO.read(new File(PIC_SRC));
+
+            try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+                ImageIO.write(img, "png", baos);
+                baos.flush();
+                imgByte = baos.toByteArray();
+            }
+
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            System.out.println("Image can't not be found!");
+        }
+
+        System.out.println("Image has been converted successfully!");
+
+        return imgByte;
+    }
+
+    //a function to convert a string byte to an image
+    public static void convertByteToImage(byte[] imgByte){
+
+        if (imgByte != null){
+
+            InputStream inStream = new ByteArrayInputStream(imgByte);
+            try {
+                BufferedImage img = ImageIO.read(inStream);
+
+                ImageIO.write(img, "png", new File(PIC_DES));
+                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!");
+            }
+        }
+
+        else System.out.print("Image can't not be created!");
+    }
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/myutil/externalSearch/Record.java b/src/myutil/externalSearch/Record.java
new file mode 100644
index 0000000000000000000000000000000000000000..756d6b3e449324ce3030e03b117e9654d065ce69
--- /dev/null
+++ b/src/myutil/externalSearch/Record.java
@@ -0,0 +1,187 @@
+package myutil.externalSearch;
+
+/**
+ * Created by trhuy on 5/12/15.
+ */
+public class Record {
+    //private String id;
+    //private String n;
+    private String summary;
+    private String cve_id ;
+    private String pub_date ;
+    private String mod_date ;
+    private String score ;
+    private String access_vector ;
+    private String access_complexity ;
+    private String authentication  ;
+    private String confidentiality_impact ;
+    private String integrity_impact  ;
+    private String availability_impact ;
+    private String gen_date;
+    private String cwe_id ;
+    private String ref_type ;
+    private String source;
+    private String link ;
+    private String name ;
+
+
+    public String getCve_id() {
+        return cve_id;
+    }
+
+    public void setCve_id(String cve_id) {
+        this.cve_id = cve_id;
+    }
+
+    public String getPub_date() {
+        return pub_date;
+    }
+
+    public void setPub_date(String pub_date) {
+        this.pub_date = pub_date;
+    }
+
+    public String getMod_date() {
+        return mod_date;
+    }
+
+    public void setMod_date(String mod_date) {
+        this.mod_date = mod_date;
+    }
+
+    public String getScore() {
+        return score;
+    }
+
+    public void setScore(String score) {
+        this.score = score;
+    }
+
+    public String getAccess_vector() {
+        return access_vector;
+    }
+
+    public void setAccess_vector(String access_vector) {
+        this.access_vector = access_vector;
+    }
+
+    public String getAccess_complexity() {
+        return access_complexity;
+    }
+
+    public void setAccess_complexity(String access_complexity) {
+        this.access_complexity = access_complexity;
+    }
+
+    public String getAuthentication() {
+        return authentication;
+    }
+
+    public void setAuthentication(String authentication) {
+        this.authentication = authentication;
+    }
+
+    public String getConfidentiality_impact() {
+        return confidentiality_impact;
+    }
+
+    public void setConfidentiality_impact(String confidentiality_impact) {
+        this.confidentiality_impact = confidentiality_impact;
+    }
+
+    public String getIntegrity_impact() {
+        return integrity_impact;
+    }
+
+    public void setIntegrity_impact(String integrity_impact) {
+        this.integrity_impact = integrity_impact;
+    }
+
+    public String getAvailability_impact() {
+        return availability_impact;
+    }
+
+    public void setAvailability_impact(String availability_impact) {
+        this.availability_impact = availability_impact;
+    }
+
+    public String getGen_date() {
+        return gen_date;
+    }
+
+    public void setGen_date(String gen_date) {
+        this.gen_date = gen_date;
+    }
+
+    public String getCwe_id() {
+        return cwe_id;
+    }
+
+    public void setCwe_id(String cwe_id) {
+        this.cwe_id = cwe_id;
+    }
+
+    public String getRef_type() {
+        return ref_type;
+    }
+
+    public void setRef_type(String ref_type) {
+        this.ref_type = ref_type;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+    public String getSummary() {
+        return summary;
+    }
+
+    public void setSummary(String summary) {
+        this.summary = summary;
+    }
+
+    @Override
+    public String toString() {
+        return
+                "summary='" + summary + '\n' +
+                ", cve_id='" + cve_id + '\n' +
+                ", pub_date='" + pub_date + '\n' +
+                ", mod_date='" + mod_date + '\n' +
+                ", score='" + score + '\n' +
+                ", access_vector='" + access_vector + '\n' +
+                ", access_complexity='" + access_complexity + '\n' +
+                ", authentication='" + authentication + '\n' +
+                ", confidentiality_impact='" + confidentiality_impact + '\n' +
+                ", integrity_impact='" + integrity_impact + '\n' +
+                ", availability_impact='" + availability_impact + '\n' +
+                ", gen_date='" + gen_date + '\n' +
+                ", cwe_id='" + cwe_id + '\n' +
+                ", ref_type='" + ref_type + '\n' +
+                ", source='" + source + '\n' +
+                ", link='" + link + '\n' +
+                ", name='" + name + '\n' ;
+
+    }
+}
diff --git a/src/ui/window/JDialogSearchBox.java b/src/ui/window/JDialogSearchBox.java
index 33744ecf7742dece04536bebe6c69e3e6548b0a6..5bb9935ad3d3fa5d25ac6f7569d504dc3c326249 100644
--- a/src/ui/window/JDialogSearchBox.java
+++ b/src/ui/window/JDialogSearchBox.java
@@ -62,6 +62,7 @@ import myutil.GraphicLib;
 
 import java.lang.Object;
 import java.awt.Desktop;
+import java.lang.reflect.Array;
 import java.net.URI;
 
 import myutil.TableSorter;
@@ -74,7 +75,10 @@ import javax.swing.table.DefaultTableModel;
 import myutil.CheckConnection;
 //import myutil.Message;
 //import myutil.Client;
+import myutil.externalSearch.Record;
 import ui.TDiagramMouseManager;
+import myutil.externalSearch.Message;
+import myutil.externalSearch.Client;
 
 //TODO : change display to tab.
 //TODO: decorate the text box
@@ -147,9 +151,10 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     int searchDatabase;
 
     TDiagramMouseManager tdmm ;
-    
+
     private ArrayList<Object[]> rowsGoogle;
     private ArrayList<Object[]> rowsGoogleScholar;
+    private ArrayList<Object[]> rowsDB;
     /** Creates new form  */
     public JDialogSearchBox(Frame _frame, String _title, ArrayList<String> l, TDiagramMouseManager tdmm) {
     	 //super(_frame, _title, true);
@@ -161,14 +166,14 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
          for (int i =0; i< l.size(); i++){
         	 addValueListKeyword(l.get(i));
          }
-         
+
         // this.setLocationRelativeTo(_frame);
          pack();
-      
+
          this.setVisible(true);
 
     }
-    
+
     private void initComponents(){
     	jScrollPane1 = new javax.swing.JScrollPane();
         ListKeywords = new javax.swing.JList();
@@ -221,7 +226,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         jTextaddressDB.setText(dbaddress + ":" + dbport);
 
-        
+
         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
         setResizable(false);
         searchGoogle=0;
@@ -248,7 +253,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         searchBox.setText("Key words");
 
         googleCb.setText("Google");
-      
+
         googleScholarCb.setText("Google Scholar");
 
         databaseCb.setText("Database");
@@ -257,8 +262,8 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         jLabel3.setText("Search Box");
         jLabel4.setText("Results");
         jLabel5.setText("Status");
-        jLabel2.setText("Score");
-        jLabel3.setText("Year");
+        jLabel2.setText("Year");
+        jLabel3.setText("Score");
 
         jButton_Setting.setText("Setting");
 
@@ -272,6 +277,9 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         this.combobox_Score.setEnabled(false);
         this.combobox_Year.setEnabled(false);
 
+
+
+
         //--------------------------------------------------------
 
         detailText_google.setBounds(0, 0, 20, 5);
@@ -282,7 +290,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         resultTable_google.setModel(new javax.swing.table.DefaultTableModel(
                 new Object[][]{}, new String[]{
-                "No", "Title", "Author", "Link", "Source"}) {
+                "No", "Title", "Link"}) {
             @Override
             public boolean isCellEditable(int rowIndex, int columnIndex) {
                 return false;
@@ -290,11 +298,13 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         });
         resultTable_google.setSelectionMode(
                 ListSelectionModel.SINGLE_INTERVAL_SELECTION);
-        
+
         jScrollPane4.setViewportView(resultTable_google);
-        
+
         resultTable_google.getColumnModel().getColumn(0).setMaxWidth(40);
-        resultTable_google.getColumnModel().getColumn(4).setMaxWidth(120);
+       //resultTable_google.getColumnModel().getColumn(2).setMaxWidth(400);
+        resultTable_google.getColumnModel().getColumn(2).setMinWidth(400);
+        //resultTable_google.getColumnModel().getColumn(2).setMaxWidth(120);
 
         sortTable.setTableHeader(resultTable_google.getTableHeader());
 
@@ -328,7 +338,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         resultTable_googleScholar.setModel(new javax.swing.table.DefaultTableModel(
                 new Object[][]{}, new String[]{
-                "No", "Title", "Author", "Link", "Source"}) {
+                "No", "Title", "Author", "Link"}) {
             @Override
             public boolean isCellEditable(int rowIndex, int columnIndex) {
                 return false;
@@ -340,7 +350,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         jScrollPane9.setViewportView(resultTable_googleScholar);
 
         resultTable_googleScholar.getColumnModel().getColumn(0).setMaxWidth(40);
-        resultTable_googleScholar.getColumnModel().getColumn(4).setMaxWidth(120);
+        //resultTable_googleScholar.getColumnModel().getColumn(4).setMaxWidth(120);
 
         sortTable1.setTableHeader(resultTable_googleScholar.getTableHeader());
 
@@ -368,7 +378,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         resultTable_db.setModel(new javax.swing.table.DefaultTableModel(
                 new Object[][]{}, new String[]{
-                "No", "ID CVE", "System", "Score", "Year"}) {
+                "No", "ID CVE", "Title"}) {
             @Override
             public boolean isCellEditable(int rowIndex, int columnIndex) {
                 return false;
@@ -379,7 +389,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         jScrollPane5.setViewportView(resultTable_db);
         resultTable_db.getColumnModel().getColumn(0).setMaxWidth(40);
-        resultTable_db.getColumnModel().getColumn(4).setMaxWidth(120);
+        resultTable_db.getColumnModel().getColumn(2).setMinWidth(120);
         jScrollPane7.setViewportView(detailText_db);
 
 
@@ -491,7 +501,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                 .addComponent(jLabel5)
                                 .addGap(6, 6, 6))
         );
-        
+
         removeBt.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 removeBtActionPerformed(evt);
@@ -528,7 +538,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)
@@ -536,7 +546,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 googleCbActionPerformed(evt);
             }
         });
-        
+
         databaseCb.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 if (databaseCb.isSelected() && ListKeywords.getModel().getSize()>0)
@@ -544,7 +554,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 databaseCbActionPerformed(evt);
             }
         });
-        
+
         googleScholarCb.addActionListener(new java.awt.event.ActionListener() {
             public void actionPerformed(java.awt.event.ActionEvent evt) {
                 if (googleScholarCb.isSelected() && ListKeywords.getModel().getSize()>0)
@@ -556,14 +566,14 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         resultTable_google.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
             @Override
             public void valueChanged(ListSelectionEvent e) {
-                selectrow(e, rowsGoogle,resultTable_google,detailText_google);
+                selectrow(e, rowsGoogle, resultTable_google, detailText_google, 0);
             }
         });
         resultTable_google.addMouseListener(new MouseAdapter() {
             public void mouseClicked(MouseEvent e) {
                 int row = resultTable_google.getSelectedRow();
                 int col = resultTable_google.getSelectedColumn();
-                if (col == 3) {
+                if (col == 2) {
                     String st = (String) resultTable_google.getValueAt(row, col);
                     URI uri = URI.create(st);
                     Desktop d = Desktop.getDesktop();
@@ -582,7 +592,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         resultTable_googleScholar.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
             @Override
             public void valueChanged(ListSelectionEvent e) {
-                selectrow(e, rowsGoogleScholar,resultTable_googleScholar,detailText_googleScholar);
+                selectrow(e, rowsGoogleScholar, resultTable_googleScholar, detailText_googleScholar, 1);
             }
         });
 
@@ -605,6 +615,33 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
             }
         });
+        resultTable_db.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+            @Override
+            public void valueChanged(ListSelectionEvent e) {
+                selectrow(e, rowsDB, resultTable_db, detailText_db, 2);
+            }
+        });
+
+        resultTable_db.addMouseListener(new MouseAdapter() {
+            public void mouseClicked(MouseEvent e) {
+                int row = resultTable_db.getSelectedRow();
+                int col = resultTable_db.getSelectedColumn();
+                if (col == 2) {
+                    String st = (String) resultTable_db.getValueAt(row, col);
+
+                    Message msg = new Message(Message.CMD_DETAIL)   ;
+                    msg.addKeywordMessage(st);
+
+                    Client cl = new Client();
+                    //Message returnMsg = cl.send(msg);
+                    Message returnMsg  = new Message(Message.RESULT_DETAIL);
+                    Record r = (Record)cl.parserAnswerMessage(returnMsg);
+                    printDetailRecord(r);
+                }
+
+            }
+        });
+
 
         addWindowListener(new java.awt.event.WindowAdapter() {
             public void windowClosing(java.awt.event.WindowEvent evt) {
@@ -700,6 +737,9 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         this.dispose();
     }
 
+
+
+
     private void ListKeywordsComponentAdded(java.awt.event.ContainerEvent evt) {
         this.removeBt.setEnabled(true);
     }
@@ -749,6 +789,13 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
     private void searchBtActionPerformed(java.awt.event.ActionEvent evt)  {
 
+        //reset Tab title
+        jTabbedPane2.setTitleAt(0, "Google");
+        jTabbedPane2.setTitleAt(1, "Google Scholar");
+        jTabbedPane2.setTitleAt(2, "Database");
+
+
+
         if (searchGoogle == 0 && searchGoogleScholar == 0 && searchDatabase == 0) {
             JOptionPane.showMessageDialog(null, "Please select the resource to search","Warning",
                     JOptionPane.WARNING_MESSAGE);
@@ -764,17 +811,22 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 //reset content of table
                 DefaultTableModel modelGoogle = (DefaultTableModel) resultTable_google.getModel();
                 DefaultTableModel modelGoogleScholar = (DefaultTableModel) resultTable_googleScholar.getModel();
+                DefaultTableModel modelDB = (DefaultTableModel) resultTable_db.getModel();
+
                 modelGoogle.setRowCount(0);
                 modelGoogleScholar.setRowCount(0);
+                modelDB.setRowCount(0);
+
                 detailText_google.setText("");
                 detailText_googleScholar.setText("");
+                detailText_db.setText("");
 
                 // ensure there is at least the resources for crawling.
 
                 int id;
                 rowsGoogle = new ArrayList<Object[]>();
                 rowsGoogleScholar = new ArrayList<Object[]>();
-
+                rowsDB =new ArrayList<Object[]>();
                 // check internet connection before crawling from google or google scholar
                 Boolean internetConnectionAvailable = null;
                 if (searchGoogle == 1 || searchGoogleScholar == 1) {
@@ -838,8 +890,6 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                         }
 
 
-
-
                     }else{
                         jLabel5.setText("Failed to connect to resource ");
                         JOptionPane.showMessageDialog(null, "Cannot connect to Google",
@@ -852,7 +902,30 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 //TODO : cralwer data from DB, must check the connection.
                 if (searchDatabase ==1) {
                     jLabel5.setText("Retrieving data from DB");
-                    for (long i = 1; i < 100000000; i++) ;
+                    Message msg = new Message(Message.CMD_SEARCH);
+                    msg.addOptionValueMessage(Message.OPTION_YEAR,(String)combobox_Year.getSelectedItem());
+                    //msg.addOptionValueMessage(Message.OPTION_SCORE,(String)combobox_Score.getSelectedItem());
+                    //msg.addOptionValueMessage(Message.OPTION_SYSTEM,(String)combobox_System.getSelectedItem());
+                    //msg.addOptionValueMessage(Message.OPTION_NUMBER, Integer.toString(10));
+                    //msg.addKeywordMessage(searchBox.getText());
+                    //create client
+                    Client client = new Client();
+                    Message msg1 = new Message(Message.RESULT_SEARCH);
+                    //Message returnMsg = client.send(msg1);
+
+                    //Message msg1 = new Message(Message.RESULT_SEARCH);
+
+                    //System.out.print("truoc khi vao parser");
+                    ArrayList<Record> re =  (ArrayList<Record>)client.parserAnswerMessage(msg1);
+                    putDBToTable(re);
+                    showtable(rowsDB, modelDB,2);
+
+                    try {
+                       // Message rtMsg = client.send(msg);
+                        //ArrayList<Record> = client.parserAnswerMessage(rtMsg);
+                    }catch (Exception e){
+                        System.out.println("Loi");
+                    }
                 }
 
             }
@@ -860,43 +933,72 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         t.start();
     }
 
+
     public void showtable(ArrayList<Object[]> list, DefaultTableModel model,int index){
         int id=0;
-        for (Object[] o : list) {
-            id = (Integer) (o[0]);
-            GoogleSearch gs = (GoogleSearch) (o[1]);
-            String source = (String) (o[2]);
-            model.addRow(new Object[]{id, gs.getTitle(), gs.getAuthors(), gs.getUrl(), source});
+        if (index ==1 || index ==0) {
+            for (Object[] o : list) {
+                id = (Integer) (o[0]);
+                GoogleSearch gs = (GoogleSearch) (o[1]);
+                //String source = (String) (o[2]);
+                //model.addRow(new Object[]{id, gs.getTitle(), gs.getAuthors(), gs.getUrl(), source});
+                if (index == 0)
+                    model.addRow(new Object[]{id, gs.getTitle(), gs.getUrl()});
+                else if (index == 1)
+                    model.addRow(new Object[]{id, gs.getTitle(), gs.getAuthors(), gs.getUrl()});
+
+            }
+        } else if (index == 2){
+            for (Object[] o : list) {
+                id = (Integer) (o[0]);
+                Record r = (Record) (o[1]);
+                model.addRow(new Object[]{id, r.getCve_id(), r.getName()});
+            }
         }
 
+
         if (index ==0 ){
-            jTabbedPane2.setTitleAt(index, "Google" + "(" + model.getRowCount() + ")");
+            jTabbedPane2.setTitleAt(index, "Google" + " [" + model.getRowCount() + "]");
         }
         else if (index ==1 ){
-            jTabbedPane2.setTitleAt(index, "Google Scholar" + "(" + model.getRowCount() + ")");
+            jTabbedPane2.setTitleAt(index, "Google Scholar" + " [" + model.getRowCount() + "]");
         }
         else if (index ==2 ){
-            jTabbedPane2.setTitleAt(index, "Database" + "(" + model.getRowCount() + ")");
+            jTabbedPane2.setTitleAt(index, "Database" + " [" + model.getRowCount() + "]");
         }
         searchBt.setEnabled(true);
         jLabel5.setText("Finished");
-        jTabbedPane2.updateUI();
+        //jTabbedPane2.updateUI();
     }
 
-    private void selectrow(ListSelectionEvent evt,ArrayList<Object[]> rows,JTable resultTable,JTextPane textpane) {
+    private void selectrow(ListSelectionEvent evt,ArrayList<Object[]> rows,JTable resultTable,JTextPane textpane,int typeObject) {
     	int rowindex = resultTable.getSelectedRow();
     	int id =0;
-    	
+
     	if(rowindex >=0)
     		id= (Integer) resultTable.getValueAt(rowindex, 0);
-	    	GoogleSearch selected=null;
-	    	for (Object[] o : rows){
-	    		if (o[0].equals(id)){
-	    			selected=(GoogleSearch)o[1];
-	    			break;
-	    		}
-	    	}
-	    	presentDataInDetail(selected,textpane);
+            if (typeObject==1 || typeObject==0){
+                GoogleSearch selected=null;
+                for (Object[] o : rows){
+                    if (o[0].equals(id)){
+                        selected=(GoogleSearch)o[1];
+                        break;
+                    }
+                }
+                presentDataInDetail(selected, 0,textpane);
+            }else{
+                    Record selected=null;
+                    for (Object[] o : rows){
+                        if (o[0].equals(id)){
+                            selected=(Record)o[1];
+                            break;
+                        }
+                    }
+                    presentDataInDetail(selected,2,  textpane);
+            }
+
+
+
     }    
     
     private void googleCbActionPerformed(java.awt.event.ActionEvent evt) {
@@ -968,39 +1070,120 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     {
     	int i = this.rowsGoogle.size()+1;
     	for (GoogleSearch gs : a){
-    		this.rowsGoogle.add(new Object[]{i, gs,"Google"});
+    		this.rowsGoogle.add(new Object[]{i, gs});
     		i=i+1;
     	}
     }
+
+    public void putDBToTable(ArrayList<Record> a)
+    {
+        int i = this.rowsGoogle.size()+1;
+        for (Record record : a){
+            this.rowsDB.add(new Object[]{i, record});
+            i=i+1;
+        }
+    }
     
     public void putGoogleScholarToTable(ArrayList<GoogleSearch> a)
     {
     	int i = this.rowsGoogleScholar.size()+1;
     	for (GoogleSearch gs : a){
-            rowsGoogleScholar.add(new Object[]{i, gs,"GoogleScholar"});
+            rowsGoogleScholar.add(new Object[]{i, gs});
     		i=i+1;
     	}
     }
-    
-    public void presentDataInDetail(GoogleSearch gs, JTextPane textPane){
-
-        if (gs != null)
-    	{
-
-            String detail = "";
-            if (gs.getTitle()!=null)
-                detail = detail+ gs.getTitle()+"\n";
-            if (gs.getAuthors()!=null)
-	    	    detail = detail + gs.getAuthors()+"\n";
-            if (gs.getUrl()!=null)
-	    	    detail = detail + gs.getUrl()+"\n";
-            if (gs.getCitedNumber()!=null)
-	    	    detail = detail + gs.getCitedNumber()+"\n";
-            if (gs.getDesc()!=null)
-	    	    detail = detail + gs.getDesc()+"\n";
 
+    private void printDetailRecord(Record r){
+
+        //String detail = r.getSummary();
+        this.detailText_db.setText(r.toString());
+    }
+
+
+
+
+    public void presentDataInDetail(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;
+            String detail = r.getSummary();
             textPane.setText(detail);
-    	}
+        }
+
     }
 
     //==========================================