/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at * trunk/opends/resource/legal-notices/OpenDS.LICENSE * or https://OpenDS.dev.java.net/OpenDS.LICENSE. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, * add the following below this CDDL HEADER, with the fields enclosed * by brackets "[]" replaced with your own identifying information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2008-2009 Sun Microsystems, Inc. */ package org.opends.quicksetup.installer.ui; import org.opends.messages.Message; import static org.opends.messages.QuickSetupMessages.*; import java.awt.Component; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; import javax.swing.Box; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.text.JTextComponent; import org.opends.admin.ads.ServerDescriptor; import org.opends.quicksetup.UserData; import org.opends.quicksetup.installer.AuthenticationData; import org.opends.quicksetup.ui.FieldName; import org.opends.quicksetup.ui.GuiApplication; import org.opends.quicksetup.ui.LabelFieldDescriptor; import org.opends.quicksetup.ui.QuickSetupStepPanel; import org.opends.quicksetup.ui.UIFactory; /** * This class is used to provide a data model for the list of servers for which * we must provide a replication port. */ public class RemoteReplicationPortsPanel extends QuickSetupStepPanel implements Comparator<ServerDescriptor> { private static final long serialVersionUID = -3742350600617826375L; private Component lastFocusComponent; private HashMap<String, JLabel> hmLabels = new HashMap<String, JLabel>(); private HashMap<String, JTextComponent> hmFields = new HashMap<String, JTextComponent>(); private HashMap<String, JCheckBox> hmCbs = new HashMap<String, JCheckBox>(); private JScrollPane scroll; private JPanel fieldsPanel; private TreeSet<ServerDescriptor> orderedServers = new TreeSet<ServerDescriptor>(this); //The display of the server the user provided in the replication options // panel private String serverToConnectDisplay = null; /** * Constructor of the panel. * @param application Application represented by this panel and used to * initialize the fields of the panel. */ public RemoteReplicationPortsPanel(GuiApplication application) { super(application); } /** * {@inheritDoc} */ public Object getFieldValue(FieldName fieldName) { Object value = null; if (fieldName == FieldName.REMOTE_REPLICATION_PORT) { Map<String, String> hm = new HashMap<String, String>(); for (String id : hmFields.keySet()) { hm.put(id, hmFields.get(id).getText()); } value = hm; } else if (fieldName == FieldName.REMOTE_REPLICATION_SECURE) { Map<String, Boolean> hm = new HashMap<String, Boolean>(); for (String id : hmCbs.keySet()) { hm.put(id, hmCbs.get(id).isSelected()); } value = hm; } return value; } /** * {@inheritDoc} */ public void displayFieldInvalid(FieldName fieldName, boolean invalid) { if (fieldName == FieldName.REMOTE_REPLICATION_PORT) { for (String id : hmLabels.keySet()) { UIFactory.setTextStyle(hmLabels.get(id), UIFactory.TextStyle.SECONDARY_FIELD_VALID); } if (invalid) { for (String id : hmLabels.keySet()) { String sPort = hmFields.get(id).getText(); boolean isValid = false; try { int replicationPort = Integer.parseInt(sPort); if ((replicationPort >= 1) && (replicationPort <= 65535)) { isValid = true; } } catch (Throwable t) { } if (!isValid) { UIFactory.setTextStyle(hmLabels.get(id), UIFactory.TextStyle.SECONDARY_FIELD_INVALID); } } } } } /** * {@inheritDoc} */ protected boolean requiresScroll() { return false; } /** * {@inheritDoc} */ public int compare(ServerDescriptor desc1, ServerDescriptor desc2) { return desc1.getHostPort(true).compareTo(desc2.getHostPort(true)); } /** * {@inheritDoc} */ protected Component createInputPanel() { JPanel panel = new JPanel(new GridBagLayout()); panel.setOpaque(false); GridBagConstraints gbc = new GridBagConstraints(); gbc.weightx = 1.0; gbc.anchor = GridBagConstraints.NORTHWEST; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.insets = UIFactory.getEmptyInsets(); gbc.weighty = 1.0; gbc.fill = GridBagConstraints.BOTH; fieldsPanel = new JPanel(new GridBagLayout()); fieldsPanel.setOpaque(false); scroll = UIFactory.createBorderLessScrollBar(fieldsPanel); panel.add(scroll, gbc); return panel; } /** * {@inheritDoc} */ protected Message getInstructions() { return INFO_REMOTE_REPLICATION_PORT_INSTRUCTIONS.get(); } /** * {@inheritDoc} */ protected Message getTitle() { return INFO_REMOTE_REPLICATION_PORT_TITLE.get(); } /** * {@inheritDoc} */ public void beginDisplay(UserData data) { TreeSet<ServerDescriptor> array = orderServers( data.getRemoteWithNoReplicationPort().keySet()); AuthenticationData authData = data.getReplicationOptions().getAuthenticationData(); String newServerDisplay; if (authData != null) { newServerDisplay = authData.getHostName()+":"+authData.getPort(); } else { newServerDisplay = ""; } if (!array.equals(orderedServers) || !newServerDisplay.equals(serverToConnectDisplay)) { serverToConnectDisplay = newServerDisplay; /** * Adds the required focus listeners to the fields. */ final FocusListener l = new FocusListener() { public void focusGained(FocusEvent e) { lastFocusComponent = e.getComponent(); } public void focusLost(FocusEvent e) { } }; lastFocusComponent = null; HashMap<String, String> hmOldValues = new HashMap<String, String>(); for (String id : hmFields.keySet()) { hmOldValues.put(id, hmFields.get(id).getText()); } HashMap<String, Boolean> hmOldSecureValues = new HashMap<String, Boolean>(); for (String id : hmCbs.keySet()) { hmOldSecureValues.put(id, hmCbs.get(id).isSelected()); } orderedServers.clear(); orderedServers.addAll(array); hmFields.clear(); hmCbs.clear(); hmLabels.clear(); for (ServerDescriptor server : orderedServers) { String serverDisplay; if (server.getHostPort(false).equalsIgnoreCase(serverToConnectDisplay)) { serverDisplay = serverToConnectDisplay; } else { serverDisplay = server.getHostPort(true); } LabelFieldDescriptor desc = new LabelFieldDescriptor( Message.raw(serverDisplay), INFO_REPLICATION_PORT_TOOLTIP.get(), LabelFieldDescriptor.FieldType.TEXTFIELD, LabelFieldDescriptor.LabelType.PRIMARY, UIFactory.PORT_FIELD_SIZE); AuthenticationData auth = data.getRemoteWithNoReplicationPort().get(server); JTextComponent field = UIFactory.makeJTextComponent(desc, String.valueOf(auth.getPort())); String oldValue = hmOldValues.get(server.getId()); if (oldValue != null) { field.setText(oldValue); } JLabel label = UIFactory.makeJLabel(desc); hmFields.put(server.getId(), field); label.setLabelFor(field); field.addFocusListener(l); if (lastFocusComponent == null) { lastFocusComponent = field; } hmLabels.put(server.getId(), label); JCheckBox cb = UIFactory.makeJCheckBox( INFO_SECURE_REPLICATION_LABEL.get(), INFO_SECURE_REPLICATION_TOOLTIP.get(), UIFactory.TextStyle.SECONDARY_FIELD_VALID); cb.setSelected(auth.useSecureConnection()); Boolean oldSecureValue = hmOldSecureValues.get(server.getId()); if (oldSecureValue != null) { cb.setSelected(oldSecureValue); } hmCbs.put(server.getId(), cb); } populateFieldsPanel(); } } /** * {@inheritDoc} */ public void endDisplay() { if (lastFocusComponent != null) { lastFocusComponent.requestFocusInWindow(); } } private void populateFieldsPanel() { fieldsPanel.removeAll(); GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.anchor = GridBagConstraints.NORTHWEST; boolean first = true; for (ServerDescriptor server : orderedServers) { gbc.insets.left = 0; gbc.weightx = 0.0; if (!first) { gbc.insets.top = UIFactory.TOP_INSET_SECONDARY_FIELD; } gbc.gridwidth = 4; fieldsPanel.add(hmLabels.get(server.getId()), gbc); gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD; gbc.gridwidth--; fieldsPanel.add(hmFields.get(server.getId()), gbc); gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD; gbc.gridwidth = GridBagConstraints.RELATIVE; fieldsPanel.add(hmCbs.get(server.getId()), gbc); gbc.gridwidth = GridBagConstraints.REMAINDER; gbc.weightx = 1.0; fieldsPanel.add(Box.createHorizontalGlue(), gbc); first = false; } addVerticalGlue(fieldsPanel); } private TreeSet<ServerDescriptor> orderServers( Set<ServerDescriptor> servers) { TreeSet<ServerDescriptor> ordered = new TreeSet<ServerDescriptor>(this); ordered.addAll(servers); return ordered; } }