public void DateRange_Data_Element_Between_Precision_Mont_With_Begin_Circa()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.BGN_DT        = new DateTime(1940, 07, 01);
            dataRow.END_DT        = new DateTime(1945, 08, 31);
            dataRow.BGN_DT_STND   = "+194007";
            dataRow.END_DT_STND   = "+194508";
            dataRow.BGN_CIRCA_IND = 1;
            dataRow.END_CIRCA_IND = 0;
            dataRow.DT_OPRTR_ID   = (int)ScopeArchivDateOperator.Between;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.dateRange, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("zwischen ca. 07.1940 und 08.1945");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Value.Should().Be("between approx. 7/1940 and 8/1945");
            value.TextValues.FirstOrDefault(t => t.Lang == "fr").Value.Should().Be("entre env. 07/1940 et 08/1945");
            value.TextValues.FirstOrDefault(t => t.Lang == "it").Value.Should().Be("tra il ca. 07/1940 e il 08/1945");
            value.DateRange.DateOperator.Should().Be(DateRangeDateOperator.between);
            value.DateRange.From.Should().Be("+194007");
            value.DateRange.To.Should().Be("+194508");
            value.DateRange.FromApproxIndicator.Should().BeTrue();
            value.DateRange.ToApproxIndicator.Should().BeFalse();
            value.DateRange.FromDate.Should().Be(new DateTime(1940, 7, 01));
            value.DateRange.ToDate.Should().Be(new DateTime(1945, 8, 31));
            value.DateRange.SearchFromDate.Should().BeBefore(value.DateRange.FromDate);
            value.DateRange.SearchToDate.Should().BeAfter(value.DateRange.ToDate);
        }
        public void DateRange_Data_Element_Sine_Dato()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.BGN_DT        = DateTime.MinValue;
            dataRow.END_DT        = DateTime.MaxValue;
            dataRow.BGN_DT_STND   = null;
            dataRow.END_DT_STND   = null;
            dataRow.BGN_CIRCA_IND = 0;
            dataRow.END_CIRCA_IND = 0;
            dataRow.DT_OPRTR_ID   = (int)ScopeArchivDateOperator.SineDato;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.dateRange, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("s. d. (sine dato)");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Value.Should().Be("s. d. (sine dato)");
            value.TextValues.FirstOrDefault(t => t.Lang == "fr").Value.Should().Be("s. d. (sans date)");
            value.TextValues.FirstOrDefault(t => t.Lang == "it").Value.Should().Be("s. d. (senza data)");
            value.DateRange.DateOperator.Should().Be(DateRangeDateOperator.sd);
            value.DateRange.From.Should().BeNullOrEmpty();
            value.DateRange.To.Should().BeNullOrEmpty();
            value.DateRange.FromApproxIndicator.Should().BeFalse();
            value.DateRange.ToApproxIndicator.Should().BeFalse();
            value.DateRange.FromDate.Should().Be(DateTime.MinValue);
            value.DateRange.ToDate.Should().Be(DateTime.MaxValue);
            value.DateRange.SearchFromDate.Should().BeSameDateAs(value.DateRange.FromDate);
            value.DateRange.SearchToDate.Should().BeSameDateAs(value.DateRange.ToDate);
        }
        public void DateRange_Data_Element_Exact_Precision_Mont_With_Circa()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.BGN_DT        = new DateTime(1940, 07, 01);
            dataRow.END_DT        = new DateTime(1940, 07, 31);
            dataRow.BGN_DT_STND   = "+194007";
            dataRow.END_DT_STND   = null;
            dataRow.BGN_CIRCA_IND = 1;
            dataRow.END_CIRCA_IND = 0;
            dataRow.DT_OPRTR_ID   = (int)ScopeArchivDateOperator.Exact;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.dateRange, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("ca. 07.1940");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Value.Should().Be("approx. 7/1940");
            value.TextValues.FirstOrDefault(t => t.Lang == "fr").Value.Should().Be("env. 07/1940");
            value.TextValues.FirstOrDefault(t => t.Lang == "it").Value.Should().Be("ca. 07/1940");
            value.DateRange.DateOperator.Should().Be(DateRangeDateOperator.exact);
            value.DateRange.From.Should().Be("+194007");
            value.DateRange.To.Should().BeNullOrEmpty();
            value.DateRange.FromApproxIndicator.Should().BeTrue();
            value.DateRange.ToApproxIndicator.Should().BeFalse();
            value.DateRange.FromDate.Should().Be(new DateTime(1940, 7, 01));
            value.DateRange.ToDate.Should().Be(new DateTime(1940, 7, 31));
            value.DateRange.SearchFromDate.Should().BeBefore(value.DateRange.FromDate);
            value.DateRange.SearchToDate.Should().BeAfter(value.DateRange.ToDate);
        }
        public void Date_Data_Element_Precision_Day()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.BGN_DT      = new DateTime(1940, 07, 20);
            dataRow.END_DT      = new DateTime(1940, 07, 20);
            dataRow.BGN_DT_STND = "+19400720";
            dataRow.DT_OPRTR_ID = 0;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.date, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("20.07.1940");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Value.Should().Be("7/20/1940");
            value.TextValues.FirstOrDefault(t => t.Lang == "fr").Value.Should().Be("20/07/1940");
            value.TextValues.FirstOrDefault(t => t.Lang == "it").Value.Should().Be("20/07/1940");
            value.DateRange.DateOperator.Should().Be(DateRangeDateOperator.exact);
            value.DateRange.From.Should().Be("+19400720");
            value.DateRange.To.Should().BeNullOrEmpty();
            value.DateRange.FromApproxIndicator.Should().BeFalse();
            value.DateRange.ToApproxIndicator.Should().BeFalse();
            value.DateRange.FromDate.Should().Be(new DateTime(1940, 7, 20));
            value.DateRange.ToDate.Should().Be(new DateTime(1940, 7, 20));
            value.DateRange.SearchFromDate.Should().BeSameDateAs(value.DateRange.FromDate);
            value.DateRange.SearchToDate.Should().BeSameDateAs(value.DateRange.ToDate);
        }
