/*
* 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.sshaccregwizz;
import java.awt.*;
import java.util.*;
import net.java.sip.communicator.impl.protocol.ssh.*;
import net.java.sip.communicator.service.gui.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.util.*;
import org.osgi.framework.*;
/**
* The SSHAccountRegistrationWizard is an implementation of the
* AccountRegistrationWizard for the SSH protocol. It allows
* the user to create and configure a new SSH account.
*
* @author Shobhit Jindal
*/
public class SSHAccountRegistrationWizard
extends DesktopAccountRegistrationWizard
{
private final Logger logger
= Logger.getLogger(SSHAccountRegistrationWizard.class);
/**
* The first page of the ssh account registration wizard.
*/
private FirstWizardPage firstWizardPage;
/**
* The object that we use to store details on an account that we will be
* creating.
*/
private SSHAccountRegistration registration
= new SSHAccountRegistration();
private ProtocolProviderService protocolProvider;
/**
* Creates an instance of SSHAccountRegistrationWizard.
* @param wizardContainer the wizard container, where this wizard
* is added
*/
public SSHAccountRegistrationWizard(WizardContainer wizardContainer)
{
setWizardContainer(wizardContainer);
wizardContainer.setFinishButtonText(
Resources.getString("service.gui.SIGN_IN"));
}
/**
* Implements the AccountRegistrationWizard.getIcon
method.
* Returns the icon to be used for this wizard.
* @return byte[]
*/
@Override
public byte[] getIcon()
{
return Resources.getImage(Resources.SSH_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
*/
@Override
public byte[] getPageImage()
{
return Resources.getImage(Resources.PAGE_IMAGE);
}
/**
* Implements the AccountRegistrationWizard.getProtocolName
* method. Returns the protocol name for this wizard.
* @return String
*/
@Override
public String getProtocolName()
{
return Resources.getString("plugin.sshaccregwizz.PROTOCOL_NAME");
}
/**
* Implements the AccountRegistrationWizard.getProtocolDescription
*
method. Returns the description of the protocol for this wizard.
* @return String
*/
@Override
public String getProtocolDescription()
{
return Resources.getString("plugin.sshaccregwizz.PROTOCOL_DESCRIPTION");
}
/**
* Returns the set of pages contained in this wizard.
* @return Iterator
*/
@Override
public Iterator getPages()
{
java.util.List pages = new ArrayList();
firstWizardPage
= new FirstWizardPage(registration, getWizardContainer());
pages.add(firstWizardPage);
return pages.iterator();
}
/**
* Returns the set of data that user has entered through this wizard.
* @return Iterator
*/
@Override
public Iterator> getSummary() {
Hashtable summaryTable
= new Hashtable();
/*
* Hashtable arranges the entries alphabetically so the order
* of appearance is
* - Computer Name / IP
* - Port
* - User ID
*/
summaryTable.put("Account ID", registration.getAccountID());
summaryTable.put("Known Hosts", registration.getKnownHostsFile());
summaryTable.put("Identity", registration.getIdentityFile());
return summaryTable.entrySet().iterator();
}
/**
* Defines the operations that will be executed when the user clicks on
* the wizard "Signin" button.
* @return the created ProtocolProviderService corresponding to the
* new account
* @throws OperationFailedException if the operation didn't succeed
*/
@Override
public ProtocolProviderService signin()
throws OperationFailedException
{
firstWizardPage.commitPage();
return signin(registration.getAccountID(), null);
}
/**
* Defines the operations that will be executed when the user clicks on
* the wizard "Signin" button.
*
* @param userName the user name to sign in with
* @param password the password to sign in with
* @return the created ProtocolProviderService corresponding to the
* new account
* @throws OperationFailedException if the operation didn't succeed
*/
@Override
public ProtocolProviderService signin(String userName, String password)
throws OperationFailedException
{
ProtocolProviderFactory factory
= SSHAccRegWizzActivator.getSSHProtocolProviderFactory();
return this.installAccount( factory,
userName);
}
/**
* Creates an account for the given Account ID, Identity File and Known
* Hosts File
*
* @param providerFactory the ProtocolProviderFactory which will create
* the account
* @param user the user identifier
* @return the ProtocolProviderService for the new account.
*/
public ProtocolProviderService installAccount(
ProtocolProviderFactory providerFactory,
String user)
throws OperationFailedException
{
Hashtable accountProperties
= new Hashtable();
accountProperties.put(ProtocolProviderFactory.ACCOUNT_ICON_PATH,
"resources/images/protocol/ssh/ssh32x32.png");
accountProperties.put(
ProtocolProviderFactory.NO_PASSWORD_REQUIRED,
new Boolean(true).toString());
accountProperties.put(ProtocolProviderFactorySSHImpl.IDENTITY_FILE,
registration.getIdentityFile());
accountProperties.put(ProtocolProviderFactorySSHImpl.KNOWN_HOSTS_FILE,
String.valueOf(registration.getKnownHostsFile()));
try
{
AccountID accountID = providerFactory.installAccount(
user, accountProperties);
ServiceReference serRef = providerFactory
.getProviderForAccount(accountID);
protocolProvider = (ProtocolProviderService)
SSHAccRegWizzActivator.bundleContext
.getService(serRef);
}
catch (IllegalStateException exc)
{
logger.warn(exc.getMessage());
throw new OperationFailedException(
"Account already exists.",
OperationFailedException.IDENTIFICATION_CONFLICT);
}
catch (Exception exc)
{
logger.warn(exc.getMessage());
throw new OperationFailedException(
"Failed to add account",
OperationFailedException.GENERAL_ERROR);
}
return protocolProvider;
}
/**
* Fills the UserID and Password fields in this panel with the data comming
* from the given protocolProvider.
* @param protocolProvider The ProtocolProviderService to load the
* data from.
*/
@Override
public void loadAccount(ProtocolProviderService protocolProvider)
{
this.protocolProvider = protocolProvider;
this.firstWizardPage.loadAccount(protocolProvider);
setModification(true);
}
/**
* Returns the size of this wizard.
* @return the size of this wizard
*/
@Override
public Dimension getSize()
{
return new Dimension(600, 500);
}
/**
* Returns the identifier of the first account registration wizard page.
* This method is meant to be used by the wizard container to determine,
* which is the first page to show to the user.
*
* @return the identifier of the first account registration wizard page
*/
@Override
public Object getFirstPageIdentifier()
{
return firstWizardPage.getIdentifier();
}
@Override
public Object getLastPageIdentifier()
{
return firstWizardPage.getIdentifier();
}
/**
* Returns an example string, which should indicate to the user how the
* user name should look like.
* @return an example string, which should indicate to the user how the
* user name should look like.
*/
@Override
public String getUserNameExample()
{
return null;
}
/**
* Indicates whether this wizard enables the simple "sign in" form shown
* when the user opens the application for the first time. The simple
* "sign in" form allows user to configure her account in one click, just
* specifying her username and password and leaving any other configuration
* as by default.
* @return true
if the simple "Sign in" form is enabled or
* false
otherwise.
*/
@Override
public boolean isSimpleFormEnabled()
{
return false;
}
/**
* Returns a simple account registration form that would be the first form
* shown to the user. Only if the user needs more settings she'll choose
* to open the advanced wizard, consisted by all pages.
*
* @param isCreateAccount indicates if the simple form should be opened as
* a create account form or as a login form
* @return a simple account registration form
*/
@Override
public Object getSimpleForm(boolean isCreateAccount)
{
firstWizardPage = new FirstWizardPage(registration, getWizardContainer());
return firstWizardPage.getSimpleForm();
}
}