private void MoveFolderAndAllSubFolders(AssetFolder source, AssetFolder destination, string destinationParent, string destinationName, ref Dictionary<string, HttpStatusCode> multiStatus) { string srcPath = source.ParentPath + source.Name; if (!(source is AssetFolderItem)) srcPath += "/"; //check "permissions" if (IsProtectedPath(srcPath)) { //this is one of the default paths. this can't be deleted because it might result some problems if (multiStatus == null) multiStatus = new Dictionary<string, HttpStatusCode>(); multiStatus.Add(srcPath, HttpStatusCode.Forbidden); return; } //TODO: Lock check //first move resource if (destination == null) { if (!m_assetFolderStrg.RemoveItem(source)) { SetMultiStatusPrecoditionFailedError(destinationParent + destinationName, ref multiStatus); return; } source.Name = destinationName; source.ParentPath = destinationParent; m_assetFolderStrg.Save(source); IWebDAVResource resProp = m_propertyMngr.GetResource(srcPath); if (!m_propertyMngr.Remove(resProp)) { SetMultiStatusPrecoditionFailedError(destinationParent + destinationName, ref multiStatus); return; } string newPath = destinationParent + destinationName; if (!(source is AssetFolderItem)) newPath += "/"; resProp.Path = newPath; if (!m_propertyMngr.SaveResource(resProp)) { SetMultiStatusPrecoditionFailedError(destinationParent + destinationName, ref multiStatus); return; } } else { //just delete the source if (!m_assetFolderStrg.RemoveItem(source)) { SetMultiStatusPrecoditionFailedError(destinationParent + destinationName, ref multiStatus); return; } if (!m_propertyMngr.Remove(srcPath)) { SetMultiStatusPrecoditionFailedError(destinationParent + destinationName, ref multiStatus); return; } } //then move sub resources if (!(source is AssetFolderItem)) { IList<AssetFolder> subitems = m_assetFolderStrg.GetSubItems(srcPath); foreach (AssetFolder item in subitems) { AssetFolder subDst = m_assetFolderStrg.GetItem(destinationParent + destinationName + "/", item.Name); MoveFolderAndAllSubFolders(item, subDst, destinationParent + destinationName + "/", item.Name, ref multiStatus); } } }
/// <summary> /// Save or update object to database /// </summary> /// <param name="obj">Object to save or update</param> public void Save(AssetFolder obj) { try { AssetFolder old = (AssetFolder)manager.Get(typeof(AssetFolder), obj.Id); if (old != null) { m_log.InfoFormat("[NHIBERNATE] updating RexAssetFolder {0} {1}", obj.ParentPath, obj.Name); manager.Update(obj); } else { m_log.InfoFormat("[NHIBERNATE] saving RexAssetFolder {0} {1}", obj.ParentPath, obj.Name); manager.Insert(obj); } } catch (Exception e) { m_log.Error("[NHIBERNATE]: Can't save: ", e); } }
HttpStatusCode MkcolHandler(string path, string username) { if (path.EndsWith("/")) path = path.TrimEnd('/'); string[] pathParts = path.Split('/'); string parentPath = String.Empty; for (int i = 0; i < pathParts.Length - 1; i++) { parentPath += pathParts[i]; parentPath += "/"; } AssetFolder parent = GetAssetFolder(parentPath); if (parent == null) { return HttpStatusCode.Conflict; } if (parent is AssetFolderItem) { return HttpStatusCode.Conflict; } AssetFolder folder = GetAssetFolder(path); if (folder != null) { return HttpStatusCode.MethodNotAllowed; } else { folder = new AssetFolder(parentPath, pathParts[pathParts.Length - 1]); m_assetFolderStrg.Save(folder); if (!path.EndsWith("/")) path += "/"; m_propertyMngr.SaveResource(new WebDAVFolder(path, DateTime.Now, DateTime.Now, DateTime.Now, false)); m_log.DebugFormat("[WORLDINVENTORY]: Created folder {0} to {1}", folder.Name, folder.ParentPath); return HttpStatusCode.Created; } }
/// <summary> /// Removes the item. /// </summary> /// <param name="item">The item.</param> /// <returns>True if deleted properly, false if not</returns> public bool RemoveItem(AssetFolder item) { if (item != null) { return manager.Delete(item); } else { return false; } }