- Timestamp:
- 2010-04-27T16:00:59+12:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/perllib/classify/List.pm
r20904 r21969 793 793 if (@OIDs == 1 && $self->{$metadata_group . ".bookshelf_type"} ne "always") { 794 794 my $OID = $OIDs[0]; 795 796 # Find the offset of this metadata value 797 my $offset = 0; 798 my $OID_to_metadata_values_hash_ref = $self->{$metadata_group . ".list"}; 799 my @metadata_values = @{$OID_to_metadata_values_hash_ref->{$OID}}; 800 for (my $i = 0; $i < scalar(@metadata_values); $i++) { 801 if ($metadata_value eq $metadata_values[$i]) { 802 $offset = $i; 803 last; 804 } 805 } 795 my $offset = $self->metadata_offset($metadata_group, $OID, $metadata_value); 806 796 push(@{$classifier_node->{'contains'}}, { 'OID' => $OID, 'offset' => $offset }); 807 } 797 } 808 798 # If 'bookshelf_type' is 'never', list all the items even if there are duplicated values 809 799 elsif ($self->{$metadata_group . ".bookshelf_type"} eq "never") { 810 $self->add_sorted_leaf_items(\@OIDs, $classifier_node); 800 @OIDs = $self->sort_leaf_items(\@OIDs); 801 foreach my $OID (@OIDs) { 802 my $offset = $self->metadata_offset($metadata_group, $OID, $metadata_value); 803 push(@{$classifier_node->{'contains'}}, { 'OID' => $OID , 'offset' => $offset }); 804 } 805 811 806 } 812 807 # Otherwise create a sublist (bookshelf) for the metadata value … … 814 809 my %child_classifier_node = ( 'Title' => $self->convert_unicode_string_to_utf8_string($metadata_value), 815 810 'childtype' => "VList", 811 'mdtype' => $metadata_group, 816 812 'contains' => [] ); 817 813 … … 824 820 # Otherwise just add the documents as children of this list 825 821 else { 826 $self->add_sorted_leaf_items(\@OIDs, \%child_classifier_node); 822 @OIDs = $self->sort_leaf_items(\@OIDs); 823 foreach my $OID (@OIDs) { 824 my $offset = $self->metadata_offset($metadata_group, $OID, $metadata_value); 825 push(@{$child_classifier_node{'contains'}}, { 'OID' => $OID , 'offset' => $offset }); 826 } 827 827 828 } 828 829 … … 833 834 } 834 835 835 sub add_sorted_leaf_items 836 sub metadata_offset 837 { 838 my $self = shift(@_); 839 my $metadata_group = shift(@_); 840 my $OID = shift(@_); 841 my $metadata_value = shift(@_); 842 843 my $OID_to_metadata_values_hash_ref = $self->{$metadata_group . ".list"}; 844 my @metadata_values = @{$OID_to_metadata_values_hash_ref->{$OID}}; 845 for (my $i = 0; $i < scalar(@metadata_values); $i++) { 846 if ($metadata_value eq $metadata_values[$i]) { 847 return $i; 848 } 849 } 850 851 return 0; 852 } 853 854 sub sort_leaf_items 836 855 { 837 856 my $self = shift(@_); 838 857 my @OIDs = @{shift(@_)}; 839 my $classifier_node = shift(@_); 858 # my $classifier_node = shift(@_); 840 859 841 860 # Sort leaf nodes and add to list … … 847 866 @OIDs = @OIDs[ sort { $OID_to_metadata_values_hash_ref->{$OIDs[$a]}[0] cmp $OID_to_metadata_values_hash_ref->{$OIDs[$b]}[0] || $a <=> $b; } 0..$#OIDs ]; 848 867 } 849 850 foreach my $OID (@OIDs) { 851 push(@{$classifier_node->{'contains'}}, { 'OID' => $OID }); 852 } 853 } 868 return @OIDs; 869 } 870 854 871 855 872
Note:
See TracChangeset
for help on using the changeset viewer.