public void AssetFilterOptionalPropertiesTest()
        {
            using (MockContext context = this.StartMockContextAndInitializeClients(this.GetType()))
            {
                try
                {
                    CreateMediaServicesAccount();

                    string assetName        = TestUtilities.GenerateName("assetoptionalfilter");
                    string assetDescription = "A test asset";

                    string filterName = TestUtilities.GenerateName("assetoptionalfilter");

                    // Create an asset
                    Asset inputForAsset = new Asset(description: assetDescription);
                    Asset createdAsset  = MediaClient.Assets.CreateOrUpdate(ResourceGroup, AccountName, assetName, inputForAsset);

                    // Get AssetFilter, which should not exist
                    Assert.Equal(System.Net.HttpStatusCode.NotFound, Assert.Throws <ErrorResponseException>(() => MediaClient.AssetFilters.Get(ResourceGroup, AccountName, assetName, filterName)).Response.StatusCode);

                    // List AssetFilters, which should be empty
                    var assetFilters = MediaClient.AssetFilters.List(ResourceGroup, AccountName, assetName);
                    Assert.Empty(assetFilters);

                    // Create an AssetFilter
                    // Some of the AssetFilter parameters are for Live. Create a filter for VOD that does not specify Live parameters
                    var         ptr   = new PresentationTimeRange(startTimestamp: 1, endTimestamp: 600 * HNSTimescale);
                    AssetFilter input = new AssetFilter(presentationTimeRange: ptr);
                    AssetFilter createdAssetFilter = MediaClient.AssetFilters.CreateOrUpdate(ResourceGroup, AccountName, assetName, filterName, input);
                    ValidateAssetFilter(createdAssetFilter, expectedFirstQuality: null, expectedName: filterName, expectedPresentationTimeRange: ptr, expectedTracks: null);

                    // List asset filters and validate the created filter shows up
                    assetFilters = MediaClient.AssetFilters.List(ResourceGroup, AccountName, assetName);
                    Assert.Single(assetFilters);
                    ValidateAssetFilter(assetFilters.First(), expectedFirstQuality: null, expectedName: filterName, expectedPresentationTimeRange: ptr, expectedTracks: null);

                    // Get the newly created asset
                    AssetFilter assetFilter = MediaClient.AssetFilters.Get(ResourceGroup, AccountName, assetName, filterName);
                    Assert.NotNull(assetFilter);
                    ValidateAssetFilter(assetFilter, expectedFirstQuality: null, expectedName: filterName, expectedPresentationTimeRange: ptr, expectedTracks: null);

                    // Delete the asset filter
                    MediaClient.AssetFilters.Delete(ResourceGroup, AccountName, assetName, filterName);

                    // List asset filters, which should be empty again
                    assetFilters = MediaClient.AssetFilters.List(ResourceGroup, AccountName, assetName);
                    Assert.Empty(assetFilters);

                    // Get the asset filter, which should not exist
                    Assert.Equal(System.Net.HttpStatusCode.NotFound, Assert.Throws <ErrorResponseException>(() => MediaClient.AssetFilters.Get(ResourceGroup, AccountName, assetName, filterName)).Response.StatusCode);

                    // Delete the asset
                    MediaClient.Assets.Delete(ResourceGroup, AccountName, assetName);
                }
                finally
                {
                    DeleteMediaServicesAccount();
                }
            }
        }
예제 #2
0
        protected void Store1_RefreshData(object sender, StoreReadDataEventArgs e)
        {
            //GEtting the filter from the page
            string filter     = string.Empty;
            int    totalCount = 1;



            //Fetching the corresponding list

            //in this test will take a list of News
            AssetManagementLoanListRequest request = new AssetManagementLoanListRequest();
            var d = jobInfo1.GetJobInfo();

            request.branchId     = d.BranchId.HasValue ? d.BranchId.Value.ToString() : "0";
            request.departmentId = d.DepartmentId.HasValue ? d.DepartmentId.Value.ToString() : "0";
            request.positionId   = d.PositionId.HasValue ? d.PositionId.Value.ToString() : "0";
            request.categoryId   = categoryIdFilter.GetCategoryId();
            request.employeeId   = employeeFilter.GetEmployee().employeeId.ToString();
            request.assetId      = AssetFilter.GetAssetId();
            request.Filter       = "";
            ListResponse <AssetManagementLoan> resp = _assetManagementService.ChildGetAll <AssetManagementLoan>(request);

            if (!resp.Success)
            {
                Common.errorMessage(resp);
                return;
            }
            this.Store1.DataSource = resp.Items;
            e.Total = resp.count;

            this.Store1.DataBind();
        }
