public async Task <IActionResult> Delete([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);

            //return Ok(new ResultMessageModel() { IsSuccess = false, Message = "Under Construction." });
            //check for dependencies - if other profile types depend on this, it cannot be deleted.
            var item = GetItem(model.ID);

            if (item.Dependencies != null && item.Dependencies.Count > 0)
            {
                _logger.LogWarning($"ProfileTypeDefinitionController|Delete|Could not delete type definition because other type definitions depend on it. Id:{model.ID}.");
                return(Ok(new ResultMessageModel()
                {
                    IsSuccess = false, Message = "This item cannot be deleted because other type definitions depend on this item."
                }));
            }


            var result = await _dal.Delete(model.ID, userToken);

            if (result < 0)
            {
                _logger.LogWarning($"ProfileTypeDefinitionController|Delete|Could not delete profile type definition. Invalid id:{model.ID}.");
                return(BadRequest("Could not delete item. Invalid id."));
            }
            _logger.LogInformation($"ProfileTypeDefinitionController|Delete|Deleted profile type definition. Id:{model.ID}.");

            //return success message object
            return(Ok(new ResultMessageModel()
            {
                IsSuccess = true, Message = "Item was deleted."
            }));
        }
        public Task <ResultMessageWithDataModel> Export([FromBody] IdIntModel model, [FromServices] OpcUaImporter exporter)
        {
            var userToken   = UserExtension.DalUserToken(User);
            var profileItem = _dal.GetById(model.ID, userToken);

            if (profileItem == null /* || !(profileItem.AuthorId == null || profileItem.AuthorId == userToken)*/)
            {
                return(Task.FromResult(new ResultMessageWithDataModel()
                {
                    IsSuccess = false,
                    Message = $"Item {model?.ID} not found",
                }));
            }

            // Populate the OPC model into a new importer instance

            string xmlNodeSet = null;

            using (var xmlNodeSetStream = new MemoryStream())
            {
                if (exporter.ExportProfileItem(profileItem, xmlNodeSetStream, userToken, null))
                {
                    xmlNodeSet = Encoding.UTF8.GetString(xmlNodeSetStream.ToArray());

                    // TODO read and include the required models in a ZIP file, optionally?
                }
            }
            return(Task.FromResult(new ResultMessageWithDataModel()
            {
                IsSuccess = true,
                Message = "Type definition was exported.",
                Data = xmlNodeSet,
            }));
        }
        public IActionResult GetByID([FromBody] IdIntModel model)
        {
            if (model == null)
            {
                _logger.LogWarning($"ProfileTypeDefinitionController|GetByID|Invalid model (null)");
                return(BadRequest($"Invalid model (null)"));
            }

            var result = this.GetItem(model.ID);

            if (result == null)
            {
                _logger.LogWarning($"ProfileTypeDefinitionController|GetById|No records found matching this ID: {model.ID}");
                return(BadRequest($"No records found matching this ID: {model.ID}"));
            }

            //increment page visit count for this item
            var userToken = UserExtension.DalUserToken(User);
            var analytic  = _dalAnalytics.Where(x => x.ProfileTypeDefinitionId == model.ID, userToken, null, null, false).Data.FirstOrDefault();

            if (analytic == null)
            {
                _dalAnalytics.Add(new ProfileTypeDefinitionAnalyticModel()
                {
                    ProfileTypeDefinitionId = model.ID, PageVisitCount = 1
                }, userToken);
            }
            else
            {
                analytic.PageVisitCount += 1;
                _dalAnalytics.Update(analytic, null);
            }

            return(Ok(result));
        }
        public IActionResult GetProfileExplorer([FromBody] IdIntModel model)
        {
            if (model == null)
            {
                _logger.LogWarning($"ProfileTypeDefinitionController|GetProfileExplorer|Invalid model (null)");
                return(BadRequest($"Invalid model (null)"));
            }
            var userToken = UserExtension.DalUserToken(User);

            var profile = _dal.GetById(model.ID, userToken);

            if (profile == null)
            {
                _logger.LogWarning($"ProfileTypeDefinitionController|GetProfileExplorer|No records found matching this ID: {model.ID}");
                return(BadRequest($"No records found matching this ID: {model.ID}"));
            }

            //Build the explorer...
            var dependencies = _profileUtils.GenerateDependencies(profile, userToken);

            //Build the explorer inheritance tree...
            var treeview = _profileUtils.GenerateAncestoryTree(profile, userToken, true);

            // note interfaces, compositions already accounted for in profile object
            var result = new ProfileExplorerModel()
            {
                Profile      = profile,
                Dependencies = dependencies,
                Tree         = treeview
            };

            return(Ok(result));
        }