Ejemplo n.º 5
0
        public async Task <ActionResult <DataElement> > Delete(int instanceOwnerPartyId, Guid instanceGuid, Guid dataGuid)
        {
            _logger.LogInformation("//DataController // Delete // Starting method");

            (Instance instance, ActionResult instanceError) = await GetInstanceAsync(instanceGuid, instanceOwnerPartyId);

            if (instance == null)
            {
                return(instanceError);
            }

            (DataElement dataElement, ActionResult dataElementError) = await GetDataElementAsync(instanceGuid, dataGuid);

            if (dataElement == null)
            {
                return(dataElementError);
            }

            string storageFileName = DataElementHelper.DataFileName(instance.AppId, instanceGuid.ToString(), dataGuid.ToString());

            await _dataRepository.DeleteDataInStorage(instance.Org, storageFileName);

            await _dataRepository.Delete(dataElement);

            await DispatchEvent(InstanceEventType.Deleted.ToString(), instance, dataElement);

            return(Ok(dataElement));
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> Delete(Guid instanceGuid, Guid dataId, int instanceOwnerId)
        {
            _logger.LogInformation($"//DataController // Delete // Starting method");

            string instanceId = $"{instanceOwnerId}/{instanceGuid}";

            // check if instance id exist and user is allowed to change the instance data
            Instance instance = await _instanceRepository.GetOne(instanceId, instanceOwnerId);

            if (instance == null)
            {
                return(NotFound("Provided instanceId is unknown to storage service"));
            }

            string dataIdString = dataId.ToString();

            if (instance.Data.Exists(m => m.Id == dataIdString))
            {
                string storageFileName = DataElementHelper.DataFileName(instance.AppId, instanceGuid.ToString(), dataId.ToString());
                bool   result          = await _dataRepository.DeleteDataInStorage(storageFileName);

                if (result)
                {
                    // Update instance record
                    DataElement data = instance.Data.Find(m => m.Id == dataIdString);
                    instance.Data.Remove(data);
                    Instance storedInstance = await _instanceRepository.Update(instance);

                    return(Ok(storedInstance));
                }
            }

            return(BadRequest());
        }
        public void Date_Data_Element_Precision_Year()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.BGN_DT      = new DateTime(1940, 01, 01);
            dataRow.END_DT      = new DateTime(1940, 12, 31);
            dataRow.BGN_DT_STND = "+1940";
            dataRow.DT_OPRTR_ID = 0;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.date, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("1940");
            value.DateRange.DateOperator.Should().Be(DateRangeDateOperator.exact);
            value.DateRange.From.Should().Be("+1940");
            value.DateRange.To.Should().BeNullOrEmpty();
            value.DateRange.FromApproxIndicator.Should().BeFalse();
            value.DateRange.ToApproxIndicator.Should().BeFalse();
            value.DateRange.FromDate.Should().Be(new DateTime(1940, 1, 1));
            value.DateRange.ToDate.Should().Be(new DateTime(1940, 12, 31));
            value.DateRange.SearchFromDate.Should().BeBefore(value.DateRange.FromDate);
            value.DateRange.SearchToDate.Should().BeAfter(value.DateRange.ToDate);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Creates a data element by reading the first multipart element or body of the request.
        /// </summary>
        private async Task <(Stream, DataElement)> ReadRequestAndCreateDataElementAsync(HttpRequest request, string elementType, List <Guid> refs, Instance instance)
        {
            DateTime creationTime = DateTime.UtcNow;
            Stream   theStream;

            string contentType;
            string contentFileName = null;
            long   fileSize        = 0;

            if (MultipartRequestHelper.IsMultipartContentType(request.ContentType))
            {
                // Only read the first section of the mulitpart message.
                MediaTypeHeaderValue mediaType = MediaTypeHeaderValue.Parse(request.ContentType);
                string boundary = MultipartRequestHelper.GetBoundary(mediaType, _defaultFormOptions.MultipartBoundaryLengthLimit);

                MultipartReader  reader  = new MultipartReader(boundary, request.Body);
                MultipartSection section = await reader.ReadNextSectionAsync();

                theStream   = section.Body;
                contentType = section.ContentType;

                bool hasContentDisposition = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out ContentDispositionHeaderValue contentDisposition);

                if (hasContentDisposition)
                {
                    contentFileName = contentDisposition.FileName.ToString();
                    fileSize        = contentDisposition.Size ?? 0;
                }
            }
            else
            {
                theStream = request.Body;
                if (request.Headers.TryGetValue("Content-Disposition", out StringValues headerValues))
                {
                    string        contentDisposition       = headerValues.ToString();
                    List <string> contentDispositionValues = contentDisposition.Split(';').ToList();

                    string fileNameValue = contentDispositionValues.FirstOrDefault(x =>
                                                                                   x.Contains("filename", StringComparison.CurrentCultureIgnoreCase));

                    if (!string.IsNullOrEmpty(fileNameValue))
                    {
                        string[] valueParts = fileNameValue.Split('=');

                        if (valueParts.Length == 2)
                        {
                            contentFileName = valueParts[1];
                        }
                    }
                }

                contentType = request.ContentType;
            }

            DataElement newData = DataElementHelper.CreateDataElement(elementType, refs, instance, creationTime,
                                                                      contentType, contentFileName, fileSize, null);

            return(theStream, newData);
        }