예제 #3
0
        public PagedResultDto <AssetDto> GetAssets(AssetFilter input)
        {
            var query = assetRepository.GetAll().Where(x => !x.IsDelete);

            // filter by value
            if (input.AssetName != null)
            {
                query = query.Where(x => x.AssetName.ToLower().Equals(input.AssetName));
            }

            var totalCount = query.Count();

            // sorting
            if (!string.IsNullOrWhiteSpace(input.Sorting))
            {
                query = query.OrderBy(input.Sorting);
            }

            // paging
            var items = query.PageBy(input).ToList();

            // result
            return(new PagedResultDto <AssetDto>(
                       totalCount,
                       items.Select(item => ObjectMapper.Map <AssetDto>(item)).ToList()));
        }
        private void ImportScenes()
        {
            SceneHunter scenePopulator = serializedSceneManager.ScenePopulator.
                                         targetObject as SceneHunter;

            AssetFilter filter = serializedSceneManager.SerializedSceneFilter.
                                 targetObject as AssetFilter;

            IEnumerable <string> retrievedScenes = scenePopulator.GetScenePaths();

            IEnumerable <string> includedFiles = filter.FilesToInclude;

            List <string> allFiles = new List <string>();

            allFiles.AddUniqueRange(retrievedScenes);
            allFiles.AddUniqueRange(includedFiles);

            allFiles.RemoveAll((x) => !filter.ShouldBeIncluded(x));

            OnSceneImport.SafeInvoke(this,
                                     new EventArgs <IEnumerable <string> >()
            {
                Value = allFiles
            });
        }
예제 #5
0
    public static void ItemCheck(AssetFilter filter)
    {
        ICheck checkTypd = (ICheck)Activator.CreateInstance(Type.GetType(filter.CheckTagString));

        string[]      guids   = AssetDatabase.FindAssets(checkTypd.SearchTag, new string[] { filter.path });
        float         count   = guids.Length;
        float         index   = 1;
        List <string> fixList = new List <string>();

        foreach (string guid in guids)
        {
            string assetPath = AssetDatabase.GUIDToAssetPath(guid);
            string info      = String.Format("{0}/{1} {2}", index, count, assetPath);
            ICheck _check    = (ICheck)Activator.CreateInstance(Type.GetType(filter.CheckTagString));
            EditorUtility.DisplayProgressBar(_check.GetType().Name + " Check", info, (float)(index / count));

            if (!string.IsNullOrEmpty(assetPath))
            {
                if (!_check.Check(AssetDatabase.GUIDToAssetPath(guid)))
                {
                    fixList.Add(assetPath);
                    mDictionaryCheck[filter.CheckTagString].Add(_check);
                    if (!_check.CanFix)
                    {
                        Debug.LogError(info + " can not auto fix");
                    }
                }
            }
            else
            {
                Debug.LogError(info + " error" + _check.GetType().Name);
            }

            index++;
        }
        List <ICheck> list = mDictionaryCheck[filter.CheckTagString];

        if (checkTypd.CanFix)
        {
            index = 1;
            count = fixList.Count;
            foreach (var assetPath in fixList)
            {
                string info = String.Format("{0}/{1} {2}", index, count, assetPath);
                EditorUtility.DisplayProgressBar(checkTypd.GetType().Name + " Fix", info, (float)(index / count));
                if (checkTypd.Fix(assetPath))
                {
                    Debug.Log(info + " Fixed");
                }
                else
                {
                    Debug.LogError(info + "auto fix fail");
                }
                index++;
            }
        }
        EditorUtility.ClearProgressBar();
    }