Esempio n. 5
0
        public IActionResult CopyUser([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);

            //get existing user, wipe out certain pieces of info, add new user
            //update new user's password,
            var result = _dal.GetById(model.ID, userToken);

            if (result == null)
            {
                //var errors = ExtractModelStateErrors();
                return(BadRequest("Original user not found."));
            }

            //keep permissions and organization same
            result.ID                   = null;
            result.Created              = DateTime.UtcNow;
            result.Email                = null;
            result.FirstName            = null;
            result.LastName             = null;
            result.UserName             = null;
            result.LastLogin            = null;
            result.RegistrationComplete = null;

            return(Ok(result));
        }
        public async Task <IActionResult> ToggleFavorite([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);
            var item      = _dal.GetById(model.ID, userToken);

            item.IsFavorite = !item.IsFavorite;
            return(await UpdateInternal(item, false));
        }
        public IActionResult LookupProfileRelatedExtend([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);
            var parent    = _dal.GetById(model.ID, userToken);
            var result    = new ProfileLookupModel();

            result.Compositions = _profileUtils.BuildCompositionLookupExtend(parent, userToken);
            result.Interfaces   = _profileUtils.BuildInterfaceLookup(null, userToken);
            return(Ok(result));
        }
Esempio n. 8
0
        public IActionResult GetByID([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);
            var result    = _dal.GetById(model.ID, userToken);

            if (result == null)
            {
                return(BadRequest($"No records found matching this ID: {model.ID}"));
            }
            return(Ok(result));
        }
        public IActionResult Extend([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);
            var parent    = _dal.GetById(model.ID, userToken);

            if (parent == null)
            {
                _logger.LogWarning($"ProfileTypeDefinitionController|Extend|No records found matching this ID: {model.ID}");
                return(BadRequest($"No records found matching this ID: {model.ID}"));
            }

            var result = ExtendTypeDefinitionInternal(parent, null, true, userToken);

            return(Ok(result));
        }
        public IActionResult LookupProfileRelated([FromBody] IdIntModel model)
        {
            //for a new profile being created from front end, the profile won't have an id yet.
            if (model == null || model.ID <= 0)
            {
                return(Ok(new ProfileLookupModel()));
            }
            var userToken = UserExtension.DalUserToken(User);
            var profile   = _dal.GetById(model.ID, userToken);
            var result    = new ProfileLookupModel();

            result.Compositions = _profileUtils.BuildCompositionLookup(profile, userToken);
            result.Interfaces   = _profileUtils.BuildInterfaceLookup(profile, userToken);
            return(Ok(result));
        }
Esempio n. 11
0
        public IActionResult GetByID([FromBody] IdIntModel model)
        {
            if (model == null)
            {
                _logger.LogWarning($"ProfileController|GetByID|Invalid model (null)");
                return(BadRequest($"Invalid model (null)"));
            }
            var userToken = UserExtension.DalUserToken(User);

            var result = _dal.GetById(model.ID, userToken);

            if (result == null)
            {
                _logger.LogWarning($"ProfileController|GetById|No records found matching this ID: {model.ID}");
                return(BadRequest($"No records found matching this ID: {model.ID}"));
            }
            return(Ok(result));
        }
Esempio n. 12
0
        public async Task <IActionResult> Delete([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);
            var result    = await _dal.Delete(model.ID, userToken);

            if (result < 0)
            {
                _logger.LogWarning($"Could not delete user. Invalid id:{model.ID}.");
                return(BadRequest("Could not delete user. Invalid id."));
            }
            _logger.LogInformation($"Deleted user. Id:{model.ID}.");

            //return success message object
            return(Ok(new ResultMessageModel()
            {
                IsSuccess = true, Message = "Item was deleted."
            }));
        }
