[libnet-dbus-perl] 303/335: Refactor dispatching of properties to be overridable

Intrigeri intrigeri at moszumanska.debian.org
Sat Mar 21 01:08:13 UTC 2015


This is an automated email from the git hooks/post-receive script.

intrigeri pushed a commit to branch experimental
in repository libnet-dbus-perl.

commit 24ef5d13f3dea8423cb176238e6570db7081559b
Author: Daniel P. Berrange <dan at berrange.com>
Date:   Sun Nov 6 14:21:41 2011 +0000

    Refactor dispatching of properties to be overridable
---
 lib/Net/DBus/BaseObject.pm  | 70 ++++++++++++++++++++++++++-------------------
 lib/Net/DBus/Object.pm      | 12 ++++++++
 lib/Net/DBus/ProxyObject.pm | 12 ++++++++
 3 files changed, 64 insertions(+), 30 deletions(-)

diff --git a/lib/Net/DBus/BaseObject.pm b/lib/Net/DBus/BaseObject.pm
index 9815f60..e3b5dda 100644
--- a/lib/Net/DBus/BaseObject.pm
+++ b/lib/Net/DBus/BaseObject.pm
@@ -492,6 +492,28 @@ sub _dispatch_object {
     return 0;
 }
 
+
+=item $currvalue = $object->_dispatch_property($name);
+=item $object->_dispatch_property($name, $newvalue);
+
+The C<_dispatch_property> method is to be used to handle dispatch
+of property reads and writes. The C<$name> parameter is the name
+of the property being accessed. If C<$newvalue> is supplied then
+the property is to be updated, otherwise the current value is to
+be returned. The default implementation will simply raise an
+error, so must be overriden in subclasses.
+
+=cut
+
+sub _dispatch_property {
+    my $self = shift;
+    my $name = shift;
+    my $value = shift;
+
+    die "No method for property $name";
+}
+
+
 sub _dispatch_prop_read {
     my $self = shift;
     my $connection = shift;
@@ -519,24 +541,18 @@ sub _dispatch_prop_read {
 					       "property '$pname' in interface '$pinterface' is not readable");
     }
 
-    if ($self->can($pname)) {
-	my $value = eval {
-	    $self->$pname;
-	};
-	if ($@) {
-	    return $connection->make_error_message($message,
-						   "org.freedesktop.DBus.Error.Failed",
-						   "error reading '$pname' in interface '$pinterface': $@");
-	} else {
-	    my $reply = $connection->make_method_return_message($message);
-
-	    $self->_introspector->encode($reply, "methods", "Get", "returns", $value);
-	    return $reply;
-	}
-    } else {
+    my $value = eval {
+	$self->_dispatch_property($pname);
+    };
+    if ($@) {
 	return $connection->make_error_message($message,
 					       "org.freedesktop.DBus.Error.Failed",
-					       "no method to read property '$pname' in interface '$pinterface'");
+					       "error reading '$pname' in interface '$pinterface': $@");
+    } else {
+	my $reply = $connection->make_method_return_message($message);
+	
+	$self->_introspector->encode($reply, "methods", "Get", "returns", $value);
+	return $reply;
     }
 }
 
@@ -562,7 +578,7 @@ sub _dispatch_all_prop_read {
 	}
 
 	$values{$pname} = eval {
-	    $self->$pname;
+	    $self->_dispatch_property($pname);
 	};
 	if ($@) {
 	    return $connection->make_error_message($message,
@@ -604,21 +620,15 @@ sub _dispatch_prop_write {
 					       "property '$pname' in interface '$pinterface' is not writable");
     }
 
-    if ($self->can($pname)) {
-	eval {
-	    $self->$pname($pvalue);
-	};
-	if ($@) {
-	    return $connection->make_error_message($message,
-						   "org.freedesktop.DBus.Error.Failed",
-						   "error writing '$pname' in interface '$pinterface': $@");
-	} else {
-	    return $connection->make_method_return_message($message);
-	}
-    } else {
+    eval {
+	$self->_dispatch_property($pname, $pvalue);
+    };
+    if ($@) {
 	return $connection->make_error_message($message,
 					       "org.freedesktop.DBus.Error.Failed",
-					       "no method to write property '$pname' in interface '$pinterface'");
+					       "error writing '$pname' in interface '$pinterface': $@");
+    } else {
+	return $connection->make_method_return_message($message);
     }
 }
 
diff --git a/lib/Net/DBus/Object.pm b/lib/Net/DBus/Object.pm
index 7d06db7..2e97260 100644
--- a/lib/Net/DBus/Object.pm
+++ b/lib/Net/DBus/Object.pm
@@ -183,6 +183,18 @@ sub _dispatch_object {
 }
 
 
+sub _dispatch_property {
+    my $self = shift;
+    my $name = shift;
+
+    if (!$self->can($name)) {
+	die "no method to for property '$name'";
+    }
+
+    return $self->$name(@_);
+}
+
+
 sub _is_method_allowed {
     my $self = shift;
     my $method = shift;
diff --git a/lib/Net/DBus/ProxyObject.pm b/lib/Net/DBus/ProxyObject.pm
index dde83f3..cc94236 100644
--- a/lib/Net/DBus/ProxyObject.pm
+++ b/lib/Net/DBus/ProxyObject.pm
@@ -224,6 +224,18 @@ sub _dispatch_object {
 }
 
 
+sub _dispatch_property {
+    my $self = shift;
+    my $name = shift;
+
+    if (!$self->{impl}->can($name)) {
+	die "no method to for property '$name'";
+    }
+
+    return $self->{impl}->$name(@_);
+}
+
+
 sub _is_method_allowed {
     my $self = shift;
     my $method = shift;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libnet-dbus-perl.git



More information about the Pkg-perl-cvs-commits mailing list