/// <summary> /// Check if the specified move is valid. If the move is valid, a null /// string is returned, otherwise a string describing the problem is /// returned. /// </summary> public String MoveCheck(KwsBrowserNode srcNode, KwsBrowserFolderNode dstFolder, String dstName, int dstIndex) { String dstID = MakeIDForNodeName(srcNode, dstName); if ((srcNode is KwsBrowserFolderNode) && ((KwsBrowserFolderNode)srcNode).PermanentFlag) return "cannot move or rename this folder"; if (srcNode is KwsBrowserKwsNode && dstFolder.IsRoot()) return "workspaces must be in folders"; if (srcNode is KwsBrowserKwsNode && dstID != srcNode.ID) return "cannot change workspace ID"; if (srcNode is KwsBrowserFolderNode && !KwsBrowserFolderNode.IsValidFolderName(dstName)) return "invalid destination name"; if (srcNode == dstFolder || dstFolder.IsDescendantOf(srcNode)) return "invalid move"; bool reindexFlag = (dstFolder.GetNodeByID(dstID) == srcNode); if (!reindexFlag && dstFolder.GetNodeByID(dstID) != null) return "destination already exists"; if (!dstFolder.IsIndexValidForInsert(srcNode, dstIndex)) return "invalid destination index"; return null; }
/// <summary> /// Add a workspace at the end of the folder specified. Throw an /// exception on error. /// </summary> public KwsBrowserKwsNode AddKws(Workspace kws, KwsBrowserFolderNode dstFolder, bool firstFlag) { if (m_kwsTree.ContainsKey(kws.InternalID)) throw new Exception(Base.GetKwsString() + "already exist"); if (dstFolder.IsRoot()) throw new Exception(Base.GetKwsString() + " must be in folders"); KwsBrowserKwsNode node = new KwsBrowserKwsNode(kws); dstFolder.AddNode(node, firstFlag ? 0 : dstFolder.KwsNodes.Count); m_kwsTree[kws.InternalID] = node; return node; }