IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 28, 2010, 8:11:04 PM (16 years ago)
Author:
Paul Price
Message:

Merging trunk in preparation for merging branch to trunk.

Location:
branches/pap
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/pap

  • branches/pap/Nebulous-Server/lib/Nebulous/Server.pm

    r28446 r28534  
    99no warnings qw( uninitialized );
    1010
    11 our $VERSION = '0.17';
     11our $VERSION = '0.18';
    1212
    1313use base qw( Class::Accessor::Fast );
     
    15081508
    15091509    return \@keys;
     1510}
     1511
     1512sub find_objects_wildcard
     1513{
     1514    my $self = shift;
     1515
     1516    my $log = $self->log;
     1517    $log->debug( "entered - @_" );
     1518
     1519    my ($pattern) = validate_pos( @_,
     1520        {
     1521            type        => SCALAR,
     1522            optional    => 1,
     1523        },
     1524    );
     1525
     1526    my $sql = $self->sql;
     1527    my $db  = $self->_db_for_index(0);
     1528   
     1529    # validate that we have a key to deal with
     1530    eval {
     1531        $pattern = parse_neb_key($pattern) if defined $pattern;
     1532    };
     1533    $log->logdie("$@") if $@;
     1534
     1535    unless (defined $pattern) {
     1536        $log->debug( "leaving" );
     1537        $log->logdie("no keys found");
     1538    }
     1539
     1540    # parse out the directory we're working in, and decide if we are a directory
     1541    my $dir_id = $self->_resolve_dir_parent_id(key => $pattern, dir_id => 1);
     1542    my $work_dir;
     1543    my $file_pattern;
     1544    if (defined $dir_id) {
     1545        $work_dir = $pattern;
     1546        $file_pattern = '%';
     1547    }
     1548    else {
     1549        my $dir_plain = dirname($pattern);
     1550        if ($dir_plain eq 'neb:') {
     1551            $dir_plain = 'neb:///';
     1552        }
     1553        if ($dir_plain) {
     1554            $work_dir = parse_neb_key($dir_plain);
     1555        }
     1556        else {
     1557            $work_dir = parse_neb_key('/');
     1558        }
     1559        $file_pattern = basename $pattern;
     1560        unless ($file_pattern) {
     1561            $file_pattern = '%';
     1562        }
     1563       
     1564        $dir_id = $self->_resolve_dir_parent_id(key => $work_dir, dir_id => 1);
     1565        unless (defined $dir_id) {
     1566            $log->logdie("pattern $work_dir does not match any key or directory");
     1567        }
     1568    }
     1569   
     1570    # find dirs under dir
     1571    my @dir_keys;
     1572
     1573    eval {
     1574        $log->debug("looking for directories under dir: $dir_id");
     1575        my $query = $db->prepare_cached( $sql->find_dir_by_parent_id . " AND dirname LIKE ? ");
     1576        $query->execute( $dir_id, $file_pattern );
     1577
     1578        while ( my $row = $query->fetchrow_hashref ) {
     1579            next if $row->{'dir_id'} == 1;
     1580            my $dir = $row->{'dirname'};
     1581            if ($dir_id == 1) {
     1582                push @dir_keys, $dir . '/' if $dir;
     1583            } else {
     1584                push @dir_keys, $work_dir->path . '/' . $dir . '/' if $dir;
     1585            }
     1586            $log->debug( "matched $dir" ) if $dir;
     1587        }
     1588    };
     1589    $log->logdie("database error: $@") if $@;
     1590
     1591    # find files under dir
     1592    my @keys;
     1593    eval {
     1594        $log->debug("looking for objects under dir: $dir_id");
     1595        my $query = $db->prepare_cached( $sql->find_object_by_dir_id . " AND ext_id_basename LIKE ? ");
     1596        $query->execute( $dir_id , $file_pattern);
     1597
     1598        while ( my $row = $query->fetchrow_hashref ) {
     1599            my $key = $row->{ 'ext_id' };
     1600            push @keys, $key if $key;
     1601            $log->debug( "matched $key" ) if $key;
     1602        }
     1603    };
     1604    $log->logdie("database error: $@") if $@;
     1605
     1606    $log->debug( "leaving" );
     1607   
     1608    return [sort(@dir_keys), sort(@keys)];
     1609
    15101610}
    15111611
Note: See TracChangeset for help on using the changeset viewer.