aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java
diff options
context:
space:
mode:
authorWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2017-03-11 22:15:03 +0100
committerWolfgang Wiedmeyer <wolfgit@wiedmeyer.de>2017-03-11 22:15:03 +0100
commit85901329b0794b136b96bf745f4ab1572806fc89 (patch)
treef23da7e97cae727f39d825f0fef8348cffb238e4 /src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java
parent3db2e44f186c59429901b2c899e139ea60117a55 (diff)
parentcf5da997da8820b4050f5b87ee9440a0ede36d1f (diff)
downloadjitsi-85901329b0794b136b96bf745f4ab1572806fc89.zip
jitsi-85901329b0794b136b96bf745f4ab1572806fc89.tar.gz
jitsi-85901329b0794b136b96bf745f4ab1572806fc89.tar.bz2
Merge commit 'cf5da99'HEADmaster
Signed-off-by: Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de>
Diffstat (limited to 'src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java')
-rw-r--r--src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java1468
1 files changed, 734 insertions, 734 deletions
diff --git a/src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java b/src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java
index b8d6a2a..e1213ce 100644
--- a/src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java
+++ b/src/net/java/sip/communicator/plugin/simpleaccreg/InitialAccountRegistrationFrame.java
@@ -1,4 +1,4 @@
-/*
+/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
@@ -15,736 +15,736 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package net.java.sip.communicator.plugin.simpleaccreg;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.*;
-import java.util.*;
-import java.util.List;
-
-import javax.imageio.*;
-import javax.swing.*;
-import javax.swing.text.*;
-
-import net.java.sip.communicator.service.contactlist.*;
-import net.java.sip.communicator.service.gui.*;
-import net.java.sip.communicator.service.protocol.*;
-import net.java.sip.communicator.util.*;
-import net.java.sip.communicator.plugin.desktoputil.*;
-
-import org.jitsi.service.configuration.*;
-import org.osgi.framework.*;
-
-/**
- * The <tt>NoAccountFoundPage</tt> is the page shown in the account
- * registration wizard shown in the beginning of the program, when no registered
- * accounts are found.
- *
- * @author Yana Stamcheva
- * @author Lubomir Marinov
- */
-public class InitialAccountRegistrationFrame
- extends SIPCommFrame
-{
- /**
- * Serial version UID.
- */
- private static final long serialVersionUID = 0L;
-
- private ConfigurationService configurationService;
-
- /**
- * The <tt>Logger</tt> used by this <tt>InitialAccountRegistrationFrame</tt>
- * for logging output.
- */
- private final Logger logger
- = Logger.getLogger(InitialAccountRegistrationFrame.class);
-
- private final TransparentPanel mainAccountsPanel
- = new TransparentPanel(new BorderLayout(10, 10));
-
- private final TransparentPanel accountsPanel
- = new TransparentPanel(new GridLayout(0, 2, 10, 10));
-
- private final TransparentPanel southPanel
- = new TransparentPanel(new BorderLayout());
-
- private final JButton signinButton
- = new JButton(Resources.getString("service.gui.SIGN_IN"));
-
- private final Collection<AccountRegistrationPanel> registrationForms =
- new Vector<AccountRegistrationPanel>();
-
- /**
- * Creates an instance of <tt>NoAccountFoundPage</tt>.
- */
- public InitialAccountRegistrationFrame()
- {
- super(false);
- setDefaultCloseOperation(DISPOSE_ON_CLOSE);
-
- TransparentPanel mainPanel
- = new TransparentPanel(new BorderLayout());
- mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
-
- JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- southPanel.add(buttonPanel, BorderLayout.EAST);
- JButton cancelButton
- = new JButton(Resources.getString("service.gui.CANCEL"));
-
- this.setTitle(Resources.getString("service.gui.SIGN_IN"));
-
- this.setIconImage(
- Resources.getImage("service.gui.SIP_COMMUNICATOR_LOGO").getImage());
-
- // In order to have the same icon when using option panes
- JOptionPane.getRootFrame().setIconImage(
- Resources.getImage("service.gui.SIP_COMMUNICATOR_LOGO").getImage());
-
- mainAccountsPanel.setBorder(
- BorderFactory.createEmptyBorder(10, 10, 10, 10));
-
- this.getContentPane().add(mainPanel);
-
- mainPanel.add(createTitleComponent(), BorderLayout.NORTH);
- JScrollPane scroller = new JScrollPane(mainAccountsPanel);
- scroller.setOpaque(false);
- scroller.getViewport().setOpaque(false);
- mainPanel.add(scroller, BorderLayout.CENTER);
- mainPanel.add(southPanel, BorderLayout.SOUTH);
-
- mainAccountsPanel.add(accountsPanel, BorderLayout.CENTER);
-
- initProvisioningPanel();
-
- mainAccountsPanel.setOpaque(false);
- accountsPanel.setOpaque(false);
- buttonPanel.setOpaque(false);
-
- SigninActionListener actionListener = new SigninActionListener();
-
- signinButton.addActionListener(actionListener);
- cancelButton.addActionListener(actionListener);
-
- buttonPanel.add(signinButton);
- buttonPanel.add(cancelButton);
-
- this.getRootPane().setDefaultButton(signinButton);
-
- this.initAccountWizards();
-
- // Create the default group
- String groupName
- = Resources.getApplicationProperty("impl.gui.DEFAULT_GROUP_NAME");
-
- if(groupName != null && groupName.length() > 0)
- {
- MetaContactListService contactList =
- SimpleAccountRegistrationActivator.getContactList();
- Iterator<MetaContactGroup> iter
- = contactList.getRoot().getSubgroups();
- while (iter.hasNext())
- {
- MetaContactGroup gr = iter.next();
- if (groupName.equals(gr.getGroupName()))
- return;
- }
-
- contactList
- .createMetaContactGroup(contactList.getRoot(), groupName);
-
- getConfigurationService()
- .setProperty(
- "net.java.sip.communicator.impl.gui.addcontact.lastContactParent",
- groupName);
- }
-
- this.getRootPane().validate();
- this.pack();
-
- // if the screen height is sufficiently large, expand the window size
- // so that no scrolling is needed
- if (scroller.getViewport().getHeight()
- < Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 230)
- {
- this.setSize(scroller.getViewport().getWidth() + 100,
- scroller.getViewport().getHeight() + 150);
- }
- else
- {
- // otherwise add some width so that no horizontal scrolling is
- // needed
- this.setSize(this.getSize().width + 20,
- this.getSize().height - 10);
- }
- }
-
- /**
- * Initializes the provisioning panel.
- */
- private void initProvisioningPanel()
- {
- String isInitialProv = SimpleAccountRegistrationActivator.getResources()
- .getSettingsString(
- "plugin.provisioning.IS_INITIAL_PROVISIONING_LINK");
-
- if (isInitialProv != null && isInitialProv.length() > 0
- && !Boolean.parseBoolean(isInitialProv))
- return;
-
- String useProvisioningString = SimpleAccountRegistrationActivator
- .getResources().getI18NString("service.gui.USE_PROVISIONING");
-
- final JLabel provisioningLabel =
- new JLabel("<html><a href=''>"
- + useProvisioningString
- + "</a></html>");
-
- provisioningLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
- provisioningLabel.setToolTipText(useProvisioningString);
-
- provisioningLabel.addMouseListener(new MouseAdapter()
- {
- @Override
- public void mousePressed(MouseEvent e)
- {
- ConfigurationContainer configContainer
- = SimpleAccountRegistrationActivator.getUIService()
- .getConfigurationContainer();
-
- ConfigurationForm advancedConfigForm
- = SimpleAccountRegistrationActivator.getAdvancedConfigForm();
-
- if (advancedConfigForm != null)
- {
- configContainer.setSelected(advancedConfigForm);
-
- if (advancedConfigForm instanceof ConfigurationContainer)
- {
- ConfigurationForm provisioningForm
- = SimpleAccountRegistrationActivator
- .getProvisioningConfigForm();
-
- if (provisioningForm != null)
- {
- ((ConfigurationContainer) advancedConfigForm)
- .setSelected(provisioningForm);
- }
- }
- }
-
- configContainer.setVisible(true);
- }
- });
-
- southPanel.add(provisioningLabel, BorderLayout.WEST);
- }
-
- private void initAccountWizards()
- {
- String simpleWizards
- = SimpleAccountRegistrationActivator.getConfigService()
- .getString("plugin.simpleaccreg.PROTOCOL_ORDER");
-
- StringTokenizer tokenizer = new StringTokenizer(simpleWizards, "|");
-
- ServiceReference[] serviceRefs = null;
- while (tokenizer.hasMoreTokens())
- {
- String protocolToken = tokenizer.nextToken();
-
- String osgiFilter = "("
- + ProtocolProviderFactory.PROTOCOL
- + "="+protocolToken+")";
-
- try
- {
- serviceRefs = SimpleAccountRegistrationActivator.bundleContext
- .getServiceReferences(
- AccountRegistrationWizard.class.getName(), osgiFilter);
-
- if (serviceRefs != null && serviceRefs.length > 0)
- {
- AccountRegistrationWizard wizard
- = (AccountRegistrationWizard)
-
- SimpleAccountRegistrationActivator
- .bundleContext.getService(serviceRefs[0]);
-
- this.addAccountRegistrationForm(wizard);
- }
- }
- catch (InvalidSyntaxException ex)
- {
- logger.error("GuiActivator : ", ex);
- }
- }
- }
-
- /**
- * The account registration panel.
- */
- private class AccountRegistrationPanel
- extends JPanel
- {
- /**
- * Serial version UID.
- */
- private static final long serialVersionUID = 0L;
-
- private JLabel usernameLabel
- = new JLabel(Resources.getString(
- "plugin.simpleaccregwizz.LOGIN_USERNAME"));
-
- private JLabel passwordLabel
- = new JLabel(Resources.getString("service.gui.PASSWORD"));
-
- private JTextField usernameField = new JTextField();
-
- private JLabel usernameExampleLabel = new JLabel();
-
- private JPasswordField passwordField = new JPasswordField();
-
- private JPanel labelsPanel = new JPanel(new GridLayout(0, 1, 5, 0));
-
- private JPanel fieldsPanel = new JPanel(new GridLayout(0, 1, 5, 0));
-
- private JPanel emptyPanel = new JPanel();
-
- private JPanel inputPanel = new JPanel(new BorderLayout(5, 5));
-
- private JPanel iconDescriptionPanel = new JPanel(new BorderLayout());
-
- private JTextArea descriptionArea = new JTextArea();
-
- private final AccountRegistrationWizard wizard;
-
- public AccountRegistrationPanel(
- AccountRegistrationWizard accountWizard,
- boolean isPreferredWizard)
- {
- super(new BorderLayout(5, 5));
-
- this.wizard = accountWizard;
-
- // Obtain the simple form in order to initialize all predefined
- // values.
- // TODO: Use the simple form instead of creating new fields and
- // panels here.
- wizard.getSimpleForm(false);
-
- JLabel protocolLabel = new JLabel();
- JPanel inputRegisterPanel = new JPanel(new BorderLayout());
-
- this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-
- this.setOpaque(false);
-
- this.inputPanel.setOpaque(false);
- this.labelsPanel.setOpaque(false);
- this.fieldsPanel.setOpaque(false);
- this.emptyPanel.setOpaque(false);
- inputRegisterPanel.setOpaque(false);
- this.iconDescriptionPanel.setOpaque(false);
-
- this.add(inputRegisterPanel, BorderLayout.CENTER);
-
- inputRegisterPanel.add(inputPanel, BorderLayout.NORTH);
-
- if (((wizard instanceof ExtendedAccountRegistrationWizard)
- && ((ExtendedAccountRegistrationWizard) wizard)
- .isSignupSupported()) || wizard.isWebSignupSupported())
- {
- String textKey =
- isPreferredWizard ? "plugin.simpleaccregwizz.SPECIAL_SIGNUP"
- : "plugin.simpleaccregwizz.SIGNUP";
- JLabel signupLabel =
- new JLabel("<html><a href=''>"
- + Resources.getString(textKey) + "</a></html>",
- JLabel.RIGHT);
-
- signupLabel.setFont(signupLabel.getFont().deriveFont(10f));
- signupLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
- signupLabel.setToolTipText(
- Resources.getString(
- "plugin.simpleaccregwizz.SPECIAL_SIGNUP"));
- signupLabel.addMouseListener(new MouseAdapter()
- {
- @Override
- public void mousePressed(MouseEvent e)
- {
- try
- {
- if ((wizard
- instanceof ExtendedAccountRegistrationWizard)
- && ((ExtendedAccountRegistrationWizard) wizard)
- .isSignupSupported())
- {
- showCreateAccountWindow(wizard);
- dispose();
- }
- else if (wizard.isWebSignupSupported())
- {
- wizard.webSignup();
- }
- }
- catch (UnsupportedOperationException ex)
- {
- // This should not happen, because we check if the
- // operation is supported, before adding the sign
- // up.
- logger.error("The web sign up is not supported.",
- ex);
- }
- }
- });
-
- inputRegisterPanel.add(signupLabel, BorderLayout.SOUTH);
- }
-
- this.inputPanel.add(labelsPanel, BorderLayout.WEST);
-
- this.inputPanel.add(fieldsPanel, BorderLayout.CENTER);
-
- this.iconDescriptionPanel.add(
- protocolLabel, BorderLayout.NORTH);
-
- protocolLabel.setFont(
- protocolLabel.getFont().deriveFont(Font.BOLD, 14f));
- this.usernameExampleLabel.setForeground(Color.DARK_GRAY);
- this.usernameExampleLabel.setFont(
- usernameExampleLabel.getFont().deriveFont(8f));
- this.emptyPanel.setMaximumSize(new Dimension(40, 25));
-
- this.labelsPanel.add(usernameLabel);
- this.labelsPanel.add(emptyPanel);
- this.labelsPanel.add(passwordLabel);
-
- this.fieldsPanel.add(usernameField);
- this.fieldsPanel.add(usernameExampleLabel);
- this.fieldsPanel.add(passwordField);
-
- this.usernameExampleLabel.setText(wizard.getUserNameExample());
-
- protocolLabel.setText(wizard.getProtocolName());
-
- Image image = null;
- try
- {
- image = ImageIO.read(
- new ByteArrayInputStream(wizard.getPageImage()));
- }
- catch (IOException e)
- {
- logger.error("Unable to load image.", e);
- }
-
- if (image != null)
- {
- image = image.getScaledInstance(28, 28, Image.SCALE_SMOOTH);
-
- protocolLabel.setIcon(new ImageIcon(image));
- }
-
- if (isPreferredWizard)
- {
- descriptionArea.setBorder(BorderFactory
- .createEmptyBorder(10, 0, 0, 0));
-
- descriptionArea.setFont(
- descriptionArea.getFont().deriveFont(10f));
- descriptionArea.setPreferredSize(new Dimension(220, 50));
- descriptionArea.setLineWrap(true);
- descriptionArea.setWrapStyleWord(true);
- descriptionArea.setText(wizard.getProtocolDescription());
- descriptionArea.setEditable(false);
- descriptionArea.setOpaque(false);
-
- this.iconDescriptionPanel.add(
- descriptionArea, BorderLayout.CENTER);
-
- this.add(iconDescriptionPanel, BorderLayout.WEST);
- }
- else
- {
- this.add(iconDescriptionPanel, BorderLayout.NORTH);
- }
- }
-
- @Override
- public void paintComponent(Graphics g)
- {
- // do the superclass behavior first
- super.paintComponent(g);
-
- g = g.create();
- try
- {
- AntialiasingManager.activateAntialiasing(g);
-
- Graphics2D g2d = (Graphics2D) g;
-
- // paint the background with the chosen color
- g2d.setColor(Color.GRAY);
- g2d.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 15, 15);
- }
- finally
- {
- g.dispose();
- }
- }
-
- public boolean isFilled()
- {
- String username = usernameField.getText();
- return (username != null) && (username.length() > 0);
- }
-
- public void signin() throws OperationFailedException
- {
- ProtocolProviderService protocolProvider =
- wizard.signin(usernameField.getText(), new String(passwordField
- .getPassword()));
-
- saveAccountWizard(protocolProvider, wizard);
- }
- }
-
- /**
- * Adds a simple account registration form corresponding to the given
- * <tt>AccountRegistrationWizard</tt>.
- *
- * @param wizard the <tt>AccountRegistrationWizard</tt>, which gives us
- * information to fill our simple form.
- */
- private void addAccountRegistrationForm(AccountRegistrationWizard wizard)
- {
- // We don't need to add wizards that are not interested in a
- // simple sign in form.
- if (!wizard.isSimpleFormEnabled())
- return;
-
- String preferredWizardName
- = Resources.getLoginProperty("impl.gui.PREFERRED_ACCOUNT_WIZARD");
-
- AccountRegistrationPanel accountPanel;
-
- if (preferredWizardName != null
- && preferredWizardName.equals(wizard.getClass().getName()))
- {
- accountPanel = new AccountRegistrationPanel(wizard, true);
-
- mainAccountsPanel.add(
- accountPanel,
- BorderLayout.NORTH);
-
- mainAccountsPanel.validate();
- }
- else
- {
- accountPanel = new AccountRegistrationPanel(wizard, false);
-
- accountsPanel.add(accountPanel);
-
- accountsPanel.validate();
- }
-
- this.registrationForms.add(accountPanel);
- }
-
- /**
- * Handles the event triggered by the "service.gui.SIGN_IN" button.
- */
- private class SigninActionListener implements ActionListener
- {
- public void actionPerformed(ActionEvent evt)
- {
- JButton button = (JButton) evt.getSource();
-
- if (button.equals(signinButton))
- {
- Iterator<AccountRegistrationPanel> regIterator =
- registrationForms.iterator();
-
- if (regIterator.hasNext())
- setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
-
- while(regIterator.hasNext())
- {
- AccountRegistrationPanel regForm = regIterator.next();
-
- try
- {
- if (regForm.isFilled())
- regForm.signin();
- }
- catch (OperationFailedException e)
- {
- if (logger.isDebugEnabled())
- logger.debug("The sign in operation has failed.");
-
- PopupDialog popupDialog
- = SimpleAccountRegistrationActivator.getUIService()
- .getPopupDialog();
-
- if (e.getErrorCode()
- == OperationFailedException.ILLEGAL_ARGUMENT)
- {
- popupDialog.showMessagePopupDialog(
- Resources.getString(
- "service.gui.USERNAME_NULL"),
- Resources.getString(
- "service.gui.ERROR"),
- PopupDialog.ERROR_MESSAGE);
- }
- else if (e.getErrorCode()
- == OperationFailedException
- .IDENTIFICATION_CONFLICT)
- {
- popupDialog.showMessagePopupDialog(
- Resources.getString(
- "service.gui.USER_EXISTS_ERROR"),
- Resources.getString(
- "service.gui.ERROR"),
- PopupDialog.ERROR_MESSAGE);
- }
- else if (e.getErrorCode()
- == OperationFailedException
- .SERVER_NOT_SPECIFIED)
- {
- popupDialog.showMessagePopupDialog(
- Resources.getString(
- "service.gui.SPECIFY_SERVER"),
- Resources.getString(
- "service.gui.ERROR"),
- PopupDialog.ERROR_MESSAGE);
- }
- }
- }
- }
-
- InitialAccountRegistrationFrame initialAccountRegistrationFrame =
- InitialAccountRegistrationFrame.this;
- initialAccountRegistrationFrame.setVisible(false);
- initialAccountRegistrationFrame.dispose();
- }
- }
-
- /**
- * Saves the (protocol provider, wizard) pair in through the
- * <tt>ConfigurationService</tt>.
- *
- * @param protocolProvider the protocol provider to save
- * @param wizard the wizard to save
- */
- private void saveAccountWizard(ProtocolProviderService protocolProvider,
- AccountRegistrationWizard wizard)
- {
- String prefix = "net.java.sip.communicator.impl.gui.accounts";
-
- ConfigurationService configService = getConfigurationService();
-
- List<String> accounts = configService.getPropertyNamesByPrefix(prefix, true);
- boolean savedAccount = false;
-
- for (String accountRootPropName : accounts)
- {
- String accountUID = configService.getString(accountRootPropName);
-
- if (accountUID.equals(protocolProvider.getAccountID()
- .getAccountUniqueID()))
- {
-
- configService.setProperty(accountRootPropName + ".wizard",
- wizard.getClass().getName().replace('.', '_'));
-
- savedAccount = true;
- }
- }
-
- if (!savedAccount)
- {
- String accNodeName =
- "acc" + Long.toString(System.currentTimeMillis());
-
- String accountPackage =
- "net.java.sip.communicator.impl.gui.accounts." + accNodeName;
-
- configService.setProperty(accountPackage, protocolProvider
- .getAccountID().getAccountUniqueID());
-
- configService.setProperty(accountPackage + ".wizard", wizard);
- }
- }
-
- /**
- * Returns the <tt>ConfigurationService</tt>.
- *
- * @return the <tt>ConfigurationService</tt>
- */
- public ConfigurationService getConfigurationService()
- {
- if (configurationService == null)
- {
- BundleContext bundleContext =
- SimpleAccountRegistrationActivator.bundleContext;
- ServiceReference configReference =
- bundleContext.getServiceReference(ConfigurationService.class
- .getName());
-
- configurationService =
- (ConfigurationService) bundleContext
- .getService(configReference);
- }
- return configurationService;
- }
-
- /**
- * Creates the title component.
- * @return the newly created title component
- */
- private JComponent createTitleComponent()
- {
- JTextPane titlePane = new JTextPane();
- SimpleAttributeSet aSet = new SimpleAttributeSet();
- StyleConstants.setAlignment(aSet, StyleConstants.ALIGN_CENTER);
- StyleConstants.setBold(aSet, true);
- StyleConstants.setFontFamily(aSet, titlePane.getFont().getFamily());
-
- titlePane.setParagraphAttributes(aSet, true);
- titlePane.setEditable(false);
- titlePane.setText(Resources.getString(
- "plugin.simpleaccregwizz.INITIAL_ACCOUNT_REGISTRATION"));
- titlePane.setOpaque(false);
-
- return titlePane;
- }
-
- /**
- * Show the create account window for the given wizard.
- *
- * @param wizard the <tt>AccountRegistrationWizard</tt>, for which we're
- * opening the window
- */
- private void showCreateAccountWindow(AccountRegistrationWizard wizard)
- {
- CreateAccountWindow createAccountWindow
- = SimpleAccountRegistrationActivator
- .getUIService().getCreateAccountWindow();
-
- createAccountWindow.setSelectedWizard(wizard, true);
-
- if (wizard instanceof ExtendedAccountRegistrationWizard)
- {
- ((ExtendedAccountRegistrationWizard) wizard).setCreateAccountView();
- }
-
- createAccountWindow.setVisible(true);
- }
-
- @Override
- protected void close(boolean isEscaped)
- {
- }
-}
+package net.java.sip.communicator.plugin.simpleaccreg;
+
+import java.awt.*;
+import java.awt.event.*;
+import java.io.*;
+import java.util.*;
+import java.util.List;
+
+import javax.imageio.*;
+import javax.swing.*;
+import javax.swing.text.*;
+
+import net.java.sip.communicator.service.contactlist.*;
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.protocol.*;
+import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.plugin.desktoputil.*;
+
+import org.jitsi.service.configuration.*;
+import org.osgi.framework.*;
+
+/**
+ * The <tt>NoAccountFoundPage</tt> is the page shown in the account
+ * registration wizard shown in the beginning of the program, when no registered
+ * accounts are found.
+ *
+ * @author Yana Stamcheva
+ * @author Lubomir Marinov
+ */
+public class InitialAccountRegistrationFrame
+ extends SIPCommFrame
+{
+ /**
+ * Serial version UID.
+ */
+ private static final long serialVersionUID = 0L;
+
+ private ConfigurationService configurationService;
+
+ /**
+ * The <tt>Logger</tt> used by this <tt>InitialAccountRegistrationFrame</tt>
+ * for logging output.
+ */
+ private final Logger logger
+ = Logger.getLogger(InitialAccountRegistrationFrame.class);
+
+ private final TransparentPanel mainAccountsPanel
+ = new TransparentPanel(new BorderLayout(10, 10));
+
+ private final TransparentPanel accountsPanel
+ = new TransparentPanel(new GridLayout(0, 2, 10, 10));
+
+ private final TransparentPanel southPanel
+ = new TransparentPanel(new BorderLayout());
+
+ private final JButton signinButton
+ = new JButton(Resources.getString("service.gui.SIGN_IN"));
+
+ private final Collection<AccountRegistrationPanel> registrationForms =
+ new Vector<AccountRegistrationPanel>();
+
+ /**
+ * Creates an instance of <tt>NoAccountFoundPage</tt>.
+ */
+ public InitialAccountRegistrationFrame()
+ {
+ super(false);
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ TransparentPanel mainPanel
+ = new TransparentPanel(new BorderLayout());
+ mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+ JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
+ southPanel.add(buttonPanel, BorderLayout.EAST);
+ JButton cancelButton
+ = new JButton(Resources.getString("service.gui.CANCEL"));
+
+ this.setTitle(Resources.getString("service.gui.SIGN_IN"));
+
+ this.setIconImage(
+ Resources.getImage("service.gui.SIP_COMMUNICATOR_LOGO").getImage());
+
+ // In order to have the same icon when using option panes
+ JOptionPane.getRootFrame().setIconImage(
+ Resources.getImage("service.gui.SIP_COMMUNICATOR_LOGO").getImage());
+
+ mainAccountsPanel.setBorder(
+ BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+ this.getContentPane().add(mainPanel);
+
+ mainPanel.add(createTitleComponent(), BorderLayout.NORTH);
+ JScrollPane scroller = new JScrollPane(mainAccountsPanel);
+ scroller.setOpaque(false);
+ scroller.getViewport().setOpaque(false);
+ mainPanel.add(scroller, BorderLayout.CENTER);
+ mainPanel.add(southPanel, BorderLayout.SOUTH);
+
+ mainAccountsPanel.add(accountsPanel, BorderLayout.CENTER);
+
+ initProvisioningPanel();
+
+ mainAccountsPanel.setOpaque(false);
+ accountsPanel.setOpaque(false);
+ buttonPanel.setOpaque(false);
+
+ SigninActionListener actionListener = new SigninActionListener();
+
+ signinButton.addActionListener(actionListener);
+ cancelButton.addActionListener(actionListener);
+
+ buttonPanel.add(signinButton);
+ buttonPanel.add(cancelButton);
+
+ this.getRootPane().setDefaultButton(signinButton);
+
+ this.initAccountWizards();
+
+ // Create the default group
+ String groupName
+ = Resources.getApplicationProperty("impl.gui.DEFAULT_GROUP_NAME");
+
+ if(groupName != null && groupName.length() > 0)
+ {
+ MetaContactListService contactList =
+ SimpleAccountRegistrationActivator.getContactList();
+ Iterator<MetaContactGroup> iter
+ = contactList.getRoot().getSubgroups();
+ while (iter.hasNext())
+ {
+ MetaContactGroup gr = iter.next();
+ if (groupName.equals(gr.getGroupName()))
+ return;
+ }
+
+ contactList
+ .createMetaContactGroup(contactList.getRoot(), groupName);
+
+ getConfigurationService()
+ .setProperty(
+ "net.java.sip.communicator.impl.gui.addcontact.lastContactParent",
+ groupName);
+ }
+
+ this.getRootPane().validate();
+ this.pack();
+
+ // if the screen height is sufficiently large, expand the window size
+ // so that no scrolling is needed
+ if (scroller.getViewport().getHeight()
+ < Toolkit.getDefaultToolkit().getScreenSize().getHeight() - 230)
+ {
+ this.setSize(scroller.getViewport().getWidth() + 100,
+ scroller.getViewport().getHeight() + 150);
+ }
+ else
+ {
+ // otherwise add some width so that no horizontal scrolling is
+ // needed
+ this.setSize(this.getSize().width + 20,
+ this.getSize().height - 10);
+ }
+ }
+
+ /**
+ * Initializes the provisioning panel.
+ */
+ private void initProvisioningPanel()
+ {
+ String isInitialProv = SimpleAccountRegistrationActivator.getResources()
+ .getSettingsString(
+ "plugin.provisioning.IS_INITIAL_PROVISIONING_LINK");
+
+ if (isInitialProv != null && isInitialProv.length() > 0
+ && !Boolean.parseBoolean(isInitialProv))
+ return;
+
+ String useProvisioningString = SimpleAccountRegistrationActivator
+ .getResources().getI18NString("service.gui.USE_PROVISIONING");
+
+ final JLabel provisioningLabel =
+ new JLabel("<html><a href=''>"
+ + useProvisioningString
+ + "</a></html>");
+
+ provisioningLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
+ provisioningLabel.setToolTipText(useProvisioningString);
+
+ provisioningLabel.addMouseListener(new MouseAdapter()
+ {
+ @Override
+ public void mousePressed(MouseEvent e)
+ {
+ ConfigurationContainer configContainer
+ = SimpleAccountRegistrationActivator.getUIService()
+ .getConfigurationContainer();
+
+ ConfigurationForm advancedConfigForm
+ = SimpleAccountRegistrationActivator.getAdvancedConfigForm();
+
+ if (advancedConfigForm != null)
+ {
+ configContainer.setSelected(advancedConfigForm);
+
+ if (advancedConfigForm instanceof ConfigurationContainer)
+ {
+ ConfigurationForm provisioningForm
+ = SimpleAccountRegistrationActivator
+ .getProvisioningConfigForm();
+
+ if (provisioningForm != null)
+ {
+ ((ConfigurationContainer) advancedConfigForm)
+ .setSelected(provisioningForm);
+ }
+ }
+ }
+
+ configContainer.setVisible(true);
+ }
+ });
+
+ southPanel.add(provisioningLabel, BorderLayout.WEST);
+ }
+
+ private void initAccountWizards()
+ {
+ String simpleWizards
+ = SimpleAccountRegistrationActivator.getConfigService()
+ .getString("plugin.simpleaccreg.PROTOCOL_ORDER");
+
+ StringTokenizer tokenizer = new StringTokenizer(simpleWizards, "|");
+
+ ServiceReference[] serviceRefs = null;
+ while (tokenizer.hasMoreTokens())
+ {
+ String protocolToken = tokenizer.nextToken();
+
+ String osgiFilter = "("
+ + ProtocolProviderFactory.PROTOCOL
+ + "="+protocolToken+")";
+
+ try
+ {
+ serviceRefs = SimpleAccountRegistrationActivator.bundleContext
+ .getServiceReferences(
+ AccountRegistrationWizard.class.getName(), osgiFilter);
+
+ if (serviceRefs != null && serviceRefs.length > 0)
+ {
+ AccountRegistrationWizard wizard
+ = (AccountRegistrationWizard)
+
+ SimpleAccountRegistrationActivator
+ .bundleContext.getService(serviceRefs[0]);
+
+ this.addAccountRegistrationForm(wizard);
+ }
+ }
+ catch (InvalidSyntaxException ex)
+ {
+ logger.error("GuiActivator : ", ex);
+ }
+ }
+ }
+
+ /**
+ * The account registration panel.
+ */
+ private class AccountRegistrationPanel
+ extends JPanel
+ {
+ /**
+ * Serial version UID.
+ */
+ private static final long serialVersionUID = 0L;
+
+ private JLabel usernameLabel
+ = new JLabel(Resources.getString(
+ "plugin.simpleaccregwizz.LOGIN_USERNAME"));
+
+ private JLabel passwordLabel
+ = new JLabel(Resources.getString("service.gui.PASSWORD"));
+
+ private JTextField usernameField = new JTextField();
+
+ private JLabel usernameExampleLabel = new JLabel();
+
+ private JPasswordField passwordField = new JPasswordField();
+
+ private JPanel labelsPanel = new JPanel(new GridLayout(0, 1, 5, 0));
+
+ private JPanel fieldsPanel = new JPanel(new GridLayout(0, 1, 5, 0));
+
+ private JPanel emptyPanel = new JPanel();
+
+ private JPanel inputPanel = new JPanel(new BorderLayout(5, 5));
+
+ private JPanel iconDescriptionPanel = new JPanel(new BorderLayout());
+
+ private JTextArea descriptionArea = new JTextArea();
+
+ private final AccountRegistrationWizard wizard;
+
+ public AccountRegistrationPanel(
+ AccountRegistrationWizard accountWizard,
+ boolean isPreferredWizard)
+ {
+ super(new BorderLayout(5, 5));
+
+ this.wizard = accountWizard;
+
+ // Obtain the simple form in order to initialize all predefined
+ // values.
+ // TODO: Use the simple form instead of creating new fields and
+ // panels here.
+ wizard.getSimpleForm(false);
+
+ JLabel protocolLabel = new JLabel();
+ JPanel inputRegisterPanel = new JPanel(new BorderLayout());
+
+ this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+ this.setOpaque(false);
+
+ this.inputPanel.setOpaque(false);
+ this.labelsPanel.setOpaque(false);
+ this.fieldsPanel.setOpaque(false);
+ this.emptyPanel.setOpaque(false);
+ inputRegisterPanel.setOpaque(false);
+ this.iconDescriptionPanel.setOpaque(false);
+
+ this.add(inputRegisterPanel, BorderLayout.CENTER);
+
+ inputRegisterPanel.add(inputPanel, BorderLayout.NORTH);
+
+ if (((wizard instanceof ExtendedAccountRegistrationWizard)
+ && ((ExtendedAccountRegistrationWizard) wizard)
+ .isSignupSupported()) || wizard.isWebSignupSupported())
+ {
+ String textKey =
+ isPreferredWizard ? "plugin.simpleaccregwizz.SPECIAL_SIGNUP"
+ : "plugin.simpleaccregwizz.SIGNUP";
+ JLabel signupLabel =
+ new JLabel("<html><a href=''>"
+ + Resources.getString(textKey) + "</a></html>",
+ JLabel.RIGHT);
+
+ signupLabel.setFont(signupLabel.getFont().deriveFont(10f));
+ signupLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
+ signupLabel.setToolTipText(
+ Resources.getString(
+ "plugin.simpleaccregwizz.SPECIAL_SIGNUP"));
+ signupLabel.addMouseListener(new MouseAdapter()
+ {
+ @Override
+ public void mousePressed(MouseEvent e)
+ {
+ try
+ {
+ if ((wizard
+ instanceof ExtendedAccountRegistrationWizard)
+ && ((ExtendedAccountRegistrationWizard) wizard)
+ .isSignupSupported())
+ {
+ showCreateAccountWindow(wizard);
+ dispose();
+ }
+ else if (wizard.isWebSignupSupported())
+ {
+ wizard.webSignup();
+ }
+ }
+ catch (UnsupportedOperationException ex)
+ {
+ // This should not happen, because we check if the
+ // operation is supported, before adding the sign
+ // up.
+ logger.error("The web sign up is not supported.",
+ ex);
+ }
+ }
+ });
+
+ inputRegisterPanel.add(signupLabel, BorderLayout.SOUTH);
+ }
+
+ this.inputPanel.add(labelsPanel, BorderLayout.WEST);
+
+ this.inputPanel.add(fieldsPanel, BorderLayout.CENTER);
+
+ this.iconDescriptionPanel.add(
+ protocolLabel, BorderLayout.NORTH);
+
+ protocolLabel.setFont(
+ protocolLabel.getFont().deriveFont(Font.BOLD, 14f));
+ this.usernameExampleLabel.setForeground(Color.DARK_GRAY);
+ this.usernameExampleLabel.setFont(
+ usernameExampleLabel.getFont().deriveFont(8f));
+ this.emptyPanel.setMaximumSize(new Dimension(40, 25));
+
+ this.labelsPanel.add(usernameLabel);
+ this.labelsPanel.add(emptyPanel);
+ this.labelsPanel.add(passwordLabel);
+
+ this.fieldsPanel.add(usernameField);
+ this.fieldsPanel.add(usernameExampleLabel);
+ this.fieldsPanel.add(passwordField);
+
+ this.usernameExampleLabel.setText(wizard.getUserNameExample());
+
+ protocolLabel.setText(wizard.getProtocolName());
+
+ Image image = null;
+ try
+ {
+ image = ImageIO.read(
+ new ByteArrayInputStream(wizard.getPageImage()));
+ }
+ catch (IOException e)
+ {
+ logger.error("Unable to load image.", e);
+ }
+
+ if (image != null)
+ {
+ image = image.getScaledInstance(28, 28, Image.SCALE_SMOOTH);
+
+ protocolLabel.setIcon(new ImageIcon(image));
+ }
+
+ if (isPreferredWizard)
+ {
+ descriptionArea.setBorder(BorderFactory
+ .createEmptyBorder(10, 0, 0, 0));
+
+ descriptionArea.setFont(
+ descriptionArea.getFont().deriveFont(10f));
+ descriptionArea.setPreferredSize(new Dimension(220, 50));
+ descriptionArea.setLineWrap(true);
+ descriptionArea.setWrapStyleWord(true);
+ descriptionArea.setText(wizard.getProtocolDescription());
+ descriptionArea.setEditable(false);
+ descriptionArea.setOpaque(false);
+
+ this.iconDescriptionPanel.add(
+ descriptionArea, BorderLayout.CENTER);
+
+ this.add(iconDescriptionPanel, BorderLayout.WEST);
+ }
+ else
+ {
+ this.add(iconDescriptionPanel, BorderLayout.NORTH);
+ }
+ }
+
+ @Override
+ public void paintComponent(Graphics g)
+ {
+ // do the superclass behavior first
+ super.paintComponent(g);
+
+ g = g.create();
+ try
+ {
+ AntialiasingManager.activateAntialiasing(g);
+
+ Graphics2D g2d = (Graphics2D) g;
+
+ // paint the background with the chosen color
+ g2d.setColor(Color.GRAY);
+ g2d.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 15, 15);
+ }
+ finally
+ {
+ g.dispose();
+ }
+ }
+
+ public boolean isFilled()
+ {
+ String username = usernameField.getText();
+ return (username != null) && (username.length() > 0);
+ }
+
+ public void signin() throws OperationFailedException
+ {
+ ProtocolProviderService protocolProvider =
+ wizard.signin(usernameField.getText(), new String(passwordField
+ .getPassword()));
+
+ saveAccountWizard(protocolProvider, wizard);
+ }
+ }
+
+ /**
+ * Adds a simple account registration form corresponding to the given
+ * <tt>AccountRegistrationWizard</tt>.
+ *
+ * @param wizard the <tt>AccountRegistrationWizard</tt>, which gives us
+ * information to fill our simple form.
+ */
+ private void addAccountRegistrationForm(AccountRegistrationWizard wizard)
+ {
+ // We don't need to add wizards that are not interested in a
+ // simple sign in form.
+ if (!wizard.isSimpleFormEnabled())
+ return;
+
+ String preferredWizardName
+ = Resources.getLoginProperty("impl.gui.PREFERRED_ACCOUNT_WIZARD");
+
+ AccountRegistrationPanel accountPanel;
+
+ if (preferredWizardName != null
+ && preferredWizardName.equals(wizard.getClass().getName()))
+ {
+ accountPanel = new AccountRegistrationPanel(wizard, true);
+
+ mainAccountsPanel.add(
+ accountPanel,
+ BorderLayout.NORTH);
+
+ mainAccountsPanel.validate();
+ }
+ else
+ {
+ accountPanel = new AccountRegistrationPanel(wizard, false);
+
+ accountsPanel.add(accountPanel);
+
+ accountsPanel.validate();
+ }
+
+ this.registrationForms.add(accountPanel);
+ }
+
+ /**
+ * Handles the event triggered by the "service.gui.SIGN_IN" button.
+ */
+ private class SigninActionListener implements ActionListener
+ {
+ public void actionPerformed(ActionEvent evt)
+ {
+ JButton button = (JButton) evt.getSource();
+
+ if (button.equals(signinButton))
+ {
+ Iterator<AccountRegistrationPanel> regIterator =
+ registrationForms.iterator();
+
+ if (regIterator.hasNext())
+ setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
+
+ while(regIterator.hasNext())
+ {
+ AccountRegistrationPanel regForm = regIterator.next();
+
+ try
+ {
+ if (regForm.isFilled())
+ regForm.signin();
+ }
+ catch (OperationFailedException e)
+ {
+ if (logger.isDebugEnabled())
+ logger.debug("The sign in operation has failed.");
+
+ PopupDialog popupDialog
+ = SimpleAccountRegistrationActivator.getUIService()
+ .getPopupDialog();
+
+ if (e.getErrorCode()
+ == OperationFailedException.ILLEGAL_ARGUMENT)
+ {
+ popupDialog.showMessagePopupDialog(
+ Resources.getString(
+ "service.gui.USERNAME_NULL"),
+ Resources.getString(
+ "service.gui.ERROR"),
+ PopupDialog.ERROR_MESSAGE);
+ }
+ else if (e.getErrorCode()
+ == OperationFailedException
+ .IDENTIFICATION_CONFLICT)
+ {
+ popupDialog.showMessagePopupDialog(
+ Resources.getString(
+ "service.gui.USER_EXISTS_ERROR"),
+ Resources.getString(
+ "service.gui.ERROR"),
+ PopupDialog.ERROR_MESSAGE);
+ }
+ else if (e.getErrorCode()
+ == OperationFailedException
+ .SERVER_NOT_SPECIFIED)
+ {
+ popupDialog.showMessagePopupDialog(
+ Resources.getString(
+ "service.gui.SPECIFY_SERVER"),
+ Resources.getString(
+ "service.gui.ERROR"),
+ PopupDialog.ERROR_MESSAGE);
+ }
+ }
+ }
+ }
+
+ InitialAccountRegistrationFrame initialAccountRegistrationFrame =
+ InitialAccountRegistrationFrame.this;
+ initialAccountRegistrationFrame.setVisible(false);
+ initialAccountRegistrationFrame.dispose();
+ }
+ }
+
+ /**
+ * Saves the (protocol provider, wizard) pair in through the
+ * <tt>ConfigurationService</tt>.
+ *
+ * @param protocolProvider the protocol provider to save
+ * @param wizard the wizard to save
+ */
+ private void saveAccountWizard(ProtocolProviderService protocolProvider,
+ AccountRegistrationWizard wizard)
+ {
+ String prefix = "net.java.sip.communicator.impl.gui.accounts";
+
+ ConfigurationService configService = getConfigurationService();
+
+ List<String> accounts = configService.getPropertyNamesByPrefix(prefix, true);
+ boolean savedAccount = false;
+
+ for (String accountRootPropName : accounts)
+ {
+ String accountUID = configService.getString(accountRootPropName);
+
+ if (accountUID.equals(protocolProvider.getAccountID()
+ .getAccountUniqueID()))
+ {
+
+ configService.setProperty(accountRootPropName + ".wizard",
+ wizard.getClass().getName().replace('.', '_'));
+
+ savedAccount = true;
+ }
+ }
+
+ if (!savedAccount)
+ {
+ String accNodeName =
+ "acc" + Long.toString(System.currentTimeMillis());
+
+ String accountPackage =
+ "net.java.sip.communicator.impl.gui.accounts." + accNodeName;
+
+ configService.setProperty(accountPackage, protocolProvider
+ .getAccountID().getAccountUniqueID());
+
+ configService.setProperty(accountPackage + ".wizard", wizard);
+ }
+ }
+
+ /**
+ * Returns the <tt>ConfigurationService</tt>.
+ *
+ * @return the <tt>ConfigurationService</tt>
+ */
+ public ConfigurationService getConfigurationService()
+ {
+ if (configurationService == null)
+ {
+ BundleContext bundleContext =
+ SimpleAccountRegistrationActivator.bundleContext;
+ ServiceReference configReference =
+ bundleContext.getServiceReference(ConfigurationService.class
+ .getName());
+
+ configurationService =
+ (ConfigurationService) bundleContext
+ .getService(configReference);
+ }
+ return configurationService;
+ }
+
+ /**
+ * Creates the title component.
+ * @return the newly created title component
+ */
+ private JComponent createTitleComponent()
+ {
+ JTextPane titlePane = new JTextPane();
+ SimpleAttributeSet aSet = new SimpleAttributeSet();
+ StyleConstants.setAlignment(aSet, StyleConstants.ALIGN_CENTER);
+ StyleConstants.setBold(aSet, true);
+ StyleConstants.setFontFamily(aSet, titlePane.getFont().getFamily());
+
+ titlePane.setParagraphAttributes(aSet, true);
+ titlePane.setEditable(false);
+ titlePane.setText(Resources.getString(
+ "plugin.simpleaccregwizz.INITIAL_ACCOUNT_REGISTRATION"));
+ titlePane.setOpaque(false);
+
+ return titlePane;
+ }
+
+ /**
+ * Show the create account window for the given wizard.
+ *
+ * @param wizard the <tt>AccountRegistrationWizard</tt>, for which we're
+ * opening the window
+ */
+ private void showCreateAccountWindow(AccountRegistrationWizard wizard)
+ {
+ CreateAccountWindow createAccountWindow
+ = SimpleAccountRegistrationActivator
+ .getUIService().getCreateAccountWindow();
+
+ createAccountWindow.setSelectedWizard(wizard, true);
+
+ if (wizard instanceof ExtendedAccountRegistrationWizard)
+ {
+ ((ExtendedAccountRegistrationWizard) wizard).setCreateAccountView();
+ }
+
+ createAccountWindow.setVisible(true);
+ }
+
+ @Override
+ protected void close(boolean isEscaped)
+ {
+ }
+}