/// <summary> /// Renames the unit. /// </summary> /// <param name="oldUnitname">The old unitname.</param> /// <param name="newUnitname">The new unitname.</param> public void RenameUnit(string oldUnitname, string newUnitname) { if (m_objectDisposed) { throw new ObjectDisposedException("m_workspace"); } if (String.IsNullOrWhiteSpace(oldUnitname)) { throw new ArgumentException("Old unitname cannot be null or empty or whitespace!", "oldUnitname"); } if (String.IsNullOrWhiteSpace(newUnitname)) { throw new ArgumentException("New unitname cannot be null or empty or whitespace!", "newUnitname"); } m_dataUnitsLock.EnterWriteLock(); try { if (m_dataUnits.ContainsKey(oldUnitname)) { string newDataPath = GetDataPath(newUnitname); string newCachePath = GetCachePath(newUnitname); //get data unit to be renamed var dataUnit = m_dataUnits[oldUnitname]; string oldDataPath = GetDataPath(oldUnitname); string oldCachePath = GetCachePath(oldUnitname); //check if there is already stream with the same name as newUnitname if (m_dataUnits.ContainsKey(newUnitname) == true) { RemoveUnitFromWorkspaceInternal(newUnitname); } //move stream within stream manager from old name to new name m_streamManager.MoveStream(oldCachePath, newCachePath); m_streamManager.MoveStream(oldDataPath, newDataPath); // rename data unit providing new data and cache path for caching serializer dataUnit.Rename(newUnitname, newDataPath, newCachePath); //remap data unit in dataUnits. Note unitsViewCollection does not have to be modified - since the data unit object didn't change m_dataUnits.Remove(oldUnitname); m_dataUnits.Add(dataUnit.RealUnitName, dataUnit); } } finally { m_dataUnitsLock.ExitWriteLock(); } }