diff --git a/FileManager.cs b/FileManager.cs index 776f8f6..d8c5201 100644 --- a/FileManager.cs +++ b/FileManager.cs @@ -280,7 +280,7 @@ private Handle Find(ISystemContext _context, uint fileHandle) catch (Exception ex) { Log.Logger.Error(ex.Message, ex); - return StatusCodes.BadDecodingError; + return new ServiceResult(StatusCodes.BadDecodingError, ex); } finally { diff --git a/UANodeManager.cs b/UANodeManager.cs index f98363b..c4b23cc 100644 --- a/UANodeManager.cs +++ b/UANodeManager.cs @@ -139,8 +139,7 @@ public override void CreateAddressSpace(IDictionary> e string contents = File.ReadAllText(file); string fileName = Path.GetFileNameWithoutExtension(file); - NodeState assetNode = CreateAssetNode(fileName); - if (assetNode == null) + if (!CreateAssetNode(fileName, out NodeState assetNode)) { throw new Exception("Asset already exists"); } @@ -356,18 +355,19 @@ public override void DeleteAddressSpace() return StatusCodes.BadInvalidArgument; } - NodeState assetNode = CreateAssetNode(assetName); - if (assetNode == null) + bool success = CreateAssetNode(assetName, out NodeState assetNode); + if (!success) { - return StatusCodes.BadBrowseNameDuplicated; + return new ServiceResult(StatusCodes.BadBrowseNameDuplicated, new LocalizedText(assetNode.NodeId.ToString())); + } + else + { + assetId = assetNode.NodeId; + return ServiceResult.Good; } - - assetId = assetNode.NodeId; - - return ServiceResult.Good; } - private NodeState CreateAssetNode(string assetName) + private bool CreateAssetNode(string assetName, out NodeState assetNode) { lock (Lock) { @@ -388,7 +388,8 @@ private NodeState CreateAssetNode(string assetName) NodeStateReference node = reference as NodeStateReference; if ((node.Target != null) && (node.Target.DisplayName.Text == assetName)) { - return null; + assetNode = node.Target; + return false; } reference = browser.Next(); @@ -404,7 +405,8 @@ private NodeState CreateAssetNode(string assetName) AddPredefinedNode(SystemContext, asset); - return asset; + assetNode = asset; + return true; } } @@ -424,7 +426,7 @@ private NodeState CreateAssetNode(string assetName) _fileManagers.Remove(assetId); - DeleteNode(Server.DefaultSystemContext, assetId); + DeleteNode(SystemContext, assetId); IEnumerable WoTFiles = Directory.EnumerateFiles(Path.Combine(Directory.GetCurrentDirectory(), "settings"), "*.jsonld"); foreach (string file in WoTFiles)