You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by aa...@apache.org on 2012/07/08 14:00:38 UTC

svn commit: r1358723 - in /incubator/openmeetings/trunk/plugins/jitsi: ./ main/ main/java/ main/java/net/ main/java/net/java/ main/java/net/java/sip/ main/java/net/java/sip/communicator/ main/java/net/java/sip/communicator/plugin/ main/java/net/java/si...

Author: aaf
Date: Sun Jul  8 12:00:38 2012
New Revision: 1358723

URL: http://svn.apache.org/viewvc?rev=1358723&view=rev
Log:
initial commit of jitsi plug-in
Apache License

Added:
    incubator/openmeetings/trunk/plugins/jitsi/
    incubator/openmeetings/trunk/plugins/jitsi/main/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/EncryptionEngine.java
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigManager.java
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigPanel.java
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginActivator.java
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginMenuItem.java
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginSoapClient.java
    incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/openmeetingsplugin.manifest.mf

Added: incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/EncryptionEngine.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/EncryptionEngine.java?rev=1358723&view=auto
==============================================================================
--- incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/EncryptionEngine.java (added)
+++ incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/EncryptionEngine.java Sun Jul  8 12:00:38 2012
@@ -0,0 +1,106 @@
+package net.java.sip.communicator.plugin.openmeetings;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+import javax.crypto.Cipher;
+
+public class EncryptionEngine {
+	
+//	private static byte[] iv =
+//    { 0x0a, 0x01, 0x02, 0x03, 0x04, 0x0b, 0x0c, 0x0d };
+	
+	public static IvParameterSpec iv = new IvParameterSpec(new
+			byte[]{1,2,3,4,5,6,7,8});
+	
+	private static String xform = "DES/CBC/PKCS5Padding";
+	//private static SecretKey key;
+	
+	public static SecretKey key = new SecretKeySpec(new
+			byte[]{1,1,1,1,1,1,1,1},"DES");
+	
+	private static SecretKey getKey() throws NoSuchAlgorithmException{
+		
+		KeyGenerator kg = KeyGenerator.getInstance("DES");
+	    kg.init(56); // 56 is the keysize. Fixed for DES
+//	    key = kg.generateKey();  
+//	    
+//	    SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
+//	    SecretKey key = kf.generateSecret(keySpec);
+	    
+	    return key;
+	}
+	
+	
+	public String encrypt(String message) throws Exception {
+        final MessageDigest md =
+        	MessageDigest.getInstance("md5");
+        final byte[] digestOfPassword = md.digest("HG58YZ3CR9"
+                        .getBytes("utf-8"));
+        final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
+        for (int j = 0, k = 16; j < 8;) {
+                keyBytes[k++] = keyBytes[j++];
+        }
+
+        final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
+        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
+        final Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
+        cipher.init(Cipher.ENCRYPT_MODE, key, iv);
+
+        final byte[] plainTextBytes = message.getBytes("utf-8");
+        final byte[] cipherText = cipher.doFinal(plainTextBytes);
+        
+        final String encodedCipherText = new sun.misc.BASE64Encoder()
+         .encode(cipherText);
+
+        return encodedCipherText;
+    }
+
+    public String decrypt( String messageStr ) throws Exception {
+    	byte[] message = new sun.misc.BASE64Decoder().decodeBuffer(messageStr);
+        final MessageDigest md = MessageDigest.getInstance("md5");
+        final byte[] digestOfPassword = md.digest("HG58YZ3CR9"
+                        .getBytes("utf-8"));
+        final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
+        for (int j = 0, k = 16; j < 8;) {
+                keyBytes[k++] = keyBytes[j++];
+        }
+
+        final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
+        final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
+        final Cipher decipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
+        decipher.init(Cipher.DECRYPT_MODE, key, iv);
+
+        // final byte[] encData = new
+        // sun.misc.BASE64Decoder().decodeBuffer(message);
+        final byte[] plainText = decipher.doFinal(message);
+
+        return new String(plainText, "UTF-8");
+    }
+	
+	
+//	public static String encrypt( String input  ) throws Exception {
+//			byte[] inpBytes = input.getBytes();
+//		    Cipher cipher = Cipher.getInstance(xform);
+//		   // IvParameterSpec ips = new IvParameterSpec(iv);
+//		    cipher.init(Cipher.ENCRYPT_MODE, key, iv);
+//		    String out = cipher.doFinal(inpBytes).toString();
+//		    return out;
+//		  }
+//	public static String decrypt(String input ) throws Exception {		
+//			byte[] inpBytes = input.getBytes();		
+//		    Cipher cipher = Cipher.getInstance(xform);
+//		   // IvParameterSpec ips = new IvParameterSpec(iv);
+//		    cipher.init(Cipher.DECRYPT_MODE, key, iv);
+//		    byte[] outb = cipher.doFinal(inpBytes);
+//		    String out = cipher.doFinal(inpBytes).toString(); 
+//		    return out;
+//		  }
+		  
+}