Ejemplo n.º 9
0
        public async Task <ActionResult> Get(int instanceOwnerPartyId, Guid instanceGuid, Guid dataGuid)
        {
            string instanceId = $"{instanceOwnerPartyId}/{instanceGuid}";

            if (instanceOwnerPartyId == 0)
            {
                return(BadRequest("Missing parameter value: instanceOwnerPartyId can not be empty"));
            }

            // check if instance id exist and user is allowed to change the instance data
            (Instance instance, ActionResult errorResult) = await GetInstanceAsync(instanceId, instanceOwnerPartyId);

            if (instance == null)
            {
                return(errorResult);
            }

            string storageFileName = DataElementHelper.DataFileName(instance.AppId, instanceGuid.ToString(), dataGuid.ToString());

            DataElement dataElement = await _dataRepository.Read(instanceGuid, dataGuid);

            if (dataElement != null)
            {
                string orgFromClaim = User.GetOrg();

                if (!string.IsNullOrEmpty(orgFromClaim))
                {
                    _logger.LogInformation($"App owner download of {instance.Id}/data/{dataGuid}, {instance.AppId} for {orgFromClaim}");

                    // update downloaded structure on data element
                    dataElement.AppOwner ??= new ApplicationOwnerDataState();
                    dataElement.AppOwner.Downloaded ??= new List <DateTime>();
                    dataElement.AppOwner.Downloaded.Add(DateTime.UtcNow);

                    await _dataRepository.Update(dataElement);
                }

                if (string.Equals(dataElement.BlobStoragePath, storageFileName))
                {
                    try
                    {
                        Stream dataStream = await _dataRepository.ReadDataFromStorage(instance.Org, storageFileName);

                        if (dataStream == null)
                        {
                            return(NotFound($"Unable to read data element from blob storage for {dataGuid}"));
                        }

                        return(File(dataStream, dataElement.ContentType, dataElement.Filename));
                    }
                    catch (Exception e)
                    {
                        return(StatusCode(500, $"Unable to access blob storage for dataelement {e}"));
                    }
                }
            }

            return(NotFound("Unable to find requested data item"));
        }
