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

Revision 1164, 13.1 KB checked in by alexandrecorreia, 15 years ago (diff)

Ticket #571 - Somente criando os *.jars( applet.jar, filetransfer.jar e xhtml.jar )

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