{"id":21,"date":"2016-05-06T08:43:29","date_gmt":"2016-05-06T08:43:29","guid":{"rendered":"http:\/\/symbioticindia.in\/docu\/?p=21"},"modified":"2016-05-06T08:46:33","modified_gmt":"2016-05-06T08:46:33","slug":"sugarcrm-and-asterisk-integration-in-java-first-steps","status":"publish","type":"post","link":"http:\/\/symbioticindia.in\/docu\/2016\/05\/06\/sugarcrm-and-asterisk-integration-in-java-first-steps\/","title":{"rendered":"SugarCRM and Asterisk integration in Java &#8211; First steps"},"content":{"rendered":"<h3>SugarCRM and Asterisk integration in Java &#8211; First steps<\/h3>\n<table>\n<tbody>\n<tr>\n<td>\n<div id=\"itmh\">\n<h4>Introduction<\/h4>\n<\/div>\n<p><span style=\"font-size: small;\">For those of you who know this site the present article won&#8217;t be a surprise, but a natural and obvious step following some of my previous writings. Particularly, this is a point of convergence of two of them:<br \/>\n<\/span><\/p>\n<ul>\n<li><a href=\"http:\/\/www.beanizer.org\/site\/index.php\/en\/Articles\/SugarCRM-integration-with-custom-Java-applications.html\">SugarCRM integration with custom Java applications<\/a><\/li>\n<li><a href=\"http:\/\/www.beanizer.org\/site\/index.php\/en\/Articles\/A-simple-AGI-scripting-engine-with-Asterisk-Java.html\">A simple AGI scripting engine with Asterisk-Java<\/a><\/li>\n<\/ul>\n<p><span style=\"font-size: small;\"><br \/>\nI strongly advise you to have a look at them to have a better idea of the overall scene. We&#8217;ll also reuse some code developed and explained in those articles.<br \/>\nFor the Asterisk side , we&#8217;ll use again the invaluable <a title=\"Asterisk-Java\" href=\"http:\/\/asterisk-java.org\/\" target=\"_blank\">Asterisk-Java<\/a>\u00a0 library, this time focusing on the Manager API exposed by the library.<br \/>\n<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-size: small;\">\u00a0<\/span><\/p>\n<h4 align=\"center\">Overview<\/h4>\n<p id=\"vcs8\">What we aim to achieve this time is the basic structure of a sort of asterisk monitor. Our program will be &#8220;listening&#8221; to an asterisk server for new events, and when a call is received, we&#8217;ll intercept the telephone number involved and query sugarcrm to see if a correspondent account exists, and in this case we&#8217;ll get back some of its data.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h4 align=\"center\">The Asterisk Side<\/h4>\n<p id=\"vcs8\">Asterisk-Java Manager API allows us to query an Asterisk server and change its state. To be able to use it we first need to enable it on our asterisk server. You can learn how to do it <a title=\"here.\" href=\"http:\/\/asterisk-java.org\/development\/tutorial.html\" target=\"_blank\">here<\/a> .<\/p>\n<p id=\"vcs8\">The Manager API exposes some events we can &#8220;listen&#8221; for, in this case we&#8217;re interested in\u00a0 intercepting an incoming call.\u00a0 The interesting events we are notified of by the Manager API on an incoming call are:<\/p>\n<ul>\n<li>A new channel event for the channel connecting the caller and our asterisk server trunk.<\/li>\n<li>A caller id event stating an attempt of caller id identification for the previous channel (the source channel)<\/li>\n<li>A new channel event for the channel connecting our asterisk server to the selected extension (softphone, ip phone or whatever)<\/li>\n<li>A dial event, which contains the unique id of the two previously created channels (the source and the destination) plus other data<\/li>\n<li>A caller id event for the attempt of caller id identification for the last created channel (the destination channel)<\/li>\n<\/ul>\n<p><span style=\"font-size: small;\"><br \/>\nFor sake of simplicity, we&#8217;ll deal only with the &#8220;dial&#8221; event because it\u00a0 also exposes the caller number, which is the only thing we&#8217;re interested in\u00a0 now. In a more complex\u00a0 situation we&#8217;ll need to check also the destination channel, to make sure our &#8220;extension&#8221; is the one involved in the call. I take for granted that the destination &#8220;extension&#8221; is online, otherwise the &#8220;dial&#8221; event won&#8217;t be fired.<br \/>\nNow, here is the code for the initial version of our simple class ,which is just a simpler version of the example in the Asterisk-Java <a title=\"tutorial\" href=\"http:\/\/asterisk-java.org\/development\/tutorial.html\" target=\"_blank\">tutorial<\/a> :<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre><span id=\"r4y1\" style=\"color: #f5deb3;\"><span id=\"m1km\" style=\"color: #ffffcc;\">   1:<\/span><span id=\"kqkd\" style=\"color: #00cc99;\">import<\/span> java.io.IOException;\r\n<span id=\"gmx4\" style=\"color: #ffffcc;\">   2:<\/span><span id=\"i3a9\" style=\"color: #00cc99;\">import<\/span> org.asteriskjava.manager.*;\r\n<span id=\"y80v\" style=\"color: #ffffcc;\">   3:<\/span><span id=\"urex\" style=\"color: #00cc99;\">import<\/span> org.asteriskjava.manager.event.*;\r\n<span id=\"yaq7\" style=\"color: #ffffcc;\">   4:<\/span>\r\n<span id=\"hb85\" style=\"color: #00cd00;\">   5:<\/span><span id=\"c.og\" style=\"color: #ffa500;\">public<\/span> <span id=\"tkcy\" style=\"color: #cc6600;\">class<\/span> PhoneNumberResolver <span id=\"r:g:\" style=\"color: #ffa500;\">implements<\/span> ManagerEventListener<span id=\"q4i:\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"hvu6\" style=\"color: #ffffcc;\">   6:<\/span>    <span id=\"x63i\" style=\"color: #ffa500;\">private<\/span> ManagerConnection managerConnection;\r\n<span id=\"azqp\" style=\"color: #ffffcc;\">   7:<\/span>    \r\n<span id=\"oc97\" style=\"color: #ffffcc;\">   8:<\/span>    <span id=\"dqxv\" style=\"color: #ffa500;\">public<\/span> <\/span><span id=\"duyk\"><span id=\"r4y1\" style=\"color: #f5deb3;\">PhoneNumberResolver<\/span><\/span><span id=\"r4y1\" style=\"color: #f5deb3;\"><span id=\"ri7w\" style=\"color: #00ffff;\">(<\/span><span id=\"k9bx\" style=\"color: #00ffff;\">)<\/span><span id=\"rdp0\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"w6vh\" style=\"color: #ffffcc;\">   9:<\/span>        ManagerConnectionFactory factory <span id=\"ifx9\" style=\"color: #00ffff;\">=<\/span> <span id=\"sno0\" style=\"color: #ffa500;\">new<\/span> <span id=\"ohlf\" style=\"color: #b2dfee;\">ManagerConnectionFactory<\/span><span id=\"fwpd\" style=\"color: #00ffff;\">(<\/span>\r\n<span id=\"u-84\" style=\"color: #00cd00;\">  10:<\/span>                                <span id=\"ls95\" style=\"color: #00cd00;\">\"<\/span><span id=\"zrdp\" style=\"color: #00cd00;\">asterisk_server_url<\/span><span id=\"l1jn\" style=\"color: #00cd00;\">\"<\/span>, <span id=\"oibl\" style=\"color: #00cd00;\">\"<\/span><span id=\"s9jf\" style=\"color: #00cd00;\">user<\/span><span id=\"refb\" style=\"color: #00cd00;\">\"<\/span>, <span id=\"p-af\" style=\"color: #00cd00;\">\"<\/span><span id=\"y-2y\" style=\"color: #00cd00;\">password<\/span><span id=\"gfwo\" style=\"color: #00cd00;\">\"<\/span><span id=\"tncf\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"kfjx\" style=\"color: #ffffcc;\">  11:<\/span>        <span id=\"grtg\" style=\"color: #ffff66;\">this<\/span>.managerConnection <span id=\"pbsk\" style=\"color: #00ffff;\">=<\/span> factory.<span id=\"iujp\" style=\"color: #b2dfee;\">createManagerConnection<\/span><span id=\"fsl-\" style=\"color: #00ffff;\">(<\/span><span id=\"blxj\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"ushq\" style=\"color: #ffffcc;\">  12:<\/span>    <span id=\"rxre\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"ix.i\" style=\"color: #ffffcc;\">  13:<\/span>    <span id=\"fxha\" style=\"color: #ffa500;\">public<\/span> <span id=\"jai1\" style=\"color: #cc6600;\">void<\/span> <span id=\"oe9z\" style=\"color: #b2dfee;\">run<\/span><span id=\"o1jn\" style=\"color: #00ffff;\">(<\/span><span id=\"bgz:\" style=\"color: #00ffff;\">)<\/span> <span id=\"l84j\" style=\"color: #ffa500;\">throws<\/span> IOException, AuthenticationFailedException,\r\n<span id=\"qwck\" style=\"color: #ffffcc;\">  14:<\/span>                        TimeoutException, InterruptedException, IllegalStateException\r\n<span id=\"z69b\" style=\"color: #00cd00;\">  15:<\/span>    <span id=\"nq2o\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"k_28\" style=\"color: #ffffcc;\">  16:<\/span>        managerConnection.<span id=\"zbb7\" style=\"color: #b2dfee;\">addEventListener<\/span><span id=\"ec5-\" style=\"color: #00ffff;\">(<\/span><span id=\"z8t6\" style=\"color: #ffff66;\">this<\/span><span id=\"acis\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"ppff\" style=\"color: #ffffcc;\">  17:<\/span>        managerConnection.<span id=\"ny1q\" style=\"color: #b2dfee;\">login<\/span><span id=\"i83t\" style=\"color: #00ffff;\">(<\/span><span id=\"xtbb\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"mzue\" style=\"color: #ffffcc;\">  18:<\/span>        \r\n<span id=\"w5.y\" style=\"color: #ffffcc;\">  19:<\/span>        <span id=\"fxh2\" style=\"color: #ffa500;\">while<\/span><span id=\"nfgl\" style=\"color: #00ffff;\">(<\/span><span id=\"j95-\" style=\"color: #ffff66;\">true<\/span><span id=\"f_-s\" style=\"color: #00ffff;\">)<\/span> \r\n<span id=\"mavt\" style=\"color: #00cd00;\">  20:<\/span>                Thread.<span id=\"rhln\" style=\"color: #b2dfee;\">sleep<\/span><span id=\"j4tc\" style=\"color: #00ffff;\">(<\/span><span id=\"t.:8\" style=\"color: #cdcd00;\">60000<\/span><span id=\"cwwp\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"m3l8\" style=\"color: #ffffcc;\">  21:<\/span>        \/\/ <span id=\"s.-0\" style=\"color: #d0e0e3;\">managerConnection.<\/span><span id=\"ni9i\" style=\"color: #d0e0e3;\">logoff<\/span><span id=\"cn6n\" style=\"color: #d0e0e3;\">(<\/span><span id=\"xh81\" style=\"color: #d0e0e3;\">)<\/span><span id=\"epwc\" style=\"color: #d0e0e3;\">;<\/span>\r\n<span id=\"w2.y\" style=\"color: #ffffcc;\">  22:<\/span>    <span id=\"u3rx\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"qi4f\" style=\"color: #ffffcc;\">  23:<\/span>    \r\n<span id=\"znh0\" style=\"color: #ffffcc;\">  24:<\/span>    <span id=\"aqto\" style=\"color: #ffa500;\">public<\/span> <span id=\"ttt6\" style=\"color: #cc6600;\">void<\/span> <span id=\"h16j\" style=\"color: #b2dfee;\">onManagerEvent<\/span><span id=\"dl21\" style=\"color: #00ffff;\">(<\/span>ManagerEvent event<span id=\"v30t\" style=\"color: #00ffff;\">)<\/span> <span id=\"ii3d\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"rreg\" style=\"color: #00cd00;\">  25:<\/span>        String event_name <span id=\"fto:\" style=\"color: #00ffff;\">=<\/span> event.<span id=\"uw9x\" style=\"color: #b2dfee;\">getClass<\/span><span id=\"c7kh\" style=\"color: #00ffff;\">(<\/span><span id=\"smdp\" style=\"color: #00ffff;\">)<\/span>.<span id=\"zkca\" style=\"color: #b2dfee;\">getSimpleName<\/span><span id=\"lga0\" style=\"color: #00ffff;\">(<\/span><span id=\"bt5g\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"q-dg\" style=\"color: #ffffcc;\">  26:<\/span>        <span id=\"g.s1\" style=\"color: #ffa500;\">if<\/span><span id=\"uhg1\" style=\"color: #00ffff;\">(<\/span>event_name.<span id=\"iwn3\" style=\"color: #b2dfee;\">equals<\/span><span id=\"aa.t\" style=\"color: #00ffff;\">(<\/span><span id=\"al1c\" style=\"color: #00cd00;\">\"<\/span><span id=\"v6.v\" style=\"color: #00cd00;\">DialEvent<\/span><span id=\"fj2e\" style=\"color: #00cd00;\">\"<\/span><span id=\"ezys\" style=\"color: #00ffff;\">)<\/span><span id=\"f648\" style=\"color: #00ffff;\">)<\/span><span id=\"j1bm\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"u0g0\" style=\"color: #ffffcc;\">  27:<\/span>            DialEvent e<span id=\"n-8-\" style=\"color: #00ffff;\">=<\/span><span id=\"u9t4\" style=\"color: #00ffff;\">(<\/span>DialEvent<span id=\"nv4:\" style=\"color: #00ffff;\">)<\/span>event;\r\n<span id=\"pyou\" style=\"color: #ffffcc;\">  28:<\/span>            System.out.<span id=\"mrng\" style=\"color: #b2dfee;\">println<\/span><span id=\"m0tk\" style=\"color: #00ffff;\">(<\/span>e.<span id=\"sc6m\" style=\"color: #b2dfee;\">getCallerId<\/span><span id=\"jnnk\" style=\"color: #00ffff;\">(<\/span><span id=\"o56v\" style=\"color: #00ffff;\">)<\/span><span id=\"gw2f\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"wsxw\" style=\"color: #ffffcc;\">  29:<\/span>        <span id=\"fjfq\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"l:-b\" style=\"color: #00cd00;\">  30:<\/span>    <span id=\"f06q\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"ahfl\" style=\"color: #ffffcc;\">  31:<\/span>    \r\n<span id=\"l5g0\" style=\"color: #ffffcc;\">  32:<\/span>    <span id=\"qlh2\" style=\"color: #ffa500;\">public<\/span> <span id=\"mi2w\" style=\"color: #ffa500;\">static<\/span> <span id=\"wbxw\" style=\"color: #cc6600;\">void<\/span> <span id=\"ky8b\" style=\"color: #b2dfee;\">main<\/span><span id=\"snw8\" style=\"color: #00ffff;\">(<\/span>String[] args<span id=\"clkd\" style=\"color: #00ffff;\">)<\/span> <span id=\"r__e\" style=\"color: #ffa500;\">throws<\/span> Exception\r\n<span id=\"x79u\" style=\"color: #ffffcc;\">  33:<\/span>    <span id=\"oqcq\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"v6.vd\" style=\"color: #ffffcc;\">  34:<\/span>        <\/span><span id=\"v316\"><span id=\"r4y1\" style=\"color: #f5deb3;\">PhoneNumberResolver<\/span><\/span><span id=\"r4y1\" style=\"color: #f5deb3;\"> p<\/span><span id=\"hoo9\"><span id=\"r4y1\" style=\"color: #f5deb3;\">honeNumberResolver<\/span><\/span><span id=\"r4y1\" style=\"color: #f5deb3;\"> <span id=\"akp7\" style=\"color: #00ffff;\">=<\/span> <span id=\"rumc\" style=\"color: #ffa500;\">new<\/span> <\/span><span id=\"b_dl\"><span id=\"r4y1\" style=\"color: #f5deb3;\">PhoneNumberResolver<\/span><\/span><span id=\"r4y1\" style=\"color: #f5deb3;\"><span id=\"p70f\" style=\"color: #00ffff;\">(<\/span><span id=\"pyfy\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"i5rp\" style=\"color: #00cd00;\">  35:<\/span>        <\/span><span id=\"mxvw\"><span id=\"r4y1\" style=\"color: #f5deb3;\">phoneNumberResolver<\/span><\/span><span id=\"r4y1\" style=\"color: #f5deb3;\">.<span id=\"ya70\" style=\"color: #b2dfee;\">run<\/span><span id=\"f4g2\" style=\"color: #00ffff;\">(<\/span><span id=\"lifx\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"a.d4\" style=\"color: #ffffcc;\">  36:<\/span>    <span id=\"nnhh\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"kl2m\" style=\"color: #ffffcc;\">  37:<\/span>    \r\n<span id=\"gzu8\" style=\"color: #ffffcc;\">  38:<\/span><span id=\"k9.a\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"iqe-\" style=\"color: #ffffcc;\">  39:<\/span> <\/span><\/pre>\n<p><span style=\"font-size: small;\"><br \/>\nThe class implements &#8220;ManagerEventListener&#8221; to be able to be notified of asterisk events. In the constructor, by means of a &#8220;factory&#8221; we instantiate a &#8220;ManagerConnection&#8221;(line 11) that we&#8217;ll use to connect to our asterisk server.<span id=\"p3rt\" style=\"color: #000000;\"><span id=\"r4y1\"><span id=\"ls95\">&#8220;<\/span><span id=\"zrdp\">asterisk_server_url<\/span><span id=\"l1jn\">&#8220;<\/span>, <span id=\"oibl\">&#8220;<\/span><span id=\"s9jf\">user<\/span><span id=\"refb\">&#8221; and<\/span> <span id=\"p-af\">&#8220;<\/span><span id=\"y-2y\">password<\/span><span id=\"gfwo\">&#8221; have obviously to be your real asterisk server url,\u00a0 manager user and password defined on asterisk.<\/span><\/span><\/span> The &#8220;run&#8221; method, called by &#8220;main&#8221; when the class gets launched, adds the class itself as a listener for the &#8220;managerConnection&#8221;(line 16), meaning that the current class will receive asterisk fired events. On line 17 we login to the &#8220;ManagerConnection&#8221;,<br \/>\nand on line 19 we enter an endless loop that just waits. Line 21 is commented out because isn&#8217;t reachable, but remember we can also logout from the connection if required.<br \/>\nMethod\u00a0 &#8220;onManagerEvent&#8221; is the one required to receive events from asterisk. We get the name of the event (line 25) to make sure it is a &#8220;Dial&#8221; event and if so we just print out the caller id. You are not guaranteed the caller id is the telephone number of the caller because of all the new available caller id services , but most of the time it is.<\/span><\/p>\n<p>&nbsp;<\/p>\n<div id=\"hsrw\"><\/div>\n<h4 align=\"center\">The SugarCRM Side<\/h4>\n<p><span style=\"font-size: small;\"><br \/>\nThis was just one side of our integration. Now we need to pass the gathered telephone number to sugarcrm and if it is found to be owned by a sugarcrm &#8220;Account&#8221;, we want to be shown some &#8220;Account&#8221; information .<br \/>\nTo go on with this part of the article, you need to feel comfortable with what we&#8217;ve explored in a previous article:<\/span><\/p>\n<p>&nbsp;<\/p>\n<p id=\"v3m4\"><a title=\"SugarCRM integration with custom Java applications\" href=\"http:\/\/www.beanizer.org\/site\/index.php\/en\/Articles\/SugarCRM-integration-with-custom-Java-applications.html\" target=\"_blank\">SugarCRM integration with custom Java applications<\/a><\/p>\n<p><span style=\"font-size: small;\">Particularly, you need to follow the procedure explained in that article to generate the classes we&#8217;ll use to interact with SugarCRM. Once you have them, you&#8217;ll be ready to code our next class. Here it is:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre><span id=\"p-4a\"><span id=\"otb5\" style=\"color: #f5deb3;\"><span id=\"ilak\" style=\"color: #ffffcc;\">   1:<\/span><span id=\"ykua\" style=\"color: #00cc99;\">import<\/span> java.security.MessageDigest;\r\n<span id=\"ctsq\" style=\"color: #ffffcc;\">   2:<\/span><span id=\"psl9\" style=\"color: #00cc99;\">import<\/span> java.util.Hashtable;\r\n<span id=\"o9z6\" style=\"color: #ffffcc;\">   3:<\/span><span id=\"udcs\" style=\"color: #00cc99;\">import<\/span> org.beanizer.sugarcrm.*;\r\n<span id=\"k9.q\" style=\"color: #ffffcc;\">   4:<\/span>\r\n<span id=\"dmvo\" style=\"color: #00cd00;\">   5:<\/span><span id=\"f5bl\" style=\"color: #ffa500;\">public<\/span> <span id=\"ttrf\" style=\"color: #cc6600;\">class<\/span> AccountFinder <span id=\"w_g3\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"bs90\" style=\"color: #ffffcc;\">   6:<\/span>    <span id=\"xsak\" style=\"color: #ffa500;\">private<\/span> SugarsoapPortType port;\r\n<span id=\"h_2e\" style=\"color: #ffffcc;\">   7:<\/span>    <span id=\"ht1:\" style=\"color: #ffa500;\">private<\/span> User_auth userAuth;\r\n<span id=\"oc:5\" style=\"color: #ffffcc;\">   8:<\/span>    \r\n<span id=\"fizr\" style=\"color: #ffffcc;\">   9:<\/span>    <span id=\"nknf\" style=\"color: #ffa500;\">public<\/span> <span id=\"ucpk\" style=\"color: #b2dfee;\">AccountFinder<\/span><span id=\"hx3l\" style=\"color: #00ffff;\">(<\/span><span id=\"y3mm\" style=\"color: #00ffff;\">)<\/span><span id=\"ge4v\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"pp:_\" style=\"color: #00cd00;\">  10:<\/span>        <span id=\"gcoy\" style=\"color: #ffa500;\">try<\/span><span id=\"m0_-\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"f7wb\" style=\"color: #ffffcc;\">  11:<\/span>            Sugarsoap service<span id=\"k9m_\" style=\"color: #00ffff;\">=<\/span><span id=\"q2g4\" style=\"color: #ffa500;\">new<\/span> <span id=\"hq3-\" style=\"color: #b2dfee;\">SugarsoapLocator<\/span><span id=\"inv_\" style=\"color: #00ffff;\">(<\/span><span id=\"me4.\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"khdv\" style=\"color: #ffffcc;\">  12:<\/span>            port<span id=\"g8k6\" style=\"color: #00ffff;\">=<\/span>service.<span id=\"st.m\" style=\"color: #b2dfee;\">getsugarsoapPort<\/span><span id=\"bi_v\" style=\"color: #00ffff;\">(<\/span><span id=\"nahs\" style=\"color: #ffa500;\">new<\/span> java.net.<span id=\"hvq1\" style=\"color: #b2dfee;\">URL<\/span><span id=\"v8nk\" style=\"color: #00ffff;\">(<\/span><span id=\"u0wy\" style=\"color: #00cd00;\">\"<\/span><span id=\"t78e\" style=\"color: #00cd00;\">http:\/\/your_sugar_server_url\/soap.php<\/span><span id=\"jpf8\" style=\"color: #00cd00;\">\"<\/span><span id=\"ekl6\" style=\"color: #00ffff;\">)<\/span><span id=\"xafl\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"e3fn\" style=\"color: #ffffcc;\">  13:<\/span>            userAuth<span id=\"itrh\" style=\"color: #00ffff;\">=<\/span><span id=\"r80z\" style=\"color: #ffa500;\">new<\/span> <span id=\"n0f3\" style=\"color: #b2dfee;\">User_auth<\/span><span id=\"b1jc\" style=\"color: #00ffff;\">(<\/span><span id=\"c6da\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"m9wg\" style=\"color: #ffffcc;\">  14:<\/span>            userAuth.<span id=\"e03.\" style=\"color: #b2dfee;\">setUser_name<\/span><span id=\"tuv0\" style=\"color: #00ffff;\">(<\/span><span id=\"llgk\" style=\"color: #00cd00;\">\"<\/span><span id=\"u4rr\" style=\"color: #00cd00;\">your_sugar_user<\/span><span id=\"x3uq\" style=\"color: #00cd00;\">\"<\/span><span id=\"ts8g\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"sp68\" style=\"color: #00cd00;\">  15:<\/span>            MessageDigest md <span id=\"kkb0\" style=\"color: #00ffff;\">=<\/span>MessageDigest.<span id=\"jnh2\" style=\"color: #b2dfee;\">getInstance<\/span><span id=\"c8pa\" style=\"color: #00ffff;\">(<\/span><span id=\"yq.s\" style=\"color: #00cd00;\">\"<\/span><span id=\"hqwx\" style=\"color: #00cd00;\">MD5<\/span><span id=\"bhz3\" style=\"color: #00cd00;\">\"<\/span><span id=\"iegt\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"k97d\" style=\"color: #ffffcc;\">  16:<\/span>            String password<span id=\"k7op\" style=\"color: #00ffff;\">=<\/span><span id=\"v9np\" style=\"color: #b2dfee;\">getHexString<\/span><span id=\"our1\" style=\"color: #00ffff;\">(<\/span>md.<span id=\"p-xc\" style=\"color: #b2dfee;\">digest<\/span><span id=\"dvw8\" style=\"color: #00ffff;\">(<\/span><span id=\"ec5a\" style=\"color: #00cd00;\">\"<\/span><span id=\"kk5i\" style=\"color: #00cd00;\">your_sugar_password,<\/span><span id=\"pf5e\" style=\"color: #00cd00;\">\"<\/span>.<span id=\"y06.\" style=\"color: #b2dfee;\">getBytes<\/span><span id=\"i35l\" style=\"color: #00ffff;\">(<\/span><span id=\"st:1\" style=\"color: #00ffff;\">)<\/span><span id=\"mk9q\" style=\"color: #00ffff;\">)<\/span><span id=\"wa14\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"xihn\" style=\"color: #ffffcc;\">  17:<\/span>            userAuth.<span id=\"b37x\" style=\"color: #b2dfee;\">setPassword<\/span><span id=\"uyqz\" style=\"color: #00ffff;\">(<\/span>password<span id=\"xpnr\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"eo:c\" style=\"color: #ffffcc;\">  18:<\/span>            userAuth.<span id=\"juoa\" style=\"color: #b2dfee;\">setVersion<\/span><span id=\"di:l\" style=\"color: #00ffff;\">(<\/span><span id=\"jd0g\" style=\"color: #00cd00;\">\"<\/span><span id=\"vyy1\" style=\"color: #00cd00;\">0.1<\/span><span id=\"u8oq\" style=\"color: #00cd00;\">\"<\/span><span id=\"h:91\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"q_8j\" style=\"color: #ffffcc;\">  19:<\/span>        <span id=\"nuo4\" style=\"color: #00ffff;\">}<\/span> <span id=\"t9u8\" style=\"color: #ffa500;\">catch<\/span><span id=\"fcnl\" style=\"color: #00ffff;\">(<\/span>Exception ex<span id=\"m-dz\" style=\"color: #00ffff;\">)<\/span><span id=\"wz6t\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"qtto\" style=\"color: #00cd00;\">  20:<\/span>            ex.<span id=\"wu:2\" style=\"color: #b2dfee;\">printStackTrace<\/span><span id=\"hmdd\" style=\"color: #00ffff;\">(<\/span><span id=\"kg4q\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"hjsa\" style=\"color: #ffffcc;\">  21:<\/span>        <span id=\"nhp6\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"hoe7\" style=\"color: #ffffcc;\">  22:<\/span>    \r\n<span id=\"ll.0\" style=\"color: #ffffcc;\">  23:<\/span>    <span id=\"s2fb\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"c0mr\" style=\"color: #ffffcc;\">  24:<\/span>    <span id=\"w630\" style=\"color: #ffa500;\">public<\/span> Hashtable <span id=\"c45-\" style=\"color: #b2dfee;\">searchAccountByNumber<\/span><span id=\"yxc6\" style=\"color: #00ffff;\">(<\/span>String phoneNumber<span id=\"plya\" style=\"color: #00ffff;\">)<\/span><span id=\"pm70\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"xajk\" style=\"color: #00cd00;\">  25:<\/span>        Hashtable<span id=\"uqw7\" style=\"color: #00ffff;\">&lt;<\/span>String,String<span id=\"pmxv\" style=\"color: #00ffff;\">&gt;<\/span> hash<span id=\"niuw\" style=\"color: #00ffff;\">=<\/span><span id=\"uf7:\" style=\"color: #ffa500;\">new<\/span> Hashtable<span id=\"ntc:\" style=\"color: #00ffff;\">&lt;<\/span>String,String<span id=\"tvfa\" style=\"color: #00ffff;\">&gt;<\/span><span id=\"k7io\" style=\"color: #00ffff;\">(<\/span><span id=\"heqp\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"pbxo\" style=\"color: #ffffcc;\">  26:<\/span>        <span id=\"f110\" style=\"color: #ffa500;\">try<\/span><span id=\"lg.l\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"cfxx\" style=\"color: #ffffcc;\">  27:<\/span>            Set_entry_result loginRes<span id=\"yb5q\" style=\"color: #00ffff;\">=<\/span>port.<span id=\"aonp\" style=\"color: #b2dfee;\">login<\/span><span id=\"ouy.\" style=\"color: #00ffff;\">(<\/span>userAuth, <span id=\"q46l\" style=\"color: #00cd00;\">\"<\/span><span id=\"jb9-\" style=\"color: #00cd00;\">myAppName<\/span><span id=\"jfs1\" style=\"color: #00cd00;\">\"<\/span><span id=\"yh15\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"o..6\" style=\"color: #ffffcc;\">  28:<\/span>            String sessionID <span id=\"cjx_\" style=\"color: #00ffff;\">=<\/span> loginRes.<span id=\"mkag\" style=\"color: #b2dfee;\">getId<\/span><span id=\"m6am\" style=\"color: #00ffff;\">(<\/span><span id=\"f2:w\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"bo7i\" style=\"color: #ffffcc;\">  29:<\/span>            Get_entry_list_result entryList<span id=\"ha:d\" style=\"color: #00ffff;\">=<\/span>port.<span id=\"hq_-\" style=\"color: #b2dfee;\">get_entry_list<\/span><span id=\"jjik\" style=\"color: #00ffff;\">(<\/span>sessionID,<span id=\"dvz3\" style=\"color: #00cd00;\">\"<\/span><span id=\"p5eb\" style=\"color: #00cd00;\">Accounts<\/span><span id=\"v_c0\" style=\"color: #00cd00;\">\"<\/span>,<span id=\"y25_\" style=\"color: #00cd00;\">\"<\/span><span id=\"yinb\" style=\"color: #00cd00;\">phone_office='<\/span><span id=\"ynua\" style=\"color: #00cd00;\">\"<\/span> \r\n<span id=\"cyb1\" style=\"color: #00cd00;\">  30:<\/span>                                                                <span id=\"n7.j\" style=\"color: #00ffff;\">+<\/span> phoneNumber <span id=\"n254\" style=\"color: #00ffff;\">+<\/span> <span id=\"noje\" style=\"color: #00cd00;\">\"<\/span><span id=\"b2_i\" style=\"color: #00cd00;\">'<\/span><span id=\"bgo2\" style=\"color: #00cd00;\">\"<\/span>, <span id=\"btur\" style=\"color: #00cd00;\">\"<\/span><span id=\"kzts\" style=\"color: #00cd00;\">\"<\/span>,<span id=\"o761\" style=\"color: #cdcd00;\">0<\/span>,\r\n<span id=\"q2hi\" style=\"color: #ffffcc;\">  31:<\/span>                                                                <span id=\"twj_\" style=\"color: #ffa500;\">new<\/span> String[]<span id=\"j:nv\" style=\"color: #00ffff;\">{<\/span><span id=\"ph03\" style=\"color: #00cd00;\">\"<\/span><span id=\"j7e.\" style=\"color: #00cd00;\">name<\/span><span id=\"v9s1\" style=\"color: #00cd00;\">\"<\/span>,<span id=\"s.cl\" style=\"color: #00cd00;\">\"<\/span><span id=\"v1l1\" style=\"color: #00cd00;\">phone_fax<\/span><span id=\"a1hy\" style=\"color: #00cd00;\">\"<\/span>,<span id=\"edto\" style=\"color: #00cd00;\">\"<\/span><span id=\"qnal\" style=\"color: #00cd00;\">website<\/span><span id=\"a3b_\" style=\"color: #00cd00;\">\"<\/span><span id=\"gxlr\" style=\"color: #00ffff;\">}<\/span>, <span id=\"hqm4\" style=\"color: #cdcd00;\">1<\/span>, <span id=\"ov3i\" style=\"color: #cdcd00;\">0<\/span><span id=\"fs4.\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"wu3c\" style=\"color: #ffffcc;\">  32:<\/span>            <span id=\"d44l\" style=\"color: #ffa500;\">if<\/span><span id=\"r7:s\" style=\"color: #00ffff;\">(<\/span>entryList.<span id=\"c8k3\" style=\"color: #b2dfee;\">getEntry_list<\/span><span id=\"q_sp\" style=\"color: #00ffff;\">(<\/span><span id=\"jpo-\" style=\"color: #00ffff;\">)<\/span>.length<span id=\"r-yy\" style=\"color: #00ffff;\">&gt;<\/span><span id=\"wbp7\" style=\"color: #cdcd00;\">0<\/span><span id=\"ot5c\" style=\"color: #00ffff;\">)<\/span><span id=\"iuuo\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"mqk2\" style=\"color: #ffffcc;\">  33:<\/span>                Entry_value entry <span id=\"od9q\" style=\"color: #00ffff;\">=<\/span> <span id=\"evt_\" style=\"color: #00ffff;\">(<\/span>entryList.<span id=\"w7b4\" style=\"color: #b2dfee;\">getEntry_list<\/span><span id=\"cqj2\" style=\"color: #00ffff;\">(<\/span><span id=\"vsg-\" style=\"color: #00ffff;\">)<\/span><span id=\"xspn\" style=\"color: #00ffff;\">)<\/span>[<span id=\"q-7u\" style=\"color: #cdcd00;\">0<\/span>];\r\n<span id=\"twyt\" style=\"color: #ffffcc;\">  34:<\/span>                Name_value[] nvl<span id=\"h.zu\" style=\"color: #00ffff;\">=<\/span>entry.<span id=\"f.t6\" style=\"color: #b2dfee;\">getName_value_list<\/span><span id=\"ko:_\" style=\"color: #00ffff;\">(<\/span><span id=\"o6jx\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"cl2s\" style=\"color: #00cd00;\">  35:<\/span>                <span id=\"jf0m\" style=\"color: #ffa500;\">for<\/span><span id=\"l3o.\" style=\"color: #00ffff;\">(<\/span><span id=\"xhrp\" style=\"color: #cc6600;\">int<\/span> i<span id=\"mg18\" style=\"color: #00ffff;\">=<\/span><span id=\"g9ka\" style=\"color: #cdcd00;\">0<\/span>; i<span id=\"j8bo\" style=\"color: #00ffff;\">&lt;<\/span>nvl.length; i<span id=\"w0:i\" style=\"color: #00ffff;\">+<\/span><span id=\"amr.\" style=\"color: #00ffff;\">+<\/span><span id=\"rbs5\" style=\"color: #00ffff;\">)<\/span>\r\n<span id=\"zqc2\" style=\"color: #ffffcc;\">  36:<\/span>                    hash.<span id=\"kpaa\" style=\"color: #b2dfee;\">put<\/span><span id=\"fecp\" style=\"color: #00ffff;\">(<\/span>nvl[i].<span id=\"po1o\" style=\"color: #b2dfee;\">getName<\/span><span id=\"thxz\" style=\"color: #00ffff;\">(<\/span><span id=\"j3b-\" style=\"color: #00ffff;\">)<\/span>, nvl[i].<span id=\"hs8h\" style=\"color: #b2dfee;\">getValue<\/span><span id=\"v8g4\" style=\"color: #00ffff;\">(<\/span><span id=\"nkxt\" style=\"color: #00ffff;\">)<\/span><span id=\"p3mn\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"q0w1\" style=\"color: #ffffcc;\">  37:<\/span>            <span id=\"rxs9\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"xnr3\" style=\"color: #ffffcc;\">  38:<\/span>            port.<span id=\"vk7c\" style=\"color: #b2dfee;\">logout<\/span><span id=\"urwf\" style=\"color: #00ffff;\">(<\/span>sessionID<span id=\"sgu2\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"wnwc\" style=\"color: #ffffcc;\">  39:<\/span>        <span id=\"i:b9\" style=\"color: #00ffff;\">}<\/span> <span id=\"pfqj\" style=\"color: #ffa500;\">catch<\/span><span id=\"ps_a\" style=\"color: #00ffff;\">(<\/span>Exception ex<span id=\"o9e:\" style=\"color: #00ffff;\">)<\/span><span id=\"j2cx\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"fc-1\" style=\"color: #00cd00;\">  40:<\/span>            ex.<span id=\"rz4e\" style=\"color: #b2dfee;\">printStackTrace<\/span><span id=\"xywz\" style=\"color: #00ffff;\">(<\/span><span id=\"o2_j\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"r48v\" style=\"color: #ffffcc;\">  41:<\/span>        <span id=\"kuih\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"na-.\" style=\"color: #ffffcc;\">  42:<\/span>        <span id=\"jhgv\" style=\"color: #ffa500;\">return<\/span> hash;\r\n<span id=\"e_3q\" style=\"color: #ffffcc;\">  43:<\/span>    <span id=\"x78n\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"tmx4\" style=\"color: #ffffcc;\">  44:<\/span>    <span id=\"o-:2\" style=\"color: #ffa500;\">private<\/span> String <span id=\"z6:d\" style=\"color: #b2dfee;\">getHexString<\/span><span id=\"o349\" style=\"color: #00ffff;\">(<\/span><span id=\"lpal\" style=\"color: #cc6600;\">byte<\/span>[] b<span id=\"n4cv\" style=\"color: #00ffff;\">)<\/span> <span id=\"a6x3\" style=\"color: #ffa500;\">throws<\/span> Exception <span id=\"cmxq\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"xii1\" style=\"color: #00cd00;\">  45:<\/span>        StringBuffer hex <span id=\"n5bl\" style=\"color: #00ffff;\">=<\/span> <span id=\"z1mx\" style=\"color: #ffa500;\">new<\/span> <span id=\"hz1x\" style=\"color: #b2dfee;\">StringBuffer<\/span><span id=\"ivuu\" style=\"color: #00ffff;\">(<\/span><span id=\"v4-g\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"nc5j\" style=\"color: #ffffcc;\">  46:<\/span>        <span id=\"qq.d\" style=\"color: #ffa500;\">for<\/span> <span id=\"zwj-\" style=\"color: #00ffff;\">(<\/span><span id=\"ph:2\" style=\"color: #cc6600;\">int<\/span> i<span id=\"oclz\" style=\"color: #00ffff;\">=<\/span><span id=\"mos3\" style=\"color: #cdcd00;\">0<\/span>;i<span id=\"pfby\" style=\"color: #00ffff;\">&lt;<\/span>b.length;i<span id=\"s-60\" style=\"color: #00ffff;\">+<\/span><span id=\"rrm4\" style=\"color: #00ffff;\">+<\/span><span id=\"g1:i\" style=\"color: #00ffff;\">)<\/span> <span id=\"ki2c\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"d.3h\" style=\"color: #ffffcc;\">  47:<\/span>                hex.<span id=\"h7gq\" style=\"color: #b2dfee;\">append<\/span><span id=\"p2d-\" style=\"color: #00ffff;\">(<\/span>Integer.<span id=\"bg2q\" style=\"color: #b2dfee;\">toHexString<\/span><span id=\"ii2e\" style=\"color: #00ffff;\">(<\/span><span id=\"m1sn\" style=\"color: #cdcd00;\">0xFF<\/span> <span id=\"pvbv\" style=\"color: #00ffff;\">&amp;<\/span> b[i]<span id=\"khxs\" style=\"color: #00ffff;\">)<\/span><span id=\"df:3\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"u635\" style=\"color: #ffffcc;\">  48:<\/span>        <span id=\"tra2\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"hkp2\" style=\"color: #ffffcc;\">  49:<\/span>        <span id=\"aw00\" style=\"color: #ffa500;\">return<\/span> hex.<span id=\"pdbn\" style=\"color: #b2dfee;\">toString<\/span><span id=\"u9vi\" style=\"color: #00ffff;\">(<\/span><span id=\"s68i\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"v-gl\" style=\"color: #00cd00;\">  50:<\/span>    <span id=\"lkf:\" style=\"color: #00ffff;\">}<\/span>        \r\n<span id=\"gi_m\" style=\"color: #ffffcc;\">  51:<\/span><span id=\"exqe\" style=\"color: #00ffff;\">}<\/span><\/span><\/span><\/pre>\n<p><span style=\"font-size: small;\">Almost everything about this class is explained in the aforesaid <a title=\"article\" href=\"http:\/\/www.beanizer.org\/site\/index.php\/en\/Articles\/SugarCRM-integration-with-custom-Java-applications.html\" target=\"_blank\">article<\/a> . What is interesting now is the &#8220;searchAccountByNumber&#8221; method. We pass it a phone number to look for in SugarCRM. After obtaining a SOAP session id from SugarCRM, using the credential defined in the constructor, on line 29-31 we query the &#8220;Accounts&#8221; table of sugar for a record whose &#8220;phone_office&#8221; field matches\u00a0 the phone number requested. In the query we ask for 3 fields to be returned(&#8220;name&#8221;,&#8221;phone_fax&#8221; and &#8220;website&#8221;), and a maximum of one record. We then build a Hashtable with the eventually returned values (line 32-37) and then logout from our soap session. Nothing more than what already seen in the cited article. Note that the &#8220;import&#8221; statement on line 3 depends on how you built the SugarCRM soap classes (again, see the relative <a title=\"article\" href=\"http:\/\/www.beanizer.org\/site\/index.php\/en\/Articles\/SugarCRM-integration-with-custom-Java-applications.html\" target=\"_blank\">article<\/a>).<br \/>\nNow we have all the pieces of our puzzle and need to merge them together. So come back to our &#8220;PhoneNumberResolver&#8221; class.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4 align=\"center\">Assembling the puzzle<\/h4>\n<p><span style=\"font-size: small;\">What we need to do know is to modify our &#8220;PhoneNumberResolver&#8221; class so that when a &#8220;dial&#8221; event gets intercepted, we can pass the callerId to the &#8220;AccountFinder&#8221; class and get back the data extracted from SugarCRM.\u00a0 The code first:<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre><span id=\"mp4_\"><span id=\"p69h\" style=\"color: #f5deb3;\"><span id=\"a63y\" style=\"color: #ffffcc;\">   1:<\/span><span id=\"u23b\" style=\"color: #00cc99;\">import<\/span> java.io.IOException;\r\n<span id=\"xzvt\" style=\"color: #ffffcc;\">   2:<\/span><span id=\"nqpu\" style=\"color: #00cc99;\">import<\/span> java.util.Date;\r\n<span id=\"e38y\" style=\"color: #ffffcc;\">   3:<\/span><span id=\"ecnp\" style=\"color: #00cc99;\">import<\/span> java.util.Enumeration;\r\n<span id=\"poi2\" style=\"color: #ffffcc;\">   4:<\/span><span id=\"oe.2\" style=\"color: #00cc99;\">import<\/span> java.util.Hashtable;\r\n<span id=\"i-7b\" style=\"color: #00cd00;\">   5:<\/span><span id=\"sjnv\" style=\"color: #00cc99;\">import<\/span> javax.swing.JFrame;\r\n<span id=\"tem7\" style=\"color: #ffffcc;\">   6:<\/span><span id=\"bu9e\" style=\"color: #00cc99;\">import<\/span> javax.swing.JLabel;\r\n<span id=\"h3ev\" style=\"color: #ffffcc;\">   7:<\/span><span id=\"b4wh\" style=\"color: #00cc99;\">import<\/span> javax.swing.JOptionPane;\r\n<span id=\"bst8\" style=\"color: #ffffcc;\">   8:<\/span><span id=\"dd7i\" style=\"color: #00cc99;\">import<\/span> org.asteriskjava.manager.*;\r\n<span id=\"jc3g\" style=\"color: #ffffcc;\">   9:<\/span><span id=\"hdu6\" style=\"color: #00cc99;\">import<\/span> org.asteriskjava.manager.event.*;\r\n<span id=\"von4\" style=\"color: #00cd00;\">  10:<\/span>\r\n<span id=\"ob44\" style=\"color: #ffffcc;\">  11:<\/span><span id=\"oa4p\" style=\"color: #ffa500;\">public<\/span> <span id=\"wm2u\" style=\"color: #cc6600;\">class<\/span> PhoneNumberResolver <span id=\"hi9w\" style=\"color: #ffa500;\">implements<\/span> ManagerEventListener<span id=\"jjai\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"zb76\" style=\"color: #ffffcc;\">  12:<\/span>    <span id=\"gb53\" style=\"color: #ffa500;\">private<\/span> ManagerConnection managerConnection;\r\n<span id=\"uj:3\" style=\"color: #ffffcc;\">  13:<\/span>    <span id=\"k.oc\" style=\"color: #ffa500;\">private<\/span> AccountFinder af;\r\n<span id=\"exsl\" style=\"color: #ffffcc;\">  14:<\/span>    \r\n<span id=\"pm4g\" style=\"color: #00cd00;\">  15:<\/span>    <span id=\"n1b-\" style=\"color: #ffa500;\">public<\/span> <span id=\"tbdu\" style=\"color: #b2dfee;\">PhoneNumberResolver<\/span><span id=\"mrp4\" style=\"color: #00ffff;\">(<\/span><span id=\"niw:\" style=\"color: #00ffff;\">)<\/span><span id=\"z18d\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"oyq6\" style=\"color: #ffffcc;\">  16:<\/span>        ManagerConnectionFactory factory <span id=\"g6cb\" style=\"color: #00ffff;\">=<\/span> <span id=\"x7s6\" style=\"color: #ffa500;\">new<\/span> <span id=\"vmcs\" style=\"color: #b2dfee;\">ManagerConnectionFactory<\/span><span id=\"lifb\" style=\"color: #00ffff;\">(<\/span>\r\n<span id=\"ubu1\" style=\"color: #ffffcc;\">  17:<\/span>                                <span id=\"cphk\" style=\"color: #00cd00;\">\"<\/span><span id=\"rv9.\" style=\"color: #00cd00;\">asterisk_server_url<\/span><span id=\"f:d8\" style=\"color: #00cd00;\">\"<\/span>, <span id=\"r3e_\" style=\"color: #00cd00;\">\"<\/span><span id=\"wk6i\" style=\"color: #00cd00;\">user<\/span><span id=\"ff.6\" style=\"color: #00cd00;\">\"<\/span>, <span id=\"b8jk\" style=\"color: #00cd00;\">\"<\/span><span id=\"mo4b\" style=\"color: #00cd00;\">password<\/span><span id=\"uz0h\" style=\"color: #00cd00;\">\"<\/span><span id=\"az33\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"rxss\" style=\"color: #ffffcc;\">  18:<\/span>        <span id=\"cjll\" style=\"color: #ffff66;\">this<\/span>.managerConnection <span id=\"ipaf\" style=\"color: #00ffff;\">=<\/span> factory.<span id=\"zv4i\" style=\"color: #b2dfee;\">createManagerConnection<\/span><span id=\"sg-:\" style=\"color: #00ffff;\">(<\/span><span id=\"s4az\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"js5e\" style=\"color: #ffffcc;\">  19:<\/span>        af<span id=\"utju\" style=\"color: #00ffff;\">=<\/span><span id=\"d7tr\" style=\"color: #ffa500;\">new<\/span> <span id=\"jbkn\" style=\"color: #b2dfee;\">AccountFinder<\/span><span id=\"k3.4\" style=\"color: #00ffff;\">(<\/span><span id=\"l:2-\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"v3_9\" style=\"color: #00cd00;\">  20:<\/span>    <span id=\"ohr3\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"ye62\" style=\"color: #ffffcc;\">  21:<\/span>    <span id=\"bgxz\" style=\"color: #ffa500;\">public<\/span> <span id=\"a7zi\" style=\"color: #cc6600;\">void<\/span> <span id=\"qngk\" style=\"color: #b2dfee;\">run<\/span><span id=\"ycih\" style=\"color: #00ffff;\">(<\/span><span id=\"m4:4\" style=\"color: #00ffff;\">)<\/span> <span id=\"newz\" style=\"color: #ffa500;\">throws<\/span> IOException, AuthenticationFailedException,TimeoutException,\r\n                                                                       InterruptedException, IllegalStateException\r\n<span id=\"w17y\" style=\"color: #ffffcc;\">  22:<\/span>    <span id=\"aygn\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"t4nr\" style=\"color: #ffffcc;\">  23:<\/span>        managerConnection.<span id=\"jegv\" style=\"color: #b2dfee;\">addEventListener<\/span><span id=\"m45k\" style=\"color: #00ffff;\">(<\/span><span id=\"b1.n\" style=\"color: #ffff66;\">this<\/span><span id=\"k8rf\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"feaz\" style=\"color: #ffffcc;\">  24:<\/span>        managerConnection.<span id=\"w.gb\" style=\"color: #b2dfee;\">login<\/span><span id=\"zxns\" style=\"color: #00ffff;\">(<\/span><span id=\"c2y2\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"d13b\" style=\"color: #00cd00;\">  25:<\/span>        <span id=\"ii4l\" style=\"color: #ffa500;\">while<\/span><span id=\"p2y9\" style=\"color: #00ffff;\">(<\/span><span id=\"lzub\" style=\"color: #ffff66;\">true<\/span><span id=\"ym-5\" style=\"color: #00ffff;\">)<\/span>\r\n<span id=\"wrj1\" style=\"color: #ffffcc;\">  26:<\/span>            Thread.<span id=\"n-pt\" style=\"color: #b2dfee;\">sleep<\/span><span id=\"tz0t\" style=\"color: #00ffff;\">(<\/span><span id=\"op4e\" style=\"color: #cdcd00;\">60000<\/span><span id=\"j0w8\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"n2:j\" style=\"color: #ffffcc;\">  27:<\/span>    <span id=\"u.do\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"svlw\" style=\"color: #ffffcc;\">  28:<\/span>    <span id=\"vzkx\" style=\"color: #ffa500;\">public<\/span> <span id=\"pg0z\" style=\"color: #cc6600;\">void<\/span> <span id=\"zvcl\" style=\"color: #b2dfee;\">onManagerEvent<\/span><span id=\"y4rh\" style=\"color: #00ffff;\">(<\/span>ManagerEvent event<span id=\"w72b\" style=\"color: #00ffff;\">)<\/span> <span id=\"sv99\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"t3l_\" style=\"color: #ffffcc;\">  29:<\/span>        String event_name <span id=\"ghs8\" style=\"color: #00ffff;\">=<\/span> event.<span id=\"c-b4\" style=\"color: #b2dfee;\">getClass<\/span><span id=\"jw_q\" style=\"color: #00ffff;\">(<\/span><span id=\"dje5\" style=\"color: #00ffff;\">)<\/span>.<span id=\"k17l\" style=\"color: #b2dfee;\">getSimpleName<\/span><span id=\"g1x8\" style=\"color: #00ffff;\">(<\/span><span id=\"e97r\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"o:do\" style=\"color: #00cd00;\">  30:<\/span>        <span id=\"fs4l\" style=\"color: #ffa500;\">if<\/span><span id=\"w8lz\" style=\"color: #00ffff;\">(<\/span>event_name.<span id=\"t8w8\" style=\"color: #b2dfee;\">equals<\/span><span id=\"i4_9\" style=\"color: #00ffff;\">(<\/span><span id=\"o-ii\" style=\"color: #00cd00;\">\"<\/span><span id=\"n1_s\" style=\"color: #00cd00;\">DialEvent<\/span><span id=\"rk3q\" style=\"color: #00cd00;\">\"<\/span><span id=\"w4g0\" style=\"color: #00ffff;\">)<\/span><span id=\"exyh\" style=\"color: #00ffff;\">)<\/span><span id=\"j6o4\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"u4sc\" style=\"color: #ffffcc;\">  31:<\/span>            DialEvent e<span id=\"o-5b\" style=\"color: #00ffff;\">=<\/span><span id=\"ukg:\" style=\"color: #00ffff;\">(<\/span>DialEvent<span id=\"qs06\" style=\"color: #00ffff;\">)<\/span>event;\r\n<span id=\"ir:d\" style=\"color: #ffffcc;\">  32:<\/span>            System.out.<span id=\"zjgf\" style=\"color: #b2dfee;\">println<\/span><span id=\"omp3\" style=\"color: #00ffff;\">(<\/span>e.<span id=\"hzg_\" style=\"color: #b2dfee;\">getCallerId<\/span><span id=\"oi:y\" style=\"color: #00ffff;\">(<\/span><span id=\"a0_7\" style=\"color: #00ffff;\">)<\/span><span id=\"faed\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"xu6-\" style=\"color: #ffffcc;\">  33:<\/span>            Hashtable hash<span id=\"k_x4\" style=\"color: #00ffff;\">=<\/span>af.<span id=\"lpsm\" style=\"color: #b2dfee;\">searchAccountByNumber<\/span><span id=\"vgxs\" style=\"color: #00ffff;\">(<\/span>e.<span id=\"gcgv\" style=\"color: #b2dfee;\">getCallerId<\/span><span id=\"ft-8\" style=\"color: #00ffff;\">(<\/span><span id=\"n6ro\" style=\"color: #00ffff;\">)<\/span><span id=\"h8:5\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"rvhf\" style=\"color: #ffffcc;\">  34:<\/span>            <span id=\"ic.8\" style=\"color: #ffff66;\">this<\/span>.<span id=\"o9pz\" style=\"color: #b2dfee;\">showData<\/span><span id=\"exrn\" style=\"color: #00ffff;\">(<\/span>e.<span id=\"wfa4\" style=\"color: #b2dfee;\">getCallerId<\/span><span id=\"k:1_\" style=\"color: #00ffff;\">(<\/span><span id=\"dhga\" style=\"color: #00ffff;\">)<\/span>,hash<span id=\"g7.q\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"xuhv\" style=\"color: #00cd00;\">  35:<\/span>        <span id=\"u-qe\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"xjnw\" style=\"color: #ffffcc;\">  36:<\/span>    <span id=\"to6d\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"y0w4\" style=\"color: #ffffcc;\">  37:<\/span>    <span id=\"m_k:\" style=\"color: #ffa500;\">private<\/span> <span id=\"ls.q\" style=\"color: #cc6600;\">void<\/span> <span id=\"p3g4\" style=\"color: #b2dfee;\">showData<\/span><span id=\"p2:5\" style=\"color: #00ffff;\">(<\/span>String callerId,Hashtable hash<span id=\"lz8-\" style=\"color: #00ffff;\">)<\/span><span id=\"bq.:\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"h5:q\" style=\"color: #ffffcc;\">  38:<\/span>        String message<span id=\"rggi\" style=\"color: #00ffff;\">=<\/span><span id=\"vvri\" style=\"color: #00cd00;\">\"<\/span><span id=\"ujbp\" style=\"color: #00cd00;\">&lt;html&gt;&lt;font<\/span><span id=\"ii_4\" style=\"color: #00cd00;\"> <\/span><span id=\"i1hf\" style=\"color: #00cd00;\">color=green&gt;Time&lt;\/font&gt;<\/span><span id=\"wn-n\" style=\"color: #00cd00;\"> <\/span><span id=\"hdny\" style=\"color: #00cd00;\">\"<\/span> <span id=\"out.\" style=\"color: #00ffff;\">+<\/span>  <span id=\"tl_6\" style=\"color: #00ffff;\">(<\/span><span id=\"lc:4\" style=\"color: #ffa500;\">new<\/span> <span id=\"yvta\" style=\"color: #b2dfee;\">Date<\/span><span id=\"cu1j\" style=\"color: #00ffff;\">(<\/span><span id=\"trm1\" style=\"color: #00ffff;\">)<\/span><span id=\"uah.\" style=\"color: #00ffff;\">)<\/span>.<span id=\"xar2\" style=\"color: #b2dfee;\">toString<\/span><span id=\"qs1x\" style=\"color: #00ffff;\">(<\/span><span id=\"dp9-\" style=\"color: #00ffff;\">)<\/span> <span id=\"gt_d\" style=\"color: #00ffff;\">+<\/span> <span id=\"ak:y\" style=\"color: #00cd00;\">\"<\/span><span id=\"lzjy\" style=\"color: #00cd00;\">&lt;br&gt;<\/span><span id=\"yddd\" style=\"color: #00cd00;\">\"<\/span>;\r\n<span id=\"j4wy\" style=\"color: #ffffcc;\">  39:<\/span>        <span id=\"zej6\" style=\"color: #ffa500;\">if<\/span><span id=\"ophg\" style=\"color: #00ffff;\">(<\/span>hash.<span id=\"pho7\" style=\"color: #b2dfee;\">isEmpty<\/span><span id=\"suwe\" style=\"color: #00ffff;\">(<\/span><span id=\"tznx\" style=\"color: #00ffff;\">)<\/span><span id=\"f3ii\" style=\"color: #00ffff;\">)<\/span><span id=\"cr0g\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"ii2h\" style=\"color: #00cd00;\">  40:<\/span>            message <span id=\"s30o\" style=\"color: #00ffff;\">+<\/span><span id=\"vwag\" style=\"color: #00ffff;\">=<\/span> <span id=\"nv4z\" style=\"color: #00cd00;\">\"<\/span><span id=\"uazf\" style=\"color: #00cd00;\">&lt;font<\/span><span id=\"lj_5\" style=\"color: #00cd00;\"> <\/span><span id=\"grhi\" style=\"color: #00cd00;\">color=red&gt;Phone<\/span><span id=\"hrqa\" style=\"color: #00cd00;\"> <\/span><span id=\"bli9\" style=\"color: #00cd00;\">number<\/span><span id=\"tpn2\" style=\"color: #00cd00;\"> <\/span><span id=\"qg0n\" style=\"color: #00cd00;\">not<\/span><span id=\"m5jz\" style=\"color: #00cd00;\"> <\/span><span id=\"etlh\" style=\"color: #00cd00;\">found&lt;\/font&gt;<\/span><span id=\"j_so\" style=\"color: #00cd00;\">\"<\/span>;\r\n<span id=\"qs7o\" style=\"color: #ffffcc;\">  41:<\/span>        <span id=\"xcuo\" style=\"color: #00ffff;\">}<\/span> <span id=\"n7.6\" style=\"color: #ffa500;\">else<\/span><span id=\"qqlf\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"a:2l\" style=\"color: #ffffcc;\">  42:<\/span>            message <span id=\"jfzq\" style=\"color: #00ffff;\">+<\/span><span id=\"t6jn\" style=\"color: #00ffff;\">=<\/span><span id=\"qxr8\" style=\"color: #00cd00;\">\"<\/span><span id=\"j7jx\" style=\"color: #00cd00;\">&lt;font<\/span><span id=\"mb_s\" style=\"color: #00cd00;\"> <\/span><span id=\"m5op\" style=\"color: #00cd00;\">color=green&gt;Caller<\/span><span id=\"b-:a\" style=\"color: #00cd00;\"> <\/span><span id=\"f63l\" style=\"color: #00cd00;\">number&lt;\/font&gt;<\/span><span id=\"mj9h\" style=\"color: #00cd00;\"> <\/span><span id=\"jehn\" style=\"color: #00cd00;\">\"<\/span> <span id=\"yu6p\" style=\"color: #00ffff;\">+<\/span> callerId <span id=\"c2w.\" style=\"color: #00ffff;\">+<\/span> <span id=\"g0do\" style=\"color: #00cd00;\">\"<\/span><span id=\"ehjl\" style=\"color: #00cd00;\">&lt;br&gt;<\/span><span id=\"deob\" style=\"color: #00cd00;\">\"<\/span>;\r\n<span id=\"xiax\" style=\"color: #ffffcc;\">  43:<\/span>            <span id=\"fezp\" style=\"color: #ffa500;\">for<\/span><span id=\"w58h\" style=\"color: #00ffff;\">(<\/span>Enumeration keys<span id=\"tjr0\" style=\"color: #00ffff;\">=<\/span>hash.<span id=\"lrru\" style=\"color: #b2dfee;\">keys<\/span><span id=\"ygpu\" style=\"color: #00ffff;\">(<\/span><span id=\"mvf0\" style=\"color: #00ffff;\">)<\/span>; keys.<span id=\"nk::\" style=\"color: #b2dfee;\">hasMoreElements<\/span><span id=\"pirw\" style=\"color: #00ffff;\">(<\/span><span id=\"kp_t\" style=\"color: #00ffff;\">)<\/span>;<span id=\"t4ox\" style=\"color: #00ffff;\">)<\/span><span id=\"mmmc\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"la1b\" style=\"color: #ffffcc;\">  44:<\/span>                String key<span id=\"skps\" style=\"color: #00ffff;\">=<\/span>keys.<span id=\"ek5n\" style=\"color: #b2dfee;\">nextElement<\/span><span id=\"m25f\" style=\"color: #00ffff;\">(<\/span><span id=\"w_xn\" style=\"color: #00ffff;\">)<\/span>.<span id=\"rouw\" style=\"color: #b2dfee;\">toString<\/span><span id=\"g91h\" style=\"color: #00ffff;\">(<\/span><span id=\"hjl6\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"v1mz\" style=\"color: #00cd00;\">  45:<\/span>                String value<span id=\"sc5f\" style=\"color: #00ffff;\">=<\/span>hash.<span id=\"i4w:\" style=\"color: #b2dfee;\">get<\/span><span id=\"d-cp\" style=\"color: #00ffff;\">(<\/span>key<span id=\"kcss\" style=\"color: #00ffff;\">)<\/span>.<span id=\"bgxe\" style=\"color: #b2dfee;\">toString<\/span><span id=\"nq45\" style=\"color: #00ffff;\">(<\/span><span id=\"fdxh\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"g4_s\" style=\"color: #ffffcc;\">  46:<\/span>                message <span id=\"r.x8\" style=\"color: #00ffff;\">+<\/span><span id=\"fykt\" style=\"color: #00ffff;\">=<\/span> <span id=\"xvo.\" style=\"color: #00cd00;\">\"<\/span><span id=\"j:vt\" style=\"color: #00cd00;\">&lt;font<\/span><span id=\"sswo\" style=\"color: #00cd00;\"> <\/span><span id=\"qaz.\" style=\"color: #00cd00;\">color=green&gt;<\/span><span id=\"wjj6\" style=\"color: #00cd00;\">\"<\/span> <span id=\"w:6.\" style=\"color: #00ffff;\">+<\/span> key <span id=\"pb3b\" style=\"color: #00ffff;\">+<\/span> <span id=\"pjjn\" style=\"color: #00cd00;\">\"<\/span><span id=\"wtf9\" style=\"color: #00cd00;\">:&lt;\/font&gt;<\/span><span id=\"r_6o\" style=\"color: #00cd00;\"> <\/span><span id=\"axt6\" style=\"color: #00cd00;\">\"<\/span> <span id=\"ktfa\" style=\"color: #00ffff;\">+<\/span> value <span id=\"l5z2\" style=\"color: #00ffff;\">+<\/span> <span id=\"sk8i\" style=\"color: #00cd00;\">\"<\/span><span id=\"y0jz\" style=\"color: #00cd00;\">&lt;br&gt;<\/span><span id=\"g3ph\" style=\"color: #00cd00;\">\"<\/span>;\r\n<span id=\"gyi_\" style=\"color: #ffffcc;\">  47:<\/span>\r\n<span id=\"u-7-\" style=\"color: #ffffcc;\">  48:<\/span>            <span id=\"j5.a\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"u2ck\" style=\"color: #ffffcc;\">  49:<\/span>        \r\n<span id=\"buz1\" style=\"color: #00cd00;\">  50:<\/span>        <span id=\"maac\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"wlhw\" style=\"color: #ffffcc;\">  51:<\/span>        message <span id=\"x_zb\" style=\"color: #00ffff;\">+<\/span><span id=\"zyhl\" style=\"color: #00ffff;\">=<\/span><span id=\"c08j\" style=\"color: #00cd00;\">\"<\/span><span id=\"kd-m\" style=\"color: #00cd00;\">&lt;\/html&gt;<\/span><span id=\"tja2\" style=\"color: #00cd00;\">\"<\/span>;\r\n<span id=\"x:el\" style=\"color: #ffffcc;\">  52:<\/span>        <span id=\"vpw5\" style=\"color: #ffa500;\">final<\/span> String finalMessage<span id=\"n-jc\" style=\"color: #00ffff;\">=<\/span>message;\r\n<span id=\"enqt\" style=\"color: #ffffcc;\">  53:<\/span>        Runnable run<span id=\"s-p1\" style=\"color: #00ffff;\">=<\/span><span id=\"j4.n\" style=\"color: #ffa500;\">new<\/span> <span id=\"cgnn\" style=\"color: #b2dfee;\">Runnable<\/span><span id=\"ngke\" style=\"color: #00ffff;\">(<\/span><span id=\"nwh2\" style=\"color: #00ffff;\">)<\/span><span id=\"lzqa\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"mots\" style=\"color: #ffffcc;\">  54:<\/span>            <span id=\"i1kl\" style=\"color: #ffa500;\">public<\/span> <span id=\"r2ov\" style=\"color: #cc6600;\">void<\/span> <span id=\"hm_i\" style=\"color: #b2dfee;\">run<\/span><span id=\"pkhf\" style=\"color: #00ffff;\">(<\/span><span id=\"vxcd\" style=\"color: #00ffff;\">)<\/span><span id=\"t94_\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"e:i9\" style=\"color: #00cd00;\">  55:<\/span>                JOptionPane.<span id=\"k5vp\" style=\"color: #b2dfee;\">showMessageDialog<\/span><span id=\"bc.b\" style=\"color: #00ffff;\">(<\/span><span id=\"lnro\" style=\"color: #00ffff;\">(<\/span><span id=\"m7vc\" style=\"color: #ffa500;\">new<\/span> <span id=\"v4zq\" style=\"color: #b2dfee;\">JFrame<\/span><span id=\"j0jz\" style=\"color: #00ffff;\">(<\/span><span id=\"e7xw\" style=\"color: #00ffff;\">)<\/span><span id=\"osez\" style=\"color: #00ffff;\">)<\/span>,\r\n<span id=\"lqna\" style=\"color: #ffffcc;\">  56:<\/span>                            <span id=\"fce7\" style=\"color: #ffa500;\">new<\/span> <span id=\"wsez\" style=\"color: #b2dfee;\">JLabel<\/span><span id=\"b2t.\" style=\"color: #00ffff;\">(<\/span>finalMessage<span id=\"os4q\" style=\"color: #00ffff;\">)<\/span>, \r\n<span id=\"n1ba\" style=\"color: #ffffcc;\">  57:<\/span>                            <span id=\"doju\" style=\"color: #00cd00;\">\"<\/span><span id=\"yevu\" style=\"color: #00cd00;\">New<\/span><span id=\"he4y\" style=\"color: #00cd00;\"> <\/span><span id=\"g-m:\" style=\"color: #00cd00;\">incoming<\/span><span id=\"u4om\" style=\"color: #00cd00;\"> <\/span><span id=\"a8aj\" style=\"color: #00cd00;\">call<\/span><span id=\"hzlr\" style=\"color: #00cd00;\">\"<\/span>,JOptionPane.INFORMATION_MESSAGE<span id=\"i9vu\" style=\"color: #00ffff;\">)<\/span>;                \r\n<span id=\"ffby\" style=\"color: #ffffcc;\">  58:<\/span>            <span id=\"yeno\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"rjmc\" style=\"color: #ffffcc;\">  59:<\/span>        <span id=\"qsrf\" style=\"color: #00ffff;\">}<\/span>;\r\n<span id=\"t786\" style=\"color: #00cd00;\">  60:<\/span>        <span id=\"ktw5\" style=\"color: #00ffff;\">(<\/span><span id=\"y25w\" style=\"color: #ffa500;\">new<\/span> <span id=\"x9:o\" style=\"color: #b2dfee;\">Thread<\/span><span id=\"s:b4\" style=\"color: #00ffff;\">(<\/span>run<span id=\"bqdw\" style=\"color: #00ffff;\">)<\/span><span id=\"t5qh\" style=\"color: #00ffff;\">)<\/span>.<span id=\"witi\" style=\"color: #b2dfee;\">start<\/span><span id=\"xxnk\" style=\"color: #00ffff;\">(<\/span><span id=\"no4h\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"l3w2\" style=\"color: #ffffcc;\">  61:<\/span>    <span id=\"mg6s\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"jh7g\" style=\"color: #ffffcc;\">  62:<\/span>    <span id=\"i2.d\" style=\"color: #ffa500;\">public<\/span> <span id=\"h5k6\" style=\"color: #ffa500;\">static<\/span> <span id=\"w1ok\" style=\"color: #cc6600;\">void<\/span> <span id=\"km_g\" style=\"color: #b2dfee;\">main<\/span><span id=\"j5r2\" style=\"color: #00ffff;\">(<\/span>String[] args<span id=\"nnt8\" style=\"color: #00ffff;\">)<\/span> <span id=\"v7yq\" style=\"color: #ffa500;\">throws<\/span> Exception\r\n<span id=\"x78s\" style=\"color: #ffffcc;\">  63:<\/span>    <span id=\"noxl\" style=\"color: #00ffff;\">{<\/span>\r\n<span id=\"jpwm\" style=\"color: #ffffcc;\">  64:<\/span>        PhoneNumberResolver phoneNumberResolver <span id=\"pcuv\" style=\"color: #00ffff;\">=<\/span> <span id=\"nyl:\" style=\"color: #ffa500;\">new<\/span> <span id=\"pqqr\" style=\"color: #b2dfee;\">PhoneNumberResolver<\/span><span id=\"q5fd\" style=\"color: #00ffff;\">(<\/span><span id=\"qu9j\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"plef\" style=\"color: #00cd00;\">  65:<\/span>        phoneNumberResolver.<span id=\"nbn0\" style=\"color: #b2dfee;\">run<\/span><span id=\"ox1g\" style=\"color: #00ffff;\">(<\/span><span id=\"y8s6\" style=\"color: #00ffff;\">)<\/span>;\r\n<span id=\"thhz\" style=\"color: #ffffcc;\">  66:<\/span>    <span id=\"y55z\" style=\"color: #00ffff;\">}<\/span>\r\n<span id=\"o-bf\" style=\"color: #ffffcc;\">  67:<\/span><span id=\"vgtf\" style=\"color: #00ffff;\">}<\/span><\/span><\/span><\/pre>\n<p><span style=\"font-size: small;\"><br \/>\nLet&#8217;s see what&#8217;s different from the initial version. In the constructor we instantiate an &#8220;AccountFinder&#8221; object (line 19), that we use on line 33. There we pass the caller id received from the &#8220;Dial&#8221; event to the method &#8220;searchAccountByNumber&#8221; of our &#8220;AccountFinder&#8221; object, and we get back an Hashtable containing data about the eventually found account on SugarCRM. Then we simply pass the caller id and the hashtable to the new method &#8220;showData&#8221;, which just composes an html JLabel with the data and shows it in a JDialog.<br \/>\nYou will note a delay between the time your ip phone starts ringing and the JDialog gets shown. The delay is due to the time involved in querying SugarCRM. You can optimize this in several ways, i.e. logging in to SugarCRM SOAP once and reuse the valid session id over and over(in this case you need to take care of session expiration time), or showing a dialog when the &#8220;dial&#8221; event is received and then just updating it when you get back the information from SugarCRM.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4 align=\"center\">Conclusions<\/h4>\n<p><span style=\"font-size: small;\">Integration capabilities between Asterisk and SugarCRM are virtually endless and really interesting. In future articles we&#8217;ll explore new paths on this subject. Don&#8217;t hesitate to ask me if you are interested in specific topics regarding integration between the two platforms and I&#8217;ll do my best to write articles about them.<\/span><\/p>\n<p>Hasta la proxima.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SugarCRM and Asterisk integration in Java &#8211; First steps Introduction For those of you who know this site the present article won&#8217;t be a surprise, but a natural and obvious step following some of my previous writings. Particularly, this is a point of convergence of two of them: SugarCRM integration with custom Java applications A ..<\/p>\n<div class=\"clear-fix\"><\/div>\n<p><a href=\"http:\/\/symbioticindia.in\/docu\/2016\/05\/06\/sugarcrm-and-asterisk-integration-in-java-first-steps\/\" title=\"read more...\">Read more<\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,2],"tags":[],"class_list":["post-21","post","type-post","status-publish","format-standard","hentry","category-asterisk","category-sugarcrm"],"_links":{"self":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":2,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":23,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/posts\/21\/revisions\/23"}],"wp:attachment":[{"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/symbioticindia.in\/docu\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}