/** * Copyright (C) 2010 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; * you can redistribute it and/or modify it under the terms of the GNU * General Public License (GPL) as published by the Free Software * Foundation, in version 2 as it comes in the "COPYING" file of the * VirtualBox OSE distribution. VirtualBox OSE is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind. * * * DO NOT EDIT! This is a generated file. * Generated from: src/VBox/Main/idl/VirtualBox.xidl (VirtualBox's interface definitions in XML) * Generator: src/VBox/Main/glue/glue-java.xsl */ , ; private final int value; value = v; } public int value() { return value; } if (c.value == (int)v) { return c; } } throw new IllegalArgumentException(Long.toString(v)); } } IUnknown void void , void , import java.util.List; import java.util.List; import java.util.List; { public T value; public Holder() { } public Holder(T value) { this.value = value; } } ]]> { public T value; public Holder() { } public Holder(T value) { this.value = value; } } ]]> wrap(byte[] vals) { if (vals==null) return null; List ret = new ArrayList(vals.length); for (short v : vals) { ret.add(v); } return ret; } public static List wrap(int[] vals) { if (vals==null) return null; List ret = new ArrayList(vals.length); for (int v : vals) { ret.add(v); } return ret; } public static List wrap(long[] vals) { if (vals==null) return null; List ret = new ArrayList(vals.length); for (long v : vals) { ret.add(v); } return ret; } public static List wrap(String[] vals) { if (vals==null) return null; List ret = new ArrayList(vals.length); for (String v : vals) { ret.add(v); } return ret; } public static List wrap(Class wrapperClass, T[] thisPtrs) { if (thisPtrs==null) return null; List ret = new ArrayList(thisPtrs.length); for (T thisPtr : thisPtrs) { ret.add(thisPtr); } return ret; } public static List wrapEnum(Class wrapperClass, long values[]) { try { if (values==null) return null; Constructor c = wrapperClass.getConstructor(int.class); List ret = new ArrayList(values.length); for (long v : values) { ret.add(c.newInstance(v)); } return ret; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } public static short[] unwrap(List vals) { if (vals==null) return null; short[] ret = new short[vals.size()]; int i = 0; for (short l : vals) { ret[i++] = l; } return ret; } public static int[] unwrap(List vals) { if (vals == null) return null; int[] ret = new int[vals.size()]; int i = 0; for (int l : vals) { ret[i++] = l; } return ret; } public static long[] unwrap(List vals) { if (vals == null) return null; long[] ret = new long[vals.size()]; int i = 0; for (long l : vals) { ret[i++] = l; } return ret; } public static boolean[] unwrap(List vals) { if (vals==null) return null; boolean[] ret = new boolean[vals.size()]; int i = 0; for (boolean l : vals) { ret[i++] = l; } return ret; } public static String[] unwrap(List vals) { if (vals==null) return null; String[] ret = new String[vals.size()]; int i = 0; for (String l : vals) { ret[i++] = l; } return ret; } public static > long[] unwrapEnum(Class enumClass, List values) { if (values == null) return null; long result[] = new long[values.size()]; try { java.lang.reflect.Method valueM = enumClass.getMethod("value"); int i = 0; for (T v : values) { result[i++] = (Integer)valueM.invoke(v); } return result; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch(SecurityException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (IllegalArgumentException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } public static List wrap2(Class wrapperClass1, Class wrapperClass2, T2[] thisPtrs) { try { if (thisPtrs==null) return null; Constructor c = wrapperClass1.getConstructor(wrapperClass2); List ret = new ArrayList(thisPtrs.length); for (T2 thisPtr : thisPtrs) { ret.add(c.newInstance(thisPtr)); } return ret; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } @SuppressWarnings( "unchecked") public static T[] unwrap(Class wrapperClass, List thisPtrs) { if (thisPtrs==null) return null; if (thisPtrs.size() == 0) return null; return (T[])thisPtrs.toArray((T[])Array.newInstance(wrapperClass, thisPtrs.size())); } @SuppressWarnings( "unchecked" ) public static T queryInterface(Object obj, String uuid, Class iface) { return (T)queryInterface(obj, uuid); } public static Object queryInterface(Object obj, String uuid) { try { /* Kind of ugly, but does the job of casting */ org.mozilla.xpcom.Mozilla moz = org.mozilla.xpcom.Mozilla.getInstance(); long xpobj = moz.wrapJavaObject(obj, uuid); return moz.wrapXPCOMObject(xpobj, uuid); } catch (Exception e) { return null; } } @SuppressWarnings("unchecked") public static T2[] unwrap2(Class wrapperClass1, Class wrapperClass2, List thisPtrs) { if (thisPtrs==null) return null; T2 ret[] = (T2[])Array.newInstance(wrapperClass2, thisPtrs.size()); int i = 0; for (T1 obj : thisPtrs) { ret[i++] = (T2)obj.getWrapped(); } return ret; } } ]]> = end) return false; } return true; } public boolean startVm(String name, String type, int timeout) { IMachine m = vbox.findMachine(name); if (m == null) return false; ISession session = getSessionObject(); if (type == null) type = "gui"; IProgress p = m.launchVMProcess(session, type, ""); progressBar(p, timeout); session.unlockMachine(); return true; } public void waitForEvents(long tmo) { mozilla.waitForEvents(tmo); } } ]]> wrap(short[] vals) { if (vals==null) return null; if (vals.length == 0) return Collections.emptyList(); List ret = new ArrayList(vals.length); for (short v : vals) { ret.add(v); } return ret; } public static List wrap(int[] vals) { if (vals == null) return null; if (vals.length == 0) return Collections.emptyList(); List ret = new ArrayList(vals.length); for (int v : vals) { ret.add(v); } return ret; } public static List wrap(long[] vals) { if (vals==null) return null; if (vals.length == 0) return Collections.emptyList(); List ret = new ArrayList(vals.length); for (long v : vals) { ret.add(v); } return ret; } public static List wrap(String[] vals) { if (vals==null) return null; if (vals.length == 0) return Collections.emptyList(); List ret = new ArrayList(vals.length); for (String v : vals) { ret.add(v); } return ret; } public static T wrapDispatch(Class wrapperClass, Dispatch d) { try { if (d == null || d.m_pDispatch == 0) return null; Constructor c = wrapperClass.getConstructor(Dispatch.class); return (T)c.newInstance(d); } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } @SuppressWarnings("unchecked") public static Object wrapVariant(Class wrapperClass, Variant v) { if (v == null) return null; short vt = v.getvt(); switch (vt) { case Variant.VariantNull: return null; case Variant.VariantBoolean: return v.getBoolean(); case Variant.VariantByte: return v.getByte(); case Variant.VariantShort: return v.getShort(); case Variant.VariantInt: return v.getInt(); case Variant.VariantLongInt: return v.getLong(); case Variant.VariantString: return v.getString(); case Variant.VariantDispatch: return wrapDispatch(wrapperClass, v.getDispatch()); default: throw new RuntimeException("unhandled variant type "+vt); } } public static byte[] wrapBytes(SafeArray sa) { if (sa==null) return null; int saLen = sa.getUBound() - sa.getLBound() + 1; byte[] ret = new byte[saLen]; int j = 0; for (int i = sa.getLBound(); i <= sa.getUBound(); i++) { Variant v = sa.getVariant(i); // come upo with more effective approach!!! ret[j++] = v.getByte(); } return ret; } @SuppressWarnings("unchecked") public static List wrap(Class wrapperClass, SafeArray sa) { if (sa==null) return null; int saLen = sa.getUBound() - sa.getLBound() + 1; if (saLen == 0) return Collections.emptyList(); List ret = new ArrayList(saLen); for (int i = sa.getLBound(); i <= sa.getUBound(); i++) { Variant v = sa.getVariant(i); ret.add((T)wrapVariant(wrapperClass, v)); } return ret; } public static List wrapEnum(Class wrapperClass, SafeArray sa) { try { if (sa==null) return null; int saLen = sa.getUBound() - sa.getLBound() + 1; if (saLen == 0) return Collections.emptyList(); List ret = new ArrayList(saLen); Constructor c = wrapperClass.getConstructor(int.class); for (int i = sa.getLBound(); i <= sa.getUBound(); i++) { Variant v = sa.getVariant(i); ret.add(c.newInstance(v.getInt())); } return ret; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } public static SafeArray unwrapInt(List vals) { if (vals==null) return null; SafeArray ret = new SafeArray(Variant.VariantInt, vals.size()); int i = 0; for (int l : vals) { ret.setInt(i++, l); } return ret; } public static SafeArray unwrapLong(List vals) { if (vals==null) return null; SafeArray ret = new SafeArray(Variant.VariantLongInt, vals.size()); int i = 0; for (long l : vals) { ret.setLong(i++, l); } return ret; } public static SafeArray unwrapBool(List vals) { if (vals==null) return null; SafeArray result = new SafeArray(Variant.VariantBoolean, vals.size()); int i = 0; for (boolean l : vals) { result.setBoolean(i++, l); } return result; } public static SafeArray unwrapBytes(byte[] vals) { if (vals==null) return null; SafeArray result = new SafeArray(Variant.VariantByte, vals.length); int i = 0; for (byte l : vals) { result.setByte(i++, l); } return result; } public static > SafeArray unwrapEnum(Class enumClass, List values) { if (values == null) return null; SafeArray result = new SafeArray(Variant.VariantInt, values.size()); try { java.lang.reflect.Method valueM = enumClass.getMethod("value"); int i = 0; for (T v : values) { result.setInt(i++, (Integer)valueM.invoke(v)); } return result; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch(SecurityException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (IllegalArgumentException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } public static SafeArray unwrapString(List vals) { if (vals==null) return null; SafeArray result = new SafeArray(Variant.VariantString, vals.size()); int i = 0; for (String l : vals) { result.setString(i++, l); } return result; } public static List wrap2(Class wrapperClass1, Class wrapperClass2, T2[] thisPtrs) { try { if (thisPtrs==null) return null; if (thisPtrs.length == 0) return Collections.emptyList(); Constructor c = wrapperClass1.getConstructor(wrapperClass2); List ret = new ArrayList(thisPtrs.length); for (T2 thisPtr : thisPtrs) { ret.add(c.newInstance(thisPtr)); } return ret; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } @SuppressWarnings("unchecked") public static T[] unwrap(Class wrapperClass, List thisPtrs) { if (thisPtrs==null) return null; return (T[])thisPtrs.toArray((T[])Array.newInstance(wrapperClass, thisPtrs.size())); } @SuppressWarnings("unchecked") public static T2[] unwrap2(Class wrapperClass1, Class wrapperClass2, List thisPtrs) { if (thisPtrs==null) return null; T2 ret[] = (T2[])Array.newInstance(wrapperClass2, thisPtrs.size()); int i = 0; for (T1 obj : thisPtrs) { ret[i++] = (T2)obj.getWrapped(); } return ret; } /* We have very long invoke lists sometimes */ public static Variant invoke(Dispatch d, String method, Object ... args) { return Dispatch.callN(d, method, args); } } ]]> = end) return false; } return true; } public boolean startVm(String name, String type, int timeout) { IMachine m = vbox.findMachine(name); if (m == null) return false; ISession session = getSessionObject(); if (type == null) type = "gui"; IProgress p = m.launchVMProcess(session, type, ""); progressBar(p, timeout); session.unlockMachine(); return true; } public void waitForEvents(long tmo) { // what to do here? try { Thread.sleep(tmo); } catch (InterruptedException ie) { } } } ]]> List wrap(Class wrapperClass, VboxPortType pt, List thisPtrs) { try { if(thisPtrs==null) return null; Constructor c = wrapperClass.getConstructor(String.class, VboxPortType.class); List ret = new ArrayList(thisPtrs.size()); for (String thisPtr : thisPtrs) { ret.add(c.newInstance(thisPtr,pt)); } return ret; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } public static List wrap2(Class wrapperClass1, Class wrapperClass2, VboxPortType pt, List thisPtrs) { try { if(thisPtrs==null) return null; Constructor c = wrapperClass1.getConstructor(wrapperClass2, VboxPortType.class); List ret = new ArrayList(thisPtrs.size()); for (T2 thisPtr : thisPtrs) { ret.add(c.newInstance(thisPtr,pt)); } return ret; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (InstantiationException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } public static List unwrap(List thisPtrs) { if (thisPtrs==null) return null; List ret = new ArrayList(thisPtrs.size()); for (T obj : thisPtrs) { ret.add(obj.getWrapped()); } return ret; } @SuppressWarnings("unchecked" ) public static , T2 extends Enum > List convertEnums(Class fromClass, Class toClass, List values) { try { if (values==null) return null; java.lang.reflect.Method fromValue = toClass.getMethod("fromValue", String.class); List ret = new ArrayList(values.size()); for (T1 v : values) { // static method is called with null this ret.add((T2)fromValue.invoke(null, v.name())); } return ret; } catch (NoSuchMethodException e) { throw new AssertionError(e); } catch (IllegalAccessException e) { throw new AssertionError(e); } catch (InvocationTargetException e) { throw new AssertionError(e); } } // temporary methods, will bo away soon public static byte[] wrapBytes(List arr) { if (arr == null) return null; int i = 0; byte[] rv = new byte[arr.size()]; for (short s : arr) rv[i++] = (byte)(s & 0xff); return rv; } public static List unwrapBytes(byte[] arr) { if (arr == null) return null; List ret = new ArrayList(arr.length); for (byte b : arr) { ret.add((short)b); } return ret; } } ]]> import java.net.URL; import java.math.BigInteger; import java.util.List; import java.util.Map; import java.util.HashMap; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.Holder; import javax.xml.ws.WebServiceException; class PortPool { private final static String wsdlFile = ; known; private boolean initStarted; private VboxService svc; PortPool(boolean usePreinit) { known = new HashMap(); if (usePreinit) { new Thread(new Runnable() { public void run() { // need to sync on something else but 'this' synchronized (known) { initStarted = true; known.notify(); } preinit(); } }).start(); synchronized (known) { while (!initStarted) { try { known.wait(); } catch (InterruptedException e) { break; } } } } } private synchronized void preinit() { VboxPortType port = getPort(); releasePort(port); } synchronized VboxPortType getPort() { VboxPortType port = null; int ttl = 0; for (VboxPortType cur: known.keySet()) { int value = known.get(cur); if ((value & 0x10000) == 0) { port = cur; ttl = value & 0xffff; break; } } if (port == null) { if (svc == null) { URL wsdl = PortPool.class.getClassLoader().getResource(wsdlFile); if (wsdl == null) throw new LinkageError(wsdlFile+" not found, but it should have been in the jar"); svc = new VboxService(wsdl, new QName("http://www.virtualbox.org/Service", "vboxService")); } port = svc.getVboxServicePort(); // reuse this object 0x10 times ttl = 0x10; } // mark as used known.put(port, new Integer(0x10000 | ttl)); return port; } synchronized void releasePort(VboxPortType port) { Integer val = known.get(port); if (val == null || val == 0) { // know you not return; } int v = val; int ttl = v & 0xffff; // decrement TTL, and throw away port if used too much times if (--ttl <= 0) { known.remove(port); } else { v = ttl; // set new TTL and clear busy bit known.put(port, v); } } } public class VirtualBoxManager { private static PortPool pool = new PortPool(true); protected VboxPortType port; private IVirtualBox vbox; private VirtualBoxManager() { } public static void initPerThread() { } public static void deinitPerThread() { } public void connect(String url, String username, String passwd) { this.port = pool.getPort(); try { ((BindingProvider)port).getRequestContext(). put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url); String handle = port.iWebsessionManagerLogon(username, passwd); this.vbox = new IVirtualBox(handle, port); } catch (Throwable t) { if (this.port != null) pool.releasePort(this.port); // we have to throw smth derived from RuntimeException throw new VBoxException(t, t.getMessage()); } } public void connect(String url, String username, String passwd, Map requestContext, Map responseContext) { this.port = pool.getPort(); try { ((BindingProvider)port).getRequestContext(); if (requestContext != null) ((BindingProvider)port).getRequestContext().putAll(requestContext); if (responseContext != null) ((BindingProvider)port).getResponseContext().putAll(responseContext); ((BindingProvider)port).getRequestContext(). put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url); String handle = port.iWebsessionManagerLogon(username, passwd); this.vbox = new IVirtualBox(handle, port); } catch (Throwable t) { if (this.port != null) pool.releasePort(port); // we have to throw smth derived from RuntimeException throw new VBoxException(t, t.getMessage()); } } public void disconnect() { try { if (this.vbox != null) port.iWebsessionManagerLogoff(this.vbox.getWrapped()); } catch (InvalidObjectFaultMsg e) { throw new VBoxException(e, e.getMessage()); } catch (RuntimeFaultMsg e) { throw new VBoxException(e, e.getMessage()); } finally { if (this.port != null) { pool.releasePort(this.port); this.port = null; } } } public IVirtualBox getVBox() { return this.vbox; } public ISession getSessionObject() { if (this.vbox == null) throw new RuntimeException("connect first"); try { String handle = port.iWebsessionManagerGetSessionObject(this.vbox.getWrapped()); return new ISession(handle, port); } catch (InvalidObjectFaultMsg e) { throw new VBoxException(e, e.getMessage()); } catch (RuntimeFaultMsg e) { throw new VBoxException(e, e.getMessage()); } } public ISession openMachineSession(IMachine m) throws Exception { ISession s = getSessionObject(); m.lockMachine(s, LockType.Shared); return s; } public void closeMachineSession(ISession s) { if (s != null) s.unlockMachine(); } public static synchronized VirtualBoxManager createInstance(String home) { return new VirtualBoxManager(); } public IEventListener createListener(Object sink) { throw new RuntimeException("no active listeners here"); } public void cleanup() { deinitPerThread(); } public boolean progressBar(IProgress p, int wait) { long end = System.currentTimeMillis() + wait; while (!p.getCompleted()) { p.waitForCompletion(wait); if (System.currentTimeMillis() >= end) return false; } return true; } public boolean startVm(String name, String type, int timeout) { IMachine m = vbox.findMachine(name); if (m == null) return false; ISession session = getSessionObject(); if (type == null) type = "gui"; IProgress p = m.launchVMProcess(session, type, ""); progressBar(p, timeout); session.unlockMachine(); return true; } public void waitForEvents(long tmo) { } } ]]>