]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/vbox/VBoxManager.java
Restructure SLC development environment
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / lib / vbox / VBoxManager.java
index d25576e335b07c8b46754111068f92d7da9f9dc2..ecc1e649b7bc77dd946bdfaf99465a87b372001d 100644 (file)
@@ -1,20 +1,54 @@
 package org.argeo.slc.lib.vbox;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.SlcException;
 import org.argeo.slc.core.execution.tasks.SystemCall;
+import org.springframework.core.io.Resource;
 
 public class VBoxManager {
        private final static Log log = LogFactory.getLog(VBoxManager.class);
 
-       private String machineName;
+       private VBoxMachine vm;
        private String executable = "VBoxManage";
 
        private List<VBoxNat> nats = new ArrayList<VBoxNat>();
 
+       public void importOvf(Resource ovfDefinition) {
+               try {
+                       List<Object> cmd = new ArrayList<Object>();
+                       cmd.add(executable);
+                       cmd.add("import");
+                       cmd.add(ovfDefinition.getFile().getCanonicalPath());
+                       cmd.add("--vsys 0 --vmname <name>");
+                       cmd.add("0");
+                       cmd.add("--vmname");
+                       cmd.add(vm.getName());
+                       new SystemCall(cmd).run();
+               } catch (IOException e) {
+                       throw new SlcException("Cannot import OVF appliance "
+                                       + ovfDefinition, e);
+               }
+       }
+
+       public void startVm() {
+               startVm("gui");
+       }
+
+       public void startVm(String type) {
+               List<Object> cmd = new ArrayList<Object>();
+               cmd.add(executable);
+               cmd.add("startvm");
+               cmd.add(vm.getName());
+               cmd.add("--type");
+               cmd.add(type);
+               new SystemCall(cmd).run();
+       }
+
        public void applyNats() {
                StringBuffer script = new StringBuffer("");
                for (VBoxNat vBoxNat : nats) {
@@ -43,7 +77,7 @@ public class VBoxManager {
                List<Object> cmd = new ArrayList<Object>();
                cmd.add(executable);
                cmd.add("setextradata");
-               cmd.add(machineName);
+               cmd.add(vm.getName());
                cmd.add("VBoxInternal/Devices/" + device + "/0/LUN#0/Config/" + id
                                + "/" + cfgKey);
                cmd.add(value);
@@ -55,14 +89,6 @@ public class VBoxManager {
                return cmd;
        }
 
-       public String getMachineName() {
-               return machineName;
-       }
-
-       public void setMachineName(String machineName) {
-               this.machineName = machineName;
-       }
-
        public String getExecutable() {
                return executable;
        }
@@ -79,4 +105,8 @@ public class VBoxManager {
                nats = boxNats;
        }
 
+       public void setVm(VBoxMachine vm) {
+               this.vm = vm;
+       }
+
 }