/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.plugin.jabberaccregwizz; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.util.*; import org.jivesoftware.smack.*; /** * Dialog for adding a new Jabber account. * * @author Nicolas Grandclaude * @author Yana Stamcheva */ public class JabberAccountCreationForm extends TransparentPanel implements JabberAccountCreationFormService { /** * Serial version UID. */ private static final long serialVersionUID = 0L; private static final Logger logger = Logger .getLogger(JabberAccountCreationForm.class); private JabberServerChooserDialog jabberServerChooserDialog; // Panels private JPanel userIDPassPanel = new TransparentPanel(new BorderLayout(10, 10)); private JPanel labelsPanel = new TransparentPanel(new GridLayout(0, 1, 10, 10)); private JPanel valuesPanel = new TransparentPanel(new GridLayout(0, 1, 10, 10)); private JPanel serverPanel = new TransparentPanel(new BorderLayout(10, 10)); // Labels private JLabel serverLabel = new JLabel(Resources.getString("plugin.jabberaccregwizz.CSERVER")); private JLabel userIDLabel = new JLabel(Resources.getString("plugin.jabberaccregwizz.USERNAME")); private JLabel passLabel = new JLabel(Resources.getString("service.gui.PASSWORD")); private JLabel pass2Label = new JLabel(Resources.getString( "plugin.jabberaccregwizz.PASSWORD_CONFIRM")); private JLabel portLabel = new JLabel(Resources.getString("service.gui.PORT")); // Textfield private JTextField serverField = new JTextField(); private JTextField userIDField = new JTextField(); private JPasswordField passField = new JPasswordField(); private JPasswordField pass2Field = new JPasswordField(); private JTextField portField = new JTextField("5222"); // Button private JButton chooseButton = new JButton(); // Smack objects private Connection xmppConnection = null; private AccountManager accountManager = null; /** * The error text pane. */ private final JTextPane errorPane = new JTextPane(); /** * Creates an instance of <tt>JabberNewAccountDialog</tt>. */ public JabberAccountCreationForm() { initErrorArea(); labelsPanel.add(serverLabel); labelsPanel.add(userIDLabel); labelsPanel.add(passLabel); labelsPanel.add(pass2Label); labelsPanel.add(portLabel); userIDField.setColumns(30); serverPanel.add(serverField, BorderLayout.CENTER); serverPanel.add(chooseButton, BorderLayout.EAST); valuesPanel.add(serverPanel); valuesPanel.add(userIDField); valuesPanel.add(passField); valuesPanel.add(pass2Field); valuesPanel.add(portField); userIDPassPanel.add(labelsPanel, BorderLayout.WEST); userIDPassPanel.add(valuesPanel, BorderLayout.CENTER); chooseButton.setText( Resources.getString("plugin.jabberaccregwizz.CHOOSE")); chooseButton.setMnemonic( Resources.getMnemonic("plugin.jabberaccregwizz.CHOOSE")); // Choose button open the JabberServerChooserDialog chooseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jabberServerChooserDialog = new JabberServerChooserDialog(); if (jabberServerChooserDialog.isOK) // OK pressed in // JabberServerChooserDialog { serverField .setText(jabberServerChooserDialog.serverSelected); } } }); this.add(userIDPassPanel, BorderLayout.CENTER); } /** * Connects to the chosen server and creates a new account with Smack. * * @param server the server domain * @param port TCP port to connect * @param username the account username * @param password the account password */ private boolean createJabberAccount(String server, int port, String username, String password) { try { ConnectionConfiguration config = new ConnectionConfiguration( server, port); xmppConnection = new XMPPConnection(config); xmppConnection.connect(); accountManager = new AccountManager(xmppConnection); accountManager.createAccount(username, password); return true; } catch (XMPPException exc) { logger.error(exc); if (exc.getXMPPError() != null && exc.getXMPPError().getCode() == 409) { showErrorMessage(Resources.getString( "plugin.jabberaccregwizz.USER_EXISTS_ERROR")); logger.error( "Error when created a new Jabber account :" + " user already exist"); } else { showErrorMessage(Resources.getResources().getI18NString( "plugin.jabberaccregwizz.UNKNOWN_XMPP_ERROR", new String[]{exc.getMessage()} )); } return false; } } /** * Creates an account. * * @return the created account */ public NewAccount createAccount() { String userID = userIDField.getText(); char[] password = passField.getPassword(); char[] password2 = pass2Field.getPassword(); String server = serverField.getText(); int port = 5222; // default port try { // custom port, if exists port = Integer.parseInt(portField.getText()); } catch (NumberFormatException e){} if (new String(password).equals(new String(password2))) { // the two password fields are the same boolean result = createJabberAccount(server, port, userID, new String(password)); if (result == true) { return new NewAccount( getCompleteUserID(userID, server), password, server, String.valueOf(port)); } } else { showErrorMessage(Resources.getString( "plugin.jabberaccregwizz.NOT_SAME_PASSWORD")); } return null; } /** * Returns the create account form. * * @return the create account form */ public Component getForm() { return this; } /** * Clears all fields contained in this form. */ public void clear() { userIDField.setText(""); passField.setText(""); pass2Field.setText(""); serverField.setText(Resources.getSettingsString( "plugin.jabberaccregwizz.NEW_ACCOUNT_DEFAULT_SERVER")); errorPane.setText(""); userIDPassPanel.remove(errorPane); } /** * Creates the error area component. */ private void initErrorArea() { SimpleAttributeSet attribs = new SimpleAttributeSet(); StyleConstants.setAlignment(attribs, StyleConstants.ALIGN_RIGHT); StyleConstants.setFontFamily(attribs, errorPane.getFont().getFamily()); StyleConstants.setForeground(attribs, Color.RED); errorPane.setParagraphAttributes(attribs, true); errorPane.setPreferredSize(new Dimension(100, 50)); errorPane.setMinimumSize(new Dimension(100, 50)); errorPane.setOpaque(false); } /** * Shows the given error message. * * @param text the text of the error */ private void showErrorMessage(String text) { errorPane.setText(text); if (errorPane.getParent() == null) userIDPassPanel.add(errorPane, BorderLayout.NORTH); Window ancestor = SwingUtilities.getWindowAncestor(this); if (ancestor != null) ancestor.pack(); } /** * Returns the complete user id, by adding to it the server part. * * @param userID the username * @param server the server address * @return the complete user id */ private String getCompleteUserID(String userID, String server) { if (userID.indexOf("@") < 0 && server != null && server.length() > 0) { return userID + "@" + server; } return userID; } }