Ejemplo n.º 10
0
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            float origLabelWidth = EditorGUIUtility.labelWidth;

            EditorGUIUtility.labelWidth = 85;
            GUILayout.BeginHorizontal();

            //Draw image
            SerializedProperty imageProp = property.FindPropertyRelative("m_icon");

            imageProp.objectReferenceValue = EditorGUILayout.ObjectField(imageProp.objectReferenceValue,
                                                                         typeof(Texture2D),
                                                                         false,
                                                                         GUILayout.Height(100),
                                                                         GUILayout.Width(100));

            GUILayout.BeginVertical();

            //Draw name and ID
            DataElementHelper.OnGUI_DrawDefaultValues(property);
            /// This special method draws the element and it'd ID in a nicely formatted line.

            //Draw rarity and sell price
            GUILayout.Space(4);
            GUILayout.BeginHorizontal();
            EditorGUILayout.PropertyField(property.FindPropertyRelative("m_weaponType"));
            EditorGUILayout.PropertyField(property.FindPropertyRelative("m_rarity"));
            EditorGUILayout.PropertyField(property.FindPropertyRelative("m_sellPrice"));
            GUILayout.EndHorizontal();

            //Draw stats
            GUILayout.Space(4);
            GUILayout.BeginHorizontal();
            StatDrawer(property.FindPropertyRelative("m_atk"));
            StatDrawer(property.FindPropertyRelative("m_def"));
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            StatDrawer(property.FindPropertyRelative("m_spd"));
            StatDrawer(property.FindPropertyRelative("m_crit"));
            GUILayout.EndHorizontal();

            //Draw Prefab
            GUILayout.Space(2);
            EditorGUILayout.PropertyField(property.FindPropertyRelative("m_prefab"));

            GUILayout.EndVertical();

            GUILayout.EndHorizontal();

            GUILayout.Space(4);

            EditorGUIUtility.labelWidth = origLabelWidth;
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Creates a data element by reading the first multipart element or body of the request.
        /// </summary>
        private async Task <(Stream Stream, DataElement DataElement)> ReadRequestAndCreateDataElementAsync(HttpRequest request, string elementType, List <Guid> refs, Instance instance)
        {
            DateTime creationTime = DateTime.UtcNow;
            Stream   theStream;

            string contentType;
            string contentFileName = null;
            long   fileSize        = 0;

            if (MultipartRequestHelper.IsMultipartContentType(request.ContentType))
            {
                // Only read the first section of the Multipart message.
                MediaTypeHeaderValue mediaType = MediaTypeHeaderValue.Parse(request.ContentType);
                string boundary = MultipartRequestHelper.GetBoundary(mediaType, _defaultFormOptions.MultipartBoundaryLengthLimit);

                MultipartReader  reader  = new MultipartReader(boundary, request.Body);
                MultipartSection section = await reader.ReadNextSectionAsync();

                theStream   = section.Body;
                contentType = section.ContentType;

                bool hasContentDisposition = ContentDispositionHeaderValue.TryParse(section.ContentDisposition, out ContentDispositionHeaderValue contentDisposition);

                if (hasContentDisposition)
                {
                    contentFileName = HttpUtility.UrlDecode(contentDisposition.GetFilename());
                    fileSize        = contentDisposition.Size ?? 0;
                }
            }
            else
            {
                theStream = request.Body;
                if (request.Headers.TryGetValue("Content-Disposition", out StringValues headerValues))
                {
                    bool hasContentDisposition = ContentDispositionHeaderValue.TryParse(headerValues.ToString(), out ContentDispositionHeaderValue contentDisposition);

                    if (hasContentDisposition)
                    {
                        contentFileName = HttpUtility.UrlDecode(contentDisposition.GetFilename());
                        fileSize        = contentDisposition.Size ?? 0;
                    }
                }

                contentType = request.ContentType;
            }

            string user = User.GetUserOrOrgId();

            DataElement newData = DataElementHelper.CreateDataElement(elementType, refs, instance, creationTime, contentType, contentFileName, fileSize, user);

            return(theStream, newData);
        }
        public void FileLink_Data_Element()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.MEMO_TXT = @"C:\Temp\testfile.txt";
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.fileLink, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be(@"C:\Temp\testfile.txt");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Should().BeNull();
        }
        public void Header_Data_Element()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.TITEL = "Titel";
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.header, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("Titel");
            value.Sequence.Should().Be(1);
        }