예제 #6
0
        public AssetFilter CreateFilter(string assetName, string filterName, int firstBitrate)
        {
            AssetFilter assetFilter = new AssetFilter()
            {
                FirstQuality = new FirstQuality(firstBitrate)
            };

            return(_media.AssetFilters.CreateOrUpdate(MediaAccount.ResourceGroupName, MediaAccount.Name, assetName, filterName, assetFilter));
        }
        private void InitializeDefaults()
        {
            SceneManagerAssetPath = AssetDatabase.GetAssetPath(SerializedManager.targetObject);

            bool wasCreated = false;

            AssetFilter assetFilter = AssetDatabaseExtensions.
                                      FindOrCreateSubScriptableObject <AssetFilter>(SceneManagerAssetPath, "SceneFilter", out wasCreated);

            if (wasCreated)
            {
                assetFilter.IncludeIfNoMatch = true;
            }

            SerializedSceneFilter = new SerializedObject(assetFilter);

            SceneHunter sceneHunter = AssetDatabaseExtensions.
                                      GetFirstSubAssetOf <SceneHunter>(SceneManagerAssetPath);

            if (sceneHunter == null)
            {
                sceneHunter = AssetDatabaseExtensions.
                              CreateSubScriptableObject <UnitySceneHunter>(SceneManagerAssetPath, "SceneHunter");
            }

            ScenePopulator = new SerializedObject(sceneHunter);

            SceneNodes = AssetDatabaseExtensions.
                         FindOrCreateSubScriptableObject <SceneNodeCollection>(SceneManagerAssetPath, "SceneNodes", out wasCreated);

            if (wasCreated)
            {
                SceneNodes.SceneManager = TargetManager;
            }

            SceneNodes.PopulateSceneInfos();

            SceneNodesObject = new SerializedObject(SceneNodes);
            SceneNodesProp   = SceneNodesObject.FindProperty("sceneNodes");

            if (AssetDatabaseExtensions.GetSubAssetsOfType <SceneVariableContainer>(TargetManager).Count() == 0)
            {
                TargetManager.SceneVariables.name = "ManagerVariables";
                AssetDatabase.AddObjectToAsset(TargetManager.SceneVariables, TargetManager);
                AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(TargetManager));
            }
            SerializedManager.ApplyModifiedProperties();

            ScenesProp       = SerializedManager.FindProperty("scenes");
            EntrySceneIdProp = SerializedManager.FindProperty("entrySceneId");
            AnyScenesProp    = SerializedManager.FindProperty("anyScene");

            UseOnPlayProp = SerializedManager.FindProperty("useOnPlay");
            GoToOnPlay    = SerializedManager.FindProperty("goToOnPlay");

            SerializedVariables = new SerializedSceneVariableCollection(TargetManager.SceneVariables);
        }
예제 #8
0
        public AssetFilter CreateFilter(string assetName, string filterName, Dictionary <FilterTrackPropertyType, string> trackFilters)
        {
            AssetFilter assetFilter = new AssetFilter()
            {
                Tracks = GetTrackSelections(trackFilters)
            };

            return(_media.AssetFilters.CreateOrUpdate(MediaAccount.ResourceGroupName, MediaAccount.Name, assetName, filterName, assetFilter));
        }
예제 #9
0
        private void MakeRefineryItemList()
        {
            UInt32     characterID = ((TextItemWithUInt32)TlbCmbCharacter.SelectedItem).Data;
            ItemAssets container   = (ItemAssets)TextItemWithObject.GetData(TlbCmbContainer.SelectedItem);

            m_SelectedAssets = null;
            if (character_AllItems != characterID)
            {
                AssetFilter assetFilter = 0;
                if (TlbChkIgnoreContainers.Checked)
                {
                    assetFilter |= AssetFilter.NoAssembledContainers;
                }

                if (TlbChkIgnoreShips.Checked)
                {
                    assetFilter |= AssetFilter.NoAssembledShips;
                }

                if (TlbChkIgnoreAssembled.Checked)
                {
                    assetFilter |= AssetFilter.NoAssembled;
                }

                m_SelectedAssets = m_Assets.GetAssetsList(container, assetFilter);
            }

            ItemFilter filter = new ItemFilter();

            filter.Published      = TristateFilter.Yes;
            filter.PlainMaterials = TristateFilter.Yes;
            if (m_SelectedAssets != null)
            {
                filter.AssetsFilter = m_SelectedAssets;
            }

            SetupListItemsData(m_ItemsDB.FilterItems(filter), m_SelectedAssets);
            UpdateTotalsRow();

            // Optimization: pre-fill all column data (saves around 1 sec)
            Hashtable columnData = new Hashtable();

            foreach (MainListItem listItem in m_ItemList)
            {
                Object[] columnValues = GetListItemColumnData(listItem);
                columnData.Add(listItem.TypeID, columnValues);
            }

            CompareItemBase comparer = new CompareColumn(m_SortType, columnData);

            comparer.SetParameters(m_SortDirection);
            Array.Sort(m_ItemList, comparer);

            LstRefinery.VirtualListSize = m_ItemList.Count();
            UpdateLstRefinery();
        }
