[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GT] SVN Commit r574 - trunk/GT



Author: ras
Date: 2008-03-19 08:00:22 +0100 (Wed, 19 Mar 2008)
New Revision: 574

Modified:
   trunk/GT/Registry.pm
Log:
revision ensures the named indicator can be relocated in
the registry




Modified: trunk/GT/Registry.pm
===================================================================
--- trunk/GT/Registry.pm	2008-03-19 06:58:41 UTC (rev 573)
+++ trunk/GT/Registry.pm	2008-03-19 07:00:22 UTC (rev 574)
@@ -1,9 +1,12 @@
 package GT::Registry;
 
 # Copyright 2000-2002 Rapha�Hertzog, Fabien Fulhaber
+# Copyright 2008 Thomas Weigert
 # This file is distributed under the terms of the General Public License
 # version 2 or (at your option) any later version.
 
+# $Id:$
+
 use strict;
 use vars qw(@EXPORT @ISA);
 
@@ -33,7 +36,7 @@
     my ($repository, $name) = @_;
 
     if (exists $repository->{$name}) {
-	return $repository->{$name};
+        return $repository->{$name};
     }
     return undef;
 }
@@ -84,13 +87,13 @@
     my ($repository, $name, $object) = @_;
     
     if (exists $repository->{$name}) {
-	return $repository->{$name};
+        return $repository->{$name};
     }
 
     $repository->{$name} = $object;
 }
 
-=item C<< GT::Registry::manage_object($repository, \
AT
NAMES, $obj, $args, $key, $class) >>
+=item C<< GT::Registry::manage_object($repository, \
AT
NAMES, $obj, $class, $args, $key) >>
 
 Manage the creation of a new object. Build their names, stores and/or
 retrieve the object from the database. Calls initialize for a new object.
@@ -98,24 +101,33 @@
 =cut
 sub manage_object {
     my ($repo, $names, $obj, $class, $args, $key) = @_;
-	my $object_name = '';
     
     # Create the various names of the object
     $obj->{'key'} = $key;
     for (my $i = 0; $i < scalar(@{$names}); $i++)
     {
-	$obj->{'names'}[$i] = build_object_name($names->[$i], $args, $key);
-	$object_name .= $obj->{'names'}[$i];
+        $obj->{'names'}[$i] = build_object_name($names->[$i], $args, $key);
     }
-    # Lookup the database with the first name
+    # Create name to lookup in the data base
+    $class =~ /.*\:\:(.*)$/o;
+    my $object_name = "${1}[";
+    if (ref($args) =~ /ARRAY/) {
+        $object_name .= join(',',@{$args});
+    } elsif (ref($args) =~ /GT::ArgsTree/) {
+        $object_name .= join(',',$args->get_arg_names());
+    }
+    $object_name .= ']';
+    $object_name .= "($key)" if ($key);
+
+    # register or retrieve this object
     my $newobj = get_or_register_object($repo, $object_name, $obj);
 
     if ($newobj == $obj) {
-	# We're really creating an object
-	bless $obj, $class;
-	$obj->initialize();
+        # We're really creating an object
+        bless $obj, $class;
+        $obj->initialize();
     } else {
-	# We're just reusing an object
+        # We're just reusing an object
     }
     return $newobj;
 }
@@ -131,19 +143,20 @@
 =cut
 sub build_object_name {
     my ($name, $args, $key) = @_;
+    $name =~ s/,\s*/, /go;
     if (ref($args) =~ /ARRAY/) {
-	$name =~ s/#\*/join(",",@{$args})/ge;
-	for(my $i = 1; $i <= scalar(@{$args}); $i++)
-	{
-	    $name =~ s/#$i/$args->[$i-1]/;
-	}
+        $name =~ s/#\*/join(",",@{$args})/ge;
+        for(my $i = 1; $i <= scalar(@{$args}); $i++)
+        {
+            $name =~ s/#$i/$args->[$i-1]/;
+        }
     } elsif (ref($args) =~ /GT::ArgsTree/) {
-	$name =~ s/#\*/join(",",$args->get_arg_names())/ge;
-	my $nb = $args->get_nb_args();
-	for(my $i = 1; $i <= $nb; $i++)
-	{
-	    $name =~ s/#$i/$args->get_arg_names($i)/ge;
-	}
+        $name =~ s/#\*/join(",",$args->get_arg_names())/ge;
+        my $nb = $args->get_nb_args();
+        for(my $i = 1; $i <= $nb; $i++)
+        {
+            $name =~ s/#$i/$args->get_arg_names($i)/ge;
+        }
     }
     $name .= "($key)" if ($key);
     return $name;
@@ -154,8 +167,6 @@
  get_name() or get_name($i)
  get_nb_values()
 
-Z<>
-
 =cut
 sub get_name {
     my ($self, $n) = @_;