From 83cdb1a7e023473bc8001fd635660868490b7c2d Mon Sep 17 00:00:00 2001
From: Dominique Blouin <dominique.blouin@telecom-paristech.fr>
Date: Mon, 15 Jun 2015 07:42:51 +0000
Subject: [PATCH] change sql query with preparestatement; display diagram

---
 bin/config.xml                                |   2 +-
 crawler/bin/client.jar                        | Bin 23993 -> 26514 bytes
 crawler/bin/crawler.jar                       | Bin 23994 -> 26515 bytes
 crawler/bin/derby.log                         |  31 +-
 .../src/myutil/externalSearch/Message.java    |  37 ++-
 crawler/src/web/crawler/Client.java           |  98 ++++--
 .../src/web/crawler/Data_visualisation.java   | 176 ++++++++---
 .../src/web/crawler/Database_creation.java    |  94 +++++-
 crawler/src/web/crawler/Database_query.java   | 175 ++++++++---
 crawler/src/web/crawler/File_management.java  | 201 ++++++++----
 .../src/web/crawler/MultiThreadServer.java    |  34 +-
 crawler/src/web/crawler/WebCrawler.java       |  28 +-
 src/myutil/GoogleSearch.java                  |  34 +-
 src/myutil/externalSearch/Client.java         |  16 +-
 src/myutil/externalSearch/Message.java        |  37 ++-
 src/ui/window/JDialogSearchBox.java           | 291 ++++++++++++------
 16 files changed, 901 insertions(+), 353 deletions(-)

diff --git a/bin/config.xml b/bin/config.xml
index 66b674926f..ebd7b06feb 100755
--- a/bin/config.xml
+++ b/bin/config.xml
@@ -65,7 +65,7 @@
 
 <ExternalServer data="localhost:12345"/>
 
-<LastWindowAttributes x="468" y="59" width="788" height="597" max="false" />
+<LastWindowAttributes x="358" y="70" width="792" height="597" max="false" />
 
 
 </TURTLECONFIGURATION>
