diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java
new file mode 100644
index 000000000..6f260610f
--- /dev/null
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java
@@ -0,0 +1,465 @@
+/*
+ * 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.plugin.ircaccregwizz;
+
+import java.util.*;
+
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.*;
+import javax.swing.event.*;
+
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.protocol.*;
+
+/**
+ * The FirstWizardPage is the page, where user could enter the user ID
+ * and the password of the account.
+ *
+ * @author Lionel Ferreira & Michael Tarantino
+ */
+public class FirstWizardPage
+ extends JPanel
+ implements WizardPage,
+ DocumentListener,
+ ActionListener
+{
+ /**
+ * The identifier of this wizard page.
+ */
+ public static final String FIRST_PAGE_IDENTIFIER = "FirstPageIdentifier";
+
+ private JPanel userPassPanel = new JPanel(new BorderLayout(10, 10));
+
+ private JPanel serverPanel = new JPanel(new BorderLayout(10, 10));
+
+ private JPanel optionsPanel = new JPanel(new BorderLayout(10, 10));
+
+ private JPanel labelsPanel = new JPanel();
+
+ private JPanel valuesPanel = new JPanel();
+
+ private JPanel labelsServerPanel = new JPanel();
+
+ private JPanel valuesServerPanel = new JPanel();
+
+ private JPanel labelsOptionsPanel = new JPanel();
+
+ private JPanel valuesOptionsPanel = new JPanel();
+
+ private JLabel infoPassword
+ = new JLabel(Resources.getString("infoPassword"));
+
+ private JLabel nick = new JLabel(Resources.getString("nick"));
+
+ private JLabel passLabel = new JLabel(Resources.getString("password"));
+
+ private JLabel server = new JLabel(Resources.getString("server"));
+
+ private JLabel port = new JLabel(Resources.getString("port"));
+
+ private JLabel existingAccountLabel
+ = new JLabel(Resources.getString("existingAccount"));
+
+ private JPanel emptyPanel = new JPanel();
+
+ private JPanel emptyPanel2 = new JPanel();
+
+ private JLabel nickExampleLabel = new JLabel("Ex: ircuser");
+
+ private JLabel serverExampleLabel = new JLabel("Ex: irc.quakenet.org");
+
+ private JTextField nickField = new JTextField();
+
+ private JPasswordField passField = new JPasswordField();
+
+ private JTextField serverField = new JTextField();
+
+ private JTextField portField = new JTextField();
+
+ private JCheckBox rememberPassBox = new JCheckBox(
+ Resources.getString("rememberPassword"));
+
+ private JCheckBox autoNickChange = new JCheckBox(
+ Resources.getString("autoNickChange"));
+
+ private JCheckBox defaultPort = new JCheckBox(
+ Resources.getString("defaultPort"));
+
+ private JCheckBox passwordNotRequired = new JCheckBox(
+ Resources.getString("passwordNotRequired"));
+
+ private JPanel mainPanel = new JPanel();
+
+ private Object nextPageIdentifier = WizardPage.SUMMARY_PAGE_IDENTIFIER;
+
+ private IrcAccountRegistration registration = null;
+
+ private WizardContainer wizardContainer;
+
+ /**
+ * Creates an instance of FirstWizardPage.
+ *
+ * @param registration the IrcAccountRegistration, where
+ * all data through the wizard are stored
+ * @param wizardContainer the wizardContainer, where this page will
+ * be added
+ */
+ public FirstWizardPage(IrcAccountRegistration registration,
+ WizardContainer wizardContainer)
+ {
+ super(new BorderLayout());
+
+ this.wizardContainer = wizardContainer;
+
+ this.registration = registration;
+
+ this.setPreferredSize(new Dimension(200, 150));
+
+ mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
+
+ this.init();
+
+ this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+
+ this.labelsPanel.setLayout(
+ new BoxLayout(labelsPanel, BoxLayout.Y_AXIS));
+
+ this.valuesPanel.setLayout(
+ new BoxLayout(valuesPanel, BoxLayout.Y_AXIS));
+
+ this.labelsServerPanel.setLayout(
+ new BoxLayout(labelsServerPanel, BoxLayout.Y_AXIS));
+
+ this.valuesServerPanel.setLayout(
+ new BoxLayout(valuesServerPanel, BoxLayout.Y_AXIS));
+
+ this.labelsOptionsPanel.setLayout(
+ new BoxLayout(labelsOptionsPanel, BoxLayout.Y_AXIS));
+
+ this.valuesOptionsPanel.setLayout(
+ new BoxLayout(valuesOptionsPanel, BoxLayout.Y_AXIS));
+
+ this.portField.setEnabled(false);
+ this.passField.setEnabled(false);
+ this.rememberPassBox.setEnabled(false);
+ }
+
+ /**
+ * Initializes all panels, buttons, etc.
+ */
+ private void init()
+ {
+ this.nickField.getDocument().addDocumentListener(this);
+ this.serverField.getDocument().addDocumentListener(this);
+ this.defaultPort.addActionListener(this);
+ this.passwordNotRequired.addActionListener(this);
+
+ this.rememberPassBox.setSelected(true);
+ this.autoNickChange.setSelected(true);
+ this.defaultPort.setSelected(true);
+ this.passwordNotRequired.setSelected(true);
+
+ this.existingAccountLabel.setForeground(Color.RED);
+
+ this.nickExampleLabel.setForeground(Color.GRAY);
+ this.nickExampleLabel.setFont(
+ nickExampleLabel.getFont().deriveFont(8));
+ this.serverExampleLabel.setForeground(Color.GRAY);
+ this.serverExampleLabel.setFont(
+ serverExampleLabel.getFont().deriveFont(8));
+ this.emptyPanel.setMaximumSize(new Dimension(40, 35));
+ this.emptyPanel2.setMaximumSize(new Dimension(40, 35));
+ this.nickExampleLabel.setBorder(
+ BorderFactory.createEmptyBorder(0, 0, 8,0));
+ this.serverExampleLabel.setBorder(
+ BorderFactory.createEmptyBorder(0, 0, 8,0));
+
+ labelsPanel.add(nick);
+ labelsPanel.add(emptyPanel);
+ labelsPanel.add(passLabel);
+
+// labelsPanel.add(server);
+
+ valuesPanel.add(nickField);
+ valuesPanel.add(nickExampleLabel);
+ valuesPanel.add(passField);
+// valuesPanel.add(serverField);
+
+ userPassPanel.add(infoPassword, BorderLayout.NORTH);
+ userPassPanel.add(labelsPanel, BorderLayout.WEST);
+ userPassPanel.add(valuesPanel, BorderLayout.CENTER);
+ userPassPanel.add(passwordNotRequired, BorderLayout.SOUTH);
+// userPassPanel.add(autoChangeNick, BorderLayout.SOUTH);
+
+ userPassPanel.setBorder(BorderFactory
+ .createTitledBorder(Resources.getString(
+ "userAndPassword")));
+
+ labelsServerPanel.add(server);
+ labelsServerPanel.add(emptyPanel2);
+ labelsServerPanel.add(port);
+
+ valuesServerPanel.add(serverField);
+ valuesServerPanel.add(serverExampleLabel);
+ valuesServerPanel.add(portField);
+
+ serverPanel.add(labelsServerPanel, BorderLayout.WEST);
+ serverPanel.add(valuesServerPanel, BorderLayout.CENTER);
+ serverPanel.add(defaultPort, BorderLayout.SOUTH);
+
+ serverPanel.setBorder(BorderFactory.createTitledBorder(
+ Resources.getString("serverIRC")));
+
+ optionsPanel.add(rememberPassBox, BorderLayout.CENTER);
+ optionsPanel.add(autoNickChange, BorderLayout.SOUTH);
+
+ optionsPanel.setBorder(BorderFactory.createTitledBorder(
+ Resources.getString("options")));
+
+ mainPanel.add(userPassPanel);
+ mainPanel.add(serverPanel);
+ mainPanel.add(optionsPanel);
+
+ this.add(mainPanel, BorderLayout.NORTH);
+// this.add(serverPanel, BorderLayout.SOUTH);
+// this.add(optionsPanel, BorderLayout.AFTER_LAST_LINE);
+ }
+
+ /**
+ * Implements the WizardPage.getIdentifier to return
+ * this page identifier.
+ *
+ * @return the Identifier of the first page in this wizard.
+ */
+ public Object getIdentifier()
+ {
+ return FIRST_PAGE_IDENTIFIER;
+ }
+
+ /**
+ * Implements the WizardPage.getNextPageIdentifier to return
+ * the next page identifier - the summary page.
+ *
+ * @return the identifier of the page following this one.
+ */
+ public Object getNextPageIdentifier()
+ {
+ return nextPageIdentifier;
+ }
+
+ /**
+ * Implements the WizardPage.getBackPageIdentifier to return
+ * the next back identifier - the default page.
+ *
+ * @return the identifier of the default wizard page.
+ */
+ public Object getBackPageIdentifier()
+ {
+ return WizardPage.DEFAULT_PAGE_IDENTIFIER;
+ }
+
+ /**
+ * Implements the WizardPage.getWizardForm to return
+ * this panel.
+ *
+ * @return the component to be displayed in this wizard page.
+ */
+ public Object getWizardForm()
+ {
+ return this;
+ }
+
+ /**
+ * Before this page is displayed enables or disables the "Next" wizard
+ * button according to whether the UserID field is empty.
+ */
+ public void pageShowing()
+ {
+ this.setNextButtonAccordingToUserID();
+ }
+
+ /**
+ * Saves the user input when the "Next" wizard buttons is clicked.
+ */
+ public void pageNext()
+ {
+ nextPageIdentifier = SUMMARY_PAGE_IDENTIFIER;
+ userPassPanel.remove(existingAccountLabel);
+
+ registration.setUserID(nickField.getText());
+ registration.setPassword(new String(passField.getPassword()));
+ registration.setServer(new String(serverField.getText()));
+ registration.setPort(new String(portField.getText()));
+ registration.setRememberPassword(rememberPassBox.isSelected());
+ registration.setAutoChangeNick(autoNickChange.isSelected());
+ registration.setRequiredPassword(!passwordNotRequired.isSelected());
+ }
+
+ /**
+ * Enables or disables the "Next" wizard button according to whether the
+ * User ID field is empty.
+ */
+ private void setNextButtonAccordingToUserID()
+ {
+ if (nickField.getText() == null
+ || nickField.getText().equals("")
+ || serverField.getText() == null
+ || serverField.getText().equals("")
+ || (!passwordNotRequired.isSelected()
+ && passField.equals("")))
+ {
+ wizardContainer.setNextFinishButtonEnabled(false);
+ }
+ else
+ {
+ wizardContainer.setNextFinishButtonEnabled(true);
+ }
+ }
+
+ /**
+ * Handles the DocumentEvent triggered when user types in the
+ * User ID field. Enables or disables the "Next" wizard button according to
+ * whether the User ID field is empty.
+ *
+ * @param event the event containing the update.
+ */
+ public void insertUpdate(DocumentEvent event)
+ {
+ this.setNextButtonAccordingToUserID();
+ }
+
+ /**
+ * Handles the DocumentEvent triggered when user deletes letters
+ * from the UserID field. Enables or disables the "Next" wizard button
+ * according to whether the UserID field is empty.
+ *
+ * @param event the event containing the update.
+ */
+ public void removeUpdate(DocumentEvent event)
+ {
+ this.setNextButtonAccordingToUserID();
+ }
+
+ /**
+ * Fills the UserID and Password fields in this panel with the data coming
+ * from the given protocolProvider.
+ *
+ * @param protocolProvider The ProtocolProviderService to load the
+ * data from.
+ */
+ public void loadAccount(ProtocolProviderService protocolProvider)
+ {
+ AccountID accountID = protocolProvider.getAccountID();
+ String password = (String) accountID.getAccountProperties()
+ .get(ProtocolProviderFactory.PASSWORD);
+
+ String server = (String) accountID.getAccountProperties()
+ .get(ProtocolProviderFactory.SERVER_ADDRESS);
+
+ String port = (String) accountID.getAccountProperties()
+ .get(ProtocolProviderFactory.SERVER_PORT);
+
+ String autoNickChange = (String) accountID.getAccountProperties()
+ .get("AUTO_NICK_CHANGE");
+
+ String passwordNotRequired = (String) accountID.getAccountProperties()
+ .get("PASSWORD_NOT_REQUIRED");
+
+ this.nickField.setText(accountID.getUserID());
+ this.serverField.setText(server);
+
+ if (password != null)
+ {
+ this.passField.setText(password);
+ this.rememberPassBox.setSelected(true);
+ }
+
+ if (port != null)
+ {
+ this.portField.setText(port);
+ this.portField.setEnabled(true);
+ this.defaultPort.setSelected(false);
+ }
+
+ if (autoNickChange.equals("1"))
+ {
+ this.autoNickChange.setSelected(true);
+ }
+ else this.autoNickChange.setSelected(false);
+
+ if (passwordNotRequired.equals("1"))
+ {
+ this.passwordNotRequired.setSelected(true);
+ }
+ else this.passwordNotRequired.setSelected(false);
+ }
+
+ /**
+ * Verifies whether there is already an account installed with the same
+ * details as the one that the user has just entered.
+ *
+ * @param userID the name of the user that the account is registered for
+ * @return true if there is already an account for this userID and false
+ * otherwise.
+ */
+ private boolean isExistingAccount(String userID)
+ {
+ ProtocolProviderFactory factory
+ = IrcAccRegWizzActivator.getIrcProtocolProviderFactory();
+
+ ArrayList registeredAccounts = factory.getRegisteredAccounts();
+
+ for (int i = 0; i < registeredAccounts.size(); i++)
+ {
+ AccountID accountID = (AccountID) registeredAccounts.get(i);
+
+ if (userID.equalsIgnoreCase(accountID.getUserID()))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Indicates when the default port check box and the passwordNotRequired
+ * check box are selected.
+ */
+ public void actionPerformed(ActionEvent event)
+ {
+ if (defaultPort.isSelected())
+ {
+ portField.setText("");
+ portField.setEnabled(false);
+ }
+ else portField.setEnabled(true);
+
+ if (passwordNotRequired.isSelected())
+ {
+ passField.setText("");
+ passField.setEnabled(false);
+ rememberPassBox.setEnabled(false);
+ }
+ else
+ {
+ passField.setEnabled(true);
+ rememberPassBox.setEnabled(true);
+ }
+
+ }
+
+ public void changedUpdate(DocumentEvent event){}
+
+ public void pageHiding(){}
+
+ public void pageShown(){}
+
+ public void pageBack(){}
+}
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java
new file mode 100644
index 000000000..2392bd267
--- /dev/null
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccRegWizzActivator.java
@@ -0,0 +1,104 @@
+/*
+ * 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.plugin.ircaccregwizz;
+
+import net.java.sip.communicator.service.configuration.*;
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.protocol.*;
+import net.java.sip.communicator.util.*;
+
+import org.osgi.framework.*;
+
+/**
+ * Registers the IrcAccountRegistrationWizard in the UI Service.
+ *
+ * @author Lionel Ferreira & Michael Tarantino
+ */
+public class IrcAccRegWizzActivator
+ implements BundleActivator
+{
+ private static Logger logger = Logger.getLogger(
+ IrcAccRegWizzActivator.class.getName());
+
+ /**
+ * A currently valid bundle context.
+ */
+ public static BundleContext bundleContext;
+
+ /**
+ * Starts this bundle.
+ * @param bc the currently valid BundleContext.
+ */
+ public void start(BundleContext bc)
+ {
+ logger.info("Loading irc account wizard.");
+
+ bundleContext = bc;
+
+ ServiceReference uiServiceRef = bundleContext
+ .getServiceReference(UIService.class.getName());
+
+ UIService uiService
+ = (UIService) bundleContext.getService(uiServiceRef);
+
+ AccountRegistrationWizardContainer wizardContainer
+ = uiService.getAccountRegWizardContainer();
+
+ IrcAccountRegistrationWizard ircWizard
+ = new IrcAccountRegistrationWizard(wizardContainer);
+
+ wizardContainer.addAccountRegistrationWizard(ircWizard);
+
+ logger.info("IRC account registration wizard [STARTED].");
+ }
+
+ /**
+ * Called when this bundle is stopped so the Framework can perform the
+ * bundle-specific activities necessary to stop the bundle.
+ *
+ * @param context The execution context of the bundle being stopped.
+ */
+ public void stop(BundleContext context)
+ {
+
+ }
+
+ /**
+ * Returns the ProtocolProviderFactory for the IRC protocol.
+ * @return the ProtocolProviderFactory for the IRC protocol
+ */
+ public static ProtocolProviderFactory getIrcProtocolProviderFactory()
+ {
+ ServiceReference[] serRefs = null;
+
+ String osgiFilter = "("
+ + ProtocolProviderFactory.PROTOCOL
+ + "=" + "IRC" + ")";
+
+ try
+ {
+ serRefs = bundleContext.getServiceReferences(
+ ProtocolProviderFactory.class.getName(), osgiFilter);
+ }
+ catch (InvalidSyntaxException ex)
+ {
+ logger.error(ex);
+ }
+
+ return (ProtocolProviderFactory) bundleContext.getService(serRefs[0]);
+ }
+
+ /**
+ * Returns the bundleContext that we received when we were started.
+ *
+ * @return a currently valid instance of a bundleContext.
+ */
+ public BundleContext getBundleContext()
+ {
+ return bundleContext;
+ }
+}
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistration.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistration.java
new file mode 100644
index 000000000..f89262bf6
--- /dev/null
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistration.java
@@ -0,0 +1,171 @@
+/*
+ * 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.plugin.ircaccregwizz;
+
+/**
+ * The IrcAccountRegistration is used to store all user input data
+ * through the IrcAccountRegistrationWizard.
+ *
+ * @author Lionel Ferreira & Michael Tarantino
+ */
+public class IrcAccountRegistration
+{
+ private String userID;
+ private String password;
+ private String server;
+ private String port;
+ private boolean rememberPassword;
+ private boolean autoChangeNick;
+ private boolean isRequiredPassword;
+
+ /**
+ * Returns the User ID of the IRC registration account.
+ *
+ * @return the User ID of the IRC registration account.
+ */
+ public String getUserID()
+ {
+ return userID;
+ }
+
+ /**
+ * Sets the user ID of the IRC registration account.
+ *
+ * @param userID the userID of the IRC registration account.
+ */
+ public void setUserID(String userID)
+ {
+ this.userID = userID;
+ }
+
+ /**
+ * Returns the password of the IRC registration account.
+ *
+ * @return the password of the IRC registration account.
+ */
+ public String getPassword()
+ {
+ return password;
+ }
+
+ /**
+ * Sets the password of the IRC registration account.
+ *
+ * @param password the password of the IRC registration account.
+ */
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+
+ /**
+ * Returns the server address.
+ *
+ * @return the server address.
+ */
+ public String getServer()
+ {
+ return server;
+ }
+
+ /**
+ * Sets the server address.
+ *
+ * @param server the address of the server
+ */
+ public void setServer(String server)
+ {
+ this.server = server;
+ }
+
+ /**
+ * Returns the port to use.
+ *
+ * @return the port to use
+ */
+ public String getPort()
+ {
+ return this.port;
+ }
+
+ /**
+ * Sets the port to use.
+ *
+ * @param port the port to use
+ */
+ public void setPort(String port)
+ {
+ this.port = port;
+ }
+
+ /**
+ * Returns true if password has to remembered, false
+ * otherwise.
+ *
+ * @return true if password has to remembered, false
+ * otherwise.
+ */
+ public boolean isRememberPassword()
+ {
+ return rememberPassword;
+ }
+
+ /**
+ * Indicates if the nick should be changed automatically in case of nick
+ * collision.
+ *
+ * @return true if the nick should be changed,
+ * false - otherwise.
+ */
+ public boolean isAutoChangeNick()
+ {
+ return autoChangeNick;
+ }
+
+ /**
+ * Sets the property indicating if the nick should be changed automatically
+ * in case of nick collision.
+ * @param autoChangeNick true to indicate that the nick could
+ * be changed, false - otherwise.
+ */
+ public void setAutoChangeNick(boolean autoChangeNick)
+ {
+ this.autoChangeNick = autoChangeNick;
+ }
+
+ /**
+ * Indicates if the password is required or not.
+ * @return true to indicate that the password is required,*
+ * false - otherwise.
+ */
+ public boolean isRequiredPassword()
+ {
+ return isRequiredPassword;
+ }
+
+ /**
+ * Sets the isRequiredPassword property.
+ *
+ * @param isRequiredPassword true to indicate that the password
+ * is required, false - otherwise.
+ */
+ public void setRequiredPassword(boolean isRequiredPassword)
+ {
+ this.isRequiredPassword = isRequiredPassword;
+ }
+
+ /**
+ * Sets the rememberPassword value of this IRC account registration.
+ *
+ * @param rememberPassword true if password has to remembered,
+ * false otherwise.
+ */
+ public void setRememberPassword(boolean rememberPassword)
+ {
+ this.rememberPassword = rememberPassword;
+ }
+}
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistrationWizard.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistrationWizard.java
new file mode 100644
index 000000000..11f257465
--- /dev/null
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistrationWizard.java
@@ -0,0 +1,225 @@
+/*
+ * 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.plugin.ircaccregwizz;
+
+import java.util.*;
+
+import org.osgi.framework.*;
+import net.java.sip.communicator.impl.gui.customcontrols.*;
+import net.java.sip.communicator.plugin.ircaccregwizz.Resources;
+import net.java.sip.communicator.service.gui.*;
+import net.java.sip.communicator.service.protocol.*;
+
+/**
+ * The IrcAccountRegistrationWizard is an implementation of the
+ * AccountRegistrationWizard for the IRC protocol. It allows
+ * the user to create and configure a new IRC account.
+ *
+ * @author Lionel Ferreira & Michael Tarantino
+ */
+public class IrcAccountRegistrationWizard
+ implements AccountRegistrationWizard
+{
+
+ /**
+ * The first page of the IRC account registration wizard.
+ */
+ private FirstWizardPage firstWizardPage;
+
+ /**
+ * The object that we use to store details on an account that we will be
+ * creating.
+ */
+ private IrcAccountRegistration registration
+ = new IrcAccountRegistration();
+
+ private WizardContainer wizardContainer;
+
+ private ProtocolProviderService protocolProvider;
+
+ /**
+ * Creates an instance of IrcAccountRegistrationWizard.
+ * @param wizardContainer the wizard container, where this wizard
+ * is added
+ */
+ public IrcAccountRegistrationWizard(WizardContainer wizardContainer)
+ {
+ this.wizardContainer = wizardContainer;
+ }
+
+ /**
+ * Implements the AccountRegistrationWizard.getIcon method.
+ * Returns the icon to be used for this wizard.
+ * @return byte[]
+ */
+ public byte[] getIcon()
+ {
+ return Resources.getImage(Resources.IRC_LOGO);
+ }
+
+ /**
+ * Implements the AccountRegistrationWizard.getPageImage method.
+ * Returns the image used to decorate the wizard page
+ *
+ * @return byte[] the image used to decorate the wizard page
+ */
+ public byte[] getPageImage()
+ {
+ return Resources.getImage(Resources.PAGE_IMAGE);
+ }
+
+ /**
+ * Implements the AccountRegistrationWizard.getProtocolName
+ * method. Returns the protocol name for this wizard.
+ * @return String
+ */
+ public String getProtocolName()
+ {
+ return Resources.getString("protocolName");
+ }
+
+ /**
+ * Implements the AccountRegistrationWizard.getProtocolDescription
+ * method. Returns the description of the protocol for this wizard.
+ * @return String
+ */
+ public String getProtocolDescription()
+ {
+ return Resources.getString("protocolDescription");
+ }
+
+ /**
+ * Returns the set of pages contained in this wizard.
+ * @return Iterator
+ */
+ public Iterator getPages()
+ {
+ ArrayList pages = new ArrayList();
+ firstWizardPage = new FirstWizardPage(registration, wizardContainer);
+
+ pages.add(firstWizardPage);
+
+ return pages.iterator();
+ }
+
+ /**
+ * Returns the set of data that user has entered through this wizard.
+ * @return Iterator
+ */
+ public Iterator getSummary()
+ {
+ Hashtable summaryTable = new Hashtable();
+ String pass = new String();
+ String port = new String();
+
+ if (registration.isRequiredPassword())
+ pass = "required";
+ else
+ pass = "not required";
+
+ if (!(port = registration.getPort()).equals(""))
+ port = ":" + port;
+
+ summaryTable.put("Password", pass);
+ summaryTable.put("Nickname", registration.getUserID());
+ summaryTable.put("Server IRC", registration.getServer() + port);
+
+ return summaryTable.entrySet().iterator();
+ }
+
+ /**
+ * Installs the account created through this wizard.
+ * @return ProtocolProviderService
+ */
+ public ProtocolProviderService finish()
+ {
+ firstWizardPage = null;
+ ProtocolProviderFactory factory
+ = IrcAccRegWizzActivator.getIrcProtocolProviderFactory();
+
+ return this.installAccount(factory,
+ registration.getUserID());
+ }
+
+ /**
+ * Creates an account for the given user and password.
+ * @param providerFactory the ProtocolProviderFactory which will create
+ * the account
+ * @param user the user identifier
+ * @param passwd the password
+ * @return the ProtocolProviderService for the new account.
+ */
+ public ProtocolProviderService installAccount(
+ ProtocolProviderFactory providerFactory,
+ String user)
+ {
+
+ Hashtable accountProperties = new Hashtable();
+
+ accountProperties.put(ProtocolProviderFactory.SERVER_ADDRESS,
+ registration.getServer());
+
+ if (registration.isRememberPassword()
+ && registration.isRequiredPassword()
+ && !registration.getPassword().equals(""))
+ {
+ accountProperties.put(
+ ProtocolProviderFactory.PASSWORD, registration.getPassword());
+ }
+
+ if (!registration.getPort().equals(""))
+ {
+ accountProperties.put(
+ ProtocolProviderFactory.SERVER_PORT, registration.getPort());
+ }
+
+ accountProperties.put(
+ ProtocolProviderFactory.AUTO_CHANGE_USER_NAME,
+ new Boolean(registration.isAutoChangeNick()).toString());
+
+ accountProperties.put(
+ ProtocolProviderFactory.PASSWORD_REQUIRED,
+ new Boolean(registration.isRequiredPassword()).toString());
+
+ try
+ {
+ AccountID accountID = providerFactory.installAccount(
+ user, accountProperties);
+
+ ServiceReference serRef = providerFactory
+ .getProviderForAccount(accountID);
+
+ protocolProvider = (ProtocolProviderService)
+ IrcAccRegWizzActivator.bundleContext
+ .getService(serRef);
+ }
+ catch (IllegalArgumentException exc)
+ {
+ new ErrorDialog(null, exc.getMessage(), exc).showDialog();
+ }
+ catch (IllegalStateException exc)
+ {
+ new ErrorDialog(null, exc.getMessage(), exc).showDialog();
+ }
+
+ return protocolProvider;
+ }
+
+ /**
+ * Fills the UserID and Password fields in this panel with the data coming
+ * from the given protocolProvider.
+ * @param protocolProvider The ProtocolProviderService to load the
+ * data from.
+ */
+ public void loadAccount(ProtocolProviderService protocolProvider)
+ {
+
+ this.protocolProvider = protocolProvider;
+
+ this.firstWizardPage.loadAccount(protocolProvider);
+ }
+}
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/Resources.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/Resources.java
new file mode 100644
index 000000000..3ca0f9134
--- /dev/null
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/Resources.java
@@ -0,0 +1,95 @@
+/*
+ * 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.plugin.ircaccregwizz;
+
+import java.io.*;
+import java.util.*;
+
+import net.java.sip.communicator.util.*;
+
+/**
+ * The Messages class manages the access to the internationalization
+ * properties files.
+ *
+ * @author Lionel Ferreira & Michael Tarantino
+ */
+public class Resources
+{
+
+ private static Logger log = Logger.getLogger(Resources.class);
+
+ private static final String BUNDLE_NAME
+ = "net.java.sip.communicator.plugin.ircaccregwizz.resources";
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+ .getBundle(BUNDLE_NAME);
+
+ public static ImageID IRC_LOGO = new ImageID("protocolIcon");
+
+ public static ImageID PAGE_IMAGE = new ImageID("pageImage");
+
+ /**
+ * Returns an internationalized string corresponding to the given key.
+ * @param key The key of the string.
+ * @return An internationalized string corresponding to the given key.
+ */
+ public static String getString(String key)
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString(key);
+ }
+ catch (MissingResourceException exc)
+ {
+ return '!' + key + '!';
+ }
+ }
+
+ /**
+ * Loads an image from a given image identifier.
+ * @param imageID The identifier of the image.
+ * @return The image for the given identifier.
+ */
+ public static byte[] getImage(ImageID imageID)
+ {
+ byte[] image = new byte[100000];
+
+ String path = Resources.getString(imageID.getId());
+
+ try
+ {
+ Resources.class.getClassLoader()
+ .getResourceAsStream(path).read(image);
+
+ }
+ catch (IOException exc)
+ {
+ log.error("Failed to load image:" + path, exc);
+ }
+
+ return image;
+ }
+
+ /**
+ * Represents the Image Identifier.
+ */
+ public static class ImageID
+ {
+ private String id;
+
+ private ImageID(String id)
+ {
+ this.id = id;
+ }
+
+ public String getId()
+ {
+ return id;
+ }
+ }
+}
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/ircaccregwizz.manifest.mf b/src/net/java/sip/communicator/plugin/ircaccregwizz/ircaccregwizz.manifest.mf
new file mode 100644
index 000000000..31f8be7f1
--- /dev/null
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/ircaccregwizz.manifest.mf
@@ -0,0 +1,23 @@
+Bundle-Activator: net.java.sip.communicator.plugin.ircaccregwizz.IrcAccRegWizzActivator
+Bundle-Name: IRC account registration wizard
+Bundle-Description: IRC account registration wizard.
+Bundle-Vendor: sip-communicator.org
+Bundle-Version: 0.0.1
+Import-Package: org.osgi.framework,
+ net.java.sip.communicator.util,
+ net.java.sip.communicator.service.configuration,
+ net.java.sip.communicator.service.configuration.event,
+ net.java.sip.communicator.service.protocol,
+ net.java.sip.communicator.service.protocol.event,
+ net.java.sip.communicator.service.gui,
+ net.java.sip.communicator.service.gui.event,
+ net.java.sip.communicator.service.browserlauncher,
+ javax.swing,
+ javax.swing.event,
+ javax.swing.table,
+ javax.swing.text,
+ javax.swing.text.html,
+ javax.accessibility,
+ javax.imageio,
+ javax.swing.undo,
+ javax.swing.border
diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/resources.properties b/src/net/java/sip/communicator/plugin/ircaccregwizz/resources.properties
new file mode 100644
index 000000000..c16940d8d
--- /dev/null
+++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/resources.properties
@@ -0,0 +1,17 @@
+protocolName=IRC
+protocolDescription=IRC protocol.
+nick=Nickname:
+password=Password:
+infoPassword=Most IRC server didn't required password.
+rememberPassword=Remember password
+autoNickChange=Automatically change nick when it's already used
+defaultPort=Use default port
+passwordNotRequired=The server didn't required a password
+server=Hostname:
+port=Port:
+userAndPassword=Identification
+serverIRC=Server
+options=Options
+existingAccount=* The account you entered is already installed.
+protocolIcon=resources/images/irc/cr16-action-irc_online.png
+pageImage=resources/images/irc/cr64-app-irc_protocol.png
\ No newline at end of file