예제 #10
0
        public PagedResultDto <AssetDto> GetAssets(AssetFilter input)
        {
            IQueryable <Asset> query = assetRepository.GetAll().Where(x => x.IsDelete == false);

            // filter by Area
            if (input.Area != null)
            {
                query = query.Where(x => x.Area.Contains(input.Area));
            }

            // filter by Area Code
            if (input.Areacode != null)
            {
                query = query.Where(x => x.Areacode.ToLower().Contains(input.Areacode.ToLower()));
            }
            //filter by Assetname
            if (input.Assetname != null)
            {
                query = query.Where(x => x.Assetname.ToLower().Contains(input.Assetname.ToLower()));
            }
            //filter by UnitCode
            if (input.Unitcode != null)
            {
                query = query.Where(x => x.Unitcode.ToLower().Contains(input.Assetname.ToLower()));
            }
            //filter by Transaction
            if (input.Transaction != null)
            {
                query = query.Where(x => x.Transaction.ToLower().Contains(input.Transaction.ToLower()));
            }
            //filter by AssetCode
            if (input.Assetcode != null)
            {
                query = query.Where(x => x.Assetcode.ToLower().Contains(input.Assetcode.ToLower()));
            }
            //filter by SeriNumber
            if (input.Serinumber != null)
            {
                query = query.Where(x => x.Serinumber.ToLower().Contains(input.Serinumber.ToLower()));
            }
            int totalCount = query.Count();

            // sorting
            if (!string.IsNullOrWhiteSpace(input.Sorting))
            {
                query = query.OrderBy(input.Sorting);
            }

            // paging
            List <Asset> items = query.PageBy(input).ToList();

            // result
            return(new PagedResultDto <AssetDto>(
                       totalCount,
                       items.Select(item => ObjectMapper.Map <AssetDto>(item)).ToList()));
        }
예제 #11
0
        public void NotContains()
        {
            var valid    = new Asset(1, new IComponent[] { _component1 });
            var notValid = new Asset(2, new IComponent[] { _component2 });

            var filter = new AssetFilter <TestComponent1>(new[] { valid, notValid });

            filter.Should().Contain(asset => asset.Id == valid.Id);
            filter.Should().NotContain(asset => asset.Id == notValid.Id);
        }
예제 #12
0
        public AssetFilter CreateFilter(string assetId, string filterName, FilterTrackPropertyType trackType, string trackValue)
        {
            string      assetName   = GetAssetName(assetId);
            AssetFilter assetFilter = new AssetFilter()
            {
                Tracks = GetTrackSelections(trackType, trackValue)
            };

            return(_media.AssetFilters.CreateOrUpdate(MediaAccount.ResourceGroupName, MediaAccount.Name, assetName, filterName, assetFilter));
        }
예제 #13
0
        public static void TestAssetFilter_TemporaryFilter_Mismatch_False()
        {
            var asset = new StratusAsset {
                Id = Guid.Parse("d5c70f1f606340c58b9382c5c5a31d69"),
            };

            var filter = new AssetFilter {
                IdFilter = new Regex("^000"),
            };

            Assert.False(filter.MatchAsset(asset));
        }
예제 #14
0
        public static void TestAssetFilter_CreateTimeRangeFilter_Nothing_True()
        {
            var asset = new StratusAsset {
                CreateTime = new DateTime(123456789L, DateTimeKind.Utc),
            };

            var filter = new AssetFilter {
                CreateTimeRangeFilter = new DateRange(),
            };

            Assert.True(filter.MatchAsset(asset));
        }
예제 #15
0
        public static void TestAssetFilter_NameFilter_Mismatch_False()
        {
            var asset = new StratusAsset {
                Name = "Qwerty",
            };

            var filter = new AssetFilter {
                NameFilter = new Regex("^Asdf", RegexOptions.IgnoreCase),
            };

            Assert.False(filter.MatchAsset(asset));
        }
예제 #16
0
        public static void TestAssetFilter_DescriptionFilter_Match_True()
        {
            var asset = new StratusAsset {
                Description = "Qwerty",
            };

            var filter = new AssetFilter {
                DescriptionFilter = new Regex("^qwe", RegexOptions.IgnoreCase),
            };

            Assert.True(filter.MatchAsset(asset));
        }
