Пример #1
0
        void dispatcher_SearchRequestAsked(List<IRequestObject> selectedObjects, SearchResponseHandler callback)
        {
            //该函数进行下列具体实现:首先进行Object中种类的识别和搜索。
            //进行识别完毕后,如果是资源占多数,则调用资源搜索的函数。
            //进行识别完毕后,如果是标签占多数,则调用标签搜索的函数。
            SearchResponseArgs e = new SearchResponseArgs();
            e.Result = new List<IRequestObject>();
            e.Result_Attribute = new List<bool>();
            int numberOfResources=0;
            int numberOfTags=0;
            List<Tag> selectedTags=new List<Tag>();
            List<Resource> selectedResources=new List<Resource>();
            foreach (IRequestObject reobj in selectedObjects)
            {

                if (reobj is Tag)
                {
                    numberOfTags++;
                    selectedTags.Add((Tag)reobj);
                }
                else
                {
                    numberOfResources++;
                    selectedResources.Add((Resource)reobj);
                }
            }
            //系统默认如果圈住的资源数目大于或等于标签数目,则系统进行资源的搜索。
            if (numberOfResources < numberOfTags)
            {
                List<Resource> res = coronaService.SearchResourcesFromTags(selectedTags);
                List<Resource> resourceToBeRemoved = new List<Resource>();
                foreach(Resource resc in res)
                {
                    //此处出现异常。需在遍历的时候,首先应该确定出应该删除的资源,并将其存储。
                    if (!File.Exists(resc.ResourcePath))
                    {
                        resourceToBeRemoved.Add(resc);
                    }
                }
                //确定完需要删除的Resource并将其一一删除。
                foreach (Resource resc in resourceToBeRemoved)
                {
                    rescControl.CheckResource(resc, coronaService);
                    res.Remove(resc);
                }
                foreach (Resource resc in res)
                {
                    e.Result.Add( rescControl.WrapResource(resc) ) ;
                    e.Result_Attribute.Add(true);
                }
                List<Tag> tags = coronaService.SearchTagsFromTags(selectedTags);
                foreach (Tag tag in tags)
                {
                    e.Result.Add(tag);
                    e.Result_Attribute.Add(false);
                }
            }
            else
            {
                List<Tag> tags =coronaService.SearchTagsFromResources(selectedResources);
                foreach (Tag tag in tags)
                {
                    e.Result.Add(tag);
                    e.Result_Attribute.Add(true);
                }
                foreach (Resource resc in selectedResources)
                {
                    e.Result.Add( rescControl.WrapResource(resc) );
                    e.Result_Attribute.Add(false);
                }
            }
            if (callback != null)
                callback(e);
        }
Пример #2
0
        void dispatcher_SearchRequestAsked(List <IRequestObject> selectedObjects, SearchResponseHandler callback)
        {
            //该函数进行下列具体实现:首先进行Object中种类的识别和搜索。
            //进行识别完毕后,如果是资源占多数,则调用资源搜索的函数。
            //进行识别完毕后,如果是标签占多数,则调用标签搜索的函数。
            SearchResponseArgs e = new SearchResponseArgs();

            e.Result           = new List <IRequestObject>();
            e.Result_Attribute = new List <bool>();
            int             numberOfResources = 0;
            int             numberOfTags      = 0;
            List <Tag>      selectedTags      = new List <Tag>();
            List <Resource> selectedResources = new List <Resource>();

            foreach (IRequestObject reobj in selectedObjects)
            {
                if (reobj is Tag)
                {
                    numberOfTags++;
                    selectedTags.Add((Tag)reobj);
                }
                else
                {
                    numberOfResources++;
                    selectedResources.Add((Resource)reobj);
                }
            }
            //系统默认如果圈住的资源数目大于或等于标签数目,则系统进行资源的搜索。
            if (numberOfResources < numberOfTags)
            {
                List <Resource> res = coronaService.SearchResourcesFromTags(selectedTags);
                List <Resource> resourceToBeRemoved = new List <Resource>();
                foreach (Resource resc in res)
                {
                    //此处出现异常。需在遍历的时候,首先应该确定出应该删除的资源,并将其存储。
                    if (!File.Exists(resc.ResourcePath))
                    {
                        resourceToBeRemoved.Add(resc);
                    }
                }
                //确定完需要删除的Resource并将其一一删除。
                foreach (Resource resc in resourceToBeRemoved)
                {
                    rescControl.CheckResource(resc, coronaService);
                    res.Remove(resc);
                }
                foreach (Resource resc in res)
                {
                    e.Result.Add(rescControl.WrapResource(resc));
                    e.Result_Attribute.Add(true);
                }
                List <Tag> tags = coronaService.SearchTagsFromTags(selectedTags);
                foreach (Tag tag in tags)
                {
                    e.Result.Add(tag);
                    e.Result_Attribute.Add(false);
                }
            }
            else
            {
                List <Tag> tags = coronaService.SearchTagsFromResources(selectedResources);
                foreach (Tag tag in tags)
                {
                    e.Result.Add(tag);
                    e.Result_Attribute.Add(true);
                }
                foreach (Resource resc in selectedResources)
                {
                    e.Result.Add(rescControl.WrapResource(resc));
                    e.Result_Attribute.Add(false);
                }
            }
            if (callback != null)
            {
                callback(e);
            }
        }
Пример #3
0
        private void SearchResponseCallBack(SearchResponseArgs e)
        {
            //更换逻辑,区分直接的和间接的。
            int tmp = 0;
            bool obj_attribute = false;
            if (e.Result != null)
            {
                tags.Clear();
                resources.Clear();
                foreach (IRequestObject obj in e.Result)
                {
                    obj_attribute = e.Result_Attribute[tmp];
                    if (obj is Tag)
                    {
                        TagItem item = TagItem.CreateTagItem(obj as Tag);

                        if (item.Tag.TagID == null)
                        {
                            item.State = TagItemState.FreeNew;
                            //说明为直接获得。
                        }
                        else
                        {
                            item.State = TagItemState.FreeImmediate;
                            //说明为间接获得。
                        }
                        tags.Add(item);
                    }
                    else if (obj is Resource)
                    {
                        ResourceItem item = new ResourceItem(obj as Resource);

                        if (obj_attribute)
                        {
                            //说明为直接获得。
                        }
                        else
                        {
                            //说明为间接获得。
                        }
                        resources.Add(item);
                    }
                    else
                        throw new Exception("New IRequestObject imported!");
                    tmp++;
                }
            }
            else
            {

            }
        }