Added: incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigManager.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigManager.java?rev=1358723&view=auto
==============================================================================
--- incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigManager.java (added)
+++ incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigManager.java Sun Jul  8 12:00:38 2012
@@ -0,0 +1,237 @@
+package net.java.sip.communicator.plugin.openmeetings;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.*;
+
+import javax.xml.soap.SOAPException;
+
+import net.java.sip.communicator.impl.protocol.zeroconf.MessageZeroconfImpl;
+import net.java.sip.communicator.service.configuration.ConfigurationService;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+
+public class OpenmeetingsConfigManager {
+	
+	private String server;
+	private String login;
+	private String password;
+	private String stringForHash = "user:";
+	private String hash;
+	OpenmeetingsPluginSoapClient soapClient;
+	private static BundleContext bundleContext;
+	private static ConfigurationService configurationService = null;
+	
+	private static OpenmeetingsConfigManager instance;
+	private EncryptionEngine encryptionEngine;
+	
+	private OpenmeetingsConfigManager(){
+		
+		super();
+		soapClient = new OpenmeetingsPluginSoapClient();
+		encryptionEngine = new EncryptionEngine();
+	}
+
+	public static OpenmeetingsConfigManager getInstance(){
+		if( instance == null ){
+			instance = new OpenmeetingsConfigManager();
+		}
+		return instance;
+	}
+	
+	 private static String convertToHex(byte[] data) { 
+	        StringBuffer buf = new StringBuffer();
+	        for (int i = 0; i < data.length; i++) { 
+	            int halfbyte = (data[i] >>> 4) & 0x0F;
+	            int two_halfs = 0;
+	            do { 
+	                if ((0 <= halfbyte) && (halfbyte <= 9)) 
+	                    buf.append((char) ('0' + halfbyte));
+	                else 
+	                    buf.append((char) ('a' + (halfbyte - 10)));
+	                halfbyte = data[i] & 0x0F;
+	            } while(two_halfs++ < 1);
+	        } 
+	        return buf.toString();
+	 } 
+	 
+	private String getHash() throws Exception {
+		
+		if( hash != null )
+			return hash;
+		
+		byte[] bytesOfMessage = null;
+		try {
+			bytesOfMessage = stringForHash.getBytes("UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		MessageDigest md = MessageDigest.getInstance("MD5");
+		byte[] thedigest = md.digest(bytesOfMessage);
+		
+		final String hash = convertToHex(thedigest);
+		return hash;
+	}
+	private String getMd5Hash( String str ) throws Exception{
+		
+		byte[] bytesOfMessage = null;
+		try {
+			bytesOfMessage = str.getBytes("UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			System.out.println( e.getMessage() );			
+		}
+
+		MessageDigest md = MessageDigest.getInstance("MD5");
+		byte[] thedigest = md.digest(bytesOfMessage);
+		
+		final String hash = convertToHex(thedigest);
+		return hash;		
+	}
+	
+	public String getCreationUrl() throws Exception{
+		
+		final String url = "http://"+ getServer() + "/client/username="+getLogin()+"&password="+getPassword()+
+							"&hash=" + getHash();
+		System.out.println( "CREATION URL = " + url );
+		return url;
+	}
+	
+	public String createInvitationUrl( String hash ) throws Exception {
+		final String url = "http://"+ getServer() + "/openmeetings/?invitationHash=" + hash;
+		System.out.println( "INVITATION URL = " + url );
+		return url;		
+	}
+	
+	public String getInvitationUrl( String displayedName ) throws Exception{
+		
+		String server = getServer();
+		soapClient.setServer( server );
+		
+		String invitationHash = null; 						
+		
+		try {
+			invitationHash = soapClient.getInvitationHash( getLogin(), getPassword(),displayedName );
+		} catch (Exception e) {			
+			System.out.println( e.getMessage());			
+		}
+		
+		if( invitationHash.equals(null) )
+			return null;
+		
+		String invitationUrl = createInvitationUrl( invitationHash );
+		
+		return invitationUrl;		
+	}
+	public String sendUrl() throws Exception {
+				
+		String url = getCreationUrl();
+		HttpURLConnection omURLConnection = null;
+		
+		try {
+		    URL omURL = new URL("http://" + getServer() );
+		    omURLConnection = (HttpURLConnection) omURL.openConnection();
+		    omURLConnection.setRequestMethod("GET");
+		    omURLConnection.setDoInput(true);
+		    omURLConnection.setDoOutput( true );
+		    omURLConnection.connect();
+
+		} catch (MalformedURLException e) {     // new URL() failed
+			
+			return null;
+			
+		} catch (IOException e) {               // openConnection() failed
+			return null;
+		}				 
+		
+		//write to url		
+		OutputStreamWriter out = new OutputStreamWriter(
+                omURLConnection.getOutputStream());
+		out.write( url );
+		out.flush();
+			
+		out.close();
+        System.out.println("After flushing output stream. ");
+        System.out.println("Getting an input stream...");
+        InputStream is = omURLConnection.getInputStream();
+        // any response?
+        InputStreamReader isr = new InputStreamReader(is);
+        BufferedReader br = new BufferedReader(isr);
+        String line = null;
+        String response = null;
+        while ( (line = br.readLine()) != null)
+        {
+            System.out.println("line: " + line);
+            response += line;            
+        }
+		
+		out.close();
+		hash = null;
+		
+		return response;
+	}
+	
+	 public static ConfigurationService getConfigurationService()
+	    {
+	        if (configurationService == null)
+	        {
+	            ServiceReference confReference
+	                = bundleContext.getServiceReference(
+	                    ConfigurationService.class.getName());
+	            configurationService
+	                = (ConfigurationService) bundleContext
+	                                        .getService(confReference);
+	        }
+	        return configurationService;
+	    }
+	 
+	public void setSever( String server ){
+		this.server = server;		
+		getConfigurationService().setProperty( "plugin.openmeetings.SERVER", server);
+		           
+	}
+	public String getServer() {
+		String value = (String)getConfigurationService().getProperty( "plugin.openmeetings.SERVER" );
+		server = value;
+		return server;
+	}
+
+	public void setLogin( String login ){
+		this.login = login;		
+		getConfigurationService().setProperty( "plugin.openmeetings.LOGIN", login);
+	}
+	public String getLogin() {
+		String value = (String)getConfigurationService().getProperty( "plugin.openmeetings.LOGIN" );
+		login = value;
+		return login;
+	}
+
+	public void setPassword(String password) throws Exception {
+		this.password = password;
+		if( password == null )
+			return;
+		String encrypted = encryptionEngine.encrypt( password );
+		getConfigurationService().setProperty( "plugin.openmeetings.ENCRYPTED_PASSWORD", encrypted );
+	}
+	public String getPassword() throws Exception {
+		String value = (String)getConfigurationService().getProperty( "plugin.openmeetings.ENCRYPTED_PASSWORD" );
+		if( value == null )
+			return null;
+		password = encryptionEngine.decrypt( value );
+		return password;
+	}
+
+	public void setContext(BundleContext bc_) {
+		this.bundleContext = bc_;		
+	}
+}

Added: incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigPanel.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigPanel.java?rev=1358723&view=auto
==============================================================================
--- incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigPanel.java (added)
+++ incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsConfigPanel.java Sun Jul  8 12:00:38 2012
@@ -0,0 +1,160 @@
+package net.java.sip.communicator.plugin.openmeetings;
+
+import java.awt.*;
+import java.awt.event.*;
+
+import javax.swing.*;
+import net.java.sip.communicator.util.swing.*;
+
+import org.osgi.framework.*;
+
+
+public class OpenmeetingsConfigPanel
+        extends TransparentPanel
+{    
+   
+    /**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+	
+	private final JTextField teServer = new JTextField( 20 );
+	private final JTextField teLogin = new JTextField( 20 );
+	private final JPasswordField tePassword = new JPasswordField( 20 );
+	private final JTextField fakeField = new JTextField( 20 );
+	private final JButton btOk = new JButton(OpenmeetingsPluginActivator.resourceService.
+										getI18NString("plugin.openmeetings.BUTTON_OK"));
+    
+	private String server;
+    private String login;
+    private String password;
+    
+    public OpenmeetingsConfigPanel() throws Exception
+    {
+        super(new BorderLayout());
+
+        Dimension prefSize = new Dimension( 105, 30 );
+        JPanel headerPanel = new TransparentPanel();
+        headerPanel.setLayout(new BoxLayout(headerPanel, BoxLayout.LINE_AXIS));
+
+        JLabel lblHeader = new JLabel(OpenmeetingsPluginActivator.resourceService.
+        		getI18NString("plugin.openmeetings.CONFIG_HEADER"));
+        
+        headerPanel.setAlignmentX( Component.LEFT_ALIGNMENT );
+        headerPanel.add( lblHeader );
+        lblHeader.setPreferredSize( new Dimension( 200, 30 ));
+        
+        JPanel serverPanel = new TransparentPanel();
+        serverPanel.setLayout(new BoxLayout(serverPanel, BoxLayout.LINE_AXIS));        
+        JLabel lblServer = new JLabel(OpenmeetingsPluginActivator.resourceService.
+        						getI18NString("plugin.openmeetings.SERVER"));
+        lblServer.setPreferredSize(prefSize);
+        serverPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+        serverPanel.add(lblServer);        
+        serverPanel.add( teServer );
+        
+        JPanel loginPanel = new TransparentPanel();
+        loginPanel.setLayout(new BoxLayout(loginPanel, BoxLayout.LINE_AXIS));        
+        JLabel lblLogin = new JLabel(OpenmeetingsPluginActivator.resourceService.
+        						getI18NString("plugin.openmeetings.LOGIN"));
+        lblLogin.setPreferredSize(prefSize);
+        loginPanel.setAlignmentX(LEFT_ALIGNMENT);
+        loginPanel.add(lblLogin);
+        loginPanel.add( teLogin );        
+        
+        JPanel passwordPanel = new TransparentPanel();
+        passwordPanel.setLayout(new BoxLayout(passwordPanel, BoxLayout.LINE_AXIS));        
+        JLabel lblPassword = new JLabel(OpenmeetingsPluginActivator.resourceService.
+        						getI18NString("plugin.openmeetings.PASWWORD"));
+        lblPassword.setPreferredSize(prefSize);
+        passwordPanel.setAlignmentX(LEFT_ALIGNMENT);
+        passwordPanel.add( lblPassword );
+        passwordPanel.add( tePassword );
+        
+        
+        teServer.setText( OpenmeetingsConfigManager.getInstance().getServer() );
+        teLogin.setText( OpenmeetingsConfigManager.getInstance().getLogin() );
+        tePassword.setText( OpenmeetingsConfigManager.getInstance().getPassword() );
+        
+        JPanel buttonPanel = new TransparentPanel();
+        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
+        buttonPanel.setAlignmentX( LEFT_ALIGNMENT );
+        btOk.addActionListener(new ButtonOkListener());
+        btOk.setAlignmentX(LEFT_ALIGNMENT);
+        btOk.setPreferredSize(new Dimension( 50, 30 ) );
+        //buttonPanel.add( Box.createRigidArea( new Dimension( 60, 5)));
+        buttonPanel.add(btOk);
+        buttonPanel.add(fakeField);
+        fakeField.setVisible( false );
+
+        JPanel omPanel = new TransparentPanel();        
+        omPanel.setLayout(new BoxLayout(omPanel, BoxLayout.PAGE_AXIS));
+        omPanel.add( headerPanel );
+        omPanel.add( Box.createRigidArea( new Dimension(20, 5)));
+        omPanel.add( serverPanel, BorderLayout.WEST );
+        omPanel.add( Box.createRigidArea( new Dimension(20, 5)));
+        omPanel.add( loginPanel );
+        omPanel.add( Box.createRigidArea( new Dimension(20, 5)));
+        omPanel.add( passwordPanel );
+        omPanel.add( Box.createRigidArea( new Dimension(20, 5)));
+        omPanel.add( buttonPanel );
+
+        add( omPanel, BorderLayout.PAGE_START);
+    }
+    public String getTest(){
+    	
+    	return "Hello!!!!";
+    }
+    
+    public void setServer(String server) {
+    	
+		this.server = server;		
+	}
+    
+	public String getServer() {
+		return server;
+	}
+
+	public void setLogin(String login) {
+		this.login = login;
+	}
+	public String getLogin() {
+		return login;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+	public String getPassword() {
+		return password;
+	}
+
+	private class ButtonOkListener implements ActionListener
+    {
+        /**
+         * Invoked when an action occurs.
+         * @param e <tt>ActionEvent</tt>.
+         */
+        public void actionPerformed(ActionEvent e)
+        {  	
+        	OpenmeetingsConfigManager.getInstance().setSever( teServer.getText() );
+        	OpenmeetingsConfigManager.getInstance().setLogin( teLogin.getText() );
+        	try {
+				OpenmeetingsConfigManager.getInstance().setPassword( new String( tePassword.getPassword() ) );
+			} catch (Exception e1) {				
+				e1.printStackTrace();
+			}
+        }
+    }
+    private class ButtonCancelListener implements ActionListener
+    {
+        /**
+         * Invoked when an action occurs.
+         * @param e <tt>ActionEvent</tt>.
+         */
+        public void actionPerformed(ActionEvent e)
+        {
+        	
+        }
+    }    
+}

Added: incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginActivator.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginActivator.java?rev=1358723&view=auto
==============================================================================
--- incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginActivator.java (added)
+++ incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginActivator.java Sun Jul  8 12:00:38 2012
@@ -0,0 +1,81 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package net.java.sip.communicator.plugin.openmeetings;
+
+import java.util.*;
+
+import net.java.sip.communicator.impl.gui.event.PluginComponentEvent;
+import net.java.sip.communicator.impl.gui.main.contactlist.ContactListPane;
+import net.java.sip.communicator.plugin.otr.OtrActivator;
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.gui.internal.GuiServiceActivator;
+import net.java.sip.communicator.service.resources.ResourceManagementService;
+import net.java.sip.communicator.service.resources.ResourceManagementServiceUtils;
+import net.java.sip.communicator.util.*;
+
+import org.osgi.framework.*;
+
+public class OpenmeetingsPluginActivator
+    implements BundleActivator
+{
+	public static BundleContext bundleContext;
+	
+    public static ResourceManagementService resourceService;
+    
+	Logger logger = Logger.getLogger(OpenmeetingsPluginActivator.class);
+
+    /**
+     * Called when this bundle is started so the Framework can perform the
+     * bundle-specific activities necessary to start this bundle. In the case
+     * of our example plug-in we create our menu item and register it as a
+     * plug-in component in the right button menu of the contact list.
+     */
+    public void start(BundleContext bc)
+        throws Exception
+    {
+    	bundleContext = bc;
+    	resourceService = ResourceManagementServiceUtils.getService(OpenmeetingsPluginActivator.bundleContext);
+                
+        OpenmeetingsPluginMenuItem openMeetingsPlugin = new OpenmeetingsPluginMenuItem( bc );
+
+        Hashtable<String, String> containerFilter
+            = new Hashtable<String, String>();
+        containerFilter.put(
+                Container.CONTAINER_ID,
+                Container.CONTAINER_CONTACT_RIGHT_BUTTON_MENU.getID());
+      
+        bc.registerService(  PluginComponent.class.getName(),
+        								openMeetingsPlugin,
+        								containerFilter);
+        
+        Dictionary<String, String> properties = new Hashtable<String, String>();
+        properties.put( ConfigurationForm.FORM_TYPE,
+                        ConfigurationForm.ADVANCED_TYPE);
+        bc.registerService(
+            ConfigurationForm.class.getName(),
+            new LazyConfigurationForm(
+                "net.java.sip.communicator.plugin.openmeetings.OpenmeetingsConfigPanel",
+                getClass().getClassLoader(),
+                "plugin.skinmanager.PLUGIN_ICON",
+                "plugin.openmeetings.PLUGIN_NAME",
+                1002, true),
+            properties);        
+             
+        }
+
+    /**
+     * Called when this bundle is stopped so the Framework can perform the
+     * bundle-specific activities necessary to stop the bundle. In the case
+     * of our example plug-in we have nothing to do here.
+     */
+    public void stop(BundleContext bc)
+        throws Exception
+    {
+    	
+    	
+    }
+}

Added: incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginMenuItem.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginMenuItem.java?rev=1358723&view=auto
==============================================================================
--- incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginMenuItem.java (added)
+++ incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginMenuItem.java Sun Jul  8 12:00:38 2012
@@ -0,0 +1,172 @@
+/*
+ * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package net.java.sip.communicator.plugin.openmeetings;
+
+import java.awt.*;
+import java.awt.event.*;
+
+import net.java.sip.communicator.plugin.otr.OtrActivator;
+import net.java.sip.communicator.service.protocol.Message;
+import net.java.sip.communicator.service.protocol.Contact;
+import net.java.sip.communicator.service.protocol.OperationSetBasicInstantMessaging;
+import net.java.sip.communicator.service.protocol.ProtocolProviderService;
+
+import javax.swing.*;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+import net.java.sip.communicator.service.contactlist.*;
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.gui.Container;
+
+
+public class OpenmeetingsPluginMenuItem
+    extends AbstractPluginComponent
+    implements ActionListener
+{
+    private JMenuItem menuItem;
+
+    private MetaContact metaContact;
+    
+    private BundleContext bc;
+
+    /**
+     * Creates an instance of <tt>OpenmeetingsPluginMenuItem</tt>.
+     * @param  
+     */
+    public OpenmeetingsPluginMenuItem( BundleContext bc_)
+    {
+        super(Container.CONTAINER_CONTACT_RIGHT_BUTTON_MENU);        
+        this.bc = bc_;
+        OpenmeetingsConfigManager.getInstance().setContext( bc_ );
+    }
+ 
+    /**
+     * Listens for events triggered by user clicks on this menu item. Opens
+     * the <tt>PluginDialog</tt>.
+     */
+    public void actionPerformed(ActionEvent e)
+    { 
+    	
+      	String invitationUrl = null;
+		try {
+			invitationUrl = OpenmeetingsConfigManager.getInstance().getInvitationUrl( 
+											OpenmeetingsConfigManager.getInstance().getLogin() );
+		} catch (Exception e1) {
+			System.out.println( e1.getMessage() );			
+		}
+    	if( invitationUrl.equals(null)){
+    		System.out.println("Can't get invitation URL");
+    		return;
+    	}
+    	
+    	openUrl( invitationUrl );    	
+    	
+    	Contact to = metaContact.getDefaultContact();
+      	String invitationUrlForSend = null;
+		try {
+			invitationUrlForSend = OpenmeetingsConfigManager.getInstance().getInvitationUrl( to.getDisplayName() );
+		} catch (Exception e1) {
+			System.out.println( e1.getMessage() );			
+		}
+    	if( invitationUrl.equals(null)){
+    		System.out.println("Can't get invitation URL For send");
+    		return;
+    	}
+    	    	
+    	ServiceReference cRef = bc.getServiceReference( ProtocolProviderService.class.getName() );
+    	ProtocolProviderService jabberProvider =
+    		(ProtocolProviderService)bc.getService(cRef);
+    	
+    	OperationSetBasicInstantMessaging basicInstMsgImpl =
+    		(OperationSetBasicInstantMessaging)jabberProvider.getOperationSet(OperationSetBasicInstantMessaging.class);
+    	    	
+    	String message = "I am inviting you to the conference. Please, click the link " + invitationUrlForSend;
+    	Message msg = basicInstMsgImpl.createMessage( message);
+    	basicInstMsgImpl.sendInstantMessage( to ,  msg);  	
+
+    }
+
+    private boolean conferenceCreated(String response) {
+		
+    	if( response.contains("It works!"))
+    		return true;
+    	
+		return false;
+	}
+
+	private void openUrl(String url){
+		
+		if( url == null )
+			return;
+    	
+    	if( !java.awt.Desktop.isDesktopSupported() ) {
+
+            System.err.println( "Desktop is not supported (fatal)" );
+            System.exit( 1 );
+        }
+
+        if ( url.length() == 0 ) {
+
+            System.out.println( "Usage: OpenURI [URI [URI ... ]]" );
+            System.exit( 0 );
+        }
+
+        java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
+
+        if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {
+
+            System.err.println( "Desktop doesn't support the browse action (fatal)" );
+            System.exit( 1 );
+        }
+
+        try {
+             java.net.URI uri = new java.net.URI( url );
+              desktop.browse( uri );
+          }
+         catch ( Exception e ) {
+
+             System.err.println( e.getMessage() );
+         }       
+    	
+    }
+    /*
+     * Implements PluginComponent#getComponent().
+     */
+    public Object getComponent()
+    {
+        if (menuItem == null)
+        {
+            menuItem = new JMenuItem(getName());
+            menuItem.addActionListener(this);
+        }
+        return menuItem;
+    }
+
+    /*
+     * Implements PluginComponent#getName().
+     */
+    public String getName()
+    {
+        return OpenmeetingsPluginActivator.resourceService.getI18NString("plugin.openmeetings.MENU_ITEM");
+    }
+
+    /**
+     * Sets the current <tt>MetaContact</tt>. This in the case of the contact
+     * right button menu container would be the underlying contact in the 
+     * contact list.
+     * 
+     * @param metaContact the <tt>MetaContact</tt> to set.
+     * 
+     * @see PluginComponent#setCurrentContact(MetaContact)
+     */
+    public void setCurrentContact(MetaContact metaContact)
+    {
+        this.metaContact = metaContact;
+    }
+}

Added: incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginSoapClient.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginSoapClient.java?rev=1358723&view=auto
==============================================================================
--- incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginSoapClient.java (added)
+++ incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/OpenmeetingsPluginSoapClient.java Sun Jul  8 12:00:38 2012
@@ -0,0 +1,287 @@
+package net.java.sip.communicator.plugin.openmeetings;
+
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JOptionPane;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.Name;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPBodyElement;
+import javax.xml.soap.SOAPConnection;
+import javax.xml.soap.SOAPConnectionFactory;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPPart;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class OpenmeetingsPluginSoapClient {
+
+	String serverUrl;
+	
+	private static final String NAMESPACE_PREFIX = "openmeetings";
+	
+	public OpenmeetingsPluginSoapClient(){
+		super();
+	}
+	
+	public String getSID( String username, String password ) throws Exception {
+		final SOAPMessage soapMessage = getSoapMessage();
+		final SOAPBody soapBody = soapMessage.getSOAPBody();
+		final SOAPElement sessionElement = soapBody.addChildElement("getSession", NAMESPACE_PREFIX);
+	
+		soapMessage.saveChanges();
+		
+//		System.out.println("\n Soap request:\n");
+//		soapMessage.writeTo(System.out);
+//		System.out.println();
+		
+		final SOAPConnection soapConnection = getSoapConnection();
+		final SOAPMessage soapMessageReply = soapConnection.call(soapMessage, getUserServiceUrl());
+//		System.out.println("\n Soap response:\n");
+//		soapMessageReply.writeTo(System.out);
+//		System.out.println();
+		//final String textContent = soapMessageReply.getSOAPBody().getChildElement();
+	
+		//System.out.println( "SID = " + textContent);
+		soapConnection.close();
+		
+		SOAPBody responseBody = soapMessageReply.getSOAPBody();
+
+		String sid = null;
+		
+		
+		final Node getSessionResponse = responseBody.getFirstChild();
+		final Node returnResult = getSessionResponse.getFirstChild();
+
+		final NodeList childNodes = returnResult.getChildNodes();
+		sid = childNodes.item(5).getTextContent();		
+
+		return sid;
+	}
+	
+	private String login( final String sid, final String username, final String password) throws SOAPException, IOException {
+		final SOAPMessage soapMessage = getSoapMessage();
+		final SOAPBody soapBody = soapMessage.getSOAPBody();
+		final SOAPElement loginElement = soapBody.addChildElement("loginUser", NAMESPACE_PREFIX);
+
+		loginElement.addChildElement("SID", NAMESPACE_PREFIX).addTextNode(sid);
+		loginElement.addChildElement("username", NAMESPACE_PREFIX).addTextNode(username);
+		loginElement.addChildElement("userpass", NAMESPACE_PREFIX).addTextNode(password);
+
+//		System.out.println("\nLOGIN REQUEST:\n");
+//		soapMessage.writeTo(System.out);
+//		System.out.println();
+		
+		soapMessage.saveChanges();
+
+		final SOAPConnection soapConnection = getSoapConnection();
+		final SOAPMessage soapMessageReply = soapConnection.call(soapMessage, getUserServiceUrl());
+		final String textContent = soapMessageReply.getSOAPBody().getFirstChild().getTextContent();
+
+//		System.out.println("\nLOGIN RESPONSE:\n");
+//		soapMessageReply.writeTo(System.out);
+//		System.out.println();
+//		
+//		System.out.println( "LOGIN =  " + textContent);
+//		
+		if( !textContent.equals("1")	)
+			JOptionPane.showMessageDialog(null,OpenmeetingsPluginActivator.resourceService.
+								getI18NString("plugin.openmeetings.ERROR_LOGIN_MSG"));
+	
+		soapConnection.close();
+
+		return textContent;
+	}
+	public String getInvitationHash( final String username, final String password, final String displayedName ) throws Exception {
+		final SOAPMessage soapMessage = getSoapMessage();
+		final SOAPBody soapBody = soapMessage.getSOAPBody();
+		final SOAPElement requestElement = soapBody.addChildElement("getInvitationHash", NAMESPACE_PREFIX);
+
+		String sid = getSID( username, password );
+		String error_id = null;
+		try {
+			error_id = login( sid, username, password);
+		} catch (Exception e) {
+			System.out.println( e.getMessage() );
+		}		
+		
+		if( !error_id.equals( "1" ) ){
+			System.out.println("User cant login!");
+			return null;
+		}
+			
+		String room_id = getAvailableRooms( sid );
+		
+		requestElement.addChildElement("SID", NAMESPACE_PREFIX).addTextNode(sid);
+		requestElement.addChildElement("username", NAMESPACE_PREFIX).addTextNode( displayedName );
+		requestElement.addChildElement("room_id", NAMESPACE_PREFIX).addTextNode(room_id);
+				
+		soapMessage.saveChanges();
+
+//		System.out.println("\nGET INVITATION REQUEST:\n");
+//		soapMessage.writeTo(System.out);
+//		System.out.println();
+		
+		final SOAPConnection soapConnection = getSoapConnection();
+		final SOAPMessage soapMessageReply = soapConnection.call(soapMessage, getJabberServiceUrl());
+		
+//		System.out.println("\nGET INVITATION RESPONSE:\n");
+//		soapMessageReply.writeTo(System.out);
+//		System.out.println();
+		
+		final String textContent = soapMessageReply.getSOAPBody().getFirstChild().getTextContent();
+
+//		System.out.println( "INVITATION RESPONSE =  " + textContent);
+		soapConnection.close();		
+
+		return textContent;
+	}
+	
+	private String getAvailableRooms( final String sid ) throws SOAPException, IOException, TransformerException {
+		final SOAPMessage soapMessage = getSoapMessage();
+		final SOAPBody soapBody = soapMessage.getSOAPBody();
+			
+		final SOAPElement elemCodeElement = soapBody.addChildElement("getAvailableRooms",NAMESPACE_PREFIX);
+
+		elemCodeElement.addChildElement("SID", "rooms").addTextNode(sid);
+		
+//		System.out.println("\nGET_AVAILABLE_ROOMS REQUEST:\n");
+//		soapMessage.writeTo(System.out);
+//		System.out.println();
+		
+		soapMessage.saveChanges();
+
+		final SOAPConnection soapConnection = getSoapConnection();
+		final SOAPMessage soapMessageReply = soapConnection.call(soapMessage, getJabberServiceUrl());
+		final String textContent = soapMessageReply.getSOAPBody().getTextContent();
+
+//		System.out.println("\nGET_AVAILABLE_ROOMS RESPONSE:\n");
+//		soapMessageReply.writeTo(System.out);
+//		System.out.println();
+		
+		
+		final Node getRoomsResponse = soapMessageReply.getSOAPBody();
+		final Node getFirstRoomResult = getRoomsResponse.getFirstChild().getFirstChild();
+
+		String rooms_id = new String();
+		final NodeList childNodes = getFirstRoomResult.getChildNodes();
+		int count = childNodes.getLength();
+		for( int i = 0; i < count; ++i ){
+		    String nodeName = childNodes.item( i ).getNodeName();		   
+		    if( nodeName.contains("rooms_id")){		      
+		        rooms_id = childNodes.item(i).getTextContent();
+		    }		        
+		}
+						
+//		System.out.println( "GET_AVAILABLE_ROOMS RESULT =  " + rooms_id );
+		soapConnection.close();
+		
+		return rooms_id;
+	}
+
+
+	private String getErrorCode( final String sid, final String error_id ) throws SOAPException, IOException {
+		final SOAPMessage soapMessage = getSoapMessage();
+		final SOAPBody soapBody = soapMessage.getSOAPBody();
+		final SOAPElement errorCodeElement = soapBody.addChildElement("getErrorByCode", NAMESPACE_PREFIX);
+
+		errorCodeElement.addChildElement("SID", NAMESPACE_PREFIX).addTextNode(sid);
+		errorCodeElement.addChildElement("errorid", NAMESPACE_PREFIX).addTextNode(error_id);
+		errorCodeElement.addChildElement("language_id", NAMESPACE_PREFIX).addTextNode("0");
+
+//		System.out.println("\nERROR CODE REQUEST:\n");
+//		soapMessage.writeTo(System.out);
+//		System.out.println();
+		
+		soapMessage.saveChanges();
+
+		final SOAPConnection soapConnection = getSoapConnection();
+		final SOAPMessage soapMessageReply = soapConnection.call(soapMessage, getUserServiceUrl());
+		final String textContent = soapMessageReply.getSOAPBody().getFirstChild().getTextContent();
+
+//		System.out.println("\nERROR CODE RESPONSE:\n");
+//		soapMessageReply.writeTo(System.out);
+//		System.out.println();
+//		
+//		System.out.println( "ERROR RESULT =  " + textContent);
+		soapConnection.close();
+		
+		return textContent;
+	}
+
+	private SOAPConnection getSoapConnection() throws UnsupportedOperationException, SOAPException {
+		
+		final SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
+		final SOAPConnection soapConnection = soapConnectionFactory.createConnection();
+
+		return soapConnection;
+	}
+	
+	private SOAPMessage getSoapMessage() throws SOAPException {
+		final MessageFactory messageFactory = javax.xml.soap.MessageFactory.newInstance();
+		final SOAPMessage soapMessage = messageFactory.createMessage();
+
+		// Object for message parts
+		final SOAPPart soapPart = soapMessage.getSOAPPart();
+		final SOAPEnvelope envelope = soapPart.getEnvelope();
+
+		envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
+		envelope.addNamespaceDeclaration("xsd", "http://basic.beans.data.app.openmeetings.org/xsd");
+		envelope.addNamespaceDeclaration("xsd", "http://basic.beans.persistence.app.openmeetings.org/xsd");
+		envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
+		envelope.addNamespaceDeclaration("enc", "http://schemas.xmlsoap.org/soap/encoding/");
+		envelope.addNamespaceDeclaration("env", "http://schemas.xmlsoap.org/soap/envelop/");
+		
+
+		envelope.addNamespaceDeclaration(NAMESPACE_PREFIX, "http://services.axis.openmeetings.org");
+		envelope.addNamespaceDeclaration( "rooms", "http://rooms.beans.persistence.app.openmeetings.org/xsd");
+
+		envelope.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
+
+		return soapMessage;
+	}
+	
+	private void addSID( final String sid, final SOAPMessage soapMessage) 
+	throws SOAPException {
+		final SOAPHeader header = soapMessage.getSOAPHeader();
+		final SOAPElement sidHeader = header.addChildElement("SID", NAMESPACE_PREFIX);
+		sidHeader.addChildElement("SID", NAMESPACE_PREFIX).addTextNode(sid);
+	}
+
+
+	
+	public void setServer( String serverUrl_ ){		
+		serverUrl = serverUrl_;		
+	}
+	
+	private String getServer(){
+		return serverUrl;
+	}
+	
+	private String getUserServiceUrl(){		
+		String url = "http://" + getServer() + "/openmeetings/services/UserService?wsdl";
+		System.out.println( "URL = " + url);
+		return url;
+	}
+	private String getJabberServiceUrl(){		
+		String url = "http://" + getServer() + "/openmeetings/services/JabberService?wsdl";
+		System.out.println( "URL = " + url);
+		return url;
+	}
+}
\ No newline at end of file

Added: incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/openmeetingsplugin.manifest.mf
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/openmeetingsplugin.manifest.mf?rev=1358723&view=auto
==============================================================================
--- incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/openmeetingsplugin.manifest.mf (added)
+++ incubator/openmeetings/trunk/plugins/jitsi/main/java/net/java/sip/communicator/plugin/openmeetings/openmeetingsplugin.manifest.mf Sun Jul  8 12:00:38 2012
@@ -0,0 +1,37 @@
+Bundle-Activator: net.java.sip.communicator.plugin.openmeetings.OpenmeetingsPluginActivator
+Bundle-Name: Openmeetings plugin
+Bundle-Description: A plugin for integration with openmeetings.
+Bundle-Vendor: sip-communicator.org
+Bundle-Version: 0.0.1
+System-Bundle: yes
+Import-Package: org.osgi.framework,
+ net.java.sip.communicator.service.contactlist,
+ net.java.sip.communicator.service.contactlist.event,
+ net.java.sip.communicator.service.gui,
+ net.java.sip.communicator.service.gui.event,
+ net.java.sip.communicator.service.protocol,
+ net.java.sip.communicator.service.resources,
+ net.java.sip.communicator.util,
+ net.java.sip.communicator.util.swing,
+ javax.swing,
+ javax.swing.event,
+ javax.swing.table,
+ javax.swing.text,
+ javax.swing.text.html,
+ javax.accessibility,
+ javax.swing.plaf,
+ javax.swing.plaf.metal,
+ javax.swing.plaf.basic,
+ javax.imageio,
+ javax.swing.filechooser,
+ javax.swing.tree,
+ javax.swing.undo,
+ javax.swing.border,
+ javax.xml.soap,
+ javax.xml.transform,
+ javax.xml.transform.stream,
+ org.w3c.dom,
+ net.java.sip.communicator.service.configuration,
+ javax.crypto,
+ javax.crypto.spec,
+ sun.misc
\ No newline at end of file