package org.jscsi.target.settings; import java.util.Collection; import javax.naming.OperationNotSupportedException; import org.jscsi.target.settings.entry.Entry; /** * Instances of {@link SessionSettingsBuilderComponent} are used jointly with * instances of {@link ConnectionSettingsBuilderComponent} for creating {@link Settings} objects. * <p> * {@link SessionSettingsBuilderComponent} objects provide all session-wide parameters managed by the * session's {@link SessionSettingsNegotiator}. * * @see Settings#Settings(ConnectionSettingsBuilderComponent, SessionSettingsBuilderComponent) * @author Andreas Ergenzinger */ final class SessionSettingsBuilderComponent { /** * A serial number that allows to order {@link Settings} objects based on * creation order. */ long settingsId; /** * The <code>DataPDUInOrder</code> parameter. */ Boolean dataPduInOrder; /** * The <code>DataSequenceInOrder</code> parameter. */ Boolean dataSequenceInOrder; /** * The <code>DefaultTime2Retain</code> parameter. */ Integer defaultTime2Retain; /** * The <code>DefaultTime2Wait</code> parameter. */ Integer defaultTime2Wait; /** * The <code>ErrorRecoveryLevel</code> parameter. */ Integer errorRecoveryLevel; /** * The <code>FirstBurstLength</code> parameter. */ Integer firstBurstLength; /** * The <code>ImmediateData</code> parameter. */ Boolean immediateData; /** * The <code>InitialR2T</code> parameter. */ Boolean initialR2T; /** * The <code>InitiatorAlias</code> parameter. */ String initiatorAlias; /** * The <code>InitiatorName</code> parameter. */ String initiatorName; /** * The <code>MaxBurstLength</code> parameter. */ Integer maxBurstLength; /** * The <code>MaxConnections</code> parameter. */ Integer maxConnections; /** * The <code>MaxOutstandingR2T</code> parameter. */ Integer maxOutstandingR2T; /** * The <code>SessionType</code> parameter. */ String sessionType; /** * The {@link SessionSettingsBuilderComponent} constructor. The passed {@link Collection} must contain all * session-wide {@link Entry} objects, * since the constructor will try to locate a specific {@link Entry} for * each member variable and copy its current value. * * @param entries * a {@link Collection} containing all session-wide {@link Entry} objects */ SessionSettingsBuilderComponent(final long settingsId, final Collection<Entry> entries) { this.settingsId = settingsId; try { dataPduInOrder = SettingsNegotiator.getEntry(TextKeyword.DATA_PDU_IN_ORDER, entries).getBooleanValue(); dataSequenceInOrder = SettingsNegotiator.getEntry(TextKeyword.DATA_SEQUENCE_IN_ORDER, entries).getBooleanValue(); defaultTime2Retain = SettingsNegotiator.getEntry(TextKeyword.DEFAULT_TIME_2_RETAIN, entries).getIntegerValue(); defaultTime2Wait = SettingsNegotiator.getEntry(TextKeyword.DEFAULT_TIME_2_WAIT, entries).getIntegerValue(); errorRecoveryLevel = SettingsNegotiator.getEntry(TextKeyword.ERROR_RECOVERY_LEVEL, entries).getIntegerValue(); firstBurstLength = SettingsNegotiator.getEntry(TextKeyword.FIRST_BURST_LENGTH, entries).getIntegerValue(); immediateData = SettingsNegotiator.getEntry(TextKeyword.IMMEDIATE_DATA, entries).getBooleanValue(); initialR2T = SettingsNegotiator.getEntry(TextKeyword.INITIAL_R_2_T, entries).getBooleanValue(); initiatorAlias = SettingsNegotiator.getEntry(TextKeyword.INITIATOR_ALIAS, entries).getStringValue(); initiatorName = SettingsNegotiator.getEntry(TextKeyword.INITIATOR_NAME, entries).getStringValue(); maxBurstLength = SettingsNegotiator.getEntry(TextKeyword.MAX_BURST_LENGTH, entries).getIntegerValue(); maxConnections = SettingsNegotiator.getEntry(TextKeyword.MAX_CONNECTIONS, entries).getIntegerValue(); maxOutstandingR2T = SettingsNegotiator.getEntry(TextKeyword.MAX_OUTSTANDING_R_2_T, entries).getIntegerValue(); sessionType = SettingsNegotiator.getEntry(TextKeyword.SESSION_TYPE, entries).getStringValue(); } catch (OperationNotSupportedException e) { e.printStackTrace(); } } }