/*
* Copyright (c) 2008-2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.installer.controller;
import com.emc.storageos.model.property.PropertyConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import charvax.swing.event.ListSelectionEvent;
import charvax.swing.event.ListSelectionListener;
import com.emc.storageos.installer.util.InstallerConstants;
import com.emc.storageos.installer.util.InstallerOperation;
import com.emc.storageos.services.util.Configuration;
import com.emc.storageos.services.util.ServerProbe;
import com.emc.storageos.installer.widget.SelectListPanel;
/**
* Class implements the control on the Disk selection page.
*
*/
public class DiskConfigController implements IConfigPanelController {
private static final Logger log = LoggerFactory.getLogger(DiskConfigController.class);
private SelectListPanel panel;
private Configuration config;
private String diskInputStr;
private String diskName;
private String sizeStr;
private String[] status;
public DiskConfigController(Configuration config, SelectListPanel panel) {
this.panel = panel;
this.config = config;
setupEventListener();
}
private void setupEventListener() {
this.panel.addListSelectionListener(new SelectDiskListener());
}
/**
* Class implements action listener on disk selection.
*
*/
class SelectDiskListener implements ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent ie) {
status = null;
Object[] items = panel.getList().getSelectedValues();
String s = "";
for (int i = 0; i < items.length; i++) {
if (i != 0) {
s += ",";
}
s += (String) items[i];
}
diskInputStr = s;
if (diskInputStr != null && !diskInputStr.isEmpty()) {
diskName = InstallerOperation.parseDiskString(diskInputStr);
log.debug("Do validation on disk '{}'", diskName);
if (checkDiskCapacityForMinimumRequirement()) {
checkDiskForViprPartitions();
}
}
}
private void checkDiskForViprPartitions() {
if (ServerProbe.getInstance().hasViPRPartition(diskName)) {
log.warn("Disk {} has ViPR partition already", diskName);
String[] warningMsg = new String[] {
String.format(InstallerConstants.WARN_MSG_DISK_HAS_VIPR_PARTITION_1, diskName),
InstallerConstants.WARN_MSG_DISK_HAS_VIPR_PARTITION_2,
InstallerConstants.WARN_MSG_DISK_HAS_VIPR_PARTITION_3 };
panel.getRoot().displayWarningMessage(warningMsg);
}
}
private boolean checkDiskCapacityForMinimumRequirement() {
sizeStr = ServerProbe.getInstance().getDiskCapacity(diskName);
log.debug("Check disk {} and size {} for minimum size requirement",
diskName, sizeStr);
if (!ServerProbe.getInstance().diskMetMiniumSizeReq(diskName)) {
log.warn("Disk {} failed minimum size check", diskName);
status = new String[] { InstallerConstants.ERROR_MSG_NOT_MEET_MIN_REQ_1,
InstallerConstants.ERROR_MSG_HW_NOT_SAME_2,
InstallerConstants.ERROR_MSG_NOT_MEET_MIN_REQ_4 };
panel.getRoot().displayErrorMessage(status);
return false;
}
return true;
}
}
@Override
public String[] configurationIsCompleted() {
String msg = null;
if (diskInputStr == null || diskInputStr.isEmpty()) {
msg = InstallerConstants.DISK_CONFIG_WARN_MSG;
} else {
if (status != null && status.length != 0) {
return status;
} else {
config.getHwConfig().put(PropertyConstants.PROPERTY_KEY_DISK, diskName);
config.getHwConfig().put(PropertyConstants.PROPERTY_KEY_DISK_CAPACITY, sizeStr);
}
}
return (msg == null) ? null : new String[] { msg };
}
}