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

Revision 1064, 12.9 KB checked in by alexandrecorreia, 15 years ago (diff)

Ticket #474 - Arquivos modificados para a tradução do Applet.

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