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); }
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); } }
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 { } }