From c067eef9b22dada6c38c05452cc6a7038a70f8c6 Mon Sep 17 00:00:00 2001 From: Damian Minkov Date: Fri, 22 Nov 2013 19:57:11 +0200 Subject: [PATCH] Adds read only property to the account properties, when enabled the account settings cannot be modified. --- .../gui/customcontrols/wizard/Wizard.java | 2 +- .../main/account/AccountRegSummaryPage.java | 43 +++++++++++++++++++ .../AccountRegWizardContainerImpl.java | 34 +++++++++++++++ .../service/protocol/AccountID.java | 11 +++++ .../protocol/ProtocolProviderFactory.java | 6 +++ 5 files changed, 95 insertions(+), 1 deletion(-) diff --git a/src/net/java/sip/communicator/impl/gui/customcontrols/wizard/Wizard.java b/src/net/java/sip/communicator/impl/gui/customcontrols/wizard/Wizard.java index 05c438752..2a2bc06e5 100644 --- a/src/net/java/sip/communicator/impl/gui/customcontrols/wizard/Wizard.java +++ b/src/net/java/sip/communicator/impl/gui/customcontrols/wizard/Wizard.java @@ -95,7 +95,7 @@ public class Wizard private WizardController wizardController; - private TransparentPanel cardPanel; + protected TransparentPanel cardPanel; private CardLayout cardLayout; diff --git a/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java b/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java index 4e4adbae6..0c253093f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java +++ b/src/net/java/sip/communicator/impl/gui/main/account/AccountRegSummaryPage.java @@ -36,6 +36,11 @@ public class AccountRegSummaryPage private final AccountRegWizardContainerImpl wizardContainer; + /** + * In case of modification the modified protocol provider is supplied. + */ + private ProtocolProviderService protocolProviderService; + /** * Creates an AccountRegSummaryPage. * @@ -144,6 +149,14 @@ public void pageShowing() 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); + } } /** @@ -156,6 +169,12 @@ 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(); @@ -217,4 +236,28 @@ 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; + } + } } diff --git a/src/net/java/sip/communicator/impl/gui/main/account/AccountRegWizardContainerImpl.java b/src/net/java/sip/communicator/impl/gui/main/account/AccountRegWizardContainerImpl.java index d3df6af01..e7baed82b 100644 --- a/src/net/java/sip/communicator/impl/gui/main/account/AccountRegWizardContainerImpl.java +++ b/src/net/java/sip/communicator/impl/gui/main/account/AccountRegWizardContainerImpl.java @@ -5,10 +5,15 @@ */ package net.java.sip.communicator.impl.gui.main.account; +import java.awt.*; +import java.awt.Container; import java.io.*; import java.util.*; +import java.util.List; import javax.imageio.*; +import javax.swing.*; +import javax.swing.text.*; import net.java.sip.communicator.impl.gui.*; import net.java.sip.communicator.impl.gui.customcontrols.wizard.*; @@ -146,10 +151,39 @@ public void modifyAccount(ProtocolProviderService protocolProvider) this.setCurrentWizard(wizard); wizard.setModification(true); + this.summaryPage.setModification(protocolProvider); + + if(protocolProvider != null + && protocolProvider.getAccountID().isReadOnly()) + { + // cardPanel is the main panel of the wizard pages + setDisabled(cardPanel.getComponents()); + } wizard.loadAccount(protocolProvider); } + /** + * Disables all editable components. Used to enable readonly accounts + * to only show their values and forbid the user to edit. + * + * @param components the components to disable + */ + private void setDisabled(Component[] components) + { + for(Component c : components) + { + if(c instanceof JTextComponent) + ((JTextComponent)c).setEditable(false); + else if(c instanceof JComboBox + || c instanceof AbstractButton) + c.setEnabled(false); + + if(c instanceof Container) + setDisabled(((Container)c).getComponents()); + } + } + /** * Returns the wizard corresponding to the given protocol provider. * diff --git a/src/net/java/sip/communicator/service/protocol/AccountID.java b/src/net/java/sip/communicator/service/protocol/AccountID.java index d61487405..881730e3e 100644 --- a/src/net/java/sip/communicator/service/protocol/AccountID.java +++ b/src/net/java/sip/communicator/service/protocol/AccountID.java @@ -719,6 +719,17 @@ public boolean isConfigHidden() ProtocolProviderFactory.IS_ACCOUNT_CONFIG_HIDDEN) != null; } + /** + * Checks if the account is marked as readonly. + * @return true if the account is marked as readonly or + * false otherwise. + */ + public boolean isReadOnly() + { + return getAccountPropertyString( + ProtocolProviderFactory.IS_ACCOUNT_READ_ONLY) != null; + } + /** * Returns the first ProtocolProviderService implementation * corresponding to the preferred protocol diff --git a/src/net/java/sip/communicator/service/protocol/ProtocolProviderFactory.java b/src/net/java/sip/communicator/service/protocol/ProtocolProviderFactory.java index ec7167c47..3873ca4b0 100644 --- a/src/net/java/sip/communicator/service/protocol/ProtocolProviderFactory.java +++ b/src/net/java/sip/communicator/service/protocol/ProtocolProviderFactory.java @@ -313,6 +313,12 @@ public abstract class ProtocolProviderFactory */ public static final String IS_ACCOUNT_CONFIG_HIDDEN = "IS_CONFIG_HIDDEN"; + /** + * The name of the property that would indicate if a given account + * configuration is read only. + */ + public static final String IS_ACCOUNT_READ_ONLY = "IS_READ_ONLY"; + /** * The name of the property that would indicate if a given account * groups are readonly, values can be all or a comma separated