summaryrefslogblamecommitdiff
path: root/lib/Graph/GEXF/Node.pm
blob: 0c45a046d03c2205bbe8ee20483202da5cc6e819 (plain) (tree)

















































                                                                          
package Graph::GEXF::Node;

use Moose;

use Graph::GEXF::Edge;
with 'Graph::GEXF::Role::Attributes' => {for => [qw/node/]};

has id => (is => 'ro', isa => 'Str', required => 1);
has label => (is => 'rw', isa => 'Str');

has edges => (
    traits  => ['Hash'],
    is      => 'rw',
    isa     => 'HashRef[Graph::GEXF::Edge]',
    default => sub { {} },
    handles => {
        add_edge    => 'set',
        has_link_to => 'exists',
        all_edges => 'keys',
        get_edge => 'get',
    }
);

sub link_to {
    my $self     = shift;
    my @nodes_id = @_;

    foreach my $node_id (@nodes_id) {
        my $edge =
          Graph::GEXF::Edge->new(source => $self->id, target => $node_id);

        $self->add_edge($node_id => $edge);
    }
}

sub attribute {
    my ($self, $attribute_name, $value) = @_;

#    return 0 unless $self->has_node_attribute;

    if (!$self->has_node_attribute($attribute_name)) {
        die "this attribute doesn't exists";
    }

    $self->node_attributes->{$attribute_name}->{value} = $value;

    1;
}

1;