Пример #1
0
        /// <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();
            }
        }