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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list