/*
* 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.ippiaccregwizz;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.text.*;
import javax.swing.*;
import javax.swing.text.*;
import net.java.sip.communicator.plugin.sipaccregwizz.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.util.*;
import org.json.simple.*;
/**
* @author Yana Stamcheva
* @author Damian Minkov
*/
public class CreateIppiAccountForm
extends TransparentPanel
implements SIPAccountCreationFormService
{
/**
* Serial version UID.
*/
private static final long serialVersionUID = 0L;
/**
* The logger.
*/
private static final Logger logger
= Logger.getLogger(CreateIppiAccountForm.class);
/**
* The user name text field.
*/
private final JTextField usernameField = new TrimTextField();
/**
* The password field.
*/
private final JPasswordField passField = new JPasswordField();
/**
* The retype password field.
*/
private final JPasswordField retypePassField = new JPasswordField();
/**
* The email field.
*/
private final JTextField emailField = new JTextField();
/**
* The error text pane.
*/
private final JTextPane errorPane = new JTextPane();
/**
* The register link.
*/
private final static String registerLink
= IppiAccRegWizzActivator.getResources().getSettingsString(
"plugin.ippiaccregwizz.REGISTER_LINK");
/**
* Creates an instance of <tt>RegisterIppiAccountForm</tt>.
*/
public CreateIppiAccountForm()
{
super(new BorderLayout());
this.init();
}
/**
* Initializes this panel.
*/
private void init()
{
JPanel mainPanel = new TransparentPanel(new BorderLayout());
mainPanel.setBorder(BorderFactory.createTitledBorder(
IppiAccRegWizzActivator.getResources()
.getI18NString("plugin.sipaccregwizz.CREATE_ACCOUNT_TITLE")));
JPanel labelsPanel = new TransparentPanel(new GridLayout(0, 1, 0, 4));
JPanel valuesPanel = new TransparentPanel(new GridLayout(0, 1, 0, 4));
JLabel usernameLabel
= new JLabel(IppiAccRegWizzActivator.getResources()
.getI18NString("plugin.sip2sipaccregwizz.USERNAME"));
JLabel passLabel
= new JLabel(IppiAccRegWizzActivator.getResources()
.getI18NString("service.gui.PASSWORD"));
JLabel retypePasswordLabel
= new JLabel(IppiAccRegWizzActivator.getResources()
.getI18NString("plugin.sip2sipaccregwizz.RETYPE_PASSWORD"));
JLabel emailLabel
= new JLabel(IppiAccRegWizzActivator.getResources()
.getI18NString("plugin.sip2sipaccregwizz.EMAIL"));
labelsPanel.add(usernameLabel);
labelsPanel.add(passLabel);
labelsPanel.add(retypePasswordLabel);
labelsPanel.add(emailLabel);
valuesPanel.add(usernameField);
valuesPanel.add(passField);
valuesPanel.add(retypePassField);
valuesPanel.add(emailField);
JLabel emailDescriptionLabel
= new JLabel(IppiAccRegWizzActivator.getResources()
.getI18NString("plugin.sip2sipaccregwizz.EMAIL_NOTE"),
SwingConstants.CENTER);
emailDescriptionLabel.setForeground(Color.GRAY);
emailDescriptionLabel.setFont(emailDescriptionLabel.getFont().deriveFont(8));
emailDescriptionLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 8, 10));
initErrorArea();
mainPanel.add(labelsPanel, BorderLayout.WEST);
mainPanel.add(valuesPanel, BorderLayout.CENTER);
mainPanel.add(emailDescriptionLabel, BorderLayout.SOUTH);
this.add(mainPanel, BorderLayout.CENTER);
JLabel infoLabel
= new JLabel(IppiAccRegWizzActivator.getResources()
.getI18NString("plugin.ippiaccregwizz.INFO_NOTE"),
SwingConstants.RIGHT);
infoLabel.setCursor(new Cursor(Cursor.HAND_CURSOR));
infoLabel.setForeground(Color.GRAY);
infoLabel.setFont(emailDescriptionLabel.getFont().deriveFont(8));
infoLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 8, 0));
infoLabel.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
IppiAccRegWizzActivator.getBrowserLauncher()
.openURL("http://ippi.fr");
}
});
this.add(infoLabel, BorderLayout.SOUTH);
}
/**
* 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);
}
/**
* Creates this account on the server.
* @return the created account
*/
public NewAccount createAccount()
{
// Check if the two passwords match.
String pass1 = new String( passField.getPassword());
String pass2 = new String( retypePassField.getPassword());
if (!pass1.equals(pass2))
{
showErrorMessage(
IppiAccRegWizzActivator.getResources().getI18NString(
"plugin.sipaccregwizz.NOT_SAME_PASSWORD"));
return null;
}
NewAccount newAccount = null;
try
{
String registerLinkFilled = MessageFormat.format(registerLink,
URLEncoder.encode(usernameField.getText(), "UTF-8"),
URLEncoder.encode(new String(passField.getPassword()), "UTF-8"),
URLEncoder.encode(emailField.getText(), "UTF-8"));
URL url = new URL(registerLinkFilled);
URLConnection conn = url.openConnection();
// If this is not an http connection we have nothing to do here.
if (!(conn instanceof HttpURLConnection))
{
return null;
}
HttpURLConnection httpConn = (HttpURLConnection) conn;
int responseCode = httpConn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK)
{
// Read all the text returned by the server
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String str;
StringBuffer stringBuffer = new StringBuffer();
while ((str = in.readLine()) != null)
{
stringBuffer.append(str);
}
if (logger.isInfoEnabled())
logger.info("JSON response to create account request: "
+ stringBuffer.toString());
newAccount = parseHttpResponse(stringBuffer.toString());
}
}
catch (MalformedURLException e1)
{
if (logger.isInfoEnabled())
logger.info("Failed to create URL with string: "
+ registerLink, e1);
}
catch (IOException e1)
{
if (logger.isInfoEnabled())
logger.info("Failed to open connection.", e1);
}
return newAccount;
}
/**
* Returns the form, which would be used by the user to create a new
* account.
* @return the component of the form
*/
public Component getForm()
{
return this;
}
/**
* Clears all the data previously entered in the form.
*/
public void clear()
{
usernameField.setText("");
passField.setText("");
retypePassField.setText("");
emailField.setText("");
errorPane.setText("");
remove(errorPane);
}
/**
* Parses the given http response.
* @param response the http response to parse
* @return the new account
*/
private NewAccount parseHttpResponse(String response)
{
NewAccount newAccount = null;
try
{
JSONObject jsonObject = (JSONObject)JSONValue
.parseWithException(response);
boolean isSuccess = (Boolean)jsonObject.get("success");
if (isSuccess)
{
newAccount = new NewAccount(
usernameField.getText() + "@ippi.fr",
passField.getPassword(),
null,
"ippi.fr");
}
else
{
showErrorMessage((String)jsonObject.get("error_message"));
}
}
catch (Throwable e1)
{
if (logger.isInfoEnabled())
logger.info("Failed Json parsing.", e1);
}
return newAccount;
}
/**
* Shows the given error message.
*
* @param text the text of the error
*/
private void showErrorMessage(String text)
{
errorPane.setText(text);
if (errorPane.getParent() == null)
add(errorPane, BorderLayout.NORTH);
SwingUtilities.getWindowAncestor(CreateIppiAccountForm.this).pack();
}
}