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

Revision 1091, 13.0 KB checked in by alexandrecorreia, 15 years ago (diff)

Ticket #571 - Removido o arquivo rostericons.xml, usado pelo applet(Java).

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