
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@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/