diff --git a/crawler/bin/client.jar b/crawler/bin/client.jar
index a757d749e3595c6efe45608fdcc32b24c7e34bdb..7a797df0f521b4ba6b0f9ab08560ea3f72d9a416 100644
GIT binary patch
delta 24505
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
O`vn>bioE^*wEh>JoMq4e

delta 21928
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

diff --git a/crawler/bin/crawler.jar b/crawler/bin/crawler.jar
index d18b857d1739146b7e24ffc9418cb229da1dafa4..338302e499732d197f25d490fb9ad9cce4944b00 100755
GIT binary patch
delta 24484
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
BW@-Qc

delta 21928
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

diff --git a/crawler/bin/derby.log b/crawler/bin/derby.log
index ebb67fadcb..9493992d9a 100755
--- a/crawler/bin/derby.log
+++ b/crawler/bin/derby.log
@@ -1,17 +1,14 @@
-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
-java.lang.reflect.InvocationTargetException
-	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
-	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
-	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
-	at java.lang.reflect.Method.invoke(Method.java:606)
-	at org.apache.derby.iapi.jdbc.DRDAServerStarter.run(Unknown Source)
-	at java.lang.Thread.run(Thread.java:745)
-Caused by: java.lang.Exception: DRDA_ListenPort.S:Could not listen on port 1527 on host 127.0.0.1:
- java.net.BindException: Address already in use
-	at org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessageWork(Unknown Source)
-	at org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessage(Unknown Source)
-	at org.apache.derby.impl.drda.NetworkServerControlImpl.blockingStart(Unknown Source)
-	... 6 more
+Mon Jun 15 00:29:33 CEST 2015 : Apache Derby Network Server - 10.8.3.0 - (1405108) started and ready to accept connections on port 1527
+----------------------------------------------------------------
+Mon Jun 15 00:29:34 CEST 2015:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.8.3.0 - (1405108): instance a816c00e-014d-f431-2f30-000002d6fbe8 
+on database directory /home/trhuy/TURTLE/crawler/bin/MyDatabase  with class loader sun.misc.Launcher$AppClassLoader@3c7bf4c3 
+Loaded from file:/home/trhuy/TURTLE/crawler/bin/derby.jar
+java.vendor=Oracle Corporation
+java.runtime.version=1.7.0_79-b14
+user.dir=/home/trhuy/TURTLE/crawler/bin
+os.name=Linux
+os.arch=amd64
+os.version=3.13.0-37-generic
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
diff --git a/crawler/src/myutil/externalSearch/Message.java b/crawler/src/myutil/externalSearch/Message.java
index 5da8716d25..4fd15167ab 100644
--- a/crawler/src/myutil/externalSearch/Message.java
+++ b/crawler/src/myutil/externalSearch/Message.java
@@ -77,6 +77,10 @@ public class Message implements Serializable {
 
     public static String PIC_SRC = "server_visualisation.png";
     public static String PIC_DES = "client_visualisation.png";
+    public static String PIC_SRC_HIST = "server_visualisation_Hist.png";
+    public static String PIC_SRC_STAT = "server_visualisation.png";
+    public static String PIC_DES_STAT = "client_visualisation_Stat.png";
+    public static String PIC_DES_HIST = "client_visualisation_Hist.png";
     public static String ERR_CMD = "Message command is empty\n";
     public static String ERR_CMD2 = "Wrong message command\n";
 
@@ -206,11 +210,19 @@ public class Message implements Serializable {
     }
 
 
-    public static byte[] convertImageToByte(){
+    public static byte[] convertImageToByte(Message msg){
         byte[] imgByte = null;
+        BufferedImage img;
 
         try {
-            BufferedImage img = ImageIO.read(new File(PIC_SRC));
+            if(msg.getCmd().equals("stat"))
+            {
+                img = ImageIO.read(new File(PIC_SRC_STAT));
+            }
+            else
+            {
+                img = ImageIO.read(new File(PIC_SRC_HIST));
+            }
 
             try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
                 ImageIO.write(img, "png", baos);
@@ -219,7 +231,8 @@ public class Message implements Serializable {
             }
 
         } catch (IOException e) {
-            System.out.println("Image can't not be found!");
+            // TODO Auto-generated catch block
+            System.out.println("Image can't not be found!\n");
         }
 
         System.out.println("Image has been converted successfully!");
@@ -228,20 +241,26 @@ public class Message implements Serializable {
     }
 
     //a function to convert a string byte to an image
-    public static void convertByteToImage(byte[] imgByte){
+    public static void convertByteToImage(byte[] imgByte,Message msg){
 
         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!");
-
+                if(msg.getCmd().equals(RESULT_STATISTIC))
+                {
+                    ImageIO.write(img, "png", new File(PIC_DES_STAT));
+                }
+                else
+                {
+                    ImageIO.write(img, "png", new File(PIC_DES_HIST));
+                }
+                System.out.println("Image has been created successfully!\n");
 
             } catch (IOException e) {
-                // System.out.println("Image can't not be created!");
+                // TODO Auto-generated catch block
+                System.out.println("Image can't not be created!\n");
             }
         }
 
diff --git a/crawler/src/web/crawler/Client.java b/crawler/src/web/crawler/Client.java
index b7bc9c2230..371e65530b 100644
--- a/crawler/src/web/crawler/Client.java
+++ b/crawler/src/web/crawler/Client.java
@@ -18,15 +18,27 @@ import org.apache.commons.io.FileUtils;
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
 
-
+/**
+ *
+ * @author Marie FORRAT & Angeliki AKTYPI & Dan Huynh VO
+ */
 public class Client {
-
+    /**
+     *
+     * @param cmd
+     * @param options
+     * @param values
+     * @return
+     */
     public static Message createRequestMessage(String cmd, ArrayList<String> options, ArrayList<String> values) {
         Message requestMsg = new Message(cmd, options, values);
         System.out.println("\n" + Message.SUC_CREATE_REQ_MESSAGE);
         return requestMsg;
     }
-    
+    /**
+     *
+     * @param answerMsg
+     */
     public static void analyseAnswerMessage(Message answerMsg) {
         //Analyse the message from the server,
         //Depends on the cmd, we can determine the values 
@@ -38,8 +50,6 @@ public class Client {
         } 
         
         else if (cmd.equals(Message.RESULT_SEARCH)) {
-            //show GUI for search
-            //Call Huy's function
             ArrayList<Object> res = new ArrayList();
             res = answerMsg.getContent();
             System.out.println("\n"+res);
@@ -47,8 +57,6 @@ public class Client {
         } 
         
         else if (cmd.equals(Message.RESULT_DETAIL)) {
-            //show GUI for detail of a specific record
-            //Call Huy's function
             ArrayList<Object> res = new ArrayList();
             res = answerMsg.getContent();
             System.out.println("\n"+res);
@@ -57,17 +65,26 @@ public class Client {
         
         else if (cmd.equals(Message.RESULT_STATISTIC)) {
             
+            ArrayList<Object> resultContent = new ArrayList();
+            resultContent = answerMsg.getContent();
+            byte[] imgByte = (byte[]) resultContent.get(0);
+            Message.convertByteToImage(imgByte,answerMsg);
+
+            //Call Huy's function to load Image
+        }
+
+        else if (cmd.equals(Message.RESULT_HISTOGRAM)) {
+
             //Show picture-Use a function to convert binary to image
-            //Message.convertByteToImage(answerMsg.getImageByte());    
-            
+            //Message.convertByteToImage(answerMsg.getImageByte());
+
             ArrayList<Object> resultContent = new ArrayList();
             resultContent = answerMsg.getContent();
             byte[] imgByte = (byte[]) resultContent.get(0);
-            Message.convertByteToImage(imgByte);
+            Message.convertByteToImage(imgByte,answerMsg);
 
             //Call Huy's function to load Image
-        } 
-        
+        }
         else {
             System.out.print(Message.ERR_CMD2);
         }
@@ -78,10 +95,10 @@ public class Client {
 	 SSLSocket client = null;
 
         try {
-		SSLSocketFactory sslSocketFactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
-                client = (SSLSocket)sslSocketFactory.createSocket("LocalHost",12345);
+		    SSLSocketFactory sslSocketFactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
+            client = (SSLSocket)sslSocketFactory.createSocket("LocalHost",12345);
 
-                 client.setEnabledCipherSuites(client.getSupportedCipherSuites());
+            client.setEnabledCipherSuites(client.getSupportedCipherSuites());
 
             System.out.println("Client has been created successfully!");
 
@@ -108,23 +125,24 @@ public class Client {
             while (true) {
 
                 if (cmd.equals(Message.CMD_SEARCH)) {
-                                        
+
 
                     options.add(Message.OPTION_KEY_WORDS);
                     options.add(Message.OPTION_YEAR);
+                    options.add(Message.OPTION_SCORE);
                     options.add(Message.OPTION_SYSTEM);
                     options.add(Message.OPTION_NUMBER);
-                    
-                    System.out.println("Insert the keyword, the year, "
+
+                    System.out.println("Insert the keyword, the year, the score "
                             +"the system and the number of results that you wish.");
-                    System.out.println("Example:buffer%overflow 2015 linux 10\n");
+                    System.out.println("Example:buffer-injection this-year linux 4-5 10\n");
                     String arguments = br.readLine();
                     String[] argument = arguments.split(" ");
-                    
-                    for (int i = 0; i < 4; i++) {
+
+                    for (int i = 0; i < 5; i++) {
                         //System.out.println(argument[i]);
                         values.add(argument[i]);
-                    }                    
+                    }
                     break;
                 } 
             
@@ -140,22 +158,40 @@ public class Client {
                 
                 //Creat a statistic image request
                 else if (cmd.equals(Message.CMD_STATISTIC)) {
-                    
+
                     options.add(Message.OPTION_KEY_WORDS);
-                    
-                    System.out.println("Insert the systems that you wish " 
-                                    +"to be statistically examined.");
+
+                    System.out.println("Insert the systems that you wish "
+                            +"to be statistically examined.");
                     System.out.println("Example:linux apache chrome windows sql\n");
                     String arguments = br.readLine();
-                    String[] argument = arguments.split(" ");
-                    
+                    values.add(arguments);
+                    //String[] argument = arguments.split(" ");
+
+                  /*  for (int i = 0; i < argument.length; i++) {
+                        //System.out.println(argument[i]);
+                        values.add(argument[i]);
+                    }*/
+                    break;
+                }
+                else if (cmd.equals(Message.CMD_HISTOGRAM)) {
+
+                    options.add(Message.OPTION_KEY_WORDS);
+
+                    System.out.println("Insert one system that you wish "
+                            +"to be statistically examined.");
+                    System.out.println("Example:linux\n");
+                    String arguments = br.readLine();
+                  /*  String[] argument = arguments.split(" ");
+
                     for (int i = 0; i < argument.length; i++) {
                         //System.out.println(argument[i]);
                         values.add(argument[i]);
-                    }
+                    }*/
+                    values.add(arguments);
                     break;
-                }          
-                
+                }
+
                 else {
                     System.out.print(Message.ERR_CMD2);
                     break;
diff --git a/crawler/src/web/crawler/Data_visualisation.java b/crawler/src/web/crawler/Data_visualisation.java
index 5c11963958..d9c34af1b3 100644
--- a/crawler/src/web/crawler/Data_visualisation.java
+++ b/crawler/src/web/crawler/Data_visualisation.java
@@ -9,83 +9,175 @@ import com.panayotis.gnuplot.JavaPlot;
 import com.panayotis.gnuplot.plot.DataSetPlot;
 import com.panayotis.gnuplot.style.PlotStyle;
 import com.panayotis.gnuplot.style.Style;
+import com.panayotis.gnuplot.terminal.ImageTerminal;
 import java.awt.AWTException;
-import java.awt.Component;
-import java.awt.Rectangle;
-import java.awt.Robot;
+import java.awt.event.WindowEvent;
 import java.awt.image.BufferedImage;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.sql.Array;
+import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
-import myutil.externalSearch.Message;
 import javax.swing.JPanel;
 import javax.swing.border.EmptyBorder;
 import org.mcavallo.opencloud.Cloud;
 import org.mcavallo.opencloud.Tag;
 import javax.imageio.ImageIO;
 import static javax.imageio.ImageIO.write;
+import static javax.swing.WindowConstants.HIDE_ON_CLOSE;
+
+import myutil.externalSearch.Message;
+
 
+
+/**
+ * Implement all the graphs that can be generated according to data in a database db, used in the constructor of the class
+ * @author Marie FORRAT & Angeliki AKTYPI
+ */
 public class Data_visualisation {
 
     private web.crawler.Database_creation database;
-    
+
+    /**
+     *
+     * @param db database you want to do the query on
+     */
     public Data_visualisation(web.crawler.Database_creation db) {
         this.database = db;
     }
-    
-    public void Histogram() throws IOException, SQLException, AWTException {
+
+    /**
+     * Generate an histogram graph by searching the number of time the vulnerability is conerning a keyword(parameter) since 3 years ago
+     * @param keyword the keyword you want to do statistic with
+     * @throws IOException
+     * @throws SQLException
+     * @throws AWTException
+     */
+    public void Histogram(String keyword) throws IOException, SQLException, AWTException {
         ResultSet rs;
         String querySQL;
-        
-        querySQL = "SELECT * FROM VULNERABILITIES WHERE ACCESS_COMPLEXITY  LIKE '%LOW%' ";
-        rs = database.executestatement(querySQL);
+        /**
+         * Do all the query necessary to have the data
+         */
+        String thisyear = new SimpleDateFormat("yyyy").format(new Date());
+        String year1 = Integer.toString(Integer.valueOf(thisyear)-1);
+        String year2 = Integer.toString(Integer.valueOf(thisyear)-2);
+        String year3 = Integer.toString(Integer.valueOf(thisyear)-3);
+        String year4 = Integer.toString(Integer.valueOf(thisyear)-4);
+        querySQL = "SELECT * FROM SOFTWARES WHERE NAME  LIKE ? AND CVE_ID LIKE  ?";
+
+
+        PreparedStatement prep = this.database.getconn().prepareStatement(querySQL);
+        prep.setString(1,"%"+keyword+"%");
+        prep.setString(2,"%"+year3+"%");
+        rs = prep.executeQuery();
+
         int Records = 0;
         while (rs.next()) {
-            //System.out.println(Records);
             Records++;
         }
-        
-        querySQL = "SELECT * FROM VULNERABILITIES WHERE ACCESS_COMPLEXITY  LIKE '%MEDIUM%' ";
-        rs = database.executestatement(querySQL);
+        PreparedStatement prep1 = this.database.getconn().prepareStatement(querySQL);
+        prep1.setString(1,"%"+keyword+"%");
+        prep1.setString(2,"%"+year2+"%");
+        rs = prep1.executeQuery();
+
         int Records1 = 0;
         while (rs.next()) {
-            // System.out.println(Records1);
             Records1++;
         }
-        querySQL = "SELECT * FROM VULNERABILITIES WHERE ACCESS_COMPLEXITY  LIKE '%HIGH%' ";
-        rs = database.executestatement(querySQL);
+        PreparedStatement prep2 = this.database.getconn().prepareStatement(querySQL);
+        prep2.setString(1,"%"+keyword+"%");
+        prep2.setString(2,"%"+year1+"%");
+        rs = prep2.executeQuery();
+
         int Records2 = 0;
         while (rs.next()) {
-            // System.out.println(Records2);
             Records2++;
         }
-        
+        PreparedStatement prep3 = this.database.getconn().prepareStatement(querySQL);
+        prep3.setString(1,"%"+keyword+"%");
+        prep3.setString(2,"%"+thisyear+"%");
+        rs = prep3.executeQuery();
+
+        int Records3 = 0;
+        while (rs.next()) {
+            Records3++;
+        }
+/**
+ * Preparation to save the plot after its generation
+ */
+        ImageTerminal png = new ImageTerminal();
+        File file = new File(Message.PIC_SRC_HIST);
+        try {
+            file.createNewFile();
+            png.processOutput(new FileInputStream(file));
+        } catch (FileNotFoundException ex) {
+            System.err.print(ex);
+        } catch (IOException ex) {
+            System.err.print(ex);
+        }
+        /**
+         * Generate the plot
+         */
         JavaPlot p = new JavaPlot();
-        int[][] pointpoint = {{0, 0}, {1, Records}, {2, Records1}, {3, Records2}, {4, 0}};
+        p.setTerminal(png);
+        int y4=Integer.parseInt(year4);
+        int y3=Integer.parseInt(year3);
+        int y2=Integer.parseInt(year2);
+        int y1=Integer.parseInt(year1);
+        int y0=Integer.parseInt(thisyear);
+        int[][] pointpoint = {{y4, 0}, {y3, Records}, {y2, Records1}, {y1, Records2}, {y0, Records3}};
         PlotStyle myPlotStyle = new PlotStyle();
-        myPlotStyle.setStyle(Style.FSTEPS);
+        myPlotStyle.setStyle(Style.HISTEPS);
+        myPlotStyle.setLineType(3);
         DataSetPlot s = new DataSetPlot(pointpoint);
-        myPlotStyle.setLineWidth(1);
+        myPlotStyle.setLineWidth(2);
         s.setPlotStyle(myPlotStyle);
-        s.setTitle("Complexity of the vulnerabilities, 1 is low 2 is medium and 3 is high");
-        
+        s.setTitle("Number of CVEs for "+keyword+" since 3 years ago");
+
         p.addPlot(s);
-        
+        p.getAxis("x").setBoundaries(2011, 2016);
+        double[][] pointpoint1 = {{2011, 0}, {2012.5, Records}, {2013.5, Records1}, {2014.5, Records2}, {2015.5, Records3}};
+
         PlotStyle myPlotStyle1 = new PlotStyle();
         myPlotStyle1.setStyle(Style.IMPULSES);
-        DataSetPlot s1 = new DataSetPlot(pointpoint);
-        myPlotStyle.setLineWidth(1);
+        DataSetPlot s1 = new DataSetPlot(pointpoint1);
+        myPlotStyle1.setLineType(3);
+        myPlotStyle1.setLineWidth(2);
         s1.setPlotStyle(myPlotStyle1);
+        s1.setTitle("");
         p.addPlot(s1);
         p.plot();
+
+        /**
+         * Save the plot
+         */
+        try {
+            ImageIO.write(png.getImage(), "png", file);
+        } catch (IOException ex) {
+            System.err.print(ex);
+        }
+
     }
-    
-    public void OpenCloud(ArrayList<String> argumentsfromclient) throws IOException, SQLException, AWTException {
-        
+
+    /**
+     * Generate the opencloud graph, generate different size for keyword according to their importance in the database
+     * @param argumentsfromclient list of keyword to use for generating the graph
+     * @throws IOException
+     * @throws SQLException
+     * @throws AWTException
+     */
+    public void OpenCloud(String argumentsfromclient) throws IOException, SQLException, AWTException {
+
         ResultSet rs;
         String querySQL;
         JFrame frame = new JFrame();
@@ -93,19 +185,23 @@ public class Data_visualisation {
         JPanel panel = new JPanel();
         Cloud cloud = new Cloud();
         cloud.setMaxWeight(25.0);
-        
-        for (int i = 0; i < argumentsfromclient.size(); i++) {
-            querySQL = "SELECT * FROM SOFTWARES WHERE NAME  LIKE '%" + argumentsfromclient.get(i) + "%' ";
-            rs = database.executestatement(querySQL);
+        ArrayList<String> arguments= new ArrayList <String>(Arrays.asList(argumentsfromclient.split(" ")));
+        for (int i = 0; i < arguments.size(); i++) {
+            querySQL = "SELECT * FROM SOFTWARES WHERE NAME  LIKE ?";
+            // rs = database.executestatement(querySQL);
+
+            PreparedStatement prep = this.database.getconn().prepareStatement(querySQL);
+            prep.setString(1,"%"+arguments.get(i)+"%");
+            rs = prep.executeQuery();
             int Records = 0;
             while (rs.next()) {
                 // System.out.println(Records1);
                 Records++;
             }
             //System.out.println(argumentsfromclient.get(i) + Records);
-            cloud.addTag(new Tag(argumentsfromclient.get(i), Records));
+            cloud.addTag(new Tag(arguments.get(i), Records));
         }
-        
+
         for (Tag tag : cloud.tags()) {
             final JLabel label = new JLabel(tag.getName());
             label.setOpaque(false);
@@ -118,12 +214,14 @@ public class Data_visualisation {
         frame.setSize(1000, 800);
         frame.setVisible(true);
         BufferedImage bi = getJframeScreenShot(frame);
-        write(bi, "png", new File(Message.PIC_SRC));
+        write(bi, "png", new File(Message.PIC_SRC_STAT));
+        frame.setDefaultCloseOperation(HIDE_ON_CLOSE);//TO not close the program while exiting the Jframe
+        frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));// TO close the jframe after the screeshot
     }
-    
+
     private BufferedImage getJframeScreenShot(JFrame panel) {
         BufferedImage bi = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_ARGB);
         panel.paint(bi.getGraphics());
         return bi;
     }
-}
+}
\ No newline at end of file
diff --git a/crawler/src/web/crawler/Database_creation.java b/crawler/src/web/crawler/Database_creation.java
index f051c019b0..c250421ef7 100644
--- a/crawler/src/web/crawler/Database_creation.java
+++ b/crawler/src/web/crawler/Database_creation.java
@@ -3,6 +3,7 @@
  * To change this template file, choose Tools | Templates
  * and open the template in the editor.
  */
+
 package web.crawler;
 
 import java.awt.AWTException;
@@ -16,6 +17,10 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import org.apache.derby.drda.NetworkServerControl;
 
+/**
+ * All the function necessary for the creation of the database, creation of tables in the database and the storage of this databse
+ * @author Marie FORRAT & Angeliki AKTYPI
+ */
 public class Database_creation {
 
     /* Global variables */
@@ -26,32 +31,78 @@ public class Database_creation {
     private int TotalRecordsInDatabase = 0;
 
     private static String DatabasePath = System.getProperty("user.dir");
+
+    /**
+     * Path to retrieve a former vulnerabilities table
+     */
     public static File VulnerabilitesSqlFile = new File(DatabasePath + "//vulnerabilites.sql");
+
+    /**
+     *Path to retrieve a former reference table
+     */
     public static File ReferencesSqlFile = new File(DatabasePath + "//references.sql");
+
+    /**
+     *Path to retrieve a former software table
+     */
     public static File SoftwaresSqlFile = new File(DatabasePath + "//softwares.sql");
 
+    /**
+     * Execute an SQL statement on the database. Be careful, this method does not protect of SQL injection
+     * @param SQLquery the query you want to execute on the database
+     * @return the result of the query
+     * @throws SQLException
+     */
     public ResultSet executestatement(String SQLquery) throws SQLException {
 
         ResultSet rs = stmt.executeQuery(SQLquery);
         return rs;
     }
 
+    /**
+     * set method to set the total recods in the database
+     * @param n integer
+     */
     public void setTotalRecordsInDatabase(int n) {
         TotalRecordsInDatabase = n;
     }
 
-    public int getTotalRecordsInDatabase() {
+    /**
+     * get method to get the number of total recods in the table vulnerabilities
+     * @return the total number of record in vulnerabilities table
+     * @throws SQLException
+     */
+    public int getTotalRecordsInDatabase() throws SQLException {
+
+        int TotalRecordsInDatabase = 0;
+        ResultSet rs = stmt.executeQuery("SELECT * FROM VULNERABILITIES");
+
+        while (rs.next()) {
+            TotalRecordsInDatabase++;
+        }
         return TotalRecordsInDatabase;
     }
 
+    /**
+     * Return the parameter connection of the databse
+     * @return connection
+     */
     public Connection getconn() {
         return conn;
     }
 
+    /**
+     *
+     * @return
+     */
     public java.sql.Statement getstmt() {
         return stmt;
     }
 
+    /**
+     * Print the table vulnerabilities int the output
+     * @throws SQLException
+     */
     public void PrintDatabase() throws SQLException {
         int Records = 0;
         ResultSet rs = stmt.executeQuery("SELECT * FROM VULNERABILITIES");
@@ -70,6 +121,10 @@ public class Database_creation {
         }
     }
 
+    /**
+     * Clear outputs of the console
+     * @throws AWTException
+     */
     public void ClearOutputs() throws AWTException {
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
         /*                      Clear console                            */
@@ -82,20 +137,21 @@ public class Database_creation {
             /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
     }
 
-    public int CountRowsInDatabase() throws SQLException {
-        int Records = 0;
-        ResultSet rs = stmt.executeQuery("SELECT * FROM VULNERABILITIES");
 
-        // Count rows in the table VULNERABILITIES
-        while (rs.next()) {
-            Records++;
-        }
-
-        return (Records);
-    }
 
+    /**
+     * Create the database
+     * @throws ClassNotFoundException
+     * @throws InstantiationException
+     * @throws IllegalAccessException
+     * @throws Exception
+     */
     public void CreateDatabase() throws ClassNotFoundException, InstantiationException, IllegalAccessException, Exception {
-	String url = "jdbc:derby://localhost:1527/MyDatabase;create=true;user=root;password=1234";
+
+        /**
+         * Information for creating the database
+         */
+        String url = "jdbc:derby://localhost:1527/MyDatabase;create=true;user=root;password=1234";
         //String url = "jdbc:derby://localhost:1527/";
         String dbName = "MyDatabase";
         String driver = "org.apache.derby.jdbc.ClientDriver";
@@ -125,6 +181,10 @@ public class Database_creation {
         }
     }
 
+    /**
+     * Create 3 tables in the database, vulnerabilites, references, softwares
+     * @throws SQLException
+     */
     public void CreateTable() throws SQLException {
         System.out.println("Creating tables in database...");
         stmt = conn.createStatement();
@@ -154,7 +214,7 @@ public class Database_creation {
                 + "AVAILABILITY_IMPACT VARCHAR(100),"
                 + "GEN_DATE VARCHAR(100),"
                 + "CWE_ID VARCHAR(100),"
-                + "SUMMARY VARCHAR(3000))");
+                + "SUMMARY VARCHAR(5000))");
 
         System.out.println("Table VULNERABILITIES created");
 
@@ -174,6 +234,10 @@ public class Database_creation {
 
     }
 
+    /**
+     * import previous table from a file to have a database already fill
+     * @throws SQLException
+     */
     public void CreateDatabaseFromSQLFile() throws SQLException {
         PreparedStatement ps;
 
@@ -208,6 +272,10 @@ public class Database_creation {
         ps.execute();
     }
 
+    /**
+     * Sabe all the tables in a file to use them later
+     * @throws SQLException
+     */
     public void StoreDatabaseInFile() throws SQLException {
         PreparedStatement ps;
 
diff --git a/crawler/src/web/crawler/Database_query.java b/crawler/src/web/crawler/Database_query.java
index 9f68fe8d22..5d57b338a4 100644
--- a/crawler/src/web/crawler/Database_query.java
+++ b/crawler/src/web/crawler/Database_query.java
@@ -13,19 +13,37 @@ import java.io.InputStreamReader;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import javax.xml.transform.TransformerException;
 import static web.crawler.File_management.StoreResultsInFile;
 
-
+/**
+ * Do different query on a database, the database have to be passed in the constructor
+ * @author Marie FORRAT & Angeliki AKTYPI
+ */
 public class Database_query {
-    
-private web.crawler.Database_creation database;
-    
+
+    private web.crawler.Database_creation database;
+
+    /**
+     * Constructor of the class
+     * @param db the database to do query on
+     */
     public Database_query(web.crawler.Database_creation db) {
         this.database = db;
     }
 
+    /**
+     * Make query on table software according to keyword from the console
+     * Be careful: this function is NOT protected against SQL injection
+     * @throws IOException
+     * @throws SQLException
+     * @throws AWTException
+     * @throws TransformerException
+     */
     public void MakeQueryOnTheDatabase() throws IOException, SQLException, AWTException, TransformerException {
 
         //  open up standard input                
@@ -38,7 +56,7 @@ private web.crawler.Database_creation database;
 
         /* Buffer */
         br = new BufferedReader(new InputStreamReader(System.in));
-
+        // Asking the user to enter keywords
         System.out.print("\n\n\n");
         System.out.print("Insert your query. ");
         System.out.print("Keywords must be separated by spaces\n"
@@ -72,10 +90,7 @@ private web.crawler.Database_creation database;
             /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
             /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
 
-            /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
-            /*                      Clear console                            */
-            /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
-            /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
+           
 
             /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
             /*                Print results in xml file                      */
@@ -88,49 +103,119 @@ private web.crawler.Database_creation database;
         }
     }
 
+    /**
+     * make query on database according to 4 keywords: keyword to search in the summary, years, keyword to search in the vulnerable system table, number of result
+     * This function is protected against sql injection because it is using prepared statement
+     * @param argumentsfromclient keyword 1, date, keyword 2, number of result
+     * @return xml file containing the result of the query
+     * @throws IOException
+     * @throws SQLException
+     * @throws AWTException
+     * @throws TransformerException
+     */
     public File GetCVEwithKeywords(ArrayList<String> argumentsfromclient) throws IOException, SQLException, AWTException, TransformerException {
         int Records;
+        List<ResultSet> resultSets = new ArrayList<>();
         ResultSet rs;
         ArrayList<String> query;
         String querySQL;
-        
+        String year = "";
+
         query = argumentsfromclient;
+        //for (int i=0; i<5; i++){ System.out.println(query.get(i)); }
+
+        String thisyear = new SimpleDateFormat("yyyy").format(new Date());
+
+        if (query.get(1).equals("this-year")) {
+            year = thisyear;
+        }
+
+        else if (query.get(1).equals("last-year")) {
+            year = Integer.toString(Integer.valueOf(thisyear)-1);
+        }
+
+        else if (query.get(1).equals("all")) {
+            year = "%";
+        }
+
+        String[] score_limits={"0","0"} ;
+
+        if (query.get(3).equals("all")) {
+            System.out.print("Vo day");
+            score_limits[0] = "0";
+            score_limits[1]="10";
+        }
+
+        else {
+            score_limits = query.get(3).split("-");
+        }
 
+        System.out.print(query.get(0));
+        String[] keywords = query.get(0).split("-");
+        //for (int i=0; i<2; i++){ System.out.println(Integer.valueOf(score_limits[i])); }
+                
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
         /*                      Construct query                          */
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
-        
-        /* Select columes from the tables                                */        
-        querySQL = "SELECT SOFTWARES.CVE_ID, SOFTWARES.\"NAME\", VULNERABILITIES.SUMMARY "
-                + "FROM ROOT.SOFTWARES INNER JOIN ROOT.VULNERABILITIES "
-                + "ON SOFTWARES.CVE_ID = VULNERABILITIES.CVE_ID ";
+       
+        /* Select columes from the tables                                */
+        querySQL = "SELECT VULNERABILITIES.CVE_ID, SOFTWARES.\"NAME\", VULNERABILITIES.SUMMARY \n"
+                + "FROM ROOT.SOFTWARES \n"
+                + "\tINNER JOIN ROOT.VULNERABILITIES \n"
+                + "\t\tON SOFTWARES.CVE_ID = VULNERABILITIES.CVE_ID \n";
         /*  Including the arguments in the query                         */
-        querySQL += "WHERE VULNERABILITIES.SUMMARY LIKE ? "
-                + "AND VULNERABILITIES.CVE_ID LIKE ? "
+
+        //querySQL += "WHERE SOFTWARES.\"NAME\" LIKE ? ";
+        querySQL += "WHERE VULNERABILITIES.SUMMARY LIKE ? ";
+
+        for (int i = 1; i < keywords.length; i++) {
+            //querySQL += "OR SOFTWARES.\"NAME\" LIKE ? ";
+            querySQL += "OR VULNERABILITIES.SUMMARY LIKE ? ";
+        }
+
+        querySQL += "AND VULNERABILITIES.CVE_ID LIKE ? "
                 + "AND SOFTWARES.\"NAME\" LIKE ? "
+                + "AND VULNERABILITIES.SCORE BETWEEN ? AND ? \n"
                 + "FETCH FIRST ? ROWS ONLY";
-        
-        //System.out.println(querySQL);
-        
+
+
+        System.out.println(querySQL);
+
         PreparedStatement prep = this.database.getconn().prepareStatement(querySQL);
-        prep.setString(1, "%"+query.get(0)+"%"); 
-        prep.setString(2, "%"+query.get(1)+"%"); 
-        prep.setString(3, "%"+query.get(2)+"%"); 
-        prep.setInt(4,Integer.valueOf(query.get(3))); 
-        
+
+        int i;
+        for (i = 0; i < keywords.length; i++) {
+            prep.setString(i+1, "%"+keywords[i]+"%");
+        }
+        prep.setString(i+1, "%"+year+"%");
+        prep.setString(i+2, "%"+query.get(2)+"%");
+        prep.setInt(i+3, Integer.valueOf(score_limits[0]));
+        prep.setInt(i+4, Integer.valueOf(score_limits[1]));
+        prep.setInt(i+5,Integer.valueOf(query.get(4)));
+
+        // Execute the query
         rs = prep.executeQuery();
                
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
 
-        //String xmlcontent = StoreResultsInFile(rs);
+        // Store the result in a xml file
         File xmlfile = StoreResultsInFile(rs);
 
         return xmlfile;
     }
 
+    /**
+     * Get all the information concerning one vulnerabilities, found by using its CVE ID 
+     * This function is protected against sql injection because it is using prepared statement
+     * @param argumentfromclient a cve ID
+     * @return xml containing the result of the query
+     * @throws IOException
+     * @throws SQLException
+     * @throws AWTException
+     * @throws TransformerException
+     */
     public File GetinfofromCVE(String argumentfromclient) throws IOException, SQLException, AWTException, TransformerException {
         int Records;
-        //  open up standard input                
         BufferedReader br;
         ResultSet rs;
         String query;
@@ -148,30 +233,28 @@ private web.crawler.Database_creation database;
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
         /* Select from the basic table                                   */
         querySQL = "SELECT ROOT.VULNERABILITIES.*, ROOT.REFERENCESS.REF_TYPE, "
-                 + "ROOT.REFERENCESS.\"SOURCE\", ROOT.REFERENCESS.\"LINK\", "
-                 + "ROOT.SOFTWARES.\"NAME\" \n"
-                 + "FROM ROOT.REFERENCESS \n"
-                 + "\tINNER JOIN ROOT.SOFTWARES \n"
-                 + "\t\tON REFERENCESS.CVE_ID = SOFTWARES.CVE_ID \n"
-                 + "\tINNER JOIN ROOT.VULNERABILITIES \n"
-                 + "\t\tON REFERENCESS.CVE_ID = VULNERABILITIES.CVE_ID \n";
+                + "ROOT.REFERENCESS.\"SOURCE\", ROOT.REFERENCESS.\"LINK\", "
+                + "ROOT.SOFTWARES.\"NAME\" \n"
+                + "FROM ROOT.REFERENCESS \n"
+                + "\tINNER JOIN ROOT.SOFTWARES \n"
+                + "\t\tON REFERENCESS.CVE_ID = SOFTWARES.CVE_ID \n"
+                + "\tINNER JOIN ROOT.VULNERABILITIES \n"
+                + "\t\tON REFERENCESS.CVE_ID = VULNERABILITIES.CVE_ID \n";
         /*  Including the keywords in the query                          */
         querySQL += "WHERE VULNERABILITIES.CVE_ID LIKE ?";
-        
-        //System.out.println(querySQL);
-        
+
+
+
         PreparedStatement prep = this.database.getconn().prepareStatement(querySQL);
-        
-        prep.setString(1, "%"+query+"%"); 
-                
+
+        prep.setString(1, "%"+query+"%");
+
+        // Execute the query
         rs = prep.executeQuery();
-        
-        //rs = this.database.executestatement(querySQL);
-        
-        //String xmlcontent = StoreResultsInFile(rs);
+        // Store the result in a xml file
         File xmlfile = StoreResultsInFile(rs);
-        
+
         return xmlfile;
 
     }
-}
+}
\ No newline at end of file
diff --git a/crawler/src/web/crawler/File_management.java b/crawler/src/web/crawler/File_management.java
index 01c5194062..8cce4aae88 100644
--- a/crawler/src/web/crawler/File_management.java
+++ b/crawler/src/web/crawler/File_management.java
@@ -8,9 +8,13 @@ package web.crawler;
 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
@@ -39,11 +43,22 @@ import org.xml.sax.SAXException;
 import org.apache.commons.io.FileUtils;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 
-
+/**
+ * Contain all the functions, which are using file
+ * @author Marie FORRAT & Angeliki AKTYPI
+ */
 public class File_management {
 
-    public static void DownloadFile(String filename) {
+    /**
+     * Download the zipped xml file from the National Vulnerability Database's website (https://nvd.nist.gov/)
+     * if the file doesn't exist in the working directory of the project.
+     * After extracting the xml file delete the zipped one.
+     * @param filename name of the file on the website
+     */
+    public static void DownloadFile(String filename) throws MalformedURLException, IOException {
 
         File file = new File(filename);
 
@@ -54,37 +69,112 @@ public class File_management {
             return;
         }
 
-        /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=  */
-        /*            Code for downloading the XML file                       */
         try {
-            // Get URL content
-            URL FileUrl = new URL("https://nvd.nist.gov/feeds/xml/cve/" + filename);
+            //set the URL of the file to be downloaded
+            URL url = new URL("http://static.nvd.nist.gov/feeds/xml/cve/" + filename + ".zip");
+
             System.out.println("File: " + filename + " does not exists");
-            System.out.println("Downloading file: " + FileUrl.toString());
-            URLConnection FileConnection = FileUrl.openConnection();
-
-            try ( // Open the stream and put it into BufferedReader
-                    BufferedReader br = new BufferedReader(new InputStreamReader(FileConnection.getInputStream()))) {
-                String inputLine;
-                // Save to this filename
-                file.createNewFile();
-
-                // Use FileWriter to write file
-                FileWriter fw = new FileWriter(file.getAbsoluteFile());
-                try (BufferedWriter bw = new BufferedWriter(fw)) {
-                    while ((inputLine = br.readLine()) != null) {
-                        bw.write(inputLine);
-                    }
-                }
+            System.out.println("Downloading file: " + url.toString());
+
+            //create the new connection
+            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
+
+            //set up some the connection and connect
+            urlConnection.setRequestMethod("GET");
+            urlConnection.setDoOutput(true);
+            urlConnection.connect();
+
+            //creat the zip file 
+            String zip_filename = filename+".zip";
+            File zip_file = new File(zip_filename);
+
+            //write the downloaded data into the zip file
+            FileOutputStream fileOutput = new FileOutputStream(zip_file);
+
+            //reading the data from the url
+            InputStream inputStream = urlConnection.getInputStream();
+
+            //total size of the file
+            int totalSize = urlConnection.getContentLength();
+            //variable to store total downloaded bytes
+            int downloadedSize = 0;
+
+            //create a buffer...
+            byte[] buffer = new byte[1024];
+            int bufferLength = 0; //used to store a temporary size of the buffer
+
+            //read through the input buffer and write the contents to the file
+            while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
+                //add the data in the buffer to the file in the file output stream
+                fileOutput.write(buffer, 0, bufferLength);
+                //add up the size so we know how much is downloaded
+                downloadedSize += bufferLength;
             }
+            //close the output stream when done
+            fileOutput.close();
 
-            System.out.println("File: " + filename + " has been downloaded\n");
+            unZipFile(zip_filename);
 
+            //keep only the xml files (the extracted file from the zip) 
+            zip_file.delete();
+
+            //catch some possible errors...
         } catch (MalformedURLException e) {
+            e.printStackTrace();
         } catch (IOException e) {
+            e.printStackTrace();
         }
     }
 
+    public static void unZipFile(String zipFile){
+
+        byte[] buffer = new byte[1024];
+
+        try{
+
+            //get the zip file content
+            ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
+            //get the zipped file list entry
+            ZipEntry ze = zis.getNextEntry();
+
+            while(ze!=null){
+
+                String fileName = ze.getName();
+                File newFile = new File(fileName);
+
+
+                System.out.println("Unzipping file: " + newFile.getAbsoluteFile());
+
+
+                FileOutputStream fos = new FileOutputStream(newFile);
+
+                int len;
+                while ((len = zis.read(buffer)) > 0) {
+                    fos.write(buffer, 0, len);
+                }
+
+                fos.close();
+                ze = zis.getNextEntry();
+            }
+
+            zis.closeEntry();
+            zis.close();
+
+            //System.out.println("Done");
+
+        } catch(IOException ex){
+            ex.printStackTrace();
+        }
+    }
+
+    /**
+     * Store the result of one query on an xml file to be sent to a client
+     * @param rs result of a sql query 
+     * @return the xml file
+     * @throws TransformerConfigurationException
+     * @throws TransformerException
+     * @throws IOException
+     */
     public static File StoreResultsInFile(ResultSet rs)
             throws TransformerConfigurationException, TransformerException, IOException {
 
@@ -140,14 +230,20 @@ public class File_management {
             System.out.println("The folder structure does not exist");
         }else {
             String encode = "UTF-8";
-            FileUtils.writeStringToFile(file, xmlContent, encode);            
+            FileUtils.writeStringToFile(file, xmlContent, encode);
         }
-        
+
         File xmlFile = FileUtils.getFile(file);
-        
+
         return xmlFile;
     }
 
+    /**
+     * Parse a xml file, which contain CVE to retrieve all the information and fill a database with all the retrieve information
+     * The structure of the CVE has to be the same as the structure you can find in the cve from https://nvd.nist.gov/ 
+     * @param filename name of the xml file you want to parse
+     * @param database database you want to fill with data from the file
+     */
     public static void ParsingXML(String filename, web.crawler.Database_creation database) {
         LinkedList<String> list_id = new LinkedList<>();
         LinkedList<String> list_pub_date = new LinkedList<>();
@@ -180,18 +276,19 @@ public class File_management {
 
             doc.getDocumentElement().normalize();
 
-            // System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
+            // For all the CVE that are in the file
             NodeList nList = doc.getElementsByTagName("entry");
-            
+
             for (int temp = 0; temp < nList.getLength(); temp++) {
 
                 Node nNode = nList.item(temp);
 
                 if (nNode.getNodeType() == Node.ELEMENT_NODE) {
- 
+
                     Element eElement = (Element) nNode;
 
-                    //System.out.println("Vuln id : " + eElement.getAttribute("id"));
+                    //Store all the information in several lists by chcekcing first if the information is available:
+
                     list_id.add(eElement.getAttribute("id"));
 
                     if (eElement.getElementsByTagName("cvss:score").item(0) != null) {
@@ -247,9 +344,9 @@ public class File_management {
                     } else {
                         list_cwe_id.add("not available");
                     }
-                    
+
                     NodeList nList1 = eElement.getElementsByTagName("vuln:references");
-                    
+
                     for (int i = 0; i < nList1.getLength(); i++) {
 
                         list_ref_cve.add(eElement.getAttribute("id"));
@@ -273,9 +370,9 @@ public class File_management {
                         }
 
                     }
-                    
+
                     NodeList nList2 = eElement.getElementsByTagName("vuln:product");
-                    
+
                     for (int j = 0; j < nList2.getLength(); j++) {
 
                         list_soft_cve.add(eElement.getAttribute("id"));
@@ -284,31 +381,27 @@ public class File_management {
                             list_soft_name.add(eElement.getElementsByTagName("vuln:product").item(j).getTextContent());
                         } else {
                             list_soft_name.add("not available");
-                        }     
+                        }
                     }
-                    
+
                     list_pub_date.add(eElement.getElementsByTagName("vuln:published-datetime").item(0).getTextContent());
                     list_mod_date.add(eElement.getElementsByTagName("vuln:last-modified-datetime").item(0).getTextContent());
                     list_sum.add(eElement.getElementsByTagName("vuln:summary").item(0).getTextContent());
 
                 }
             }
-            
-            System.out.println(list_id.size());
-            System.out.println(list_ref_type.size());
-            System.out.println(list_soft_name.size());
-            System.out.println(list_id.get(list_id.size()-1));
-            System.out.println(list_ref_cve.get(list_ref_cve.size()-1));
-            System.out.println(list_soft_cve.get(list_soft_cve.size()-1));
-            
+
+            /**
+             * Insert all the information retrieve from the file (that are now store in several list) in the database
+             */
             PreparedStatement preparedStmt = database.getconn().prepareStatement("INSERT INTO VULNERABILITIES(CVE_ID,PUB_DATE,MOD_DATE,SCORE,ACCESS_VECTOR,ACCESS_COMPLEXITY,AUTHENTICATION,CONFIDENTIALITY_IMPACT,INTEGRITY_IMPACT,AVAILABILITY_IMPACT,GEN_DATE,CWE_ID,SUMMARY)" + "VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?)");
             PreparedStatement preparedStmt1 = database.getconn().prepareStatement("INSERT INTO REFERENCESS(CVE_ID,REF_TYPE,SOURCE,LINK)" + "VALUES ( ?, ?, ?, ?)");
             PreparedStatement preparedStmt2 = database.getconn().prepareStatement("INSERT INTO SOFTWARES(CVE_ID,NAME)" + "VALUES ( ?, ?)");
-            
+
             System.out.println("Inserting " + list_id.size() + " data into VULNERABILITIES table ...");
-            
+
             for (int i = 0; i < list_id.size(); i++) {
-                
+
                 preparedStmt.setString(1, list_id.get(i));
                 preparedStmt.setString(2, list_pub_date.get(i));
                 preparedStmt.setString(3, list_mod_date.get(i));
@@ -324,11 +417,11 @@ public class File_management {
                 preparedStmt.setString(13, list_sum.get(i));
                 preparedStmt.executeUpdate();
             }
-            
+
             System.out.println("Inserting " + list_ref_type.size() + " data into REFERENCESS table ...");
-            
+
             for (int d = 0; d < list_ref_type.size(); d++) {
-                
+
                 preparedStmt1.setString(1, list_ref_cve.get(d));
                 preparedStmt1.setString(2, list_ref_type.get(d));
                 preparedStmt1.setString(3, list_ref_source.get(d));
@@ -337,9 +430,9 @@ public class File_management {
             }
 
             System.out.println("Inserting " + list_soft_name.size() + " data into SOFTWARES table ...");
-            
+
             for (int f = 0; f < list_soft_name.size(); f++) {
-                
+
                 preparedStmt2.setString(1, list_soft_cve.get(f));
                 preparedStmt2.setString(2, list_soft_name.get(f));
                 preparedStmt2.executeUpdate();
@@ -348,7 +441,7 @@ public class File_management {
             preparedStmt.close();
             preparedStmt1.close();
             preparedStmt2.close();
-            
+
             System.out.println("Number of vulnerabilities inserted in the database: " + list_id.size());
             System.out.println();
             database.setTotalRecordsInDatabase(database.getTotalRecordsInDatabase() + list_id.size());
@@ -356,4 +449,4 @@ public class File_management {
         }
     }
 
-}
+}
\ No newline at end of file
diff --git a/crawler/src/web/crawler/MultiThreadServer.java b/crawler/src/web/crawler/MultiThreadServer.java
index 04979762aa..890bb35f34 100644
--- a/crawler/src/web/crawler/MultiThreadServer.java
+++ b/crawler/src/web/crawler/MultiThreadServer.java
@@ -20,13 +20,22 @@ import org.apache.commons.io.FileUtils;
 import web.crawler.WebCrawler;
 import myutil.externalSearch.Message;
 
-
+/**
+ *
+ * @author Marie FORRAT & Angeliki AKTYPI & Dan Huynh VO
+ */
 public class MultiThreadServer {
 
     public static String ERR_SVDOWN = "ERR : Cannot run the server, shut down the previous one!";
 
+    /**
+     *
+     * @param cmd
+     * @param msg
+     * @return
+     */
     public static Message createImageAnswer(String cmd, Message msg) {
-        byte[] byteImg = Message.convertImageToByte();
+        byte[] byteImg = Message.convertImageToByte(msg);
         Message answerMessage = new Message();
         ArrayList<Object> content = new ArrayList();
         content.add(byteImg);
@@ -35,7 +44,17 @@ public class MultiThreadServer {
         System.out.println(Message.SUC_CREATE_ANS_MESSAGE);
         return answerMessage;
     }
-        
+
+    /**
+     *
+     * @param msg
+     * @param database
+     * @return
+     * @throws IOException
+     * @throws SQLException
+     * @throws AWTException
+     * @throws TransformerException
+     */
     public static Message analyseRequestMessage(Message msg, web.crawler.Database_query database) throws IOException, SQLException, AWTException, TransformerException {
         
         //System.out.println(msg.getCmd());
@@ -75,11 +94,18 @@ public class MultiThreadServer {
 
         if (msg.getCmd().equals(Message.CMD_STATISTIC)) {
             Data_visualisation datavis = new Data_visualisation(WebCrawler.database);
-            datavis.OpenCloud(msg.getValues());
+            datavis.OpenCloud(msg.getValues().get(0));
             //Set cmd for the answer message to sent back to the client
             cmd = msg.RESULT_STATISTIC;
             answerMessage = createImageAnswer(cmd, msg);
         }
+        if (msg.getCmd().equals(Message.CMD_HISTOGRAM)) {
+            Data_visualisation datavis = new Data_visualisation(WebCrawler.database);
+            datavis.Histogram(msg.getValues().get(0));
+            //Set cmd for the answer message to sent back to the client
+            cmd = msg.RESULT_HISTOGRAM;
+            answerMessage = createImageAnswer(cmd, msg);
+        }
         
         return answerMessage;
     }
diff --git a/crawler/src/web/crawler/WebCrawler.java b/crawler/src/web/crawler/WebCrawler.java
index 2c682c796d..96ecbf4e8b 100644
--- a/crawler/src/web/crawler/WebCrawler.java
+++ b/crawler/src/web/crawler/WebCrawler.java
@@ -15,10 +15,17 @@ import static web.crawler.File_management.ParsingXML;
 import javax.net.ssl.SSLServerSocket;
 import javax.net.ssl.SSLServerSocketFactory;
 import javax.net.ssl.SSLSocket;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
-
+/**
+ * Main program
+ * @author Marie FORRAT & Angeliki AKTYPI
+ */
 public class WebCrawler {
-
+    /**
+     *create the database
+     */
     public static Database_creation database;
     
     /**
@@ -32,13 +39,18 @@ public class WebCrawler {
      * 
      */
     public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SQLException, IOException, AWTException, Exception {
+        /**
+        * The name of the file, for example "nvdcve-2.0-2015.xml", from https://nvd.nist.gov/, which data we want to inport in our database
+        */
+        String thisyear = new SimpleDateFormat("yyyy").format(new Date());
 
         String FileNames[] = {
-            "nvdcve-2.0-2012.xml",
-            "nvdcve-2.0-2013.xml",
-	    "nvdcve-2.0-2014.xml"
-        //    "nvdcve-2.0-2015.xml"
+                "nvdcve-2.0-"+thisyear+".xml",
+                "nvdcve-2.0-"+(Integer.valueOf(thisyear)-1)+".xml",
+                "nvdcve-2.0-"+(Integer.valueOf(thisyear)-2)+".xml",
+                "nvdcve-2.0-"+(Integer.valueOf(thisyear)-3)+".xml",
         };
+
         //Database_creation database = new Database_creation();
         database = new Database_creation();
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
@@ -57,7 +69,7 @@ public class WebCrawler {
                     + database.VulnerabilitesSqlFile.toString() + "\n"
                     + database.SoftwaresSqlFile.toString() + "\n");
 
-            System.out.println("Total records insert in the database: " + database.CountRowsInDatabase() + "\n\n");
+            System.out.println("Total records insert in the database: " + database.getTotalRecordsInDatabase()+ "\n\n");
         } else {
             /* Read XML file and store the informations in the database          */
             for (String xmlFile : FileNames) {
@@ -73,7 +85,7 @@ public class WebCrawler {
         /*                       Data Visualization                          */
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
         Data_visualisation datavisual = new Data_visualisation(database);
-        //datavisual.Histogram();
+        // datavisual.Histogram("linux");
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
 
         /* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= */
diff --git a/src/myutil/GoogleSearch.java b/src/myutil/GoogleSearch.java
index 5f2d108e51..a04a2192e9 100644
--- a/src/myutil/GoogleSearch.java
+++ b/src/myutil/GoogleSearch.java
@@ -63,21 +63,27 @@ public class GoogleSearch {
 	
 	public static final String charset = "UTF-8";
 	public static final String userAgent = "Eurecom";
-	public static final String google = "http://www.google.com/search?hl=en&q=";
-	public static final String googleScholar="http://scholar.google.com/scholar?ht=en&q=";
+	public static final String google = "http://www.google.com/search?hl=en";
+	public static final String googleScholar="http://scholar.google.com/scholar?ht=en";
 	
 	public static final String ENCODING_ERROR = "encodeding_error";
 	public static final String IOEx = "IOExeption";
 	
-	public static final ArrayList<GoogleSearch> getGoogleResult(String search) {
+	public static final ArrayList<GoogleSearch> getGoogleResult(String search,String num) {
 		ArrayList<GoogleSearch> r = new ArrayList<GoogleSearch>();
 		
 		String title="" ;
 		String url ="" ;
 		String desc="";
 		GoogleSearch gs;
-		try{		
-		Document doc = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get();
+
+
+		try{
+			String keyword  = "&q=" + URLEncoder.encode(search, charset);
+			String number = "&num=" + URLEncoder.encode(num, charset);
+			String googleurl = google + number + keyword;
+
+		Document doc = Jsoup.connect(googleurl).userAgent(userAgent).get();
 		
 		//get list of search result, each result begin with tag <li class="g">
 		Elements articles = doc.select("li.g");
@@ -136,7 +142,7 @@ public class GoogleSearch {
 	}
 	
 	
-	public static final ArrayList<GoogleSearch> getGoogleScholarResult(String search){
+	public static final ArrayList<GoogleSearch> getGoogleScholarResult(String search,String num){
 		ArrayList<GoogleSearch> r = new ArrayList<GoogleSearch>();
 		String title="";
 		String url="";
@@ -148,7 +154,10 @@ public class GoogleSearch {
         
 		GoogleSearch gs;
 		try{
-			Document doc = Jsoup.connect(googleScholar + URLEncoder.encode(search, charset)).userAgent(userAgent).get();
+			String keyword  = "&q=" + URLEncoder.encode(search, charset);
+			String number = "&num=" + URLEncoder.encode(num, charset);
+			String googleScholarurl = googleScholar + number + keyword;
+			Document doc = Jsoup.connect(googleScholarurl).userAgent(userAgent).get();
 
 		//get list of search result, each result begin with tag <li class="g">
 			Element error = doc.select("span.gs_red").first();
@@ -205,17 +214,6 @@ public class GoogleSearch {
 	                	}
 	                }
 	            }
-
-	            //TraceManager.addDev("title-->"+title);
-				//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
index e94970a3af..c193929e5b 100644
--- a/src/myutil/externalSearch/Client.java
+++ b/src/myutil/externalSearch/Client.java
@@ -62,10 +62,14 @@ public class Client {
     public  Object parserAnswerMessage(Message answerMsg) {
         //Analyse the message from the server,
         //Depends on the cmd, we can determine the values
+        if (answerMsg ==null){
+            return null;
+        }
+
         String cmd = answerMsg.getCmd();
 
         if (cmd == null) {
-            TraceManager.addDev("Wrong message format - no cmd");
+            //TraceManager.addDev("Wrong message format - no cmd");
             return null;
         } else if (cmd.equals(Message.RESULT_SEARCH)) {
             ArrayList<Record> lrecord = new ArrayList<>();
@@ -143,9 +147,13 @@ public class Client {
             // the content are image.
             byte[] encoded = (byte[]) answerMsg.getContent().get(0);
             return encoded;
+        }  else if (cmd.equals(Message.RESULT_HISTOGRAM)) {
+        // the content are image.
+            byte[] encoded = (byte[]) answerMsg.getContent().get(0);
+            return encoded;
 
-        } else
-            TraceManager.addDev("The command is not supported\n");
+    } else
+            //TraceManager.addDev("The command is not supported\n");
         return null;
     }
 
@@ -179,7 +187,7 @@ public class Client {
         sslClient = (SSLSocket)sslSocketFactory.createSocket(server,port);
 
         sslClient.setEnabledCipherSuites(sslClient.getSupportedCipherSuites());
-        TraceManager.addDev("Client has been created successfully!");
+        //TraceManager.addDev("Client has been created successfully!");
 
         ObjectOutputStream outputStream = new ObjectOutputStream(sslClient.getOutputStream());
         ObjectInputStream inputStream = new ObjectInputStream(sslClient.getInputStream());
diff --git a/src/myutil/externalSearch/Message.java b/src/myutil/externalSearch/Message.java
index a6dfda2068..4fd15167ab 100644
--- a/src/myutil/externalSearch/Message.java
+++ b/src/myutil/externalSearch/Message.java
@@ -77,6 +77,10 @@ public class Message implements Serializable {
 
     public static String PIC_SRC = "server_visualisation.png";
     public static String PIC_DES = "client_visualisation.png";
+    public static String PIC_SRC_HIST = "server_visualisation_Hist.png";
+    public static String PIC_SRC_STAT = "server_visualisation.png";
+    public static String PIC_DES_STAT = "client_visualisation_Stat.png";
+    public static String PIC_DES_HIST = "client_visualisation_Hist.png";
     public static String ERR_CMD = "Message command is empty\n";
     public static String ERR_CMD2 = "Wrong message command\n";
 
@@ -206,11 +210,19 @@ public class Message implements Serializable {
     }
 
 
-    public static byte[] convertImageToByte(){
+    public static byte[] convertImageToByte(Message msg){
         byte[] imgByte = null;
+        BufferedImage img;
 
         try {
-            BufferedImage img = ImageIO.read(new File(PIC_SRC));
+            if(msg.getCmd().equals("stat"))
+            {
+                img = ImageIO.read(new File(PIC_SRC_STAT));
+            }
+            else
+            {
+                img = ImageIO.read(new File(PIC_SRC_HIST));
+            }
 
             try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
                 ImageIO.write(img, "png", baos);
@@ -219,7 +231,8 @@ public class Message implements Serializable {
             }
 
         } catch (IOException e) {
-            System.out.println("Image can't not be found!");
+            // TODO Auto-generated catch block
+            System.out.println("Image can't not be found!\n");
         }
 
         System.out.println("Image has been converted successfully!");
@@ -228,20 +241,26 @@ public class Message implements Serializable {
     }
 
     //a function to convert a string byte to an image
-    public static void convertByteToImage(byte[] imgByte){
+    public static void convertByteToImage(byte[] imgByte,Message msg){
 
         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!");
-
+                if(msg.getCmd().equals(RESULT_STATISTIC))
+                {
+                    ImageIO.write(img, "png", new File(PIC_DES_STAT));
+                }
+                else
+                {
+                    ImageIO.write(img, "png", new File(PIC_DES_HIST));
+                }
+                System.out.println("Image has been created successfully!\n");
 
             } catch (IOException e) {
-               // System.out.println("Image can't not be created!");
+                // TODO Auto-generated catch block
+                System.out.println("Image can't not be created!\n");
             }
         }
 
diff --git a/src/ui/window/JDialogSearchBox.java b/src/ui/window/JDialogSearchBox.java
index 3affd3e827..446c97b230 100644
--- a/src/ui/window/JDialogSearchBox.java
+++ b/src/ui/window/JDialogSearchBox.java
@@ -69,6 +69,7 @@ import javax.swing.text.html.HTMLDocument;
 import myutil.CheckConnection;
 import myutil.externalSearch.Record;
 import ui.ConfigurationTTool;
+import ui.IconManager;
 import ui.MalformedConfigurationException;
 import ui.TDiagramMouseManager;
 import myutil.externalSearch.Message;
@@ -94,6 +95,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     private javax.swing.JComboBox combobox_System;
     private javax.swing.JComboBox combobox_Year;
     private javax.swing.JComboBox combobox_Diagram;
+    private javax.swing.JComboBox combobox_Num;
     private javax.swing.JCheckBox databaseCb;
     private javax.swing.JTextPane detailText_db;
     private javax.swing.JTextPane detailText_google;
@@ -104,6 +106,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     private javax.swing.JButton jButton_Statistic;
     private javax.swing.JLabel jLabel_Status;
     private javax.swing.JLabel jLabel_System;
+    private javax.swing.JLabel jLabel_Number;
     private javax.swing.JLabel jLabel_Score;
     private javax.swing.JLabel jLabel_Year;
     private javax.swing.JPanel jPanel_DBTab;
@@ -137,6 +140,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     private TableSorter sortTable1;
     private String dbaddress;
     private int dbport;
+    private int tabCounter = 0;
 
 
 
@@ -205,8 +209,10 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         combobox_Score = new javax.swing.JComboBox();
         combobox_System = new javax.swing.JComboBox();;
         combobox_Year = new javax.swing.JComboBox();
+        combobox_Num = new javax.swing.JComboBox();
         jLabel_System = new javax.swing.JLabel();
         jLabel_Score = new javax.swing.JLabel();
+        jLabel_Number = new javax.swing.JLabel();
         jLabel_Year = new javax.swing.JLabel();
         jButton_Setting = new javax.swing.JButton();
         jButton_Statistic = new javax.swing.JButton();
@@ -219,15 +225,16 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         jTextaddressDB = new JTextField();
         combobox_Diagram = new javax.swing.JComboBox();
         drawBt = new JButton();
-
-        String DIAGRAM_LIST[] = {"None","Statistic","Histogram","pie"};
+        String NUM_LIST[] = {"10","15","20","30"};
+        String DIAGRAM_LIST[] = {"None","Statistic","Histogram"};
         String SYSTEM_LIST[] = {"all", "linux", "windows", "others"};
-        String TIME_LIST[]= {"all", "last year", "last 3 years"};
+        String TIME_LIST[]= {"all", "this-year","last-year"};
         String SCORE_LIST[] = {"all", "5-7", "7-8", "8-9"};
         String COLUMNTITLE_G[] ={"No", "Title", "Link"} ;
         String COLUMNTITLE_GS[]= {"No", "Title", "Author", "Link"};
         String COLUMNTITLE_DB[]= {"No", "ID CVE", "Title"};
 
+
         detailText_google.setContentType("text/html");
         detailText_db.setContentType("text/html");
         detailText_googleScholar.setContentType("text/html");
@@ -245,6 +252,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         rowsGoogleScholar=new ArrayList<Object[]>();
 
         jLabel_System.setText("System");
+        jLabel_Number.setText("Number of result");
         jLabel_Score.setText("Score");
         jLabel_Year.setText("Year");
         jButton_Setting.setText("Setting");
@@ -335,7 +343,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         jTabbedPane2.addTab(GOOGLE, jPanel_GoogleTab);
 
 
-    ///
+        ///
         detailText_googleScholar.setBounds(0, 0, 20, 5);
         detailText_googleScholar.setEditable(false);
         jScrollPane8.setViewportView(detailText_googleScholar);
@@ -419,6 +427,8 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
         combobox_Diagram.setModel(new javax.swing.DefaultComboBoxModel(DIAGRAM_LIST));
 
+        combobox_Num.setModel(new javax.swing.DefaultComboBoxModel(NUM_LIST));
+
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
         getContentPane().setLayout(layout);
         layout.setHorizontalGroup(
@@ -434,38 +444,44 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                                         .addGroup(layout.createSequentialGroup()
                                                                 .addComponent(googleCb)
                                                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
-                                                                .addComponent(databaseCb)
+
                                                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED))
                                                         .addGroup(layout.createSequentialGroup()
                                                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+                                                                        .addComponent(databaseCb)
                                                                         .addComponent(googleScholarCb)
                                                                         .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(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)
                                                         .addComponent(jLabel_Year)
-                                                        .addComponent(jLabel_System))
+                                                        .addComponent(jLabel_System)
+                                                        .addComponent(jLabel_Number)
+                                                        .addComponent(combobox_Diagram ))
                                                 .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_Num, 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(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))))
+                                                        .addComponent(searchBox)
+                                                        .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(
@@ -473,33 +489,44 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                         .addGroup(layout.createSequentialGroup()
                                 .addContainerGap()
                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
-                                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 122, javax.swing.GroupLayout.PREFERRED_SIZE)
                                         .addGroup(layout.createSequentialGroup()
                                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                         .addComponent(jLabel_System, javax.swing.GroupLayout.Alignment.TRAILING)
                                                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                                                 .addComponent(googleCb)
-                                                                .addComponent(databaseCb)
-                                                                .addComponent(jButton_Setting)
+
                                                                 .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(combobox_Diagram, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                        //.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()
-                                                .addGap(35, 35, 35)
-                                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                                                        .addComponent(combobox_Score, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
-                                                        .addComponent(jLabel_Score))
-                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
-                                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
-                                                        .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)
+                                                        .addGap(35, 35, 35)
+                                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                .addComponent(combobox_Score, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addComponent(jLabel_Score))
+                                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                .addComponent(databaseCb)
+                                                                .addComponent(jButton_Setting)
+                                                                .addComponent(combobox_Year, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addComponent(jLabel_Year))
+                                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+                                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+                                                                .addComponent(combobox_Num, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+                                                                .addComponent(jLabel_Number))
+                                        ))
+                                .addGap(10, 10, 10)
+
+                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+                                        .addComponent(combobox_Diagram)
+                                        .addComponent(drawBt))
+                                .addGap(6, 6, 6)
                                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                         .addComponent(searchBox, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                                         .addComponent(searchBt))
@@ -543,10 +570,9 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                 JOptionPane.WARNING_MESSAGE);
                     searchBt.setEnabled(false);
                     drawBt.setEnabled(false);
-                } else
-                    if (combobox_Diagram.getSelectedItem() != "None")
-                        drawBt.setEnabled(true);
-                    searchBt.setEnabled(true);
+                } else if (combobox_Diagram.getSelectedItem() != "None")
+                    drawBt.setEnabled(true);
+                searchBt.setEnabled(true);
 
                 if (!isPrintableString(searchBox.getText())) {
                     JOptionPane.showMessageDialog(null, "Not printable character", "Warning",
@@ -595,8 +621,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 if (googleScholarCb.isSelected() && ListKeywords.getModel().getSize() > 0) {
                     searchBt.setEnabled(true);
                     drawBt.setEnabled(true);
-                }else
-                {
+                } else {
                     //searchBt.setEnabled(false);
                     drawBt.setEnabled(false);
                 }
@@ -735,7 +760,8 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                                                                   null, new Object[]{"Save", "Cancel"}, "OK");
                                                       }
                                                       ConfigurationTTool.ExternalServer = jTextaddressDB.getText();
-
+                                                      dbaddress=jTextaddressDB.getText().split(":")[0];
+                                                      dbport=Integer.parseInt(jTextaddressDB.getText().split(":")[1]);
                                                       try {
                                                           ConfigurationTTool.saveConfiguration();
                                                       } catch (MalformedConfigurationException e) {
@@ -760,8 +786,10 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
             @Override
             public void actionPerformed(ActionEvent actionEvent) {
                 //System.out.print(combobox_Diagram.getSelectedItem());
-                if (combobox_Diagram.getSelectedItem() == "statistic")
+                if (combobox_Diagram.getSelectedItem() == "Statistic")
                     doStatistic();
+                if (combobox_Diagram.getSelectedItem() == "Histogram")
+                    doHistogram();
             }
         });
 
@@ -787,16 +815,18 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
         combobox_Diagram.addActionListener(new ActionListener() {
             @Override
             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);
+                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);
             }
         });
 
         pack();
     }//
 
+
+
     private void WindowClosing(WindowEvent evt) {
         tdmm.clearSelectComponents();
         this.dispose();
@@ -937,7 +967,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                             if (searchGoogle == 1) {
                                 jLabel_Status.setText("Retrieving data from Google");
 
-                                resultGoogle = GoogleSearch.getGoogleResult(searchBox.getText());
+                                resultGoogle = GoogleSearch.getGoogleResult(searchBox.getText(),(String)combobox_Num.getSelectedItem());
                                 jLabel_Status.setText("Done");
 
                                 if (resultGoogle == null) {
@@ -963,7 +993,7 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                             if (searchGoogleScholar == 1) {
                                 jLabel_Status.setText("Retrieving data from Google Scholar");
                                 //jLabel_Status.updateUI();
-                                resultGoogleScholar = GoogleSearch.getGoogleScholarResult(searchBox.getText());
+                                resultGoogleScholar = GoogleSearch.getGoogleScholarResult(searchBox.getText(),(String)combobox_Num.getSelectedItem());
                                 jLabel_Status.setText("Done");
                                 //jLabel_Status.updateUI();
                                 if (resultGoogleScholar == null) {
@@ -1000,35 +1030,15 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                     jLabel_Status.setText("Retrieving data from DB");
                     Message msg = new Message(Message.CMD_SEARCH);
 
-                    //Message msg = new Message(Message.CMD_DETAIL);
-                    //msg.addKeywordMessage("CVE-2013-0001");
-
-                    /*ArrayList<String> options = new ArrayList();
-                    ArrayList<String> values = new ArrayList();
-
-                    options.add("keyword");
-                    options.add("year");
-                    options.add("system");
-                    options.add(Message.OPTION_NUMBER);
-
-                    values.add("Stuxnet");
-                    values.add("2014");
-                    values.add("windows");
-                    values.add("10");
-                    msg.createRequestMessage(Message.CMD_SEARCH, options, values);*/
                     msg.addKeywordMessage(searchBox.getText());
-                    msg.addOptionValueMessage(Message.OPTION_YEAR, "2014");
+                    msg.addOptionValueMessage(Message.OPTION_YEAR, (String) combobox_Year.getSelectedItem());
                     msg.addOptionValueMessage(Message.OPTION_SYSTEM, (String) combobox_System.getSelectedItem());
-                    //msg.addOptionValueMessage(Message.OPTION_SCORE,(String)combobox_Score.getSelectedItem());
+                    msg.addOptionValueMessage(Message.OPTION_SCORE,(String)combobox_Score.getSelectedItem());
+                    msg.addOptionValueMessage(Message.OPTION_NUMBER,(String)combobox_Num.getSelectedItem());
 
-                   msg.addOptionValueMessage(Message.OPTION_NUMBER, Integer.toString(10));
 
-                    //create client
-                    //Client client = new Client();
-                    //Message msg1 = new Message(Message.RESULT_SEARCH);
                     Message returnMsg = sendMessage(msg);
 
-                    //Message msg1 = new Message(Message.RESULT_SEARCH);
 
                     ArrayList<Record> re = (ArrayList<Record>)parserMessage(returnMsg);
                     putDBToTable(re);
@@ -1191,30 +1201,38 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     
     public void putGoogleToTable(ArrayList<GoogleSearch> a)
     {
-    	int i = this.rowsGoogle.size()+1;
-    	for (GoogleSearch gs : a){
-    		this.rowsGoogle.add(new Object[]{i, gs});
-    		i=i+1;
-    	}
+        if (a!=null){
+            int i = this.rowsGoogle.size()+1;
+            for (GoogleSearch gs : a){
+                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;
+        if (a!=null){
+            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});
-    		i=i+1;
-    	}
+        if (a!=null) {
+            int i = this.rowsGoogleScholar.size() + 1;
+            for (GoogleSearch gs : a) {
+                rowsGoogleScholar.add(new Object[]{i, gs});
+                i = i + 1;
+            }
+        }
     }
 
 
@@ -1259,24 +1277,8 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
     public void doStatistic() {
         BufferedImage img= null;
         try {
-            //img = ImageIO.read(new File("test.jpg"));
             Message msg = new Message(Message.CMD_STATISTIC);
-            ArrayList<String> options = new ArrayList<>();
-            ArrayList<String> values = new ArrayList<>();
-            options.add(Message.CMD_STATISTIC);
-
-
-            String arguments = searchBox.getText();
-            String[] argument = arguments.split(" ");
-
-            for (int i = 0; i < argument.length; i++) {
-                //System.out.println(argument[i]);
-                values.add(argument[i]);
-            }
-            msg.setOptions(options);
-            msg.setValues(values);
-
-
+            msg.addKeywordMessage(this.searchBox.getText());
             Message ret = sendMessage(msg);
             if (ret !=null)
             {
@@ -1285,12 +1287,9 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
                 ByteArrayInputStream in = new ByteArrayInputStream(b);
                 img = ImageIO.read(in);
                 ImageIcon icon = new ImageIcon(img);
-                Image scaleImage = icon.getImage().getScaledInstance(750, 200, Image.SCALE_DEFAULT);
+                Image scaleImage = icon.getImage().getScaledInstance(650, 300, java.awt.Image.SCALE_SMOOTH);
                 icon = new ImageIcon(scaleImage);
-                JLabel imageLabel = new JLabel(icon);
-                JScrollPane scrollPane = new JScrollPane(imageLabel);
-                jTabbedPane2.addTab("HUY", scrollPane);
-
+                addTab("Statistic",icon);
             }
             }
         } catch (IOException e) {
@@ -1300,6 +1299,98 @@ public class JDialogSearchBox extends javax.swing.JFrame  {
 
     }
 
+    private void doHistogram() {
+        BufferedImage img= null;
+        try {
+            Message msg = new Message(Message.CMD_HISTOGRAM);
+            msg.addKeywordMessage(this.searchBox.getText());
+            Message ret = sendMessage(msg);
+            if (ret !=null)
+            {
+                byte[] b = (byte[])parserMessage(ret);
+                if(b != null) {
+                    ByteArrayInputStream in = new ByteArrayInputStream(b);
+                    img = ImageIO.read(in);
+                    ImageIcon icon = new ImageIcon(img);
+                    Image scaleImage = icon.getImage().getScaledInstance(700, 300, java.awt.Image.SCALE_SMOOTH);
+                    icon = new ImageIcon(scaleImage);
+                    addTab("Histogram",icon);
+
+                }
+            }
+        } catch (IOException e) {
+            JOptionPane.showMessageDialog(null, "Cannot display diagram !!!", "Warning",
+                    JOptionPane.WARNING_MESSAGE);
+        }
+
+    }
+
+
+    private void removeTab(String name){
+        for ( int i =0; i < jTabbedPane2.getTabCount(); i ++){
+            if (jTabbedPane2.getTitleAt(i).equals(name)){
+                jTabbedPane2.remove(i);
+            }
+        }
+    }
+
+    private void addTab(String name,ImageIcon icon ){
+        tabCounter ++;
+        JLabel imageLabel = new JLabel(icon);
+        JScrollPane scrollPane = new JScrollPane(imageLabel);
+        removeTab(name);
+        jTabbedPane2.addTab(name, scrollPane);
+        //jTabbedPane2.setTabComponentAt(3, tabCloseButton);
+
+        int index = jTabbedPane2.indexOfTab(name);
+        JPanel pnlTab = new JPanel(new GridBagLayout());
+        pnlTab.setOpaque(false);
+        JLabel lblTitle = new JLabel(name);
+        //JButton btnClose = new JButton("x");
+        JButton btnClose = new JButton();
+
+        btnClose.setOpaque(false);
+        btnClose.setContentAreaFilled(false);
+        btnClose.setBorderPainted(false);
+        //btnClose.setPreferredSize(new Dimension(25, 25));
+        btnClose.setMargin(new Insets(0, 0, 0, 0));
+        btnClose.setIcon(IconManager.imgic26);
+        GridBagConstraints gbc = new GridBagConstraints();
+        gbc.gridx = 0;
+        gbc.gridy = 0;
+        gbc.weightx = 1;
+
+        pnlTab.add(lblTitle, gbc);
+
+        gbc.gridx++;
+        gbc.gridx++;
+        gbc.gridy--;
+        gbc.weightx = 0;
+        pnlTab.add(btnClose, gbc);
+
+        jTabbedPane2.setTabComponentAt(index, pnlTab);
+        btnClose.setActionCommand("" +tabCounter);
+
+        btnClose.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent actionEvent) {
+                JButton btn = (JButton) actionEvent.getSource();
+                String s1 = btn.getActionCommand();
+                for (int i = 1; i < jTabbedPane2.getTabCount(); i++) {
+                    JPanel pnl = (JPanel) jTabbedPane2.getTabComponentAt(i);
+                    if (pnl!=null) {
+                        btn = (JButton) pnl.getComponent(1);
+                        String s2 = btn.getActionCommand();
+                        if (s1.equals(s2)) {
+                            jTabbedPane2.removeTabAt(i);
+                            break;
+                        }
+                    }
+                }
+            }
+        });
+    }
+
 
     /**
      *
-- 
GitLab