/* * 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.impl.gui.main.account; import java.awt.*; import java.util.*; import javax.swing.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.plugin.desktoputil.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; /** * The <tt>AccountRegSummaryPage</tt> is the last page of the account * registration wizard. * * @author Yana Stamcheva */ public class AccountRegSummaryPage extends SIPCommScrollPane implements WizardPage { private final Logger logger = Logger.getLogger(AccountRegSummaryPage.class); private final JPanel keysPanel = new TransparentPanel(new GridLayout(0, 1, 10, 10)); private final JPanel valuesPanel = new TransparentPanel(new GridLayout(0, 1, 10, 10)); private final AccountRegWizardContainerImpl wizardContainer; /** * In case of modification the modified protocol provider is supplied. */ private ProtocolProviderService protocolProviderService; /** * Creates an <tt>AccountRegSummaryPage</tt>. * * @param wizardContainer The account registration wizard container where * this summary page is registered. */ public AccountRegSummaryPage(AccountRegWizardContainerImpl wizardContainer) { this.wizardContainer = wizardContainer; JLabel pageTitleLabel = new JLabel( GuiActivator.getResources().getI18NString("service.gui.SUMMARY"), JLabel.CENTER); Font font = getFont(); pageTitleLabel.setFont(font.deriveFont(Font.BOLD, font.getSize() + 6)); JPanel mainPanel = new TransparentPanel(new BorderLayout(10, 10)); mainPanel.add(pageTitleLabel, BorderLayout.NORTH); mainPanel.add(keysPanel, BorderLayout.WEST); mainPanel.add(valuesPanel, BorderLayout.CENTER); JPanel wrapPanel = new TransparentPanel(new BorderLayout()); wrapPanel.add(mainPanel, BorderLayout.NORTH); setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); setOpaque(false); setViewportView(wrapPanel); } /** * Initializes the summary with the data. * * @param summaryData The data to insert in the summary page. */ private void init(Iterator<Map.Entry<String, String>> summaryData) { while (summaryData.hasNext()) { Map.Entry<String, String> entry = summaryData.next(); JLabel keyLabel = new JLabel(entry.getKey().toString() + ":"); //apparently value could be null .... if( entry.getValue() == null) continue; JLabel valueLabel = new JLabel(entry.getValue().toString()); keysPanel.add(keyLabel); valuesPanel.add(valueLabel); } } /** * Implements the <code>WizardPage.getIdentifier</code> method. * * @return the page identifier, which in this case is the * SUMMARY_PAGE_IDENTIFIER */ public Object getIdentifier() { return WizardPage.SUMMARY_PAGE_IDENTIFIER; } /** * Implements the <code>WizardPage.getNextPageIdentifier</code> method. * * @return the FINISH_PAGE_IDENTIFIER to indicate that this is the last * wizard page */ public Object getNextPageIdentifier() { return WizardPage.FINISH_PAGE_IDENTIFIER; } /** * Implements the <code>WizardPage.getBackPageIdentifier</code> method. * * @return the previous page */ public Object getBackPageIdentifier() { return wizardContainer.getCurrentWizard().getLastPageIdentifier(); } /** * Implements the <code>WizardPage.getWizardForm</code> method. * * @return this panel */ public Object getWizardForm() { return this; } /** * Before the panel is displayed obtains the summary data from the current * wizard. */ public void pageShowing() { AccountRegistrationWizard wizard = this.wizardContainer.getCurrentWizard(); this.keysPanel.removeAll(); this.valuesPanel.removeAll(); this.init(wizard.getSummary()); if(protocolProviderService != null && protocolProviderService.getAccountID().isReadOnly()) { // disable commit button as the account is readonly // we will just show its values wizardContainer.setNextFinishButtonEnabled(false); } } /** * Implements the <tt>WizardPage.pageNext</tt> method, which is invoked * from the wizard container when user clicks the "Next" button. We invoke * here the wizard finish method. */ public void commitPage() { AccountRegistrationWizard wizard = this.wizardContainer.getCurrentWizard(); if(this.protocolProviderService != null) { // we do not need it anymore protocolProviderService = null; } try { ProtocolProviderService protocolProvider = wizard.signin(); if (protocolProvider != null) this.wizardContainer.saveAccountWizard(protocolProvider, wizard); this.wizardContainer.unregisterWizardPages(); this.wizardContainer.removeWizzardIcon(); } catch (OperationFailedException e) { if (logger.isDebugEnabled()) logger.debug("The sign in operation has failed."); if (e.getErrorCode() == OperationFailedException.ILLEGAL_ARGUMENT) { new ErrorDialog( GuiActivator.getUIService().getMainFrame(), GuiActivator.getResources() .getI18NString("service.gui.ERROR"), GuiActivator.getResources() .getI18NString("service.gui.USERNAME_NULL")); } else if (e.getErrorCode() == OperationFailedException.IDENTIFICATION_CONFLICT) { new ErrorDialog( GuiActivator.getUIService().getMainFrame(), GuiActivator.getResources() .getI18NString("service.gui.ERROR"), GuiActivator.getResources() .getI18NString("service.gui.USER_EXISTS_ERROR")); } else if (e.getErrorCode() == OperationFailedException.SERVER_NOT_SPECIFIED) { new ErrorDialog( GuiActivator.getUIService().getMainFrame(), GuiActivator.getResources() .getI18NString("service.gui.ERROR"), GuiActivator.getResources() .getI18NString("service.gui.SPECIFY_SERVER")); } else throw new RuntimeException(e.getMessage(), e); } } public void pageBack() { } public void pageHiding() { } public void pageShown() { } /** * Sets the modification property to indicate if this wizard is opened for * a modification. * * @param protocolProvider indicates that this wizard is opened for * modification. */ public void setModification(ProtocolProviderService protocolProvider) { this.protocolProviderService = protocolProvider; } @Override public void dispose() { super.dispose(); if(this.protocolProviderService != null) { // we do not need it anymore protocolProviderService = null; } } }