use strict; package Seismic; package Seismic::Station; use Moose; has 'Easting' => (isa => 'Int', is => 'rw', required => 1); has 'Northing' => (isa => 'Int', is => 'rw', required => 1); has 'Elevation' => (isa => 'Int', is => 'rw', required => 1); has 'Id' => (isa => 'Str', is => 'rw', required => 1); package Seismic::Line; use Moose; use MooseX::AttributeHelpers; has 'Length' => (isa => 'Int', is => 'rw'); has 'GroupInterval' => (isa => 'Int', is => 'rw'); has 'Id' => (isa => 'Str', is => 'rw', required => 1); has 'Stations' => ( metaclass => 'Collection::Hash', is => 'rw', isa => 'HashRef[Seismic::Station]', default => sub { {} }, provides => { exists => 'station_exists', keys => 'station_ids', get => 'get_station', set => 'add_station', count => 'count_stations', delete => 'delete_station', clear => 'delete_all_stations', }, ); package Seismic::Grid; use Moose; has 'Lines' => ( metaclass => 'Collection::Hash', is => 'rw', isa => 'HashRef[Seismic::Line]', default => sub { {} }, provides => { exists => 'line_exists', keys => 'line_ids', get => 'get_line', set => 'add_line', count => 'count_lines', delete => 'delete_line', clear => 'delete_all_lines', }, ); 1;