work on the gui support of different accounts and different protocols

cusax-fix
Yana Stamcheva 20 years ago
parent dfd1dc539c
commit d065ebd34a

@ -77,7 +77,7 @@ private class RunLogin implements Runnable {
public void run() {
loginManager.showLoginWindow(communicatorMain.getMainFrame());
loginManager.showLoginWindows(communicatorMain.getMainFrame());
}
}
}

@ -0,0 +1,47 @@
/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.gui.main;
import net.java.sip.communicator.service.protocol.ProtocolProviderService;
public class Account {
private String uin;
private ProtocolProviderService protocolProvider;
private String protocolName;
public Account( String uin,
ProtocolProviderService protocolProvider){
this.uin = uin;
this.protocolProvider = protocolProvider;
this.protocolName = protocolProvider.getProtocolName();
}
public String getProtocolName() {
return protocolName;
}
public void setProtocolProvider(ProtocolProviderService protocolProvider) {
this.protocolProvider = protocolProvider;
}
public ProtocolProviderService getProtocolProvider() {
return this.protocolProvider;
}
public String getUin() {
return uin;
}
public void setUin(String uin) {
this.uin = uin;
}
}

@ -38,7 +38,7 @@ public CommunicatorMain() {
ConfigurationFrame configFrame = new ConfigurationFrame();
mainFrame = new MainFrame(this.getUser());
mainFrame = new MainFrame();
mainFrame.setConfigFrame(configFrame);
@ -46,17 +46,6 @@ public CommunicatorMain() {
JOptionPane.getRootFrame().setIconImage(
ImageLoader.getImage(ImageLoader.SIP_LOGO));
}
public User getUser() {
User user = new User();
user.setName("Yana");
user.setProtocols(new String[] { "SIP", "ICQ" });
return user;
}
public void setDefaultThemePack() {

@ -11,6 +11,8 @@
import java.awt.Dimension;
import java.awt.Toolkit;
import java.beans.PropertyChangeEvent;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
@ -56,25 +58,25 @@ public class MainFrame extends JFrame {
private QuickMenu quickMenu;
private User user;
private Map supportedOperationSets;
private Hashtable protocolSupportedOperationSets = new Hashtable();
private Hashtable protocolPresenceSets = new Hashtable();
private Dimension minimumFrameSize = new Dimension(
Constants.MAINFRAME_MIN_WIDTH, Constants.MAINFRAME_MIN_HEIGHT);
private ProtocolProviderService protocolProvider;
private OperationSetPresence presence;
private Hashtable protocolProviders = new Hashtable();
private MetaContactListService contactList;
public MainFrame(User user) {
private ArrayList accounts = new ArrayList();
public MainFrame() {
callPanel = new CallPanel(this);
tabbedPane = new MainTabbedPane(this);
quickMenu = new QuickMenu(this);
statusPanel = new StatusPanel(this, user.getProtocols());
statusPanel = new StatusPanel(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setInitialBounds();
@ -125,17 +127,7 @@ public void setContactList(MetaContactListService contactList) {
this.tabbedPane.getContactListPanel().initTree(contactList);
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public ConfigurationFrame getConfigFrame() {
return configFrame;
@ -146,14 +138,17 @@ public void setConfigFrame(ConfigurationFrame configFrame) {
this.configFrame = configFrame;
}
public Map getSupportedOperationSets() {
return supportedOperationSets;
public Map getSupportedOperationSets
(ProtocolProviderService protocolProvider) {
return (Map)this.protocolSupportedOperationSets.get(protocolProvider);
}
public void setSupportedOperationSets(
Map supportedOperationSets) {
public void addProtocolSupportedOperationSets
(ProtocolProviderService protocolProvider,
Map supportedOperationSets) {
this.supportedOperationSets = supportedOperationSets;
this.protocolSupportedOperationSets.put(protocolProvider,
supportedOperationSets);
Iterator entrySetIter = supportedOperationSets.entrySet().iterator();
@ -170,6 +165,9 @@ public void setSupportedOperationSets(
OperationSetPresence presence
= (OperationSetPresence)value;
this.protocolPresenceSets.put( protocolProvider,
presence);
presence
.addProviderPresenceStatusListener
(new ProviderPresenceStatusAdapter());
@ -177,16 +175,16 @@ public void setSupportedOperationSets(
.addContactPresenceStatusListener
(new ContactPresenceStatusAdapter());
this.setPresence(presence);
try {
presence
.publishPresenceStatus(IcqStatusEnum.ONLINE, "");
this.getStatusPanel().stopConnecting(Constants.ICQ);
this.getStatusPanel().stopConnecting(
protocolProvider.getProtocolName());
this.statusPanel.setSelectedStatus
(Constants.ICQ, Constants.ONLINE_STATUS);
(protocolProvider.getProtocolName(),
Constants.ONLINE_STATUS);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
@ -222,7 +220,7 @@ private class ContactPresenceStatusAdapter
public void contactPresenceStatusChanged(ContactPresenceStatusChangeEvent evt) {
ContactNode node = tabbedPane.getContactListPanel().getContactListTree().contains(evt.getSourceContact());
System.out.println("=======================================" + node);
if(node != null){
node.setIcon(Constants.getStatusIcon(evt.getNewStatus()));
tabbedPane.getContactListPanel().getContactListTree().repaint();
@ -234,20 +232,28 @@ public StatusPanel getStatusPanel() {
return statusPanel;
}
public ProtocolProviderService getProtocolProvider() {
return protocolProvider;
public Map getProtocolProviders() {
return this.protocolProviders;
}
public void setProtocolProvider(
public void addProtocolProvider(
ProtocolProviderService protocolProvider) {
this.protocolProvider = protocolProvider;
this.protocolProviders.put( protocolProvider.getProtocolName(),
protocolProvider);
}
public OperationSetPresence getPresence() {
return presence;
public void addAccount(Account account){
this.accounts.add(account);
}
public Account getAccount(){
return (Account)this.accounts.get(0);
}
public void setPresence(OperationSetPresence presence) {
this.presence = presence;
public OperationSetPresence getProtocolPresence
(ProtocolProviderService protocolProvider) {
return (OperationSetPresence)
this.protocolPresenceSets.get(protocolProvider);
}
}

@ -21,13 +21,11 @@
public class StatusPanel extends JPanel {
private String[] userProtocols;
private Hashtable protocolStatusCombos = new Hashtable();
private Hashtable protocolStatusCombos = new Hashtable();
private MainFrame mainFrame;
public StatusPanel(MainFrame mainFrame, String[] userProtocols) {
public StatusPanel(MainFrame mainFrame) {
this.mainFrame = mainFrame;
@ -35,30 +33,26 @@ public StatusPanel(MainFrame mainFrame, String[] userProtocols) {
this.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0,
Constants.CONTACTPANEL_MOVER_START_COLOR));
this.userProtocols = userProtocols;
this.init();
}
private void init() {
public void addAccount(Account account) {
for (int i = 0; i < userProtocols.length; i++) {
Map protocolStatusMap = Constants
.getProtocolStatusIcons(userProtocols[i]);
Map protocolStatusMap = Constants
.getProtocolStatusIcons(account.getProtocolName());
StatusSelectorBox protocolStatusCombo
= new StatusSelectorBox(
this.mainFrame,
protocolStatusMap,
(Image)protocolStatusMap.get(Constants.OFFLINE_STATUS));
StatusSelectorBox protocolStatusCombo
= new StatusSelectorBox(
this.mainFrame,
account,
protocolStatusMap,
(Image)protocolStatusMap.get(Constants.OFFLINE_STATUS));
this.protocolStatusCombos.put( userProtocols[i],
protocolStatusCombo);
this.add(protocolStatusCombo);
}
this.protocolStatusCombos.put( account.getProtocolName(),
protocolStatusCombo);
this.add(protocolStatusCombo);
this.getParent().validate();
}
public void setSelectedStatus(String protocol, Object status){

@ -33,6 +33,7 @@
import net.java.sip.communicator.impl.gui.main.utils.AntialiasingManager;
import net.java.sip.communicator.impl.gui.main.utils.ImageLoader;
import net.java.sip.communicator.service.protocol.OperationFailedException;
import net.java.sip.communicator.service.protocol.OperationSetPresence;
import net.java.sip.communicator.service.protocol.PresenceStatus;
import net.java.sip.communicator.service.protocol.icqconstants.IcqStatusEnum;
import net.java.sip.communicator.util.Logger;
@ -55,7 +56,9 @@ public class StatusSelectorBox extends JLabel
private Connecting connecting = new Connecting();
public StatusSelectorBox(MainFrame mainFrame) {
private Account account;
public StatusSelectorBox(MainFrame mainFrame, Account account) {
this.setPreferredSize(new Dimension(
this.backgroundImage.getWidth(this),
@ -67,6 +70,8 @@ public StatusSelectorBox(MainFrame mainFrame) {
this.mainFrame = mainFrame;
this.account = account;
this.popup = new AntialiasedPopupMenu();
this.popup.setInvoker(this);
@ -74,7 +79,8 @@ public StatusSelectorBox(MainFrame mainFrame) {
this.addMouseListener(this);
}
public StatusSelectorBox( MainFrame mainFrame,
public StatusSelectorBox( MainFrame mainFrame,
Account account,
Map itemsMap,
Image selectedItem) {
@ -90,6 +96,8 @@ public StatusSelectorBox( MainFrame mainFrame,
this.mainFrame = mainFrame;
this.account = account;
this.itemsMap = itemsMap;
this.popup = new AntialiasedPopupMenu();
@ -138,7 +146,11 @@ public void actionPerformed (ActionEvent e) {
JMenuItem menuItem = (JMenuItem) e.getSource();
Iterator statusSet = mainFrame.getPresence().getSupportedStatusSet();
OperationSetPresence presence
= mainFrame.getProtocolPresence
(account.getProtocolProvider());
Iterator statusSet = presence.getSupportedStatusSet();
while (statusSet.hasNext()){
@ -146,33 +158,32 @@ public void actionPerformed (ActionEvent e) {
= ((PresenceStatus)statusSet.next());
if(status.getStatusName().equals(menuItem.getText())
&& !mainFrame.getPresence().getPresenceStatus()
&& !presence.getPresenceStatus()
.equals(status)){
try {
if(status.equals(IcqStatusEnum.ONLINE)){
if(mainFrame.getProtocolProvider()
if(account.getProtocolProvider()
.isRegistered()){
mainFrame.getPresence()
presence
.publishPresenceStatus(status, "");
}
else{
mainFrame.getProtocolProvider()
account.getProtocolProvider()
.register(null);
}
}
else if(status.equals(IcqStatusEnum.OFFLINE)){
mainFrame.getProtocolProvider().unregister();
account.getProtocolProvider().unregister();
}
else {
mainFrame.getPresence()
.publishPresenceStatus(status, "");
presence.publishPresenceStatus(status, "");
}
} catch (IllegalArgumentException e1) {

@ -1,33 +0,0 @@
/*
* SIP Communicator, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.impl.gui.main;
public class User {
private String[] userProtocols;
private String name;
public void setProtocols(String[] userProtocols){
this.userProtocols = userProtocols;
}
public String[] getProtocols(){
return this.userProtocols;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

@ -8,19 +8,20 @@
package net.java.sip.communicator.impl.gui.main.login;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.swing.JOptionPane;
import net.java.sip.communicator.impl.gui.Activator;
import net.java.sip.communicator.impl.gui.main.Account;
import net.java.sip.communicator.impl.gui.main.MainFrame;
import net.java.sip.communicator.impl.gui.main.i18n.Messages;
import net.java.sip.communicator.impl.gui.main.utils.Constants;
import net.java.sip.communicator.service.contactlist.MetaContactListService;
import net.java.sip.communicator.service.protocol.AccountID;
import net.java.sip.communicator.service.protocol.AccountManager;
import net.java.sip.communicator.service.protocol.AccountProperties;
import net.java.sip.communicator.service.protocol.ProtocolNames;
import net.java.sip.communicator.service.protocol.ProtocolProviderService;
import net.java.sip.communicator.service.protocol.RegistrationState;
import net.java.sip.communicator.service.protocol.SecurityAuthority;
@ -36,81 +37,101 @@ public class LoginManager implements RegistrationStateChangeListener {
private BundleContext bc;
private AccountManager accountManager;
private Hashtable accountManagersMap = new Hashtable();
private AccountID icqAccountID;
private AccountID accountID;
private Logger logger = Logger.getLogger(Activator.class.getName());
private ServiceReference[] serRefs = null;
private String osgiFilter = "";
private ProtocolProviderService icqProtocolProvider;
private MainFrame mainFrame;
public LoginManager(BundleContext bc){
this.bc = bc;
this.osgiFilter = "(" + AccountManager.PROTOCOL_PROPERTY_NAME
+ "="+ProtocolNames.ICQ+")";
ServiceReference[] serRefs = null;
try {
this.serRefs = this.bc.getServiceReferences(
AccountManager.class.getName(), osgiFilter);
//get all registered account managers
serRefs = this.bc.getServiceReferences(
AccountManager.class.getName(), null);
} catch (InvalidSyntaxException e) {
logger.error("LoginManager : " + e.getMessage());
logger.error("LoginManager : " + e);
}
this.accountManager
= (AccountManager)this.bc.getService(serRefs[0]);
for (int i = 0; i < serRefs.length; i ++){
AccountManager accountManager = (AccountManager)
this.bc.getService(serRefs[i]);
this.accountManagersMap
.put(serRefs[i].getProperty
(AccountManager.PROTOCOL_PROPERTY_NAME),
accountManager);
}
}
public void login(String user, String passwd){
public void login( AccountManager accountManager,
String user,
String passwd){
Hashtable icqAccountProperties = new Hashtable();
icqAccountProperties.put(AccountProperties.PASSWORD, passwd);
Hashtable accountProperties = new Hashtable();
accountProperties.put(AccountProperties.PASSWORD, passwd);
this.icqAccountID = this.accountManager.installAccount(
this.bc, user, icqAccountProperties);
this.accountID = accountManager.installAccount(
this.bc, user, accountProperties);
this.osgiFilter =
"(&("+AccountManager.PROTOCOL_PROPERTY_NAME +"="+ProtocolNames.ICQ+")"
+"(" + AccountManager.ACCOUNT_ID_PROPERTY_NAME
+ "=" + icqAccountID.getAccountID() + "))";
try {
this.serRefs = this.bc.getServiceReferences(
ProtocolProviderService.class.getName(),
osgiFilter);
} catch (InvalidSyntaxException e) {
this.logger.error("LoginManager: " + e.getMessage());
}
ServiceReference serRef = null;
icqProtocolProvider
= (ProtocolProviderService)this.bc.getService(serRefs[0]);
serRef = accountManager
.getProviderForAccount(this.accountID);
ProtocolProviderService protocolProvider
= (ProtocolProviderService)this.bc.getService(serRef);
icqProtocolProvider.addRegistrationStateChangeListener(this);
icqProtocolProvider.register(new MySecurityAuthority());
Account account
= new Account( user,
protocolProvider);
this.mainFrame.getStatusPanel().addAccount(account);
this.mainFrame.addAccount(account);
this.mainFrame.getStatusPanel()
.startConnecting(protocolProvider.getProtocolName());
protocolProvider.addRegistrationStateChangeListener(this);
protocolProvider.register(new MySecurityAuthority());
}
public void showLoginWindow(MainFrame parent){
public void showLoginWindows(MainFrame parent){
Set set = this.accountManagersMap.entrySet();
Iterator iter = set.iterator();
LoginWindow loginWindow = new LoginWindow(parent);
while(iter.hasNext()){
Map.Entry entry = (Map.Entry)iter.next();
AccountManager accountManager = (AccountManager)entry.getValue();
String protocolName = (String)entry.getKey();
showLoginWindow(parent, protocolName, accountManager);
}
}
public void showLoginWindow(MainFrame parent,
String protocolName,
AccountManager accoundManager){
LoginWindow loginWindow = new LoginWindow( parent,
protocolName,
accoundManager);
loginWindow.setLoginManager(this);
loginWindow.showWindow();
loginWindow.showWindow();
}
private class MySecurityAuthority implements SecurityAuthority {
@ -122,34 +143,39 @@ public void registrationStateChanged(RegistrationStateChangeEvent evt) {
if(evt.getNewState().equals(RegistrationState.REGISTERED)){
Map supportedOpSets
= icqProtocolProvider.getSupportedOperationSets();
= evt.getProvider().getSupportedOperationSets();
this.mainFrame.setProtocolProvider(icqProtocolProvider);
this.mainFrame.addProtocolProvider(evt.getProvider());
this.mainFrame.setSupportedOperationSets(supportedOpSets);
this.mainFrame.addProtocolSupportedOperationSets
(evt.getProvider(), supportedOpSets);
}
else if(evt.getNewState()
.equals(RegistrationState.AUTHENTICATION_FAILED)){
this.mainFrame.getStatusPanel().stopConnecting(Constants.ICQ);
this.mainFrame.getStatusPanel()
.stopConnecting(evt.getProvider().getProtocolName());
this.mainFrame.getStatusPanel().setSelectedStatus(Constants.ICQ,
Constants.OFFLINE_STATUS);
this.mainFrame.getStatusPanel()
.setSelectedStatus( evt.getProvider().getProtocolName(),
Constants.OFFLINE_STATUS);
JOptionPane.showMessageDialog(null,
Messages.getString("authenticationFailed"),
Messages.getString("authenticationFailed"),
JOptionPane.ERROR_MESSAGE);
this.showLoginWindow(this.mainFrame);
this.showLoginWindows(this.mainFrame);
}
else if(evt.getNewState()
.equals(RegistrationState.CONNECTION_FAILED)){
this.mainFrame.getStatusPanel().stopConnecting(Constants.ICQ);
this.mainFrame.getStatusPanel()
.stopConnecting(evt.getProvider().getProtocolName());
this.mainFrame.getStatusPanel().setSelectedStatus(Constants.ICQ,
Constants.OFFLINE_STATUS);
this.mainFrame.getStatusPanel()
.setSelectedStatus( evt.getProvider().getProtocolName(),
Constants.OFFLINE_STATUS);
JOptionPane.showMessageDialog(null,
Messages.getString("connectionFailedMessage"),

@ -24,6 +24,7 @@
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.java.sip.communicator.impl.gui.main.Account;
import net.java.sip.communicator.impl.gui.main.MainFrame;
import net.java.sip.communicator.impl.gui.main.customcontrols.SIPCommPasswordField;
import net.java.sip.communicator.impl.gui.main.customcontrols.SIPCommTextField;
@ -40,14 +41,10 @@ public class LoginWindow extends JDialog
private JLabel passwdLabel = new JLabel(Messages.getString("passwd"));
//private JLabel protocolLabel = new JLabel(Messages.getString("protocol"));
private SIPCommTextField uinTextField = new SIPCommTextField(15);
private JComboBox uinComboBox;
private SIPCommPasswordField passwdField = new SIPCommPasswordField(15);
private JComboBox protocolCombo = new JComboBox();
private JButton loginButton = new JButton(Messages.getString("login"));
private JButton cancelButton = new JButton(Messages.getString("cancel"));
@ -69,12 +66,20 @@ public class LoginWindow extends JDialog
private MainFrame mainFrame;
public LoginWindow(MainFrame mainFrame){
private String protocolName;
public LoginWindow( MainFrame mainFrame,
String protocolName,
AccountManager accountManager){
super(mainFrame);
this.mainFrame = mainFrame;
this.accountManager = accountManager;
this.protocolName = protocolName;
this.setModal(true);
this.backgroundPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
@ -95,17 +100,17 @@ public LoginWindow(MainFrame mainFrame){
}
private void init() {
this.setTransparent(true);
this.uinComboBox = new JComboBox(this.accountManager
.getRegisteredAcounts().toArray());
this.passwdField.setEchoChar('*');
this.uinComboBox.setEditable(true);
//this.labelsPanel.add(protocolLabel);
this.labelsPanel.add(uinLabel);
this.labelsPanel.add(passwdLabel);
//this.textFieldsPanel.add(protocolCombo);
this.textFieldsPanel.add(uinTextField);
this.textFieldsPanel.add(uinComboBox);
this.textFieldsPanel.add(passwdField);
this.buttonsPanel.add(loginButton);
@ -124,6 +129,8 @@ private void init() {
this.cancelButton.addActionListener(this);
this.getRootPane().setDefaultButton(loginButton);
this.setTransparent(true);
}
private void setTransparent(boolean transparent){
@ -131,7 +138,7 @@ private void setTransparent(boolean transparent){
this.mainPanel.setOpaque(!transparent);
this.labelsPanel.setOpaque(!transparent);
this.textFieldsPanel.setOpaque(!transparent);
this.protocolCombo.setOpaque(!transparent);
this.uinComboBox.setOpaque(!transparent);
this.buttonsPanel.setOpaque(!transparent);
}
@ -153,13 +160,6 @@ private void setWindowLocation(){
this.setLocation(x, y);
}
public static void main(String[] args){
LoginWindow login = new LoginWindow(null);
login.showWindow();
}
public AccountManager getAccountManager() {
return accountManager;
}
@ -171,9 +171,8 @@ public void actionPerformed(ActionEvent e) {
if(buttonName.equals("login")){
this.mainFrame.getStatusPanel().startConnecting(Constants.ICQ);
this.loginManager.login(uinTextField.getText(),
this.loginManager.login(accountManager,
uinComboBox.getSelectedItem().toString(),
new String(passwdField.getPassword()));
this.dispose();

@ -22,7 +22,7 @@
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import net.java.sip.communicator.impl.gui.main.User;
import net.java.sip.communicator.impl.gui.main.Account;
import net.java.sip.communicator.impl.gui.main.customcontrols.AntialiasedEditorPane;
import net.java.sip.communicator.impl.gui.main.utils.AntialiasingManager;
import net.java.sip.communicator.impl.gui.main.utils.BrowserLauncher;
@ -85,10 +85,11 @@ public void processReceivedMessage() {
}
public void processSentMessage(User sender, Calendar calendar,
String message) {
public void processSentMessage( Account account,
Calendar calendar,
String message) {
this.registerMessage(sender.getName(), calendar, message);
this.registerMessage(account.getUin(), calendar, message);
String chatString = "<HTML><DIV style=\"background-color:"
+ Constants.FONT_CHAT_HEADER_COLOR

@ -81,7 +81,7 @@ public void actionPerformed(ActionEvent e) {
// TODO: Receive a notice that message is delivered.
this.msgWindow.getChatPanel().processSentMessage(
this.msgWindow.getParentWindow().getUser(),
this.msgWindow.getParentWindow().getAccount(),
Calendar.getInstance(),
messagePane.getText());

Loading…
Cancel
Save