On Sat, Jul 25, 2009 at 08:02:08AM -0400, Bryan Kearney wrote:
---
src/org/libvirt/Connect.java | 336 +++++++++++++++++++---------------
src/org/libvirt/Domain.java | 183 +++++++++++--------
src/org/libvirt/Error.java | 21 ++
src/org/libvirt/ErrorHandler.java | 22 +++
src/org/libvirt/Network.java | 74 +++++---
src/org/libvirt/NodeInfo.java | 16 ++
src/org/libvirt/jna/Libvirt.java | 66 +++++++
src/org/libvirt/jna/virError.java | 19 ++
src/org/libvirt/jna/virNodeInfo.java | 19 ++
src/test.java | 237 ++++++++++++------------
10 files changed, 630 insertions(+), 363 deletions(-)
create mode 100644 src/org/libvirt/ErrorHandler.java
create mode 100644 src/org/libvirt/jna/Libvirt.java
create mode 100644 src/org/libvirt/jna/virError.java
create mode 100644 src/org/libvirt/jna/virNodeInfo.java
diff --git a/src/org/libvirt/Connect.java b/src/org/libvirt/Connect.java
[...]
+import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.virError;
+import org.libvirt.jna.virNodeInfo;
+
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.ptr.ByReference;
+import com.sun.jna.ptr.LongByReference;
As said before that new dependancy should be fine
/**
* the native virConnectPtr.
*/
- long VCP;
+ protected Pointer VCP;
that
- private static native int _virInitialize();
and the removal of all the "private native" look a real improvement !
diff --git a/src/org/libvirt/Error.java b/src/org/libvirt/Error.java
index ef05702..ada7be8 100644
--- a/src/org/libvirt/Error.java
+++ b/src/org/libvirt/Error.java
@@ -2,6 +2,8 @@ package org.libvirt;
import java.io.Serializable;
+import org.libvirt.jna.virError;
+
public class Error implements Serializable {
public static enum ErrorDomain {
@@ -308,6 +310,25 @@ public class Error implements Serializable {
int int1;
int int2;
long VNP; /* Deprecated */
+
+ public Error() {
+
+ }
+
+ public Error(virError vError) {
+ code = ErrorNumber.values()[vError.code] ;
+ domain = ErrorDomain.values()[vError.domain] ;
+ level = ErrorLevel.values()[vError.level] ;
+ message = vError.message ;
+ str1 = vError.str1 ;
+ str2 = vError.str2 ;
+ str3 = vError.str3 ;
+ int1 = vError.int1 ;
+ int2 = vError.int2 ;
+ VCP = vError.conn ;
+ VDP = vError.dom ;
+ VNP =
vError.net ;
+ }
/**
I think there are some cleanups needed w.r.t. spaces at end of lines
+++ b/src/org/libvirt/ErrorHandler.java
@@ -0,0 +1,22 @@
+package org.libvirt;
+
+import org.libvirt.jna.Libvirt;
+import org.libvirt.jna.virError;
+
+import com.sun.jna.Pointer;
+
+public class ErrorHandler implements Libvirt.virErrorFunc
+{
+ public static ErrorHandler INSTANCE = new ErrorHandler() ;
+
+ @Override
+ public void handleError(Pointer userData, virError vError) throws LibvirtException
+ {
+ System.out.println("Hello") ;
+ if (vError != null) {
+ Error error = new Error(vError) ;
+ throw new LibvirtException(error) ;
+ }
+
+ }
+}
That look rather simple
diff --git a/src/org/libvirt/Network.java
b/src/org/libvirt/Network.java
index 6fda985..a194ca7 100644
--- a/src/org/libvirt/Network.java
+++ b/src/org/libvirt/Network.java
@@ -1,15 +1,25 @@
package org.libvirt;
+import org.libvirt.jna.Libvirt;
+
+import com.sun.jna.Pointer;
+
public class Network {
/**
* The native virNetworkPtr
*/
- private long VNP;
+ protected Pointer VNP;
For my own education, that means that subclasses implementations may
still use iit instead of keeping it fully private, right ?
@@ -18,9 +28,10 @@ public class Network {
* @param virConnect
* @param VNP
*/
- Network(Connect virConnect, long VNP){
+ Network(Connect virConnect, Pointer VNP){
this.virConnect = virConnect;
this.VNP = VNP;
+ this.libvirt = virConnect.libvirt ;
}
I think we are slightly breaking the API here but in a way that should
be compatible with existing code, since VNP was returned from the
library, right ?
[...]
diff --git a/src/org/libvirt/NodeInfo.java
b/src/org/libvirt/NodeInfo.java
index b7e2840..16855ca 100644
--- a/src/org/libvirt/NodeInfo.java
+++ b/src/org/libvirt/NodeInfo.java
@@ -1,5 +1,7 @@
package org.libvirt;
+import org.libvirt.jna.virNodeInfo;
+
public class NodeInfo {
/**
* string indicating the CPU model
@@ -34,6 +36,20 @@ public class NodeInfo {
*/
public int threads;
+
+ public NodeInfo() {
+ }
+
+ public NodeInfo(virNodeInfo vInfo) {
+// this.model = new String(vInfo.model) ;
err, why ?
+ this.memory = vInfo.memory.longValue() ;
+ this.cpus = vInfo.cpus ;
+ this.mhz = vInfo.mhz ;
+ this.nodes = vInfo.nodes ;
+ this.sockets = vInfo.sockets ;
+ this.cores = vInfo.cores ;
+ this.threads = vInfo.threads ;
+ }
/**
* @return the total number of CPUs supported but not neccessarily active in the host.
*/
diff --git a/src/org/libvirt/jna/Libvirt.java b/src/org/libvirt/jna/Libvirt.java
new file mode 100644
index 0000000..1874d3e
--- /dev/null
+++ b/src/org/libvirt/jna/Libvirt.java
@@ -0,0 +1,66 @@
+package org.libvirt.jna;
+
+
+import com.sun.jna.Callback;
+import com.sun.jna.Library ;
+import com.sun.jna.Native;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure.ByReference;
+import com.sun.jna.ptr.LongByReference;
+import com.sun.jna.ptr.PointerByReference;
+
+public interface Libvirt extends Library
+{
+ Libvirt INSTANCE = (Libvirt) Native.loadLibrary("libvirt", Libvirt.class)
;
+
+ //Callbacks
+ interface virErrorFunc extends Callback {
+ void handleError(Pointer userData, virError error) throws Exception ;
+ }
+
+ // Global functions
+ public virError virGetLastError() ;
+ public int virGetVersion(LongByReference libVer, String type, LongByReference
typeVer) ;
+ public int virInitialize() ;
+ public void virSetErrorFunc(long userData, virErrorFunc handler) ;
+
+ //Connection Functions
+ public int virConnCopyLastError(Pointer virConnectPtr) ;
+ public int virConnectClose(Pointer virConnectPtr) ;
+ public String virConnectGetCapabilities(Pointer virConnectPtr) ;
+ public String virConnectGetHostname(Pointer virConnectPtr) ;
+ public virError virConnGetLastError(Pointer virConnectPtr) ;
+ public int virConnectGetMaxVcpus(Pointer virConnectPtr, String type) ;
+ public String virConnectGetType(Pointer virConnectPtr) ;
+ public String virConnectGetURI(Pointer virConnectPtr) ;
+ public int virConnectGetVersion(Pointer virConnectPtr, LongByReference hvVer) ;
+ public int virConnectListDomains(Pointer virConnectPtr, int[] ids, int maxnames) ;
+ public int virConnectListNetworks(Pointer virConnectPtr, String[] name, int
maxnames) ;
+ public int virConnectListDefinedDomains(Pointer virConnectPtr, String[] name, int
maxnames) ;
+ public int virConnectListDefinedNetworks(Pointer virConnectPtr, String[] name, int
maxnames) ;
+ public int virConnectNumOfDomains(Pointer virConnectPtr) ;
+ public int virConnectNumOfDefinedDomains(Pointer virConnectPtr) ;
+ public int virConnectNumOfDefinedNetworks(Pointer virConnectPtr) ;
+ public int virConnectNumOfNetworks(Pointer virConnectPtr) ;
+ public Pointer virConnectOpen(String name) ;
+ public Pointer virConnectOpenReadOnly(String name) ;
+ public void virConnSetErrorFunc(Pointer virConnectPtr, long userData, virErrorFunc
handler) ;
+
+ // Node functions
+ public int virNodeGetInfo(Pointer virConnectPtr, virNodeInfo virNodeInfo) ;
+
+ // Network functions
+ public Pointer virNetworkCreateXML(Pointer virConnectPtr, String xmlDesc) ;
+ public Pointer virNetworkDefineXML(Pointer virConnectPtr, String xmlDesc) ;
+ public String virNetworkGetName(Pointer virNetorkPtr) ;
+ public Pointer virNetworkLookupByName(Pointer virConnectPtr, String name) ;
+ public Pointer virNetworkLookupByUUIDString(Pointer virConnectPtr, String uuidstr) ;
+ public Pointer virNetworkLookupByUUID(Pointer virConnectPtr, String uuidstr) ;
+
+ // Domain functions
+ public Pointer virDomainCreateLinux(Pointer virConnectPtr, String xmlDesc, int
flags) ;
+ public Pointer virDomainCreateXML(Pointer virConnectPtr, String xmlDesc, int flags)
;
+ public Pointer virDomainDefineXML(Pointer virConnectPtr, String xmlDesc) ;
+ public Pointer virDomainLookupByUUIDString(Pointer virConnectPtr, String uuidstr) ;
+
+}
That's refreshingly simple !!!
diff --git a/src/org/libvirt/jna/virError.java
b/src/org/libvirt/jna/virError.java
new file mode 100644
index 0000000..db462fa
--- /dev/null
+++ b/src/org/libvirt/jna/virError.java
@@ -0,0 +1,19 @@
+package org.libvirt.jna;
+
+import com.sun.jna.Structure ;
+
+public class virError extends Structure
+{
+ public int code ;
+ public int domain ;
+ public String message ;
+ public int level ;
+ public long conn ;
+ public long dom ;
+ public String str1 ;
+ public String str2 ;
+ public String str3 ;
+ public int int1 ;
+ public int int2 ;
+ public long net ;
+}
same here
diff --git a/src/org/libvirt/jna/virNodeInfo.java
b/src/org/libvirt/jna/virNodeInfo.java
new file mode 100644
index 0000000..5a6449e
--- /dev/null
+++ b/src/org/libvirt/jna/virNodeInfo.java
@@ -0,0 +1,19 @@
+package org.libvirt.jna;
+
+import com.sun.jna.NativeLong;
+import com.sun.jna.Structure;
+
+public class virNodeInfo extends Structure
+{
+ public class ByValue extends virNodeInfo implements Structure.ByValue {};
+ public class ByReference extends virNodeInfo implements Structure.ByReference {};
+
+ public byte model[] = new byte[32];
+ public NativeLong memory ;
+ public int cpus ;
+ public int mhz ;
+ public int nodes ;
+ public int sockets ;
+ public int cores ;
+ public int threads ;
+}
and here
\ No newline at end of file
Should be fixed, only one though !
It would be great to trick your editor into showing extra spaces at the
end of lines.
diff --git a/src/test.java b/src/test.java
index 73f4eb7..2ca6a92 100644
--- a/src/test.java
+++ b/src/test.java
@@ -18,20 +18,21 @@ public class test {
Integer.decode("0xf0"), Integer.decode("0x3c"),
Integer.decode("0x87"), Integer.decode("0xd2"),
Integer.decode("0x1e"), Integer.decode("0x69")} ;
I just hope that at the end of the patch series the test file is back
to its original state. Maybe not worth fixing in all intermediary
steps ...
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/