Add RebootListener interface in package org.libvirt.event and
implement addRebootListener methods in classes Domain and Connect.
Add removeRebootListener to Connect class.
Signed-off-by: Claudio Bley <cbley(a)av-test.de>
---
src/main/java/org/libvirt/Connect.java | 41 ++++++++++++++++++++
src/main/java/org/libvirt/Domain.java | 17 ++++++++
.../java/org/libvirt/event/RebootListener.java | 15 +++++++
src/main/java/org/libvirt/jna/Libvirt.java | 4 ++
4 files changed, 77 insertions(+)
create mode 100644 src/main/java/org/libvirt/event/RebootListener.java
diff --git a/src/main/java/org/libvirt/Connect.java
b/src/main/java/org/libvirt/Connect.java
index 5637337..bbbd000 100644
--- a/src/main/java/org/libvirt/Connect.java
+++ b/src/main/java/org/libvirt/Connect.java
@@ -18,6 +18,7 @@ import org.libvirt.jna.StorageVolPointer;
import org.libvirt.jna.StreamPointer;
import org.libvirt.jna.virConnectAuth;
import org.libvirt.jna.virNodeInfo;
+import org.libvirt.event.*;
import static org.libvirt.Library.libvirt;
import static org.libvirt.Library.getConstant;
@@ -455,6 +456,46 @@ public class Connect {
domainEventRegister(null, l);
}
+ void domainEventRegister(Domain domain, final RebootListener cb) throws
LibvirtException {
+ if (cb == null)
+ throw new IllegalArgumentException("RebootCallback cannot be
null");
+
+ Libvirt.VirConnectDomainEventGenericCallback virCB = new
Libvirt.VirConnectDomainEventGenericCallback() {
+ @Override
+ public void eventCallback(ConnectionPointer virConnectPtr,
+ DomainPointer virDomainPointer,
+ Pointer opaque) {
+ assert VCP.equals(virConnectPtr);
+
+ try {
+ Domain d = Domain.constructIncRef(Connect.this,
virDomainPointer);
+ cb.onReboot(d);
+ } catch (LibvirtException e) {
+ throw new RuntimeException("libvirt error in reboot
callback", e);
+ }
+ }
+ };
+
+ domainEventRegister(domain, DomainEventID.REBOOT, virCB, cb);
+ }
+
+ /**
+ * Adds the specified reboot listener to receive reboot events for
+ * domains of this connection.
+ *
+ * @param l the reboot listener
+ * @throws LibvirtException on failure
+ *
+ * @see Domain#addRebootListener
+ * @see <a
+ *
href="http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDom...
+ * >virConnectDomainEventRegisterAny</a>
+ * @since 1.5.2
+ */
+ public void addRebootListener(final RebootListener l) throws LibvirtException {
+ domainEventRegister(null, l);
+ }
+
/**
* Removes the specified I/O error listener so that it no longer
* receives I/O error events.
diff --git a/src/main/java/org/libvirt/Domain.java
b/src/main/java/org/libvirt/Domain.java
index f37f299..010fee0 100644
--- a/src/main/java/org/libvirt/Domain.java
+++ b/src/main/java/org/libvirt/Domain.java
@@ -13,6 +13,7 @@ import org.libvirt.jna.virDomainJobInfo;
import org.libvirt.jna.virDomainMemoryStats;
import org.libvirt.jna.virSchedParameter;
import org.libvirt.jna.virVcpuInfo;
+import org.libvirt.event.RebootListener;
import static org.libvirt.Library.libvirt;
import static org.libvirt.ErrorHandler.processError;
import static org.libvirt.ErrorHandler.processErrorIfZero;
@@ -1047,6 +1048,22 @@ public class Domain {
}
/**
+ * Adds the specified listener to receive reboot events for this domain.
+ *
+ * @param l the reboot listener
+ * @throws LibvirtException on failure
+ *
+ * @see Connect#addRebootListener
+ * @see <a
+ *
href="http://www.libvirt.org/html/libvirt-libvirt.html#virConnectDom...
+ * >virConnectDomainEventRegisterAny</a>
+ * @since 1.5.2
+ */
+ public void addRebootListener(final RebootListener l) throws LibvirtException {
+ virConnect.domainEventRegister(this, l);
+ }
+
+ /**
* Revert the domain to a given snapshot.
*
* @see <a href=
diff --git a/src/main/java/org/libvirt/event/RebootListener.java
b/src/main/java/org/libvirt/event/RebootListener.java
new file mode 100644
index 0000000..1b440c0
--- /dev/null
+++ b/src/main/java/org/libvirt/event/RebootListener.java
@@ -0,0 +1,15 @@
+package org.libvirt.event;
+
+import org.libvirt.Domain;
+
+/**
+ * Interface for receiving domain reboot events.
+ */
+public interface RebootListener extends EventListener {
+ /**
+ * This method gets called upon a domain reboot event.
+ *
+ * @param domain the domain which was rebooted
+ */
+ void onReboot(Domain domain);
+}
diff --git a/src/main/java/org/libvirt/jna/Libvirt.java
b/src/main/java/org/libvirt/jna/Libvirt.java
index 0e36251..913fe08 100644
--- a/src/main/java/org/libvirt/jna/Libvirt.java
+++ b/src/main/java/org/libvirt/jna/Libvirt.java
@@ -85,6 +85,10 @@ public interface Libvirt extends Library {
Pointer opaque);
}
+ interface VirConnectDomainEventGenericCallback extends VirDomainEventCallback {
+ void eventCallback(ConnectionPointer virConnectPtr, DomainPointer
virDomainPointer, Pointer opaque);
+ }
+
/**
* Error callback
*/
--
1.7.9.5