source: trunk/jabberit_messenger/java_source/src/nu/fw/jeti/applet/Jeti.java @ 1001

Revision 1001, 12.6 KB checked in by alexandrecorreia, 15 years ago (diff)

Ticket #552 - Inclusão do projeto Java referente ao applet do módulo.

Line 
1package nu.fw.jeti.applet;
2
3import java.awt.BorderLayout;
4import java.awt.Color;
5import java.net.MalformedURLException;
6import java.net.URL;
7import java.text.MessageFormat;
8import java.util.LinkedList;
9import java.util.List;
10import java.util.Map;
11
12import javax.swing.JApplet;
13import javax.swing.JLabel;
14import javax.swing.JPanel;
15import javax.swing.SwingUtilities;
16
17import nu.fw.jeti.backend.LoginInfo;
18import nu.fw.jeti.backend.Start;
19import nu.fw.jeti.events.StatusChangeListener;
20import nu.fw.jeti.jabber.Backend;
21import nu.fw.jeti.jabber.JID;
22import nu.fw.jeti.jabber.UnknownJIDStatus;
23import nu.fw.jeti.jabber.elements.IQPrivate;
24import nu.fw.jeti.jabber.elements.InfoQuery;
25import nu.fw.jeti.jabber.elements.InfoQueryBuilder;
26import nu.fw.jeti.jabber.elements.Presence;
27import nu.fw.jeti.jabber.elements.RosterBuilder;
28import nu.fw.jeti.jabber.elements.RosterItemBuilder;
29import nu.fw.jeti.ui.AddContact;
30import nu.fw.jeti.ui.JIDInput;
31
32import nu.fw.jeti.ui.StatusButton;
33
34import nu.fw.jeti.util.I18N;
35import nu.fw.jeti.util.Popups;
36import nu.fw.jeti.util.Preferences;
37
38import netscape.javascript.JSObject;
39
40/*
41 *      @author E.S. de Boer
42 *      Jeti, a Java Jabber client, Copyright (C) 2003 E.S. de Boer 
43 *
44 *  This program is free software; you can redistribute it and/or modify
45 *  it under the terms of the GNU General Public License as published by
46 *  the Free Software Foundation; either version 2 of the License, or
47 *  (at your option) any later version.
48 *
49 *  This program is distributed in the hope that it will be useful,
50 *      but WITHOUT ANY WARRANTY; without even the implied warranty of
51 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
52 *      GNU General Public License for more details.
53 *
54 *  You should have received a copy of the GNU General Public License
55 *  along with this program; if not, write to the Free Software
56 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
57 *
58 *      For questions, comments etc,
59 *      use the website at http://jeti.jabberstudio.org
60 *  or jabber/mail me at jeti@jabber.org
61 *
62 *      Created on 14-nov-2003
63 */
64
65public class Jeti extends JApplet
66{
67        private Start start;
68        public static JLabel from;
69        private static Jeti applet;
70        private URL exitURL;
71        private static String groupchatRoom;
72        private static String groupchatServer;
73        public static LoginInfo loginInfo;
74        private Backend backend;
75        private boolean started = false;
76        private SecureMethodRunner secureMethodInvoker;
77        public static String SERVEREXPRESSO;
78        public static String NAMECOMPANY;
79        public static String USEHTTPS;
80        public static String CNNAME;
81        public static JSObject WINDOWAPPLET;
82        public static List GROUPSUSER;
83        public static String SERVERJABBER;
84        /**
85         * @Author      : Alexandre Correia - alexandrecorreia@celepar.pr.gov.br
86         * @date        : 10/06/2009
87         * @Brief       : A variavel DEBUG_APPLET_VIEWER = true, para usar o appletviewer
88         */
89        public static boolean DEBUG_APPLET_VIEWER = false;
90       
91        public void init()
92        {
93                applet = this;
94
95                Thread t = new Thread()
96                {
97                        public void run()
98                        {
99                                String server = new String(applet.getParameter("SERVER"));
100                                String portText = new String(applet.getParameter("PORT"));
101                                boolean ssl = Boolean.valueOf(applet.getParameter("SSL")).booleanValue();
102                                String user = new String(applet.getParameter("USER"));
103                                String password = new String(applet.getParameter("PASSWORD"));
104                                String resource = new String(applet.getParameter("RESOURCE"));
105                                String host = new String(applet.getParameter("HOST"));
106                                String useJavaProxy = new String(applet.getParameter("USEPROXY").toUpperCase());
107                                String serverExpresso = new String(applet.getParameter("EXPRESSO"));
108                                String useHttps = new String(applet.getParameter("USEHTTPS"));
109                                String nameCompany = new String(applet.getParameter("NAMECOMPANY"));
110                                String cnName = new String(applet.getParameter("CNNAME"));
111                               
112                                /**
113                                 * @Author : Alexandre Correia - alexandrecorreia@celepar.pr.gov.br
114                                 * @Date : 20/10/2008
115                                 * @Description : - Nome Servidor IM-Jabber para Constant SERVERJABBER
116                                 *                                - Nome da Maquina Expresso para Constant SERVEREXPRESSO
117                                 *                                - Nome da Empresa para Constant NAMECOMPANY
118                                 *                                - Informa qual o tipo de protocolo a ser usado http ou https.
119                                 *                                - Passa ao java o cn do ldap do servidor expresso.                                             
120                                 */
121                               
122                                SERVERJABBER = server; 
123                                SERVEREXPRESSO = serverExpresso;
124                                NAMECOMPANY = nameCompany;
125                                USEHTTPS = useHttps;
126                                CNNAME = cnName;
127                               
128                                groupchatRoom = getParameter("GROUPCHATROOM");
129                                groupchatServer = getParameter("GROUPCHATSERVER");
130                               
131                                try
132                                {
133                     exitURL = new URL(getDocumentBase(),getParameter("EXITPAGE"));
134                                }
135                                catch (MalformedURLException e){}
136                               
137                                if( server !=null || resource != null || portText !=null )
138                                {
139                                        int port = Integer.parseInt(portText);
140                                       
141                                        if( useJavaProxy.equals("TRUE"))
142                                                loginInfo = new LoginInfo(server,host,user,password,resource,port,ssl,0);
143                                        else
144                                                loginInfo = new LoginInfo(server,host,user,password,resource,port,ssl,0,false);
145                                }
146                               
147                                Start.programURL = getCodeBase();
148                                Start.applet = true;
149                                final JPanel panel = new JPanel(new BorderLayout());
150                                start = new Start(getCodeBase().toString(),panel);
151                               
152                                // Reinit languages incase they changed
153                                I18N.init();
154
155                                backend = start.getBackend();
156                                backend.getMain().translate();
157                               
158                                if( loginInfo != null && loginInfo.getPassword() != null)
159                                {
160                                        backend.autoLogin(loginInfo,10);
161
162                                        secureMethodInvoker = new SecureMethodRunner(backend);
163                                        secureMethodInvoker.start();
164                                       
165                                        backend.addExtensionHandler("jeti:prefs",new PreferencesHandler());
166                                        try
167                                        {
168                                                backend.addListener(StatusChangeListener.class,new StatusChangeListener()
169                                                {
170                                                        public void connectionChanged(boolean online)
171                                                        {
172                                                                if( online)
173                                                                {
174                                                                        backend.send(new InfoQuery("get",new IQPrivate(new JetiPrivatePreferencesExtension())));
175                                                                        String chatTO = getParameter("CHATTO");
176                                                                        if(chatTO!=null && chatTO.length()>0)
177                                                                {
178                                                                        if(Boolean.valueOf(getParameter("SHOWCHATTOASMAIN")).booleanValue())
179                                                                        {
180                                                                                setContentPane(backend.getMain().createChatPanel(new UnknownJIDStatus(JID.jidFromString(chatTO))));
181                                                                                validate();
182                                                                        }
183                                                                        else backend.getMain().startChat(JID.jidFromString(chatTO));
184                                                                        }
185                                                                }
186                                                        }
187                                                        public void ownPresenceChanged(int show, String status) {}
188                                                        public void exit(){}
189                                                });
190                                        }
191                                        catch(NoClassDefFoundError e)
192                                        {       
193                                                e.printStackTrace();
194                                        }
195                                       
196                                        new Popups(Jeti.this);
197                                        SwingUtilities.invokeLater(new Runnable()
198                                        {
199                                                public void run()
200                                                {
201                                                        setContentPane(panel);
202                                                        validate();
203                                                }
204                                        });
205                                       
206                                        started = true;
207                                }else
208                                        started = false;
209                        }
210                };
211               
212                t.start();
213                splash();
214               
215                if ( !DEBUG_APPLET_VIEWER )
216                {       
217                        JSObject winApplet = JSObject.getWindow(this); 
218                        WINDOWAPPLET = winApplet;
219                }
220        }
221                       
222        private void splash()
223        {
224                /**
225                 * Splash - Inicializador -
226                 * Modificado by Alexandre Correia - alexandrecorreia@celepar.pr.gov.br
227                 */
228               
229       JLabel label = new JLabel(  "<html>" +
230                                                                   "<span style='margin-left:10px;font:20pt Verdana,Arial,serif'>Expresso IM </span>" +
231                                                                   "<br/>" +
232                                                                   "<span style='font:9pt Verdana,Arial,serif'> Jeti - http://www.jeti-im.org </span></html>",
233                                                                   JLabel.CENTER );
234       
235       label.setBackground(new Color(255,255,255));
236       getContentPane().setBackground(new Color(255,255,255));
237       getContentPane().add(label,BorderLayout.CENTER);
238       
239       JPanel panel = new JPanel();
240       panel.setBackground(new Color(255,255,255));
241       from = new JLabel(NAMECOMPANY, JLabel.CENTER);
242       from.setBackground(new Color(255,255,255));
243       from.setFont(new java.awt.Font("Serif,Verdana,Arial",1,10));
244       panel.add(from);
245       getContentPane().add(panel,BorderLayout.SOUTH);
246        }
247       
248        public String getGroupsToExpresso()
249        {
250                String[] Groups = applet.backend.getAllGroups();
251                String groups = "";
252               
253                for(int i = 0 ; i < Groups.length; i++ )
254                        groups += Groups[i] + ";";
255               
256               
257                return groups.toString();
258        }
259       
260        public void changeStatusfromExpresso(int status, String msgStatus)
261        {
262                switch (status)
263        {
264                    case Presence.AVAILABLE:     
265                        StatusButton.changeStatusExpresso(Presence.AVAILABLE, msgStatus);
266                        break;
267                    case Presence.FREE_FOR_CHAT:
268                        StatusButton.changeStatusExpresso(Presence.FREE_FOR_CHAT, msgStatus);
269                        break;
270                    case Presence.AWAY:
271                        StatusButton.changeStatusExpresso(Presence.AWAY, msgStatus);
272                        break;
273                    case Presence.XA:           
274                        StatusButton.changeStatusExpresso(Presence.XA, msgStatus);
275                        break;
276                    case Presence.DND:           
277                        StatusButton.changeStatusExpresso(Presence.DND, msgStatus);
278                        break;
279                    case Presence.UNAVAILABLE:   
280                        StatusButton.changeStatusExpresso(Presence.UNAVAILABLE, msgStatus);
281                        break;
282                    case Presence.INVISIBLE:     
283                        StatusButton.changeStatusExpresso(Presence.INVISIBLE, msgStatus);
284                        break;
285        }
286        }
287       
288        public static void showURL(String url)
289        {
290                try
291                {
292                        applet.getAppletContext().showDocument(new URL(url),"_blank");
293                }
294                catch (MalformedURLException e){/*wrong url*/}
295        }
296               
297        public void destroy()
298        {
299                try
300                {
301                        if( secureMethodInvoker != null )
302                                secureMethodInvoker.stopRunning();
303                        start.close();
304                }
305                catch (Exception e)
306                {
307                        //catch all exceptions else jvm hangs
308                        e.printStackTrace();
309                }
310        }
311               
312        public static void exit()
313        {
314                applet.getAppletContext().showDocument(applet.exitURL);
315        }
316       
317        public boolean isReady()
318        {
319                System.out.println("ready " + started);
320                return started;
321        }
322       
323        public boolean isLoggedIn()
324        {
325                if( !started )
326                        return false;
327                return backend.isLoggedIn();
328        }
329       
330        public void openChat(String jid)
331        {
332                try
333                {
334                        JID j = JID.checkedJIDFromString(jid);
335                        secureMethodInvoker.addData(new Object[]{"openChat",j});
336                }
337                catch (InstantiationException e)
338                {
339                        e.printStackTrace();
340                }
341
342        }
343       
344        public void addContact(String jid, String name, String group)
345        {
346                /**
347                 * @Author(s) : Alexandre Correia - alexandrecorreia@celepar.pr.gov.br
348                 * @Date : 24/04/2009
349                 * @Brief : Adiciona novos contatos e ja pede autorizacao.
350                 */
351                try
352                {
353                        JID Jid = JID.checkedJIDFromString(jid);
354                        backend.send(new Presence(Jid, "subscribe"));
355                        RosterBuilder rb = new RosterBuilder();
356                        RosterItemBuilder rib = new RosterItemBuilder();
357                        rib.addGroup(group);
358                        rib.jid = Jid;
359                        rib.name = name;
360                        rib.ask = "subscribe";
361                        rib.subscription = "none";
362                        rb.addItem(rib.build());
363                        InfoQueryBuilder iqb = new InfoQueryBuilder();
364                        iqb.addExtension(rb.build());
365                        iqb.setType("set");
366                        backend.send(iqb.build());
367                }
368                catch(Exception error)
369                {
370                        error.printStackTrace();
371                }
372        }
373       
374        public void login(String username,String server,String password)
375        {
376                if( backend.isLoggedIn() )
377                {
378                        JID j = backend.getMyJID();
379                        if(j.getDomain().equals(server)&& j.getUser().equals(username))
380                        {
381                                return;
382                        }
383                }
384                secureMethodInvoker.addData(new Object[]{"login",username,server,password});
385        }
386       
387        public static Class getPlugin(String name)
388        {
389                try
390        {
391            return Class.forName("nu.fw.jeti.plugins."+name+".Plugin");
392                }
393        catch (ClassNotFoundException e)
394                {
395                        System.err.println(MessageFormat.format(I18N.gettext("main.error.{0}_plugin_not_found"), new Object[]{name}));
396                        return null;
397                }
398        }
399       
400        public static void getPrefPanel(String name,Map loadedPreferencePanels)
401        {
402                Class prefPanel = null;
403                try
404                {
405                        prefPanel = Class.forName("nu.fw.jeti.plugins."+name+".PrefPanel");
406                }
407                catch (ClassNotFoundException e)
408                {
409                        return;
410                }
411                loadedPreferencePanels.put(name,prefPanel);
412        }
413       
414        static class SecureMethodRunner extends Thread
415        {
416                private Backend backend;
417                private LinkedList queue = new LinkedList();
418                private volatile boolean isRunning=true;
419
420            SecureMethodRunner(Backend backend)
421                {
422                this.backend = backend;
423                }
424               
425            public void addData(Object method)
426            {
427                synchronized(queue)
428                        {
429                                queue.addLast(method);
430                                queue.notifyAll();
431                        }
432            }
433           
434            public void stopRunning()
435            {
436                isRunning = false;
437                        synchronized(queue){queue.notifyAll();}
438            }
439
440            public void run()
441                {
442                        Object[] method;
443                        while (isRunning)
444                        {
445                                synchronized (queue)
446                                {
447                                        if (queue.isEmpty())
448                                        {
449                                                try
450                                                {
451                                                        queue.wait();
452                                                }
453                                                catch (InterruptedException e)
454                                                {
455                                                        //bug when thrown? called when interrupted
456                                                        e.printStackTrace();
457                                                        return;
458                                                }
459                                                continue;
460                                        }
461                                        method = (Object[]) queue.removeFirst();
462                                }
463
464                                String m = (String)method[0];
465                               
466                                if( m.equals("openChat") )
467                                        backend.getMain().startChat((JID)method[1]);
468                        }
469                }
470        }
471}
472
473/*
474 * Overrides for emacs
475 * Local variables:
476 * tab-width: 4
477 * End:
478 */
Note: See TracBrowser for help on using the repository browser.