예제 #17
0
        public static void TestAssetFilter_TypeFilter_Match_True()
        {
            var asset = new StratusAsset {
                Id = Guid.Parse("d5c70f1f606340c58b9382c5c5a31d69"),
            };

            var filter = new AssetFilter {
                IdFilter = new Regex("^d5c"),
            };

            Assert.True(filter.MatchAsset(asset));
        }
예제 #18
0
        public AssetFilter CreateFilter(string assetName, string filterName, long startSeconds, long endSeconds)
        {
            AssetFilter assetFilter = new AssetFilter()
            {
                PresentationTimeRange = new PresentationTimeRange()
                {
                    Timescale      = Constant.Media.Filter.Timescale,
                    StartTimestamp = startSeconds,
                    EndTimestamp   = endSeconds
                }
            };

            return(_media.AssetFilters.CreateOrUpdate(MediaAccount.ResourceGroupName, MediaAccount.Name, assetName, filterName, assetFilter));
        }
예제 #19
0
        public static void TestAssetFilter_CreateTimeRangeFilter_Null_Past_False()
        {
            var asset = new StratusAsset {
                CreateTime = new DateTime(123456789L, DateTimeKind.Utc),
            };

            var filter = new AssetFilter {
                CreateTimeRangeFilter = new DateRange(
                    null,
                    new DateTime(012345678L, DateTimeKind.Utc)
                    ),
            };

            Assert.False(filter.MatchAsset(asset));
        }
예제 #20
0
        public static void TestAssetFilter_CreateTimeRangeFilter_WrongKind_WrongKind_False()
        {
            var asset = new StratusAsset {
                CreateTime = new DateTime(123456789L, DateTimeKind.Utc),
            };

            var filter = new AssetFilter {
                CreateTimeRangeFilter = new DateRange(
                    new DateTime(012345678L, DateTimeKind.Local),
                    new DateTime(234567890L, DateTimeKind.Local)
                    ),
            };

            Assert.False(filter.MatchAsset(asset));
        }
예제 #21
0
        public static void TestAssetFilter_CreateTimeRangeFilter_Past_Future_True()
        {
            var asset = new StratusAsset {
                CreateTime = new DateTime(123456789L, DateTimeKind.Utc),
            };

            var filter = new AssetFilter {
                CreateTimeRangeFilter = new DateRange(
                    new DateTime(012345678L, DateTimeKind.Utc),
                    new DateTime(234567890L, DateTimeKind.Utc)
                    ),
            };

            Assert.True(filter.MatchAsset(asset));
        }
예제 #22
0
        public AssetFilter CreateFilter(string assetName, string filterName, long?dvrWindowSeconds, long?liveBackoffSeconds, bool?forceEndTimestamp)
        {
            AssetFilter assetFilter = new AssetFilter()
            {
                PresentationTimeRange = new PresentationTimeRange()
                {
                    Timescale = Constant.Media.Filter.Timescale,
                    PresentationWindowDuration = dvrWindowSeconds,
                    LiveBackoffDuration        = liveBackoffSeconds,
                    ForceEndTimestamp          = forceEndTimestamp
                }
            };

            return(_media.AssetFilters.CreateOrUpdate(MediaAccount.ResourceGroupName, MediaAccount.Name, assetName, filterName, assetFilter));
        }
