2021-03-17 11:53:00 -04:00
|
|
|
package Hydra::Helper::AttributeSet;
|
|
|
|
|
|
|
|
use strict;
|
|
|
|
use warnings;
|
|
|
|
|
|
|
|
sub new {
|
|
|
|
my ($self) = @_;
|
|
|
|
return bless { "paths" => [] }, $self;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub registerValue {
|
|
|
|
my ($self, $attributePath) = @_;
|
|
|
|
|
|
|
|
my @pathParts = splitPath($attributePath);
|
|
|
|
|
|
|
|
pop(@pathParts);
|
|
|
|
if (scalar(@pathParts) == 0) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $lineage = "";
|
|
|
|
for my $pathPart (@pathParts) {
|
|
|
|
$lineage = $self->registerChild($lineage, $pathPart);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sub registerChild {
|
|
|
|
my ($self, $parent, $attributePath) = @_;
|
|
|
|
if ($parent ne "") {
|
|
|
|
$parent .= "."
|
|
|
|
}
|
|
|
|
|
|
|
|
my $name = $parent . $attributePath;
|
|
|
|
if (!grep { $_ eq $name} @{$self->{"paths"}}) {
|
|
|
|
push(@{$self->{"paths"}}, $name);
|
|
|
|
}
|
|
|
|
return $name;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub splitPath {
|
|
|
|
my ($s) = @_;
|
|
|
|
|
|
|
|
if ($s eq "") {
|
|
|
|
return ('')
|
|
|
|
}
|
|
|
|
|
|
|
|
return split(/\./, $s, -1);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub enumerate {
|
|
|
|
my ($self) = @_;
|
|
|
|
my @paths = sort { length($a) <=> length($b) } @{$self->{"paths"}};
|
2021-10-20 12:52:34 -04:00
|
|
|
return @paths;
|
2021-03-17 11:53:00 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
1;
|