sdkcreationmw/sdkconnectivityfw/emuconnectmanager/epdt_java/src/com/nokia/epdt/plugins/s60/securityconf/SecConfMainPanel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sdkcreationmw/sdkconnectivityfw/emuconnectmanager/epdt_java/src/com/nokia/epdt/plugins/s60/securityconf/SecConfMainPanel.java Mon Mar 08 12:09:11 2010 +0530
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2000 - 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+ *
+*/
+
+package com.nokia.epdt.plugins.s60.securityconf;
+
+/* java.awt */
+import java.awt.Color;
+import java.awt.SystemColor;
+import java.awt.BorderLayout;
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+/* javax.swing */
+import javax.swing.JTable;
+import javax.swing.JPanel;
+import javax.swing.JComboBox;
+import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.ButtonGroup;
+import javax.swing.DefaultCellEditor;
+import javax.swing.border.EmptyBorder;
+import javax.swing.table.TableColumn;
+
+/* com.nokia.wtk.util.gui */
+import com.nokia.wtk.util.gui.BorderPanel;
+
+/**
+ * Security configuration UI class, main panel in the view.
+ */
+class SecConfMainPanel extends JPanel {
+
+ private static final int GAP = 6;
+
+ // Domain Selection combo
+ private JComboBox jDomainCombo;
+
+ // Permission bindings (settings) table
+ private JTable jBindingsTable;
+
+ // Data model for jBindingsTable
+ private PermTableModel permTableModel;
+
+ private SecurityConfPlugin parentPlugin;
+ private SecConfModel secConfModel;
+ private ProtectionDomain[] domains;
+
+ private static Color TABLE_ACTIVE_BGND = SystemColor.window;
+ private static Color TABLE_INACTIVE_BGND = SystemColor.control;
+
+ /**
+ * This is a constructor. In case if you haven't noticed :)
+ */
+ SecConfMainPanel(SecurityConfPlugin aParentPlugin) {
+ super(new GridBagLayout());
+ parentPlugin = aParentPlugin;
+ secConfModel = parentPlugin.getSecConfModel();
+ domains = secConfModel.getProtectionDomains(false);
+ permTableModel = new PermTableModel(parentPlugin);
+
+ // Domain combo box initialization
+ jDomainCombo = new JComboBox(domains);
+ jDomainCombo.setSelectedItem(secConfModel.getSelectedDomain());
+
+ JRadioButton realLifeRadio = new JRadioButton(
+ "Run MIDlets within security domain specified by their certificates");
+ JRadioButton emulatedRadio = new JRadioButton(
+ "Run MIDlets within the following domain:");
+
+ ButtonGroup bg = new ButtonGroup();
+ bg.add(realLifeRadio);
+ bg.add(emulatedRadio);
+ if (secConfModel.isEmulatedSecurityMode()) {
+ realLifeRadio.setSelected(false);
+ emulatedRadio.setSelected(true);
+ jDomainCombo.setEnabled(true);
+ } else {
+ realLifeRadio.setSelected(true);
+ emulatedRadio.setSelected(false);
+ jDomainCombo.setEnabled(false);
+ }
+
+ jDomainCombo.addActionListener(new DomainSelectionListener());
+ realLifeRadio.addActionListener(new RealLifeRadioListener());
+ emulatedRadio.addActionListener(new EmulatedRadioListener());
+
+ BorderPanel bp = new BorderPanel(emulatedRadio);
+ bp.getContentPanel().add(createConfigurationsPanel());
+
+ ProtectionDomain d = secConfModel.getSelectedDomain();
+ if (d != null && d.isUserDefined() && secConfModel.isEmulatedSecurityMode()) {
+ jBindingsTable.setEnabled(true);
+ jBindingsTable.setBackground(TABLE_ACTIVE_BGND);
+ } else {
+ jBindingsTable.setEnabled(false);
+ jBindingsTable.setBackground(TABLE_INACTIVE_BGND);
+ }
+
+ // We could use BorderLayout and this:
+ //
+ // add(getJRealLifeRadio(), BorderLayout.NORTH);
+ // add(bp, BorderLayout.CENTER);
+ //
+ // would be ALMOST perfect, except that radio buttons wouldn't be
+ // aligned horizontally. With GridBagLayout we can manipulate insets
+ // of each cell, which allows us to aligh the radio buttons. A little
+ // bit more complicated, but looks better.
+
+ GridBagConstraints gbc = new GridBagConstraints();
+ gbc.weightx = 1.0;
+ gbc.gridwidth = GridBagConstraints.REMAINDER;
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ gbc.anchor = GridBagConstraints.NORTH;
+ gbc.insets.left = bp.getBorder().getBorderInsets(bp).left +
+ BorderPanel.COMPONENT_INSET_H;
+ add(realLifeRadio, gbc);
+
+ gbc.weighty = 1.0;
+ gbc.insets.left = 0;
+ gbc.fill = GridBagConstraints.BOTH;
+ gbc.gridheight = GridBagConstraints.REMAINDER;
+ add(bp, gbc);
+
+ // Final touches
+ setBorder(new EmptyBorder(GAP,GAP,GAP,GAP));
+ jBindingsTable.setPreferredScrollableViewportSize(
+ jBindingsTable.getPreferredSize());
+ }
+
+ private JPanel createConfigurationsPanel() {
+ jBindingsTable = new JTable(permTableModel);
+ jBindingsTable.setShowGrid(true);
+ jBindingsTable.getTableHeader().setReorderingAllowed(false);
+
+ JComboBox permCombo = new JComboBox(new Permission [] {
+ Permission.Allowed,
+ Permission.Denied,
+ Permission.Session,
+ Permission.OneShot
+ });
+
+ TableColumn permColumn = jBindingsTable.getColumnModel().getColumn(1);
+ permColumn.setCellEditor(new DefaultCellEditor(permCombo));
+ jBindingsTable.setBackground(TABLE_ACTIVE_BGND);
+ jBindingsTable.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
+
+ JPanel p = new JPanel(new BorderLayout(GAP, GAP));
+ p.add(jDomainCombo, BorderLayout.NORTH);
+ p.add(new JScrollPane(jBindingsTable), BorderLayout.CENTER);
+ p.setBorder(new EmptyBorder(0,GAP,GAP,GAP));
+ return p;
+ }
+
+ private class DomainSelectionListener implements ActionListener {
+ public void actionPerformed(ActionEvent aEvent) {
+ ProtectionDomain d = (ProtectionDomain)jDomainCombo.getSelectedItem();
+ if (secConfModel.getSelectedDomain() != d) {
+
+ // Selection has changed
+ secConfModel.setSelectedDomain(d);
+ parentPlugin.pluginModelChangedAction();
+
+ // Notify table about the update
+ permTableModel.fireTableDataChanged();
+ jBindingsTable.getColumnModel().getColumn(1).
+ getCellEditor().cancelCellEditing();
+
+ // If selected domain is editable and security is emulated
+ if (d.isUserDefined() &&
+ secConfModel.isEmulatedSecurityMode()) {
+ jBindingsTable.setEnabled(true);
+ jBindingsTable.setBackground(TABLE_ACTIVE_BGND);
+ } else {
+ jBindingsTable.setEnabled(false);
+ jBindingsTable.setBackground(TABLE_INACTIVE_BGND);
+ }
+ }
+ }
+ }
+
+ private class RealLifeRadioListener implements ActionListener {
+ public void actionPerformed(ActionEvent aEvent) {
+ if (secConfModel.isEmulatedSecurityMode()) {
+ // Radio button's state has changed
+ secConfModel.setEmulatedSecurityMode(false);
+ jDomainCombo.setEnabled(false);
+ jBindingsTable.setEnabled(false);
+ jBindingsTable.clearSelection();
+ jBindingsTable.setBackground(TABLE_INACTIVE_BGND);
+ jBindingsTable.getColumnModel().getColumn(1).
+ getCellEditor().cancelCellEditing();
+ parentPlugin.pluginModelChangedAction();
+ }
+ }
+ }
+
+ private class EmulatedRadioListener implements ActionListener {
+ public void actionPerformed(ActionEvent aEvent) {
+ if (!secConfModel.isEmulatedSecurityMode()) {
+ // Radio button's state has changed
+ secConfModel.setEmulatedSecurityMode(true);
+ jDomainCombo.setEnabled(true);
+ ProtectionDomain d = secConfModel.getSelectedDomain();
+ if (d != null && d.isUserDefined() &&
+ secConfModel.isEmulatedSecurityMode()) {
+ jBindingsTable.setEnabled(true);
+ jBindingsTable.setBackground(TABLE_ACTIVE_BGND);
+ }
+ parentPlugin.pluginModelChangedAction();
+ }
+ }
+ }
+}