예제 #23
0
        public AssetFilter CreateFilter(string assetId, string filterName, long timescale, long startTimestamp, long endTimestamp)
        {
            string      assetName   = GetAssetName(assetId);
            AssetFilter assetFilter = new AssetFilter()
            {
                PresentationTimeRange = new PresentationTimeRange()
                {
                    Timescale      = timescale,
                    StartTimestamp = startTimestamp,
                    EndTimestamp   = endTimestamp
                }
            };

            return(_media.AssetFilters.CreateOrUpdate(MediaAccount.ResourceGroupName, MediaAccount.Name, assetName, filterName, assetFilter));
        }
        /// <summary>
        /// Gets the list of filter names to be applied to this asset, given filtering parameters.
        /// </summary>
        /// <param name="startTime">The optional start time for filtering.</param>
        /// <param name="endTime">The optional end time for filtering.</param>
        /// <returns>The list of filter names to be applied to this asset.</returns>
        private async Task <List <string> > GetListFiltersAsync(TimeSpan?startTime, TimeSpan?endTime, string uniqueness, string assetName)
        {
            List <string> listFilters = null;

            if (startTime != null || endTime != null)
            {
                string filterName = "filter-time-" + uniqueness;
                PresentationTimeRange presTimeRange = new PresentationTimeRange(
                    startTime?.Ticks,
                    endTime?.Ticks,
                    null,
                    null,
                    TimeSpan.TicksPerSecond);
                listFilters = new List <string>()
                {
                    filterName
                };

                try
                {
                    AssetFilter newAssetFilter = await this.MediaServicesV3SdkWrapper.AssetFiltersCreateOrUpdateAsync(
                        assetName,
                        filterName,
                        new AssetFilter()
                    {
                        PresentationTimeRange = presTimeRange
                    }).ConfigureAwait(false);
                }
                catch (Exception ex)
                {
                    var msg = "AMS v3 Publish. Error when creating asset filter.";
                    var exceptionToThrow = new GridwichPublicationAssetFilterCreateException(
                        assetName,
                        msg,
                        ex);

                    // Providing additional specific details:
                    exceptionToThrow.Data.Add("startTime", startTime?.ToString());
                    exceptionToThrow.Data.Add("endTime", endTime?.ToString());

                    throw exceptionToThrow;
                }
            }

            return(listFilters);
        }
예제 #25
0
        public IAssetFilter <TComponent> GetFilter <TComponent>() where TComponent : IComponent
        {
            var filterId = Typeof <IAssetFilter <TComponent> > .Id;

            IAssetFilter filter;

            using (Lock.Enter(_filters))
            {
                // ReSharper disable once InvertIf
                if (!_filters.TryGetValue(filterId, out filter))
                {
                    filter = new AssetFilter <TComponent>(_assets);
                    _filters.Add(filterId, filter);
                }
            }

            return((IAssetFilter <TComponent>)filter);
        }
        private void RenderTestSection()
        {
            queryString = EditorGUILayout.TextField("Query String: ", queryString);

            RenderDefaultInclusionRuleProperty();

            if (GUILayout.Button("Test Filter"))
            {
                AssetFilter filter = target as AssetFilter;

                IEnumerable <string> results = filter.FindAssetPaths(queryString);

                foreach (string result in results)
                {
                    Debug.Log(result);
                }
            }
        }
예제 #27
0
        /// <summary>
        /// Compiles assets into a list, iterating through any nested ones
        /// </summary>
        /// <param name="a_Container">null or container. If null, all known assets are compiled.</param>
        /// <returns>Compiled assets</returns>
        public AssetsMap GetAssetsList(ItemAssets a_Container, AssetFilter a_Filter)
        {
            ItemAssets container = new ItemAssets(0, false);

            container.NestedPacked = new AssetsMap();

            if (a_Container != null)
            {
                GetAssetsList_FillNested(a_Container, container, a_Filter);
                return(container.NestedPacked);
            }

            foreach (ItemAssets locationAssets in Assets.Values)
            {
                GetAssetsList_FillNested(locationAssets, container, a_Filter);
            }

            return(container.NestedPacked);
        }