Esempio n. 13
0
        public async Task <IActionResult> Delete([FromBody] IdIntModel model)
        {
            var userToken = UserExtension.DalUserToken(User);

            //This also deletes all associated type defs, attributes, custom data types, compositions, interfaces
            //associated with this profile
            try
            {
                var result = await _dal.Delete(model.ID, userToken);

                if (result <= 0)
                {
                    _logger.LogWarning($"ProfileController|Delete|Could not delete item. Invalid id:{model.ID}.");
                    return(BadRequest("Could not delete item. Invalid id."));
                }
                _logger.LogInformation($"ProfileController|Delete|Deleted item. Id:{model.ID}.");
            }
            catch (Npgsql.PostgresException eDB)
            {
                //trap foreign key error and let user know there is a dependency issue
                _logger.LogCritical($"ProfileController|Delete|Id:{model.ID}.", eDB);
                if (eDB.Message.ToLower().Contains("violates foreign key constraint"))
                {
                    return(Ok(new ResultMessageModel()
                    {
                        IsSuccess = false,
                        Message = "This profile cannot be deleted because something else depends on it. Check that no other profiles nor type definitions depend on this profile or this profile's type definitions. "
                    }));
                }
                //some other db issue
                return(Ok(new ResultMessageModel()
                {
                    IsSuccess = false,
                    Message = "Please contact your system administrator."
                }));
            }

            //return success message object
            return(Ok(new ResultMessageModel()
            {
                IsSuccess = true, Message = "Item was deleted."
            }));
        }
Esempio n. 14
0
        public async Task <IActionResult> Export([FromBody] IdIntModel model)
        {
            /*
             * var xml = $"<?xml version=\"1.0\" encoding=\"utf-8\"?><Aliases><Alias Alias=\"Boolean\">i=1</Alias></Aliases>";
             * var num = 0;
             *
             * switch (num)
             * {
             *  case 2:
             *      return Ok(new ResultMessageExportModel() { IsSuccess = false, Message = "Error ABC has occurred." });
             *  case 1:
             *      return Ok(new ResultMessageExportModel()
             *      {
             *          IsSuccess = true,
             *          Message = "",
             *          Data = xml,
             *          Warnings = new List<string>() { "Warning 1", "Warning 2", "Warning 3" }
             *      });
             *  case 0:
             *  default:
             *      return Ok(new ResultMessageExportModel() { IsSuccess = true, Message = "", Data = xml });
             * }
             */

            var userToken = UserExtension.DalUserToken(User);

            //get profile to export
            var sw = Stopwatch.StartNew();

            _logger.LogTrace("Starting export");
            var item = _dal.GetById(model.ID, userToken);

            if (item == null)
            {
                //return Task.FromResult(new ResultMessageWithDataModel()
                return(Ok(
                           new ResultMessageExportModel()
                {
                    IsSuccess = false,
                    Message = "Profile not found."
                }
                           ));
            }
            int userId = User.GetUserID();

            // Populate the OPC model into a new importer instance

            try
            {
                string result = null;
                using (var xmlNodeSetStream = new MemoryStream())
                {
                    _logger.LogTrace($"Timestamp||Export||Starting: {sw.Elapsed}");
                    if (_exporter.ExportNodeSet(item, xmlNodeSetStream, userToken, null))
                    {
                        _logger.LogTrace($"Timestamp||Export||Nodeset Stream generated: {sw.Elapsed}");
                        result = Encoding.UTF8.GetString(xmlNodeSetStream.ToArray());
                        _logger.LogTrace($"Timestamp||Export||Data Converted to Response: {sw.Elapsed}");

                        // TODO read and include the required models in a ZIP file, optionally?

                        //TBD - get the warnings that were logged on import and publish them here.
                    }
                    else
                    {
                        return(Ok(new ResultMessageExportModel()
                        {
                            IsSuccess = false,
                            Message = "An error occurred downloading the profile."
                        }));
                    }
                }
                //return Task.FromResult(new ResultMessageWithDataModel()
                return(Ok(new ResultMessageExportModel()
                {
                    IsSuccess = true,
                    Message = "",
                    Data = result,
                    Warnings = item.ImportWarnings.Select(x => x.Message).ToList()
                }));
            }
            catch (Exception ex)
            {
                _logger.LogCritical(ex, $"ProfileController|Export|Failed:{ex.Message}");
                _logger.LogTrace($"Timestamp||Export||Error: {sw.Elapsed}|| {ex.Message}");
                return(Ok(new ResultMessageExportModel()
                {
                    IsSuccess = false,
                    Message = $"Technical details: {ex.Message}"
                }));
            }
        }
Esempio n. 15
0
 internal int?DeleteInternalTestHook(IdIntModel model)
 {
     return(_dal.Delete(model.ID, new UserToken {
         UserId = -1
     }).Result);
 }