Ejemplo n.º 14
0
        public async Task <ActionResult> Get(int instanceOwnerPartyId, Guid instanceGuid, Guid dataGuid)
        {
            string instanceId = $"{instanceOwnerPartyId}/{instanceGuid}";

            if (instanceOwnerPartyId == 0)
            {
                return(BadRequest("Missing parameter value: instanceOwnerPartyId can not be empty"));
            }

            // check if instance id exist and user is allowed to change the instance data
            (Instance instance, ActionResult errorResult) = await GetInstanceAsync(instanceId, instanceOwnerPartyId);

            if (instance == null)
            {
                return(errorResult);
            }

            string storageFileName = DataElementHelper.DataFileName(instance.AppId, instanceGuid.ToString(), dataGuid.ToString());

            DataElement dataElement = await _dataRepository.Read(instanceGuid, dataGuid);

            if (dataElement != null && string.Equals(dataElement.BlobStoragePath, storageFileName))
            {
                if (!dataElement.IsRead && User.GetOrg() != instance.Org)
                {
                    dataElement.IsRead = true;
                    await _dataRepository.Update(dataElement);
                }

                try
                {
                    Stream dataStream = await _dataRepository.ReadDataFromStorage(instance.Org, storageFileName);

                    if (dataStream == null)
                    {
                        return(NotFound($"Unable to read data element from blob storage for {dataGuid}"));
                    }

                    return(File(dataStream, dataElement.ContentType, dataElement.Filename));
                }
                catch (Exception e)
                {
                    return(StatusCode(500, $"Unable to access blob storage for dataelement {e}"));
                }
            }

            return(NotFound("Unable to find requested data item"));
        }
        public void MailLink_Data_Element_Without_Prefix()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.MEMO_TXT = "*****@*****.**";
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.mailLink, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("*****@*****.**");
            value.Link.Value.Should().Be("*****@*****.**");
            value.Link.Href.Should().Be("mailto:[email protected]");
        }
        public void Accrual_Data_Element()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.INT_ZAHL = 5;
            dataRow.MEMO_TXT = "Some Text";
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.accrual, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("5 - Some Text");
            value.TextValues.FirstOrDefault().Value.Should().Be("5 - Some Text");
        }
