Changeset 15940


Ignore:
Timestamp:
2008-06-09T17:05:32+12:00 (16 years ago)
Author:
mdewsnip
Message:

(Adding dynamic classifiers) Starting to add support for hierarchical values (currently incomplete).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gsdl/trunk/src/recpt/dynamicclassifieraction.cpp

    r15847 r15940  
    173173    get_metadata_values (metadata_element_name, args["c"], collectproto, metadata_values_response, logout);
    174174
    175     // Add metadata necessary for output_section_group() to display the results as classifier nodes
     175    // Deal with hierarchical metadata values
     176    map<text_t, int, lttext_t> classifier_nodes;
    176177    ResultDocInfo_tarray::iterator metadata_value_iterator = metadata_values_response.docInfo.begin();
    177178    while (metadata_value_iterator != metadata_values_response.docInfo.end())
    178179    {
    179       (*metadata_value_iterator).metadata["doctype"].values.push_back("classify");
    180       (*metadata_value_iterator).metadata["haschildren"].values.push_back("1");
    181       (*metadata_value_iterator).metadata["numleafdocs"].values.push_back((*metadata_value_iterator).result_num);
    182       (*metadata_value_iterator).metadata["Title"].values.push_back((*metadata_value_iterator).OID);
     180      text_t metadata_value = (*metadata_value_iterator).OID;
     181
     182      // Is this metadata value hierarchical?
     183      text_t::iterator hierarchy_split_position = findchar(metadata_value.begin(), metadata_value.end(), '|');
     184      if (hierarchy_split_position != metadata_value.end())
     185      {
     186    // Yes, so split off the first part of the hierarchy for the classifier node
     187    metadata_value = substr(metadata_value.begin(), hierarchy_split_position);
     188      }
     189
     190      // Create a node for this metadata value if we haven't seen it before
     191      if (classifier_nodes.find(metadata_value) == classifier_nodes.end())
     192      {
     193    classifier_nodes[metadata_value] = 0;
     194      }
     195
     196      // Increment the occurrence count
     197      classifier_nodes[metadata_value] += (*metadata_value_iterator).result_num;
     198
    183199      metadata_value_iterator++;
    184200    }
    185201
     202    // Create the structure containing the classifer nodes to pass to output_section_group(), with the right info
     203    FilterResponse_t classifier_nodes_response;
     204    map<text_t, int, lttext_t>::iterator classifier_nodes_iterator = classifier_nodes.begin();
     205    while (classifier_nodes_iterator != classifier_nodes.end())
     206    {
     207      ResultDocInfo_t classifier_node;
     208      classifier_node.OID = (*classifier_nodes_iterator).first;
     209
     210      // Add metadata necessary for output_section_group() to display the results as classifier nodes
     211      classifier_node.metadata["doctype"].values.push_back ("classify");
     212      classifier_node.metadata["haschildren"].values.push_back ("1");
     213      classifier_node.metadata["numleafdocs"].values.push_back ((*classifier_nodes_iterator).second);
     214      classifier_node.metadata["Title"].values.push_back ((*classifier_nodes_iterator).first);
     215
     216      classifier_nodes_response.docInfo.push_back (classifier_node);
     217      classifier_nodes_iterator++;
     218    }
     219
    186220    // Display the classifier nodes
    187     bptr->output_section_group (metadata_values_response, args, args["c"], 0, formatlistptr, use_table, metadata, getParents, collectproto, disp, outconvert, textout, logout);
     221    bptr->output_section_group (classifier_nodes_response, args, args["c"], 0, formatlistptr, use_table, metadata, getParents, collectproto, disp, outconvert, textout, logout);
    188222  }
    189223  else
Note: See TracChangeset for help on using the changeset viewer.