/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.model.UnManagedDiscoveredObjects; import java.net.URI; import com.emc.storageos.db.client.model.AlternateId; import com.emc.storageos.db.client.model.Cf; import com.emc.storageos.db.client.model.IndexByKey; import com.emc.storageos.db.client.model.Name; import com.emc.storageos.db.client.model.RelationIndex; import com.emc.storageos.db.client.model.StorageSystem; import com.emc.storageos.db.client.model.StringSet; import com.emc.storageos.db.client.model.UnManagedDiscoveredObject; import com.emc.storageos.db.client.model.ZoneInfo; import com.emc.storageos.db.client.model.ZoneInfoMap; @Cf("UnManagedExportMask") public class UnManagedExportMask extends UnManagedDiscoveredObject { private static final long serialVersionUID = 1L; private URI _storageSystemUri; private String _maskingViewPath; private String _maskName; private String _nativeId; private StringSet _knownInitiatorUris; private StringSet _knownInitiatorNetworkIds; private StringSet _unmanagedInitiatorNetworkIds; private StringSet _knownStoragePortUris; private StringSet _unmanagedStoragePortNetworkIds; private StringSet _knownVolumeUris; private StringSet _unmanagedVolumeUris; private ZoneInfoMap _zoningMap; @RelationIndex(cf = "UnManagedExportMaskRelationIndex", type = StorageSystem.class) @Name("storageSystem") public URI getStorageSystemUri() { return _storageSystemUri; } public void setStorageSystemUri(URI storageSystemUri) { this._storageSystemUri = storageSystemUri; setChanged("storageSystem"); } @Name("maskingViewPath") @AlternateId("AltIdIndex") public String getMaskingViewPath() { return _maskingViewPath; } public void setMaskingViewPath(String maskingViewPath) { this._maskingViewPath = maskingViewPath; setChanged("maskingViewPath"); } @Name("maskName") @AlternateId("AltIdIndex") public String getMaskName() { return _maskName; } public void setMaskName(String maskName) { _maskName = maskName; setChanged("maskName"); } @Name("nativeId") public String getNativeId() { return _nativeId; } public void setNativeId(String nativeId) { _nativeId = nativeId; setChanged("nativeId"); } @Name("knownInitiatorUris") public StringSet getKnownInitiatorUris() { if (null == _knownInitiatorUris) { this.setKnownInitiatorUris(new StringSet()); } return _knownInitiatorUris; } public void setKnownInitiatorUris(StringSet knownInitiatorUris) { this._knownInitiatorUris = knownInitiatorUris; } @IndexByKey @AlternateId("KnownInitiatorNetworkIdIndex") @Name("knownInitiatorNetworkIds") public StringSet getKnownInitiatorNetworkIds() { if (null == _knownInitiatorNetworkIds) { this.setKnownInitiatorNetworkIds(new StringSet()); } return _knownInitiatorNetworkIds; } public void setKnownInitiatorNetworkIds(StringSet knownInitiatorNetworkIds) { this._knownInitiatorNetworkIds = knownInitiatorNetworkIds; } @Name("unmanagedInitiatorNetworkIds") public StringSet getUnmanagedInitiatorNetworkIds() { if (null == _unmanagedInitiatorNetworkIds) { this.setUnmanagedInitiatorNetworkIds(new StringSet()); } return _unmanagedInitiatorNetworkIds; } public void setUnmanagedInitiatorNetworkIds(StringSet unmanagedInitiatorNetworkIds) { this._unmanagedInitiatorNetworkIds = unmanagedInitiatorNetworkIds; } @Name("knownStoragePortUris") @AlternateId("UnManagedMaskStoragePorts") public StringSet getKnownStoragePortUris() { if (null == _knownStoragePortUris) { setKnownStoragePortUris(new StringSet()); } return _knownStoragePortUris; } public void setKnownStoragePortUris(StringSet knownStoragePortUris) { this._knownStoragePortUris = knownStoragePortUris; } @Name("unmanagedStoragePortNetworkIds") public StringSet getUnmanagedStoragePortNetworkIds() { if (null == _unmanagedStoragePortNetworkIds) { setUnmanagedStoragePortNetworkIds(new StringSet()); } return _unmanagedStoragePortNetworkIds; } public void setUnmanagedStoragePortNetworkIds( StringSet unmanagedStoragePortNetworkIds) { this._unmanagedStoragePortNetworkIds = unmanagedStoragePortNetworkIds; } @Name("knownVolumeUris") public StringSet getKnownVolumeUris() { if (null == _knownVolumeUris) { setKnownVolumeUris(new StringSet()); } return _knownVolumeUris; } public void setKnownVolumeUris(StringSet knownVolumeUris) { this._knownVolumeUris = knownVolumeUris; } @Name("unmanagedVolumeUris") public StringSet getUnmanagedVolumeUris() { if (null == _unmanagedVolumeUris) { setUnmanagedVolumeUris(new StringSet()); } return _unmanagedVolumeUris; } public void setUnmanagedVolumeUris( StringSet unmanagedVolumeUris) { this._unmanagedVolumeUris = unmanagedVolumeUris; } @Name("zoningMap") public ZoneInfoMap getZoningMap() { if (_zoningMap == null) { _zoningMap = new ZoneInfoMap(); } return _zoningMap; } public void setZoningMap(ZoneInfoMap zoningMap) { if (_zoningMap == null) { _zoningMap = zoningMap; setChanged("zoningMap"); } else { _zoningMap.replace(zoningMap); } } public void addZoningMap(ZoneInfoMap zoningMapEntries) { if (this._zoningMap == null) { setZoningMap(zoningMapEntries); } else { this._zoningMap.putAll(zoningMapEntries); } } public void removeZoningMapEntry(String key) { if (this._zoningMap != null) { // This seemingly contorted logic is to avoid // a concurrent update error. _zoningMap.remove(key); } } /** * Add an entry to create a zone between an initiator and port. * * @param initiator URI as String * @param storagePort URI as String */ public void addZoningMapEntry(ZoneInfo zoningInfo) { if (this._zoningMap == null) { this._zoningMap = new ZoneInfoMap(); } this._zoningMap.put(zoningInfo.getZoneReferenceKey(), zoningInfo); } /** * Update initiator/volumes/ports * * @param knownIniSet * @param knownNetworkIdSet * @param knownVolumeSet * @param knownPortSet */ public void replaceNewWithOldResources(StringSet knownIniSet, StringSet knownNetworkIdSet, StringSet knownVolumeSet, StringSet knownPortSet) { // CTRL - 8918 - always update the mask with new initiators and volumes. if (getKnownInitiatorUris() == null) { setKnownInitiatorUris(new StringSet()); } else { getKnownInitiatorUris().replace(knownIniSet); } if (getKnownInitiatorNetworkIds() == null) { setKnownInitiatorNetworkIds(new StringSet()); } else { getKnownInitiatorNetworkIds().replace(knownNetworkIdSet); } if (getKnownStoragePortUris() == null) { setKnownStoragePortUris(new StringSet()); } else { getKnownStoragePortUris().replace(knownPortSet); } if (getKnownVolumeUris() == null) { setKnownVolumeUris(new StringSet()); } else { getKnownVolumeUris().replace(knownVolumeSet); } } @Override public String forDisplay() { if (_maskName != null && !_maskName.isEmpty()) { return String.format("%s (%s)", _maskName, _id); } else { return super.forDisplay(); } } @Override public String toString() { StringBuilder str = new StringBuilder("UnManagedExportMask: "); str.append(_maskingViewPath); str.append("; \n\t maskName: ").append(_maskName); str.append("; \n\t nativeId: ").append(_nativeId); str.append("; \n\t known initiators: ").append(this.getKnownInitiatorUris()); str.append("; \n\t known initiator network ids: ").append(this.getKnownInitiatorNetworkIds()); str.append("; \n\t unmanaged initiators network ids: ").append(this.getUnmanagedInitiatorNetworkIds()); str.append("; \n\t known storage ports: ").append(this.getKnownStoragePortUris()); str.append("; \n\t unmanaged storage ports: ").append(this.getUnmanagedStoragePortNetworkIds()); str.append("; \n\t known storage volumes: ").append(this.getKnownVolumeUris()); str.append("; \n\t unmanaged storage volumes: ").append(this.getUnmanagedVolumeUris()); str.append("; \n\t zoning map: ").append(this.getZoningMap()); return str.toString(); } }