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