예제 #28
0
        /// <summary>
        /// Create an asset filter.
        /// </summary>
        /// <param name="client">The Media Services client.</param>
        /// <param name="resourceGroupName">The name of the resource group within the Azure subscription.</param>
        /// <param name="accountName">The Media Services account name.</param>
        /// <param name="assetName">The asset name.</param>
        /// <param name="assetFilterName"> The AssetFilter name.</param>
        /// <returns></returns>
        private async static Task <AssetFilter> CreateAssetFilterAsync(IAzureMediaServicesClient client, string resourceGroupName,
                                                                       string accountName, string assetName, string assetFilterName)
        {
            // startTimestamp = 100000000 and endTimestamp = 300000000 using the default timescale will generate
            // a play-list that contains fragments from between 10 seconds and 30 seconds of the VoD presentation.
            // If a fragment straddles the boundary, the entire fragment will be included in the manifest.
            AssetFilter assetFilter = await client.AssetFilters.CreateOrUpdateAsync(
                resourceGroupName,
                accountName,
                assetName,
                assetFilterName,
                new AssetFilter(
                    presentationTimeRange : new PresentationTimeRange(
                        startTimestamp : 100000000L,
                        endTimestamp : 300000000L))
                );

            return(assetFilter);
        }
        internal static void ValidateAssetFilter(AssetFilter assetFilter, FirstQuality expectedFirstQuality, string expectedName, PresentationTimeRange expectedPresentationTimeRange, IList <FilterTrackSelection> expectedTracks)
        {
            Assert.Equal(expectedFirstQuality?.Bitrate, assetFilter.FirstQuality?.Bitrate);

            Assert.Equal(expectedName, assetFilter.Name);

            if (expectedPresentationTimeRange != null)
            {
                Assert.Equal(expectedPresentationTimeRange.StartTimestamp, assetFilter.PresentationTimeRange.StartTimestamp);
                Assert.Equal(expectedPresentationTimeRange.EndTimestamp, assetFilter.PresentationTimeRange.EndTimestamp);
                Assert.Equal(expectedPresentationTimeRange.PresentationWindowDuration, assetFilter.PresentationTimeRange.PresentationWindowDuration);
                Assert.Equal(expectedPresentationTimeRange.LiveBackoffDuration, assetFilter.PresentationTimeRange.LiveBackoffDuration);
                Assert.Equal(expectedPresentationTimeRange.Timescale ?? HNSTimescale, assetFilter.PresentationTimeRange.Timescale);
                Assert.Equal(expectedPresentationTimeRange.ForceEndTimestamp, assetFilter.PresentationTimeRange.ForceEndTimestamp);
            }
            else
            {
                Assert.Null(assetFilter.PresentationTimeRange);
            }

            if (expectedTracks != null)
            {
                // A filter can include multiple track definitions
                Assert.Equal(expectedTracks.Count, assetFilter.Tracks.Count);

                for (int x = 0; x < expectedTracks.Count; x++)
                {
                    // For each track included in the filter, there can be multiple selection criteria.  The criteria have an AND relationship
                    Assert.Equal(expectedTracks[x].TrackSelections.Count, assetFilter.Tracks[x].TrackSelections.Count);

                    for (int y = 0; y < expectedTracks[x].TrackSelections.Count; y++)
                    {
                        Assert.Equal(expectedTracks[x].TrackSelections[y].Property, assetFilter.Tracks[x].TrackSelections[y].Property);
                        Assert.Equal(expectedTracks[x].TrackSelections[y].Operation, assetFilter.Tracks[x].TrackSelections[y].Operation);
                        Assert.Equal(expectedTracks[x].TrackSelections[y].Value, assetFilter.Tracks[x].TrackSelections[y].Value);
                    }
                }
            }
            else
            {
                Assert.True(assetFilter.Tracks == null || assetFilter.Tracks.Count == 0);
            }
        }
        /// <summary>
        /// Creates a filter which includes all the tracks in the list.
        /// </summary>
        /// <param name="assetName">The asset name.</param>
        /// <param name="filterName">The desired filter name.</param>
        /// <param name="tracksToKeep">The list of tracks to keep.</param>
        private async Task CreateTrackFilterAsync(string assetName, string filterName, List <TrackInfo> tracksToKeep)
        {
            List <FilterTrackSelection> includedTracks = new List <FilterTrackSelection>();

            foreach (TrackInfo track in tracksToKeep)
            {
                var conditions = new List <FilterTrackPropertyCondition>()
                {
                    new FilterTrackPropertyCondition(FilterTrackPropertyType.Type, track.TrackType, FilterTrackPropertyCompareOperation.Equal),
                    new FilterTrackPropertyCondition(FilterTrackPropertyType.Name, track.TrackName, FilterTrackPropertyCompareOperation.Equal)
                };

                includedTracks.Add(new FilterTrackSelection(conditions));
            }

            AssetFilter assetFilterParams = new AssetFilter(tracks: includedTracks);

            try
            {
                AssetFilter newAssetFilter = await this.MediaServicesV3SdkWrapper.AssetFiltersCreateOrUpdateAsync(
                    assetName,
                    filterName,
                    assetFilterParams)
                                             .ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                var msg = "AMS v3 Publish. Error when creating asset filter.";
                var exceptionToThrow = new GridwichPublicationAssetFilterCreateException(
                    assetName,
                    msg,
                    ex);

                // Providing additional specific details:
                exceptionToThrow.SafeAddToData("filterName", filterName);

                throw exceptionToThrow;
            }
        }