package com.onaro.sanscreen.client.view.task.template.addhost.generator.host; import com.onaro.sanscreen.client.view.task.template.addhost.generator.AddHostGeneratorModel; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeEvent; public abstract class AbstractPortColumn implements ColumnModel { protected AddHostGeneratorModel generatorModel; /** * Maps a row number to the index of a port and its adapter. null value represents a row * that is mapped to an adapter, not to a port. */ private PortIndex[] rowToPort; public AbstractPortColumn(AddHostGeneratorModel generatorModel) { this.generatorModel = generatorModel; generatorModel.addPropertyChangeListener(AddHostGeneratorModel.HOST_CONFIGURATION, new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { rowToPort = null; } }); } public boolean isCellEditable(int rowIndex) { return getPortIndexByRow(rowIndex) != null; } public abstract Object getPortValue(int adapterIndex,int portIndex); public final Object getValueAt(int rowIndex) { PortIndex portIndex = getPortIndexByRow(rowIndex); if (portIndex == null) return NO_VALUE; return getPortValue(portIndex.adapter, portIndex.port); } public abstract void setPortValue(Object aValue, int adapterIndex,int portIndex); public final void setValueAt(Object aValue, int rowIndex) { PortIndex portIndex = getPortIndexByRow(rowIndex); assert portIndex != null : "Cannot set WWN to row " + rowIndex + " because it's not a port"; //$NON-NLS-1$ //$NON-NLS-2$ setPortValue(aValue, portIndex.adapter, portIndex.port); } protected PortIndex getPortIndexByRow(int rowIndex) { if (rowToPort == null) { rowToPort = new PortIndex[generatorModel.getAdaperAndPortsCount()]; int row = 0; for (int adapterIndex = 0; adapterIndex < generatorModel.getAdapterCount(); ++adapterIndex) { rowToPort[row++] = null; Adapter adapter = generatorModel.getAdapter(adapterIndex); for (int portIndex = 0; portIndex < adapter.getPortsCount(); ++portIndex) { rowToPort[row++] = new PortIndex(adapterIndex, portIndex); } } } return rowToPort[rowIndex]; } static class PortIndex { int adapter; int port; public PortIndex(int adapter, int port) { this.adapter = adapter; this.port = port; } } }