/* * Copyright (c) 2008-2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.installer.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import charva.awt.Component; import charva.awt.event.ItemEvent; import charva.awt.event.ItemListener; import charvax.swing.JRadioButton; import com.emc.storageos.services.util.Configuration; import com.emc.storageos.installer.util.ClusterType; import com.emc.storageos.installer.util.InstallerConstants; import com.emc.storageos.installer.widget.SelectButtonPanel; /** * Class implements the control for Node configuration page for rejoin case. * */ public class SelectedNodeConfigController implements IConfigPanelController { private static final Logger log = LoggerFactory.getLogger(SelectedNodeConfigController.class); private int nodeCount = 0; private String nodeId; private Configuration config; private SelectButtonPanel panel; public SelectedNodeConfigController(Configuration config, SelectButtonPanel panel) { this.panel = panel; this.config = config; setupEventListener(); } private void setupEventListener() { panel.selectList1ItemListener(new SelectNodeCountListener()); panel.selectList2ItemListener(new SelectNodeIdListener()); } class SelectNodeCountListener implements ItemListener { @Override public void itemStateChanged(ItemEvent ie) { int statechange = ie.getStateChange(); Component source = (Component) ie.getSource(); if (statechange == ItemEvent.SELECTED) { String buttonLabel = ((JRadioButton) source).getText(); if (buttonLabel.equals(ClusterType.NODE_COUNT_1.getLabel())) { nodeCount = ClusterType.NODE_COUNT_1.getCount(); } else if (buttonLabel.equals(ClusterType.NODE_COUNT_3.getLabel())) { nodeCount = ClusterType.NODE_COUNT_3.getCount(); } else if (buttonLabel.equals(ClusterType.NODE_COUNT_5.getLabel())) { nodeCount = ClusterType.NODE_COUNT_5.getCount(); } resetVisibility(); resetEnableDisable(); } } /* * Disable/gray out the node id already taken */ private void resetEnableDisable() { // get the node already taken and disable it for (int i = 0; i < nodeCount; i++) { JRadioButton node = panel.getButtonList2().get(i); if (config.getAliveNodes().contains(node.getText())) { // this node already taken, disable it node.setEnabled(false); } else { node.setEnabled(true); } } } /* * Reset the visibility of the node id based on the node count of selected cluster. */ private void resetVisibility() { // reset all buttons to invisible and clear the selection made // before first for (JRadioButton node : panel.getButtonList2()) { node.setSelected(false); node.setVisible(false); } // set the label back visible panel.getEastLabel().setVisible(true); // enable buttons based on node count for (int i = 0; i < nodeCount; i++) { panel.getButtonList2().get(i).setVisible(true); } } } class SelectNodeIdListener implements ItemListener { @Override public void itemStateChanged(ItemEvent ie) { int statechange = ie.getStateChange(); Component source = (Component) ie.getSource(); if (statechange == ItemEvent.SELECTED) { JRadioButton button = (JRadioButton) source; nodeId = button.getText(); } } } @Override public String[] configurationIsCompleted() { String err = null; if (nodeId == null) { err = InstallerConstants.CLUSTER_CONFIG_WARN_MSG; } else { log.info("Saving node id {} into the config", nodeId); config.setNodeId(nodeId); } return (err == null) ? null : new String[] { err }; } }