Ejemplo n.º 17
0
        public async Task <IActionResult> Get(int instanceOwnerId, Guid instanceGuid, Guid dataId)
        {
            string instanceId = $"{instanceOwnerId}/{instanceGuid}";

            if (instanceOwnerId == 0)
            {
                return(BadRequest("Missing parameter value: instanceOwnerId can not be empty"));
            }

            // check if instance id exist and user is allowed to change the instance data
            Instance instance = GetInstance(instanceId, instanceOwnerId, out ActionResult errorResult);

            if (instance == null)
            {
                return(errorResult);
            }

            string storageFileName = DataElementHelper.DataFileName(instance.AppId, instanceGuid.ToString(), dataId.ToString());
            string dataIdString    = dataId.ToString();

            // check if dataId exists in instance
            if (instance.Data.Exists(element => element.Id == dataIdString))
            {
                DataElement data = instance.Data.Find(element => element.Id == dataIdString);

                if (string.Equals(data.StorageUrl, storageFileName))
                {
                    try
                    {
                        Stream dataStream = await _dataRepository.ReadDataFromStorage(storageFileName);

                        if (dataStream == null)
                        {
                            return(NotFound("Unable to read data storage for " + dataIdString));
                        }

                        return(File(dataStream, data.ContentType, data.FileName));
                    }
                    catch (Exception e)
                    {
                        return(StatusCode(500, $"Unable to access blob storage for dataelement {e}"));
                    }
                }
            }

            return(NotFound("Unable to find requested data item"));
        }
        public void Image_and_Media_Data_Element()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.MEMO_TXT  = @"C:\Temp\testfile.jpg";
            dataRow.BNR_DATEN = (byte[])new ImageConverter().ConvertTo(Resources.sample, typeof(byte[]));
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.image, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be(@"testfile.jpg");
            value.BlobValueBase64.Value.Should().Be(Convert.ToBase64String(dataRow.BNR_DATEN));
            value.BlobValueBase64.MimeType.Should().Be("image/jpeg");
        }
        public void Date_With_Year_Precision_With_No_Circa_Returns_Half_a_Year_Corrected_Search_Dates()
        {
            // Arrange
            var startDateStd  = "+1950";
            var startDate     = new DateTime(1950, 01, 01);
            var startIsApprox = false;
            var endDateStd    = "+1960";
            var endDate       = new DateTime(1960, 12, 31);
            var endIsApprox   = false;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate.AddDays(-180));
            result.ToDate.Should().Be(endDate.AddDays(180));
        }
        public void Hyperlink_Data_Element_New_Style_No_Http_Prefix()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.MEMO_TXT      = "Microsoft" + Environment.NewLine + "www.microsoft.com";
            dataRow.ELMNT_SQNZ_NR = 1;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.hyperlink, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("Microsoft");
            value.Link.Value.Should().Be("Microsoft");
            value.Link.Href.Should().Be("http://www.microsoft.com");
        }
        public void Text_Data_Element()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.MEMO_TXT      = "Test value";
            dataRow.ELMNT_SQNZ_NR = 2;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.text, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("Test value");
            value.Sequence.Should().Be(2);
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Should().BeNull();
        }
        public void Exact_Date_With_Circa_Returns_Same_Search_Dates()
        {
            // Arrange
            var startDateStd  = "+19500101";
            var startDate     = new DateTime(1950, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+19601231";
            var endDate       = new DateTime(1960, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate);
            result.ToDate.Should().Be(endDate);
        }
        public void Date_Resulting_In_Min_Date_Underrun_Returns_Min_Date()
        {
            // Arrange
            var startDateStd  = "+0001";
            var startDate     = new DateTime(0001, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+1900";
            var endDate       = new DateTime(1900, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(DateTime.MinValue.Date);
            result.ToDate.Should().Be(endDate.AddDays(180 * 4));
        }
        public void Selection_Data_Element()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.MEMO_TXT      = "Content of selection field";
            dataRow.ELMNT_SQNZ_NR = 1;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.selection, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("Content of selection field");
            value.Sequence.Should().Be(1);
            value.TextValues.Count.Should().Be(1);
        }
        public void Date_With_Century_Precision_With_Circa_Returns_Half_a_Century_Times_2_Corrected_Search_Dates()
        {
            // Arrange
            var startDateStd  = "+19";
            var startDate     = new DateTime(1801, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+19";
            var endDate       = new DateTime(1900, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate.AddDays(-365 * 50 * 2));
            result.ToDate.Should().Be(endDate.AddDays(365 * 50 * 2));
        }
        public void Date_Resulting_In_Max_Date_Overflow_Returns_Max_Date()
        {
            // Arrange
            var startDateStd  = "+1900";
            var startDate     = new DateTime(1900, 01, 01);
            var startIsApprox = true;
            var endDateStd    = "+9999";
            var endDate       = new DateTime(9999, 12, 31);
            var endIsApprox   = true;

            // Act
            var result = DataElementHelper.GetSearchDate(startDateStd, startDate, startIsApprox, endDateStd, endDate, endIsApprox);

            // Assert
            result.FromDate.Should().Be(startDate.AddDays(-180 * 4));
            result.ToDate.Should().Be(DateTime.MaxValue.Date);
        }
Ejemplo n.º 27
0
        public async Task <ActionResult> Get(int instanceOwnerPartyId, Guid instanceGuid, Guid dataGuid)
        {
            string instanceId = $"{instanceOwnerPartyId}/{instanceGuid}";

            if (instanceOwnerPartyId == 0)
            {
                return(BadRequest("Missing parameter value: instanceOwnerPartyId can not be empty"));
            }

            (Instance instance, ActionResult instanceError) = await GetInstanceAsync(instanceId, instanceOwnerPartyId);

            if (instance == null)
            {
                return(instanceError);
            }

            (DataElement dataElement, ActionResult dataElementError) = await GetDataElementAsync(instanceGuid, dataGuid);

            if (dataElement == null)
            {
                return(dataElementError);
            }

            if (!dataElement.IsRead && User.GetOrg() != instance.Org)
            {
                dataElement.IsRead = true;
                await _dataRepository.Update(dataElement);
            }

            string storageFileName = DataElementHelper.DataFileName(instance.AppId, instanceGuid.ToString(), dataGuid.ToString());

            if (string.Equals(dataElement.BlobStoragePath, storageFileName))
            {
                Stream dataStream = await _dataRepository.ReadDataFromStorage(instance.Org, storageFileName);

                if (dataStream == null)
                {
                    return(NotFound($"Unable to read data element from blob storage for {dataGuid}"));
                }

                return(File(dataStream, dataElement.ContentType, dataElement.Filename));
            }

            return(NotFound("Unable to find requested data item"));
        }
        public void Timespan_Data_Element_Less_Than_A_Day()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.INT_ZAHL = 5721; // timespan in seconds
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.timespan, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("1:35:21");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Value.Should().Be("1:35:21");
            value.TextValues.FirstOrDefault(t => t.Lang == "fr").Value.Should().Be("1:35:21");
            value.TextValues.FirstOrDefault(t => t.Lang == "it").Value.Should().Be("1:35:21");
            value.DurationInSeconds.Should().Be(5721);
        }
        public void Time_Data_Element()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.ZT = new DateTime(1999, 01, 05, 02, 30, 34); // Date part is ignored
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.time, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("02:30:34");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Value.Should().Be("2:30:34 AM");
            value.TextValues.FirstOrDefault(t => t.Lang == "fr").Value.Should().Be("02:30:34");
            value.TextValues.FirstOrDefault(t => t.Lang == "it").Value.Should().Be("02:30:34");
            value.TimeValue.Should().BeSameDateAs(new DateTime(1999, 01, 05, 02, 30, 34));
        }
        public void Boolean_Data_Element_Yes()
        {
            // Arrange
            var dataRow = ds.DetailData.NewDetailDataRow();

            dataRow.INT_ZAHL = 1;
            var value = new DataElementElementValue();

            // Act
            DataElementHelper.FillDataElementElementValue(DataElementElementType.boolean, dataRow, value, languageSettings);

            // Assert
            value.TextValues.FirstOrDefault(t => t.IsDefaultLang).Value.Should().Be("Ja");
            value.TextValues.FirstOrDefault(t => t.Lang == "en").Value.Should().Be("Yes");
            value.TextValues.FirstOrDefault(t => t.Lang == "fr").Value.Should().Be("Oui");
            value.TextValues.FirstOrDefault(t => t.Lang == "it").Value.Should().Be("Si");
            value.BooleanValue.Should().BeTrue();
        }