Changeset 16206
- Timestamp:
- 2008-06-26T13:52:53+12:00 (15 years ago)
- Location:
- gsdl/trunk/src/recpt
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
gsdl/trunk/src/recpt/dynamicclassifieraction.cpp
r16196 r16206 198 198 text_t classifier_node_OID = args["dcn"]; 199 199 text_t classifier_node_metadata_value = classifier_node_OID; 200 text_t classifier_node_metadata_value_filter = classifier_node_metadata_value + "|*"; 200 201 201 202 // Split the classifier node OID into its components, then remove any we've already dealt with … … 206 207 classifier_node_OID_parts_remaining.pop_front(); 207 208 208 // Update classifier_node_metadata_value to remove any grouping node components209 // Update classifier_node_metadata_value (and consequently the filter) to remove the grouping node component 209 210 joinchar (classifier_node_OID_parts_remaining, '|', classifier_node_metadata_value); 211 classifier_node_metadata_value_filter = classifier_node_metadata_value + "|*"; 210 212 } 211 213 if (classifier_options["-use_hlist_at_top"] == "1") 212 214 { 213 215 classifier_node_OID_parts_remaining.pop_front(); 216 } 217 218 // If "-split_greenstone_dates" is on the metadata value and filter doesn't quite match the OID -- fix this 219 if (classifier_options["-split_greenstone_dates"] == "1") 220 { 221 classifier_node_metadata_value.replace("|", ""); 222 classifier_node_metadata_value_filter = classifier_node_metadata_value; 223 classifier_node_metadata_value_filter += ((classifier_node_metadata_value_filter.size() == 8) ? "|*" : "*"); 214 224 } 215 225 … … 217 227 if (classifier_node_metadata_value == "") 218 228 { 219 output_child_classifier_nodes (classifier_node_OID, classifier_node_metadata_value, current_metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout);229 output_child_classifier_nodes (classifier_node_OID, "", current_metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout); 220 230 } 221 231 … … 227 237 228 238 // Output the child classifier nodes 229 text_t metadata_value_filter = classifier_node_metadata_value + "|*"; 230 output_child_classifier_nodes (classifier_node_OID, classifier_node_metadata_value, metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout); 239 output_child_classifier_nodes (classifier_node_OID, classifier_node_metadata_value, classifier_node_metadata_value_filter, classifier_node_indent, classifier_options, args, collectproto, browsers, disp, outconvert, textout, logout); 231 240 232 241 // Get the document nodes at this level … … 316 325 while (metadata_value_iterator != metadata_values_response.docInfo.end()) 317 326 { 318 text_t metadata_value = (*metadata_value_iterator).OID;319 320 // Is this metadata value hierarchical?321 text_t ::iterator hierarchy_split_position = findchar(metadata_value.begin(), metadata_value.end(), '|');322 if (hierarchy_split_position != metadata_value.end()) 323 {324 // Yes, so use the first part of the hierarchy only325 metadata_value = substr(metadata_value.begin(), hierarchy_split_position);326 }327 328 // Create a node for this metadatavalue if we haven't seen it before329 if (hlist_classifier_nodes.find( metadata_value) == hlist_classifier_nodes.end())330 { 331 hlist_classifier_nodes[ metadata_value] = 0;327 text_t hierarchical_metadata_value = split_metadata_value ((*metadata_value_iterator).OID, classifier_options); 328 329 // Assume for now we're always at the top 330 text_t hlist_metadata_value = hierarchical_metadata_value; 331 332 // Determine the label for the hlist classifier node from the metadata value 333 text_tarray hlist_metadata_value_parts; 334 splitchar (hlist_metadata_value.begin(), hlist_metadata_value.end(), '|', hlist_metadata_value_parts); 335 text_t hlist_classifier_node_label = hlist_metadata_value_parts.front(); 336 337 // Create a node for this value if we haven't seen it before 338 if (hlist_classifier_nodes.find(hlist_classifier_node_label) == hlist_classifier_nodes.end()) 339 { 340 hlist_classifier_nodes[hlist_classifier_node_label] = 0; 332 341 } 333 342 334 343 // Increment the occurrence count 335 hlist_classifier_nodes[ metadata_value] += (*metadata_value_iterator).result_num;344 hlist_classifier_nodes[hlist_classifier_node_label] += (*metadata_value_iterator).result_num; 336 345 337 346 metadata_value_iterator++; … … 446 455 while (metadata_value_iterator != metadata_values_response.docInfo.end()) 447 456 { 448 text_t metadata_value = (*metadata_value_iterator).OID; 457 text_t hierarchical_metadata_value = split_metadata_value ((*metadata_value_iterator).OID, classifier_options); 458 text_t classifier_node_hierarchical_metadata_value = split_metadata_value (classifier_node_metadata_value, classifier_options); 449 459 450 460 // We need to remove the current position from the metadata value to leave the child metadata value 451 text_t child_metadata_value = metadata_value;452 if (starts_with( metadata_value, classifier_node_metadata_value + "|"))453 { 454 child_metadata_value = substr( metadata_value.begin() + (classifier_node_metadata_value + "|").size(),metadata_value.end());461 text_t child_metadata_value = hierarchical_metadata_value; 462 if (starts_with(hierarchical_metadata_value, classifier_node_hierarchical_metadata_value + "|")) 463 { 464 child_metadata_value = substr(hierarchical_metadata_value.begin() + (classifier_node_hierarchical_metadata_value + "|").size(), hierarchical_metadata_value.end()); 455 465 } 456 466 … … 499 509 500 510 511 text_t dynamicclassifieraction::split_metadata_value (text_t metadata_value, text_tmap classifier_options) 512 { 513 text_t hierarchical_metadata_value = metadata_value; 514 515 // Add hierarchy separators into Greenstone date values (YYYYMMDD -> YYYY|MM|DD) 516 if (classifier_options["-split_greenstone_dates"] == "1") 517 { 518 if (metadata_value.size() == 4 || metadata_value.size() == 6 || metadata_value.size() == 8) 519 { 520 // Add year 521 hierarchical_metadata_value = substr(metadata_value.begin(), metadata_value.begin() + 4); 522 if (metadata_value.size() == 6 || metadata_value.size() == 8) 523 { 524 // Add month 525 hierarchical_metadata_value += "|" + substr(metadata_value.begin() + 4, metadata_value.begin() + 6); 526 if (metadata_value.size() == 8) 527 { 528 // Add day 529 hierarchical_metadata_value += "|" + substr(metadata_value.begin() + 6, metadata_value.begin() + 8); 530 } 531 } 532 } 533 } 534 535 return hierarchical_metadata_value; 536 } 537 538 501 539 void dynamicclassifieraction::display_classifier_nodes (FilterResponse_t classifier_nodes_response, 502 540 text_t classifier_nodes_type, -
gsdl/trunk/src/recpt/dynamicclassifieraction.h
r16115 r16206 90 90 ostream &textout, ostream &logout); 91 91 92 text_t split_metadata_value (text_t metadata_value, text_tmap classifier_options); 93 92 94 void display_classifier_nodes (FilterResponse_t classifier_nodes_response, 93 95 text_t classifier_nodes_type,
Note:
See TracChangeset
for help on using the changeset viewer.