/*
* 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.gibberishaccregwizz;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
/**
* The <tt>FirstWizardPage</tt> is the page, where user could enter the user ID
* and the password of the account.
*
* @author Emil Ivov
*/
public class FirstWizardPage
extends TransparentPanel
implements WizardPage, DocumentListener
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 0L;
public static final String FIRST_PAGE_IDENTIFIER = "FirstPageIdentifier";
public static final String USER_NAME_EXAMPLE = "Ex: random.user.name";
private JPanel userPassPanel = new TransparentPanel(new BorderLayout(10, 10));
private JPanel labelsPanel = new TransparentPanel();
private JPanel valuesPanel = new TransparentPanel();
private JLabel userID = new JLabel(
Resources.getString("plugin.gibberishaccregwizz.USERNAME"));
private JLabel passLabel = new JLabel(
Resources.getString("service.gui.PASSWORD"));
private JPanel emptyPanel = new TransparentPanel();
private JLabel userIDExampleLabel = new JLabel(USER_NAME_EXAMPLE);
private JTextField userIDField = new TrimTextField();
private JPasswordField passField = new JPasswordField();
private JCheckBox rememberPassBox = new SIPCommCheckBox(
Resources.getString("service.gui.REMEMBER_PASSWORD"));
private JPanel mainPanel = new TransparentPanel();
private Object nextPageIdentifier = WizardPage.SUMMARY_PAGE_IDENTIFIER;
private GibberishAccountRegistrationWizard wizard;
private boolean isCommitted = false;
/**
* Creates an instance of <tt>FirstWizardPage</tt>.
* @param wizard the parent wizard
*/
public FirstWizardPage(GibberishAccountRegistrationWizard wizard)
{
super(new BorderLayout());
this.wizard = wizard;
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));
}
/**
* Initializes all panels, buttons, etc.
*/
private void init()
{
this.mainPanel.setOpaque(false);
this.labelsPanel.setOpaque(false);
this.valuesPanel.setOpaque(false);
this.userPassPanel.setOpaque(false);
this.emptyPanel.setOpaque(false);
this.userIDField.getDocument().addDocumentListener(this);
this.rememberPassBox.setSelected(true);
this.userIDExampleLabel.setForeground(Color.GRAY);
this.userIDExampleLabel.setFont(
userIDExampleLabel.getFont().deriveFont(8));
this.emptyPanel.setMaximumSize(new Dimension(40, 35));
this.userIDExampleLabel.setBorder(
BorderFactory.createEmptyBorder(0, 0, 8,0));
labelsPanel.add(userID);
labelsPanel.add(emptyPanel);
labelsPanel.add(passLabel);
valuesPanel.add(userIDField);
valuesPanel.add(userIDExampleLabel);
valuesPanel.add(passField);
userPassPanel.add(labelsPanel, BorderLayout.WEST);
userPassPanel.add(valuesPanel, BorderLayout.CENTER);
userPassPanel.add(rememberPassBox, BorderLayout.SOUTH);
userPassPanel.setBorder(
BorderFactory.createTitledBorder(Resources.getString(
"plugin.gibberishaccregwizz.USERNAME_AND_PASSWORD")));
this.add(userPassPanel, BorderLayout.NORTH);
}
/**
* Implements the <code>WizardPage.getIdentifier</code> to return
* this page identifier.
*
* @return the Identifier of the first page in this wizard.
*/
public Object getIdentifier()
{
return FIRST_PAGE_IDENTIFIER;
}
/**
* Implements the <code>WizardPage.getNextPageIdentifier</code> 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 <code>WizardPage.getBackPageIdentifier</code> to return
* the back identifier. In this case it's null because this is the first
* wizard page.
*
* @return the identifier of the previous wizard page.
*/
public Object getBackPageIdentifier()
{
return null;
}
/**
* Implements the <code>WizardPage.getWizardForm</code> 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 commitPage()
{
GibberishAccountRegistration registration
= wizard.getRegistration();
String userID = userIDField.getText();
if(userID == null || userID.trim().length() == 0)
throw new IllegalStateException("No user ID provided.");
registration.setUserID(userID);
if (passField.getPassword() != null)
registration.setPassword(new String(passField.getPassword()));
registration.setRememberPassword(rememberPassBox.isSelected());
nextPageIdentifier = SUMMARY_PAGE_IDENTIFIER;
isCommitted = true;
}
/**
* Enables or disables the "Next" wizard button according to whether the
* User ID field is empty.
*/
private void setNextButtonAccordingToUserID()
{
if (userIDField.getText() == null || userIDField.getText().equals(""))
{
wizard.getWizardContainer().setNextFinishButtonEnabled(false);
}
else
{
wizard.getWizardContainer().setNextFinishButtonEnabled(true);
}
}
/**
* Handles the <tt>DocumentEvent</tt> 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 <tt>DocumentEvent</tt> 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();
}
public void changedUpdate(DocumentEvent event)
{
}
public void pageHiding()
{
}
public void pageShown()
{
}
public void pageBack()
{
}
/**
* Fills the UserID and Password fields in this panel with the data comming
* from the given protocolProvider.
* @param protocolProvider The <tt>ProtocolProviderService</tt> to load the
* data from.
*/
public void loadAccount(ProtocolProviderService protocolProvider)
{
AccountID accountID = protocolProvider.getAccountID();
String password =
GibberishAccRegWizzActivator.getGibberishProtocolProviderFactory()
.loadPassword(accountID);
this.userIDField.setEnabled(false);
this.userIDField.setText(accountID.getUserID());
if (password != null)
{
this.passField.setText(password);
this.rememberPassBox.setSelected(true);
}
}
public Object getSimpleForm()
{
return userPassPanel;
}
public boolean isCommitted()
{
return isCommitted;
}
}