From 7b6a6fbba25dc986f3b6404040755db9500ff45f Mon Sep 17 00:00:00 2001 From: "syeon.hwang" Date: Mon, 26 Mar 2012 19:38:49 +0900 Subject: [PATCH] [Title] Commit during massive refactoring. For release for "SE verification" [Type] [Module] Emulator/ [Priority] [CQ#] [Redmine#] [Problem] closeVM, cloneVM is not refactored yet... [Cause] [Solution] [TestCase] --- .../tizen/emulator/manager/EmulatorManager.java | 15 - src/org/tizen/emulator/manager/ui/MainDialog.java | 15 +- .../tizen/emulator/manager/ui/MenuHandling.java | 107 ++--- .../emulator/manager/ui/ResourceRegistry.java | 4 +- .../manager/ui/detail/DetailTableView.java | 3 +- .../emulator/manager/ui/detail/VMPropertyView.java | 47 ++- .../emulator/manager/ui/vmstree/ContextMenu.java | 14 +- .../tizen/emulator/manager/ui/vmstree/RowItem.java | 4 +- .../tizen/emulator/manager/ui/vmstree/VMsTree.java | 26 +- src/org/tizen/emulator/manager/vms/Creator.java | 213 ++++++++++ .../emulator/manager/{tool => vms}/Launcher.java | 22 +- src/org/tizen/emulator/manager/vms/Modifier.java | 119 ++++++ src/org/tizen/emulator/manager/vms/VMProcess.java | 430 --------------------- .../emulator/manager/vms/VMPropertyValue.java | 163 +++++--- .../emulator/manager/vms/VMsCreatorException.java | 9 + .../tizen/emulator/manager/vms/VMsProperty.java | 15 +- src/org/tizen/emulator/manager/vms/VMsWorker.java | 110 ++++++ .../emulator/manager/vms/VMsWorkerException.java | 9 + 18 files changed, 693 insertions(+), 632 deletions(-) create mode 100644 src/org/tizen/emulator/manager/vms/Creator.java rename src/org/tizen/emulator/manager/{tool => vms}/Launcher.java (92%) create mode 100644 src/org/tizen/emulator/manager/vms/Modifier.java delete mode 100644 src/org/tizen/emulator/manager/vms/VMProcess.java create mode 100644 src/org/tizen/emulator/manager/vms/VMsCreatorException.java create mode 100644 src/org/tizen/emulator/manager/vms/VMsWorker.java create mode 100644 src/org/tizen/emulator/manager/vms/VMsWorkerException.java diff --git a/src/org/tizen/emulator/manager/EmulatorManager.java b/src/org/tizen/emulator/manager/EmulatorManager.java index ced7884..7c666e8 100644 --- a/src/org/tizen/emulator/manager/EmulatorManager.java +++ b/src/org/tizen/emulator/manager/EmulatorManager.java @@ -7,10 +7,8 @@ import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.tizen.emulator.manager.tool.FileIO; -import org.tizen.emulator.manager.tool.Launcher; import org.tizen.emulator.manager.ui.MainDialog; import org.tizen.emulator.manager.vms.EmulatorVMs; -import org.tizen.emulator.manager.vms.VMsProperty; public class EmulatorManager { private static final String ICON_FILE_NAME = "res/em.ico"; @@ -23,7 +21,6 @@ public class EmulatorManager { Image icon; private MainDialog mainDialog; - private Launcher launcher; public EmulatorManager() { this.display = new Display(); @@ -45,10 +42,6 @@ public class EmulatorManager { return instance; } - public Display getDisplay() { - return display; - } - public Shell getShell() { return shell; } @@ -57,10 +50,6 @@ public class EmulatorManager { return mainDialog; } - public Launcher getLauncher() { - return launcher; - } - private void preare() { mainDialog = new MainDialog(); @@ -78,10 +67,6 @@ public class EmulatorManager { display.dispose(); } - public void launchVM(VMsProperty property) { - Launcher.launch(property); - } - private void dispose() { mainDialog.dispose(); diff --git a/src/org/tizen/emulator/manager/ui/MainDialog.java b/src/org/tizen/emulator/manager/ui/MainDialog.java index 5dc5c47..c97ef7a 100644 --- a/src/org/tizen/emulator/manager/ui/MainDialog.java +++ b/src/org/tizen/emulator/manager/ui/MainDialog.java @@ -10,14 +10,15 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.tizen.emulator.manager.EmulatorManager; -import org.tizen.emulator.manager.tool.Launcher; import org.tizen.emulator.manager.ui.ResourceRegistry.ImageName; import org.tizen.emulator.manager.ui.detail.DetailTableView; import org.tizen.emulator.manager.ui.vmstree.VMsTree; import org.tizen.emulator.manager.vms.EmulatorVMs; import org.tizen.emulator.manager.vms.VMsProperty; +import org.tizen.emulator.manager.vms.VMsWorkerException; public class MainDialog { private static String Launch = "Launch"; @@ -144,10 +145,16 @@ public class MainDialog { leftButton.setText(Launch); leftButton.addSelectionListener(new SelectionListener() { @Override - public void widgetSelected(SelectionEvent e) { + public void widgetSelected(SelectionEvent event) { String type = leftButton.getText(); if (type.equals(Launch)) { - Launcher.launch(detailView.getCurrentPoperty()); + try { + detailView.getCurrentPoperty().getWorker().launchVM(); + } catch (VMsWorkerException e) { + MessageBox alert = new MessageBox(EmulatorManager.getInstance().getShell(), SWT.OK); + alert.setMessage(e.getMessage()); + alert.open(); + } } else if (type.equals(Confirm)) { VMsProperty pro = detailView.confirm(); if (pro != null) { // successs @@ -157,7 +164,7 @@ public class MainDialog { } } @Override - public void widgetDefaultSelected(SelectionEvent e) { + public void widgetDefaultSelected(SelectionEvent event) { } }); diff --git a/src/org/tizen/emulator/manager/ui/MenuHandling.java b/src/org/tizen/emulator/manager/ui/MenuHandling.java index 45c1c75..50e5f30 100644 --- a/src/org/tizen/emulator/manager/ui/MenuHandling.java +++ b/src/org/tizen/emulator/manager/ui/MenuHandling.java @@ -20,11 +20,12 @@ import org.tizen.emulator.manager.EmulatorManager; import org.tizen.emulator.manager.ui.ResourceRegistry.ImageName; import org.tizen.emulator.manager.ui.detail.VMPropertyView; import org.tizen.emulator.manager.ui.vmstree.VMsTree; +import org.tizen.emulator.manager.vms.Creator; import org.tizen.emulator.manager.vms.EmulatorVMs; import org.tizen.emulator.manager.vms.VMCreateHelper; -import org.tizen.emulator.manager.vms.VMProcess; import org.tizen.emulator.manager.vms.VMPropertyValue; import org.tizen.emulator.manager.vms.VMsProperty; +import org.tizen.emulator.manager.vms.VMsWorkerException; public class MenuHandling { private Shell shell; @@ -36,82 +37,53 @@ public class MenuHandling { } public void resetVirtualMachine() { - if (listTable.getSelectionContentCount() == 1) { - if (!checkRunnigVM(listTable.getSelectionItem())) { - return; - } - } - MessageBox msg = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK | SWT.CANCEL); msg.setText("Warning"); msg.setMessage("This emulator will be formatting.\nAre you sure to conitnue?"); int response = msg.open(); - boolean success = false; - if (response == SWT.OK) { - if (listTable.getSelectionContentCount() == 1) { - if (!resetProcess(listTable.getSelectionItem())) { - return; - } - } else { - ArrayList list = listTable.getSelectionItems(); - for (VMsProperty property : list) { - if (!checkRunnigVM(property)) { - continue; - } - if (!resetProcess(property)) { - continue; - } - success = true; - } + + msg = new MessageBox(shell, SWT.ICON_INFORMATION); + msg.setText("INFO"); + if (response != SWT.OK) + return; + + VMsProperty[] properties = listTable.getSelectionItems(); + for (VMsProperty property : properties) { + if(property.getWorker().isRunningNow()) { + msg.setMessage("[" + property.getName() + "] is running now...\n" + + "Reset is canceled !"); + msg.open(); + + return; } } - msg = new MessageBox(shell, SWT.ICON_INFORMATION); - msg.setText("INFO"); - if (!success) { - msg.setMessage("Reset failed!"); - } else { - msg.setMessage("Reset completed!"); + for (VMsProperty property : properties) { + try { + property.getWorker().resetVM(); + } catch (VMsWorkerException e) { + msg.setMessage(" Reset for [" + property.getName() + "] failed...\n" + + e.getMessage()); + msg.open(); + + break; + } } - msg.open(); } private boolean checkRunnigVM(VMsProperty property) { - VMProcess process = new VMProcess(); MessageBox msg = null; - if (!process.checkIfRunning(property)) { + + if(property.getWorker().isRunningNow()) { msg = new MessageBox(shell, SWT.ICON_INFORMATION); msg.setText("INFO"); msg.setMessage("Emulator is running now\nEmulator Name : " + property.getName()); msg.open(); - return false; + + return false; } - return true; - } - - private boolean resetProcess(VMsProperty property) { - VMProcess process = new VMProcess(); - MessageBox msg = null; - String basePath = property.getConfiguration().getBaseInformation().getDiskImage().getBaseDiskImage().getValue(); - String targetPath = property.getConfiguration().getBaseInformation().getDiskImage().getCurrentDiskImage().getValue(); - if (basePath == null || basePath.isEmpty() || targetPath == null || targetPath.isEmpty()) { - msg = new MessageBox(shell, SWT.ICON_INFORMATION); - msg.setText("INFO"); - msg.setMessage("Fail reset Emulator\nEmulator Name : " + property.getName()); - msg.open(); - return false; - } - - if(!process.createBaseImage(basePath, targetPath)) { - msg = new MessageBox(shell, SWT.ICON_INFORMATION); - msg.setText("INFO"); - msg.setMessage("Fail reset Emulator\nEmulator Name : " + property.getName() - +"\n" + process.getErrorMessage()); - msg.open(); - return false; - } return true; } @@ -157,7 +129,7 @@ public class MenuHandling { return false; } } else { - ArrayList list = listTable.getSelectionItems(); + ArrayList list = listTable.getSelectionItemsList(); for (VMsProperty property : list) { if (!checkRunnigVM(property)) { continue; @@ -171,9 +143,11 @@ public class MenuHandling { msg.setText("INFO"); msg.setMessage("Delete completed!"); msg.open(); + + return true; } - return true; + return false; } private VMsProperty property = null; @@ -249,19 +223,18 @@ public class MenuHandling { } @Override public void widgetSelected(SelectionEvent arg0) { - VMPropertyValue vmValue = new VMPropertyValue(); - vmValue.settingValue(property); + VMPropertyValue vmValue = property.getPropertyValue(); vmValue.imageName = vmName; - VMProcess process = new VMProcess(); - VMsProperty p = process.create(vmValue); MessageBox msg = new MessageBox(shell, SWT.ICON_INFORMATION); msg.setText("INFO"); - if (p != null) { + try { + Creator.create(vmValue); msg.setMessage("Success cloning Emulator!"); - } else { - msg.setMessage(process.getErrorMessage()); + } catch (VMsWorkerException e) { + msg.setMessage(e.getMessage()); } + msg.open(); dialog.close(); diff --git a/src/org/tizen/emulator/manager/ui/ResourceRegistry.java b/src/org/tizen/emulator/manager/ui/ResourceRegistry.java index 7e9a323..d0f074a 100644 --- a/src/org/tizen/emulator/manager/ui/ResourceRegistry.java +++ b/src/org/tizen/emulator/manager/ui/ResourceRegistry.java @@ -6,7 +6,7 @@ import java.util.Map; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; -import org.tizen.emulator.manager.EmulatorManager; +import org.eclipse.swt.widgets.Display; public class ResourceRegistry { public enum ImageName { @@ -55,7 +55,7 @@ public class ResourceRegistry { for(ImageName imageName : ImageName.values()) { is = loader.getResourceAsStream("res/" + imageName.toString() + ".png"); if(is != null) - instance.imagesMap.put(imageName, new Image(EmulatorManager.getInstance().getDisplay(), is)); + instance.imagesMap.put(imageName, new Image(Display.getCurrent(), is)); } } } diff --git a/src/org/tizen/emulator/manager/ui/detail/DetailTableView.java b/src/org/tizen/emulator/manager/ui/detail/DetailTableView.java index 7a0dffc..445090d 100644 --- a/src/org/tizen/emulator/manager/ui/detail/DetailTableView.java +++ b/src/org/tizen/emulator/manager/ui/detail/DetailTableView.java @@ -14,6 +14,7 @@ import org.tizen.emulator.manager.vms.VMsProperty; public class DetailTableView { static final int[] DEFAULT_WEIGHT = new int[] { 60, 40 }; + static final int[] STATUS_CLOSE_WEIGHT = new int[] { 100, 0 }; private static String Modify = "Modify"; private static String Create = "Create"; @@ -106,7 +107,7 @@ public class DetailTableView { if(isDetailOpened) { weight = mainDialog.getSashFormWeight(); - mainDialog.setDetailViewWeights(new int[] { 100, 0 }); + mainDialog.setDetailViewWeights(STATUS_CLOSE_WEIGHT); isDetailOpened = false; } } diff --git a/src/org/tizen/emulator/manager/ui/detail/VMPropertyView.java b/src/org/tizen/emulator/manager/ui/detail/VMPropertyView.java index 5654f9e..f1547c7 100644 --- a/src/org/tizen/emulator/manager/ui/detail/VMPropertyView.java +++ b/src/org/tizen/emulator/manager/ui/detail/VMPropertyView.java @@ -23,10 +23,11 @@ import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.tizen.emulator.manager.ui.ResourceRegistry; import org.tizen.emulator.manager.ui.ResourceRegistry.ImageName; +import org.tizen.emulator.manager.vms.Creator; import org.tizen.emulator.manager.vms.VMCreateHelper; -import org.tizen.emulator.manager.vms.VMProcess; import org.tizen.emulator.manager.vms.VMPropertyValue; import org.tizen.emulator.manager.vms.VMsProperty; +import org.tizen.emulator.manager.vms.VMsWorkerException; enum CItem{ ImageName("Name"), ImageNameInfo(""), BaseImage("BaseImage"), @@ -82,7 +83,6 @@ public class VMPropertyView { private static String SEFARATOR = File.separator; private VMCreateHelper helper; private VMViewWidget widget; - private VMProcess process; private VMsProperty property; private Table table; private Image image = null; @@ -93,7 +93,6 @@ public class VMPropertyView { public VMPropertyView(Table table) { this.helper = new VMCreateHelper(); - this.process = new VMProcess(); this.widget = new VMViewWidget(); this.table = table; this.image = ResourceRegistry.getImage(ImageName.FOLDER); @@ -130,8 +129,7 @@ public class VMPropertyView { } this.property = property; - oldValue = new VMPropertyValue(); - oldValue.settingValue(property); + oldValue = property.getPropertyValue(); widget.itemList.get(DItem.ImageName.ordinal()).setText(1, oldValue.imageName); @@ -156,9 +154,7 @@ public class VMPropertyView { this.isCreateMode = true; settingCreateColumn(); - oldValue = new VMPropertyValue(); - oldValue.defaultSetting(isDefaultImage); - oldValue.isDefaultImage = isDefaultImage; + oldValue = VMPropertyValue.getDefault(isDefaultImage); widget.itemList.get(CItem.ImageName.ordinal()).setText(1, oldValue.imageName); @@ -178,7 +174,7 @@ public class VMPropertyView { } public void modifyView(Button confirm) { - newValue = new VMPropertyValue(oldValue); + newValue = oldValue.clone(); widget.confirmButton = confirm; createNameArea(table); @@ -192,7 +188,7 @@ public class VMPropertyView { } public void createView(Button confirm) { - newValue = new VMPropertyValue(oldValue); + newValue = oldValue.clone(); widget.confirmButton = confirm; createNameArea(table); @@ -381,9 +377,9 @@ public class VMPropertyView { if (widget.baseImageFD == null) { // TODO : x86 is hard cording (create) widget.baseImageFD = new FileDialog(table.getShell(), SWT.OPEN); - widget.baseImageFD.setText(String.format("Select existing Base Image(%s)", oldValue.arcType)); - String[] filter = {String.format("*.%s", oldValue.arcType)}; - String[] filterName = {String.format("Disk Image Files(*.%s)", oldValue.arcType)}; + widget.baseImageFD.setText(String.format("Select existing Base Image(%s)", oldValue.archType)); + String[] filter = {String.format("*.%s", oldValue.archType)}; + String[] filterName = {String.format("Disk Image Files(*.%s)", oldValue.archType)}; widget.baseImageFD.setFilterExtensions(filter); widget.baseImageFD.setFilterNames(filterName); } @@ -698,24 +694,25 @@ public class VMPropertyView { public VMsProperty confirm() { VMsProperty p = null; - - if (isCreateMode) { - p = process.create(newValue); - } else { - p = process.modify(property, oldValue, newValue); - } MessageBox msg = new MessageBox(table.getShell(), SWT.ICON_INFORMATION); - msg.setText("INFO"); - if (p != null) { + + try { if (isCreateMode) { - msg.setMessage("Success creating emulator!"); - } else { + p = Creator.create(newValue); + msg.setMessage("Success creating emulator!"); + } + else { + property.getWorker().modifyVM(oldValue, newValue); + p = property; msg.setMessage("Success modifying emulator!"); } - } else { - msg.setMessage(process.getErrorMessage()); + } catch (VMsWorkerException e) { + msg.setText("INFO"); + msg.setMessage(e.getMessage()); } + msg.open(); + return p; } } diff --git a/src/org/tizen/emulator/manager/ui/vmstree/ContextMenu.java b/src/org/tizen/emulator/manager/ui/vmstree/ContextMenu.java index 6e2ae3f..b1445ad 100644 --- a/src/org/tizen/emulator/manager/ui/vmstree/ContextMenu.java +++ b/src/org/tizen/emulator/manager/ui/vmstree/ContextMenu.java @@ -7,12 +7,14 @@ import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.tizen.emulator.manager.EmulatorManager; import org.tizen.emulator.manager.ui.ResourceRegistry; import org.tizen.emulator.manager.ui.ResourceRegistry.ImageName; import org.tizen.emulator.manager.vms.VMsProperty; +import org.tizen.emulator.manager.vms.VMsWorkerException; public class ContextMenu { Menu treeMenu; @@ -29,15 +31,21 @@ public class ContextMenu { launchItem.setImage(ResourceRegistry.getImage(ImageName.LAUNCH)); launchItem.addSelectionListener(new SelectionListener() { @Override - public void widgetSelected(SelectionEvent e) { + public void widgetSelected(SelectionEvent event) { if(vmsTree.getSelectionCount() > 1) return; VMsProperty property = ((PropertyContent)vmsTree.getSelection()[0].getData()).property; - EmulatorManager.getInstance().launchVM(property); + try { + property.getWorker().launchVM(); + } catch (VMsWorkerException e) { + MessageBox alert = new MessageBox(EmulatorManager.getInstance().getShell(), SWT.OK); + alert.setMessage(e.getMessage()); + alert.open(); + } } @Override - public void widgetDefaultSelected(SelectionEvent e) { + public void widgetDefaultSelected(SelectionEvent event) { } }); final MenuItem modifyItem = new MenuItem(treeMenu, SWT.NONE); diff --git a/src/org/tizen/emulator/manager/ui/vmstree/RowItem.java b/src/org/tizen/emulator/manager/ui/vmstree/RowItem.java index aa82a51..2125eee 100644 --- a/src/org/tizen/emulator/manager/ui/vmstree/RowItem.java +++ b/src/org/tizen/emulator/manager/ui/vmstree/RowItem.java @@ -3,8 +3,8 @@ package org.tizen.emulator.manager.ui.vmstree; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.TreeItem; -import org.tizen.emulator.manager.EmulatorManager; import org.tizen.emulator.manager.ui.ResourceRegistry; import org.tizen.emulator.manager.vms.VMsProperty; @@ -39,7 +39,7 @@ class CreateMarker implements TreeMarker { if(font == null) { FontData[] fontData = item.getFont().getFontData(); fontData[0].setStyle(SWT.BOLD); - font = new Font(EmulatorManager.getInstance().getDisplay(), fontData); + font = new Font(Display.getCurrent(), fontData); ResourceRegistry.addFont(SWT.BOLD, font); } item.setFont(font); diff --git a/src/org/tizen/emulator/manager/ui/vmstree/VMsTree.java b/src/org/tizen/emulator/manager/ui/vmstree/VMsTree.java index 81875e5..9913bc7 100644 --- a/src/org/tizen/emulator/manager/ui/vmstree/VMsTree.java +++ b/src/org/tizen/emulator/manager/ui/vmstree/VMsTree.java @@ -10,6 +10,7 @@ import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; @@ -19,6 +20,7 @@ import org.tizen.emulator.manager.vms.EmulatorVMs; import org.tizen.emulator.manager.vms.VMsProperty; import org.tizen.emulator.manager.vms.VMsProperty.Architecture; import org.tizen.emulator.manager.vms.VMsProperty.FSImageType; +import org.tizen.emulator.manager.vms.VMsWorkerException; public class VMsTree { MainDialog mainDialog; @@ -56,7 +58,7 @@ public class VMsTree { vmsTree.addSelectionListener(new SelectionListener() { @Override - public void widgetSelected(SelectionEvent e) { + public void widgetSelected(SelectionEvent event) { if(vmsTree.getSelectionCount() == 0) return; @@ -89,7 +91,7 @@ public class VMsTree { } @Override - public void widgetDefaultSelected(SelectionEvent e) { + public void widgetDefaultSelected(SelectionEvent event) { if(vmsTree.getSelectionCount() > 1) { return; } @@ -97,7 +99,13 @@ public class VMsTree { return; VMsProperty property = ((PropertyContent)vmsTree.getSelection()[0].getData()).property; - EmulatorManager.getInstance().launchVM(property); + try { + property.getWorker().launchVM(); + } catch (VMsWorkerException e) { + MessageBox alert = new MessageBox(EmulatorManager.getInstance().getShell(), SWT.OK); + alert.setMessage(e.getMessage()); + alert.open(); + } } }); } @@ -203,7 +211,17 @@ public class VMsTree { return count; } - public ArrayList getSelectionItems() { + public VMsProperty[] getSelectionItems() { + VMsProperty[] properties = new VMsProperty[vmsTree.getSelectionCount()]; + + for(int i = 0; i < properties.length; ++i) { + properties[i] = ((PropertyContent)vmsTree.getSelection()[i].getData()).property; + } + + return properties; + } + + public ArrayList getSelectionItemsList() { ArrayList list = new ArrayList(); VMsProperty property = null; diff --git a/src/org/tizen/emulator/manager/vms/Creator.java b/src/org/tizen/emulator/manager/vms/Creator.java new file mode 100644 index 0000000..6c0aaf9 --- /dev/null +++ b/src/org/tizen/emulator/manager/vms/Creator.java @@ -0,0 +1,213 @@ +package org.tizen.emulator.manager.vms; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.tizen.emulator.manager.tool.FileIO; +import org.tizen.emulator.manager.vms.VMsProperty.Architecture; +import org.tizen.emulator.manager.vms.xml.DisplayType.Resolution; +import org.tizen.emulator.manager.vms.xml.EmulatorConfiguration; +import org.tizen.emulator.manager.vms.xml.ObjectFactory; + +public class Creator { + VMsProperty property; + VMPropertyValue newVM; + + File folder; + + private Creator() {} // for createInitialVMImage; + + private Creator(VMPropertyValue newVM) { + this.property = EmulatorVMs.getInstance().getNewProperty(newVM.imageName, Architecture.x86);; + this.newVM = newVM; + + this.folder = new File(FileIO.getInstance().getVirtualTargetPath(newVM.imageName)); + } + + public VMsProperty createInternal() throws VMsWorkerException { + if (this.property == null) { + throw new VMsWorkerException("Create failed virtual target property"); + } + + folder.mkdirs(); + + try { + createDiskImage(); + createFileShare(); + createDisplay(); + createRam(); + createSDCard(); + } + catch(VMsCreatorException e) { + deleteFolder(folder); + throw e; + } + + File log = new File(FileIO.getInstance().getVirtualTargetLogPath(newVM.imageName)); + log.mkdir(); + + settingProperty(); + + EmulatorVMs.getInstance().storeXML(property); + + return property; + } + + private void deleteFolder(File folder) { + if (folder.exists()) { + for (File dir : folder.listFiles()) { + if (dir.isFile()) { + dir.delete(); + } else { // directory + for (File sub : dir.listFiles()) { + if (sub.isFile()) { + sub.delete(); + } + } + dir.delete(); + } + } + folder.delete(); + } + } + + private void createDiskImage() throws VMsCreatorException { + if (newVM.baseImagePath == null || newVM.baseImagePath.isEmpty()) { + newVM.baseImagePath = FileIO.getInstance().getBaseimgPath(); + } + + if (!new File(newVM.baseImagePath).exists()) { + throw new VMsCreatorException("Base image does not exist."); + } + + String targetPath = folder.getAbsolutePath() + File.separator + "emulimg-" + + newVM.imageName + "." + Architecture.x86.toString(); + createInitialVMImageInternal(newVM.baseImagePath, targetPath); + } + + public void createInitialVMImageInternal(String baseImagePath, String targetImagePath) throws VMsCreatorException { + String exe_path = FileIO.getInstance().getBinPath() + File.separator + "qemu-img"; + + List cmd = new ArrayList(); + cmd.add(exe_path); + cmd.add("create"); + cmd.add("-b"); + cmd.add(baseImagePath); + cmd.add("-f"); + cmd.add("qcow2"); + cmd.add(targetImagePath); + + ProcessBuilder pb = new ProcessBuilder(cmd); + try { + pb.start(); + } catch (IOException e) { + throw new VMsCreatorException("Emulator image create failed!\n" + e.getMessage()); + } + } + + // usability + private void createFileShare() throws VMsCreatorException { + if (newVM.isFileShareSupport) { + if (newVM.fileSharePath == null || newVM.fileSharePath.isEmpty()) { + throw new VMsCreatorException("Select sharing file path"); + } + } + } + + // Device + private void createDisplay() throws VMsCreatorException { + int i = newVM.resolution.indexOf('x'); + newVM.resolutionType = new Resolution(); + newVM.resolutionType.setWidth(Integer.valueOf(newVM.resolution.substring(0,i))); + newVM.resolutionType.setHeight(Integer.valueOf(newVM.resolution.substring(i+1,newVM.resolution.length()))); + + if (newVM.skinPath == newVM.skinPathName) { + newVM.skinPath = FileIO.getInstance().getSkinPath() + File.separator + newVM.skinPathName; + } + } + + private void createRam() {} + + private void createSDCard() throws VMsCreatorException { + if (newVM.isSDCardSupport) { + try { + Modifier.modifySDCard(newVM); + } catch (VMsWorkerException e) { + throw new VMsCreatorException(e.getMessage()); + } + } + } + + private void settingProperty() { + ObjectFactory factory = EmulatorVMs.getInstance().getObjectFactory(); + EmulatorConfiguration ec = property.getConfiguration(); + ec.setBaseInformation(factory.createBaseInformationType()); + ec.setUsability(factory.createUsabilityType()); + ec.setDevice(factory.createDeviceType()); + + ec.getBaseInformation().setName(newVM.imageName); + ec.getBaseInformation().setArchitecture(Architecture.x86.toString()); + + ec.getBaseInformation().setDiskImage(factory.createBaseInformationTypeDiskImage()); + if (newVM.isDefaultImage) { + ec.getBaseInformation().getDiskImage().setType("standard"); + // TODO : get version + ec.getBaseInformation().getDiskImage().setVersion("1.0"); + } else { + ec.getBaseInformation().getDiskImage().setType("custom"); + } + + // + ec.getBaseInformation().getDiskImage().setBaseDiskImage(factory.createDiskImageFormatType()); + ec.getBaseInformation().getDiskImage().setCurrentDiskImage(factory.createDiskImageFormatType()); + + // TODO : + ec.getBaseInformation().getDiskImage().getBaseDiskImage().setFormat("qcow2"); + ec.getBaseInformation().getDiskImage().getBaseDiskImage().setValue(newVM.baseImagePath); + ec.getBaseInformation().getDiskImage().getCurrentDiskImage().setFormat("qcow2"); + ec.getBaseInformation().getDiskImage().getCurrentDiskImage().setValue( + folder.getAbsolutePath() + File.separator + "emulimg-" + newVM.imageName + "." + Architecture.x86.toString()); + + ec.getUsability().setLogging(factory.createUsabilityTypeLogging()); + ec.getUsability().getLogging().setLevel("NONE"); + ec.getUsability().setHwVirtualization(true); + + ec.getUsability().setFileSharing(factory.createUsabilityTypeFileSharing()); + if (!newVM.fileSharePath.isEmpty()) { + ec.getUsability().getFileSharing().setPath(newVM.fileSharePath); + } + + ec.getDevice().setDisplay(factory.createDisplayType()); + ec.getDevice().getDisplay().setResolution(factory.createDisplayTypeResolution()); + ec.getDevice().getDisplay().getResolution().setWidth(newVM.resolutionType.getWidth()); + ec.getDevice().getDisplay().getResolution().setHeight(newVM.resolutionType.getHeight()); + + ec.getDevice().getDisplay().setDensity(factory.createDisplayTypeDensity()); + ec.getDevice().getDisplay().getDensity().setUnit("dpi"); + ec.getDevice().getDisplay().getDensity().setValue(newVM.dpi); + + ec.getDevice().getDisplay().setSkinPath(factory.createDisplayTypeSkinPath()); + ec.getDevice().getDisplay().getSkinPath().setPath(newVM.skinPath); + + ec.getDevice().setRAM(factory.createRamType()); + ec.getDevice().getRAM().setSize(factory.createRamTypeSize()); + ec.getDevice().getRAM().getSize().setUnit("MiB"); + ec.getDevice().getRAM().getSize().setValue(newVM.ramSize); + + ec.getDevice().setStorage(factory.createStorageType()); + ec.getDevice().getStorage().setSDCard(factory.createStorageTypeSDCard()); + if (newVM.isSDCardSupport) { + ec.getDevice().getStorage().getSDCard().setDiskImage(newVM.SDCardPath); + } + } + + public static VMsProperty create(VMPropertyValue newVM) throws VMsWorkerException { + return new Creator(newVM).createInternal(); + } + + public static void createInitialVMImage(String basePath, String targetPath) throws VMsCreatorException { + new Creator().createInitialVMImageInternal(basePath, targetPath); + } +} diff --git a/src/org/tizen/emulator/manager/tool/Launcher.java b/src/org/tizen/emulator/manager/vms/Launcher.java similarity index 92% rename from src/org/tizen/emulator/manager/tool/Launcher.java rename to src/org/tizen/emulator/manager/vms/Launcher.java index 8e16ab2..b1d1286 100644 --- a/src/org/tizen/emulator/manager/tool/Launcher.java +++ b/src/org/tizen/emulator/manager/vms/Launcher.java @@ -1,4 +1,4 @@ -package org.tizen.emulator.manager.tool; +package org.tizen.emulator.manager.vms; import java.io.BufferedInputStream; import java.io.File; @@ -11,14 +11,13 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.tizen.emulator.manager.EmulatorManager; -import org.tizen.emulator.manager.vms.EmulatorVMs; -import org.tizen.emulator.manager.vms.VMProcess; -import org.tizen.emulator.manager.vms.VMsProperty; +import org.tizen.emulator.manager.tool.FileIO; +import org.tizen.emulator.manager.tool.PortHelper; public class Launcher { private Launcher() {} - public static void launch(VMsProperty property) { + static boolean launch(VMsProperty property) { Shell shell = EmulatorManager.getInstance().getShell(); String binary; @@ -26,22 +25,13 @@ public class Launcher { boolean exists = false; int portNo; - VMProcess vmprocess = new VMProcess(); - if(!vmprocess.checkIfRunning(property)) - { - MessageBox alert = new MessageBox(shell, SWT.OK); - alert.setMessage("Can not execute emulator.\nEmulator instance with the same name is running now."); - alert.open(); - return; - } - //check available port number. portNo = new PortHelper().getPortNo(); if(portNo == -1) { MessageBox alert = new MessageBox(shell, SWT.OK); alert.setMessage("Can not execute emulator.\n All available ports are in use."); alert.open(); - return; + return false; } if (System.getProperty("os.name").toLowerCase().indexOf("windows") > -1) @@ -218,6 +208,8 @@ public class Launcher { } catch (IOException e) { e.printStackTrace(); + return false; } + return true; } } diff --git a/src/org/tizen/emulator/manager/vms/Modifier.java b/src/org/tizen/emulator/manager/vms/Modifier.java new file mode 100644 index 0000000..7d7bd1e --- /dev/null +++ b/src/org/tizen/emulator/manager/vms/Modifier.java @@ -0,0 +1,119 @@ +package org.tizen.emulator.manager.vms; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; + +import org.tizen.emulator.manager.tool.FileIO; + +public class Modifier { + private Modifier() {} + + static void modify(VMsProperty property, VMPropertyValue oldVM, VMPropertyValue newVM) throws VMsWorkerException { + if(oldVM.equals(newVM)) // if nothing if modified... + return; + + if (!newVM.resolution.equals(oldVM.resolution)) { + int i = newVM.resolution.indexOf('x'); + oldVM.resolutionType.setWidth(Integer.valueOf(newVM.resolution.substring(0,i))); + oldVM.resolutionType.setHeight(Integer.valueOf(newVM.resolution.substring(i+1,newVM.resolution.length()))); + property.getConfiguration().getDevice().getDisplay().setResolution(oldVM.resolutionType); + } + + if (newVM.dpi != oldVM.dpi) { + property.getConfiguration().getDevice().getDisplay().getDensity().setValue(newVM.dpi); + } + + if (newVM.skinPath != oldVM.skinPath) { + if (newVM.skinPath == newVM.skinPathName) { + newVM.skinPath = FileIO.getInstance().getSkinPath() + File.separator + newVM.skinPathName; + } + if (property.getConfiguration().getDevice().getDisplay().getSkinPath() == null) { + property.getConfiguration().getDevice().getDisplay().setSkinPath + (EmulatorVMs.getInstance().getObjectFactory().createDisplayTypeSkinPath()); + } + property.getConfiguration().getDevice().getDisplay().getSkinPath().setPath(newVM.skinPath); + } + + if (newVM.isSDCardSupport != oldVM.isSDCardSupport) { + if (newVM.isSDCardSupport) { + modifySDCard(newVM); + property.getConfiguration().getDevice().getStorage().getSDCard().setDiskImage(newVM.SDCardPath); + } else { + property.getConfiguration().getDevice().getStorage().getSDCard().setDiskImage(null); + } + } else if (newVM.isSDCardSupport && !newVM.SDCardPathName.equals(oldVM.SDCardPathName)) { + modifySDCard(newVM); + property.getConfiguration().getDevice().getStorage().getSDCard().setDiskImage(newVM.SDCardPath); + } + + if (newVM.ramSize != oldVM.ramSize) { + property.getConfiguration().getDevice().getRAM().getSize().setValue(newVM.ramSize); + } + + if (newVM.isFileShareSupport != oldVM.isFileShareSupport) { + if (newVM.isFileShareSupport && !newVM.fileSharePath.isEmpty()) { + property.getConfiguration().getUsability().getFileSharing().setPath(newVM.fileSharePath); + } else { + property.getConfiguration().getUsability().getFileSharing().setPath(null); + } + } else if (newVM.isFileShareSupport && !newVM.fileSharePath.equals(oldVM.fileSharePath)) { + property.getConfiguration().getUsability().getFileSharing().setPath(newVM.fileSharePath); + } + + EmulatorVMs.getInstance().storeXML(property); + } + + static void modifySDCard(VMPropertyValue newVM) throws VMsWorkerException { + if (newVM.SDCardPath.endsWith("MB)")) { // New + String sdCardName = newVM.SDCardPath.substring(0, newVM.SDCardPath.lastIndexOf(" ")); + String dataPath = FileIO.getInstance().getDataPath() + File.separator + sdCardName; + + File src = new File(dataPath); + if(!src.exists()) { + throw new VMsWorkerException("SD Card image create failed!\nFile is not existing :" + dataPath); + } + + File dest = new File(FileIO.getInstance().getVirtualTargetPath(newVM.imageName) + File.separator + sdCardName); + try { + dest.createNewFile(); + newVM.SDCardPath = dest.getAbsolutePath(); + } catch (IOException e) { + throw new VMsWorkerException("Create new image path is failed !"); + } + + FileReader in = null; + FileWriter out = null; + try { + in = new FileReader(src); + out = new FileWriter(dest); + + int c; + while((c = in.read()) != -1) { + out.write(c); + } + } catch (FileNotFoundException e) { + throw new VMsWorkerException("SD Card image create failed!\n" + e.getMessage()); + } catch (IOException e) { + throw new VMsWorkerException("SD Card image create failed!\n" + e.getMessage()); + }finally { + try { + if (in != null) in.close(); + if (out != null) out.close(); + } catch (IOException e) { + throw new VMsWorkerException(e.getMessage()); + } + } + } else { + if (newVM.SDCardPath == null || newVM.SDCardPath.isEmpty()) { + throw new VMsWorkerException("Select an existing sdcard image !"); + } + + if (newVM.SDCardPath.equals("( None )")) { + throw new VMsWorkerException("Select an existing sdcard image !"); + } + } + } +} diff --git a/src/org/tizen/emulator/manager/vms/VMProcess.java b/src/org/tizen/emulator/manager/vms/VMProcess.java deleted file mode 100644 index 742944b..0000000 --- a/src/org/tizen/emulator/manager/vms/VMProcess.java +++ /dev/null @@ -1,430 +0,0 @@ -package org.tizen.emulator.manager.vms; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.List; - -import org.tizen.emulator.manager.tool.FileIO; -import org.tizen.emulator.manager.vms.VMsProperty.Architecture; -import org.tizen.emulator.manager.vms.xml.DisplayType.Resolution; -import org.tizen.emulator.manager.vms.xml.EmulatorConfiguration; -import org.tizen.emulator.manager.vms.xml.ObjectFactory; - -public class VMProcess { - private static String SEFARATOR = File.separator; - private FileIO filePath; - private String errorMessage; - - // for modify - private boolean isModify = false; - - // for create - private String folderPath = null; - private VMsProperty property; - private VMPropertyValue newVM; - - public VMProcess() { - filePath = FileIO.getInstance(); - errorMessage = "Throw unknown error"; - } - -// check if the emulator instance with the same name is running now. - public boolean checkIfRunning(VMsProperty property) - { - int isLinux = System.getProperty("os.name").toLowerCase().indexOf("linux"); - int isWindows = System.getProperty("os.name").toLowerCase().indexOf("windows"); - - try { - String line; - List cmd = new ArrayList(); - if(isLinux > -1) { - cmd.add("/bin/ps"); - cmd.add("-ef"); - } - else if(isWindows > -1) { - cmd.add("tasklist"); - cmd.add("/V"); - cmd.add("/FI"); - cmd.add("\"IMAGENAME eq java.exe\""); - } - - ProcessBuilder pb = new ProcessBuilder(cmd); - Process p = pb.start(); - BufferedReader stdOut = new BufferedReader(new InputStreamReader(p.getInputStream())); - - if(isLinux > -1) { - while ((line = stdOut.readLine()) != null) { - if(line.contains(FileIO.getInstance().getVirtualTargetImagePath(property.getName()))) { - //System.out.println("exist in "+ line); - stdOut.close(); - return false; - } - } - } - else if(isWindows > -1) { - while ((line = stdOut.readLine()) != null) { - if(line.contains(property.getName()+ ":261")) { - //System.out.println("exist in"+ line); - stdOut.close(); - return false; - } - } - } - stdOut.close(); - //System.out.println("not exist anywhere"); - return true; - } catch (Exception err) { - err.printStackTrace(); - return false; - } - } - - - public VMsProperty modify(VMsProperty property, VMPropertyValue oldVM, VMPropertyValue newVM) { - if (!newVM.resolution.equals(oldVM.resolution)) { - isModify = true; - int i = newVM.resolution.indexOf('x'); - oldVM.resolutionType.setWidth(Integer.valueOf(newVM.resolution.substring(0,i))); - oldVM.resolutionType.setHeight(Integer.valueOf(newVM.resolution.substring(i+1,newVM.resolution.length()))); - property.getConfiguration().getDevice().getDisplay().setResolution(oldVM.resolutionType); - } - - if (newVM.dpi != oldVM.dpi) { - isModify = true; - property.getConfiguration().getDevice().getDisplay().getDensity().setValue(newVM.dpi); - } - - if (newVM.skinPath != oldVM.skinPath) { - if (newVM.skinPath == newVM.skinPathName) { - newVM.skinPath = filePath.getSkinPath() + SEFARATOR + newVM.skinPathName; - } - if (property.getConfiguration().getDevice().getDisplay().getSkinPath() == null) { - property.getConfiguration().getDevice().getDisplay().setSkinPath - (EmulatorVMs.getInstance().getObjectFactory().createDisplayTypeSkinPath()); - } - property.getConfiguration().getDevice().getDisplay().getSkinPath().setPath(newVM.skinPath); - } - - if (newVM.isSDCardSupport != oldVM.isSDCardSupport) { - isModify = true; - if (newVM.isSDCardSupport) { - if (!modifySDCard(newVM)) { - return null; - } - property.getConfiguration().getDevice().getStorage().getSDCard().setDiskImage(newVM.SDCardPath); - } else { - property.getConfiguration().getDevice().getStorage().getSDCard().setDiskImage(null); - } - } else if (newVM.isSDCardSupport && !newVM.SDCardPathName.equals(oldVM.SDCardPathName)) { - if (!modifySDCard(newVM)) { - return null; - } - isModify = true; - property.getConfiguration().getDevice().getStorage().getSDCard().setDiskImage(newVM.SDCardPath); - } - - if (newVM.ramSize != oldVM.ramSize) { - isModify = true; - property.getConfiguration().getDevice().getRAM().getSize().setValue(newVM.ramSize); - } - - if (newVM.isFileShareSupport != oldVM.isFileShareSupport) { - isModify = true; - if (newVM.isFileShareSupport && !newVM.fileSharePath.isEmpty()) { - property.getConfiguration().getUsability().getFileSharing().setPath(newVM.fileSharePath); - } else { - property.getConfiguration().getUsability().getFileSharing().setPath(null); - } - } else if (newVM.isFileShareSupport && !newVM.fileSharePath.equals(oldVM.fileSharePath)) { - isModify = true; - property.getConfiguration().getUsability().getFileSharing().setPath(newVM.fileSharePath); - } - - if (isModify) { - EmulatorVMs.getInstance().storeXML(property); - } - - return property; - } - - public VMsProperty create(VMPropertyValue newVM) { - this.newVM = newVM; - this.property = EmulatorVMs.getInstance().getNewProperty - (newVM.imageName, Architecture.x86); - - if (this.property == null) { - setErrorMessage("Create failed virtual target property"); - return null; - } - - // make directory - File folder = new File(filePath.getVirtualTargetPath(newVM.imageName)); - folderPath = folder.getAbsolutePath() + SEFARATOR; - - File log = new File(filePath.getVirtualTargetLogPath(newVM.imageName)); - - folder.mkdirs(); - - if (!createDiskImage()) { - deleteFolder(folder); - return null; - } - - if (!createFileShare()) { - deleteFolder(folder); - return null; - } - - if (!createDisplay()) { - deleteFolder(folder); - return null; - } - - if (!createRam()) { - deleteFolder(folder); - return null; - } - - if (!createSDCard()) { - deleteFolder(folder); - return null; - } - - log.mkdir(); - - settingProperty(); - EmulatorVMs.getInstance().storeXML(this.property); - return this.property; - } - - private void deleteFolder(File folder) { - if (folder.exists()) { - for (File dir : folder.listFiles()) { - if (dir.isFile()) { - dir.delete(); - } else { // directory - for (File sub : dir.listFiles()) { - if (sub.isFile()) { - sub.delete(); - } - } - dir.delete(); - } - } - folder.delete(); - } - } - - private ObjectFactory factory; - private EmulatorConfiguration ec; - private void settingProperty() { - factory = EmulatorVMs.getInstance().getObjectFactory(); - ec = property.getConfiguration(); - ec.setBaseInformation(factory.createBaseInformationType()); - ec.setUsability(factory.createUsabilityType()); - ec.setDevice(factory.createDeviceType()); - - ec.getBaseInformation().setName(newVM.imageName); - ec.getBaseInformation().setArchitecture(Architecture.x86.toString()); - - ec.getBaseInformation().setDiskImage(factory.createBaseInformationTypeDiskImage()); - if (newVM.isDefaultImage) { - ec.getBaseInformation().getDiskImage().setType("standard"); - // TODO : get version - ec.getBaseInformation().getDiskImage().setVersion("1.0"); - } else { - ec.getBaseInformation().getDiskImage().setType("custom"); - } - - // - ec.getBaseInformation().getDiskImage().setBaseDiskImage(factory.createDiskImageFormatType()); - ec.getBaseInformation().getDiskImage().setCurrentDiskImage(factory.createDiskImageFormatType()); - - // TODO : - ec.getBaseInformation().getDiskImage().getBaseDiskImage().setFormat("qcow2"); - ec.getBaseInformation().getDiskImage().getBaseDiskImage().setValue(newVM.baseImagePath); - ec.getBaseInformation().getDiskImage().getCurrentDiskImage().setFormat("qcow2"); - ec.getBaseInformation().getDiskImage().getCurrentDiskImage().setValue( - String.format("%semulimg-%s.%s", folderPath, newVM.imageName, Architecture.x86.toString())); - - ec.getUsability().setLogging(factory.createUsabilityTypeLogging()); - ec.getUsability().getLogging().setLevel("NONE"); - ec.getUsability().setHwVirtualization(true); - - ec.getUsability().setFileSharing(factory.createUsabilityTypeFileSharing()); - if (!newVM.fileSharePath.isEmpty()) { - ec.getUsability().getFileSharing().setPath(newVM.fileSharePath); - } - - ec.getDevice().setDisplay(factory.createDisplayType()); - ec.getDevice().getDisplay().setResolution(factory.createDisplayTypeResolution()); - ec.getDevice().getDisplay().getResolution().setWidth(newVM.resolutionType.getWidth()); - ec.getDevice().getDisplay().getResolution().setHeight(newVM.resolutionType.getHeight()); - - ec.getDevice().getDisplay().setDensity(factory.createDisplayTypeDensity()); - ec.getDevice().getDisplay().getDensity().setUnit("dpi"); - ec.getDevice().getDisplay().getDensity().setValue(newVM.dpi); - - ec.getDevice().getDisplay().setSkinPath(factory.createDisplayTypeSkinPath()); - ec.getDevice().getDisplay().getSkinPath().setPath(newVM.skinPath); - - ec.getDevice().setRAM(factory.createRamType()); - ec.getDevice().getRAM().setSize(factory.createRamTypeSize()); - ec.getDevice().getRAM().getSize().setUnit("MiB"); - ec.getDevice().getRAM().getSize().setValue(newVM.ramSize); - - ec.getDevice().setStorage(factory.createStorageType()); - ec.getDevice().getStorage().setSDCard(factory.createStorageTypeSDCard()); - if (newVM.isSDCardSupport) { - ec.getDevice().getStorage().getSDCard().setDiskImage(newVM.SDCardPath); - } - } - - private boolean createDiskImage() { - if (newVM.baseImagePath == null || newVM.baseImagePath.isEmpty()) { - newVM.baseImagePath = filePath.getBaseimgPath(); - } - - if (!new File(newVM.baseImagePath).exists()) { - setErrorMessage("Base image does not exist."); - return false; - } - - String targetPath = String.format("%semulimg-%s.%s", folderPath, newVM.imageName, Architecture.x86.toString()); - if (!createBaseImage(newVM.baseImagePath, targetPath)) { - return false; - } - - return true; - } - - public boolean createBaseImage(String baseImagePath, String targetImagePath) { - String exe_path = filePath.getBinPath() + SEFARATOR + "qemu-img"; - - List cmd = new ArrayList(); - cmd.add(exe_path); - cmd.add("create"); - cmd.add("-b"); - cmd.add(baseImagePath); - cmd.add("-f"); - cmd.add("qcow2"); - cmd.add(targetImagePath); - ProcessBuilder pb = new ProcessBuilder(cmd); - try { - pb.start(); - } catch (IOException e) { - setErrorMessage("Emulator image create failed!\n" + e.getMessage()); - return false; - } - return true; - } - - // usability - private boolean createFileShare() { - if (newVM.isFileShareSupport) { - if (newVM.fileSharePath == null || newVM.fileSharePath.isEmpty()) { - setErrorMessage("Select sharing file path"); - return false; - } - } - return true; - } - - // Device - private boolean createDisplay() { - int i = newVM.resolution.indexOf('x'); - newVM.resolutionType = new Resolution(); - newVM.resolutionType.setWidth(Integer.valueOf(newVM.resolution.substring(0,i))); - newVM.resolutionType.setHeight(Integer.valueOf(newVM.resolution.substring(i+1,newVM.resolution.length()))); - - if (newVM.skinPath == newVM.skinPathName) { - newVM.skinPath = filePath.getSkinPath() + SEFARATOR + newVM.skinPathName; - } - return true; - } - - private boolean createRam() { - return true; - } - - private boolean createSDCard() { - if (newVM.isSDCardSupport) { - if (! modifySDCard(newVM)) { - return false; - } - } - return true; - } - - private boolean modifySDCard(VMPropertyValue newVM) { - if (newVM.SDCardPath.endsWith("MB)")) { // New - String sdCardName = newVM.SDCardPath.substring(0, newVM.SDCardPath.lastIndexOf(" ")); - String dataPath = filePath.getDataPath() + SEFARATOR + sdCardName; - - File src = new File(dataPath); - if(!src.exists()) { - setErrorMessage("SD Card image create failed!\nFile is not existing :" + dataPath); - return false; - } - - File dest = new File(filePath.getVirtualTargetPath(newVM.imageName) + SEFARATOR + sdCardName); - try { - dest.createNewFile(); - newVM.SDCardPath = dest.getAbsolutePath(); - } catch (IOException e) { - setErrorMessage("Create new image path is failed!"); - return false; - } - - FileReader in = null; - FileWriter out = null; - try { - in = new FileReader(src); - out = new FileWriter(dest); - - int c; - while((c = in.read()) != -1) { - out.write(c); - } - } catch (FileNotFoundException e) { - setErrorMessage("SD Card image create failed!\n" + e.getMessage()); - return false; - } catch (IOException e) { - setErrorMessage("SD Card image create failed!\n" + e.getMessage()); - return false; - }finally { - try { - if (in != null) in.close(); - if (out != null) out.close(); - } catch (IOException e) { - } - } - } else { - if (newVM.SDCardPath == null || newVM.SDCardPath.isEmpty()) { - setErrorMessage("Select an existing sdcard image!"); - return false; - } - - if (newVM.SDCardPath.equals("( None )")) { - setErrorMessage("Select an existing sdcard image!"); - return false; - } - } - - return true; - } - - public String getErrorMessage() { - return errorMessage; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } -} diff --git a/src/org/tizen/emulator/manager/vms/VMPropertyValue.java b/src/org/tizen/emulator/manager/vms/VMPropertyValue.java index 89d278a..d79a2fb 100644 --- a/src/org/tizen/emulator/manager/vms/VMPropertyValue.java +++ b/src/org/tizen/emulator/manager/vms/VMPropertyValue.java @@ -6,9 +6,9 @@ import org.tizen.emulator.manager.tool.FileIO; import org.tizen.emulator.manager.vms.xml.DisplayType.Resolution; - -public class VMPropertyValue { - public String arcType; +// Wrapper for convenient property managing... +public class VMPropertyValue implements Cloneable { + public String archType; public String imageName; @@ -32,67 +32,10 @@ public class VMPropertyValue { public String fileSharePath; public String fileSharePathName; - public VMPropertyValue() { - } - - public VMPropertyValue(VMPropertyValue oldTarget) { - arcType = oldTarget.arcType; - imageName = oldTarget.imageName; - - isDefaultImage = oldTarget.isDefaultImage; - baseImagePath = oldTarget.baseImagePath; - baseImagePathName = oldTarget.baseImagePathName; - - resolutionType = oldTarget.resolutionType; - resolution = oldTarget.resolution; - dpi = oldTarget.dpi; - skinPath = oldTarget.skinPath; - skinPathName = oldTarget.skinPathName; - - isSDCardSupport = oldTarget.isSDCardSupport; - SDCardPath = oldTarget.SDCardPath; - SDCardPathName = oldTarget.SDCardPathName; - - ramSize = oldTarget.ramSize; - - isFileShareSupport = oldTarget.isFileShareSupport; - fileSharePath = oldTarget.fileSharePath; - fileSharePathName = oldTarget.fileSharePathName; - } + private VMPropertyValue() {} // for clone... - public void defaultSetting(boolean isDefault) { - arcType = "x86"; // TODO - imageName = ""; - - isDefaultImage = isDefault; - baseImagePath = ""; - baseImagePathName = isDefault ? "( emulimg-1.0.x86 )" : " ( None )"; - - // TODO - // HD(720x1280) - resolutionType = new Resolution(); - resolutionType.setWidth(720); - resolutionType.setHeight(1280); - resolution = "720x1280"; - dpi = 316; // this value be related to resolution - // TODO : Skin Path - skinPath = FileIO.getInstance().getSkinPath() + File.separator + "emul_" + resolution; - skinPathName = "emul_" + resolution; - // - - isSDCardSupport = false; - SDCardPath = ""; - SDCardPathName = "( None )"; - - ramSize = 512; - - isFileShareSupport = false; - fileSharePath = ""; - fileSharePathName = "( None )"; - } - - public void settingValue(VMsProperty property) { - arcType = property.getArch().toString(); + VMPropertyValue(VMsProperty property) { + archType = property.getArch().toString(); imageName = property.getName(); isDefaultImage = property.getConfiguration().getBaseInformation().getDiskImage().getType().equals("standard") ? true : false; @@ -141,4 +84,98 @@ public class VMPropertyValue { } ramSize = property.getConfiguration().getDevice().getRAM().getSize().getValue(); } + + public void defaultSetting(boolean isDefault) { + } + + @Override + public VMPropertyValue clone() { + VMPropertyValue dest = new VMPropertyValue(); + + dest.archType = this.archType; + dest.imageName = this.imageName; + + dest.isDefaultImage = this.isDefaultImage; + dest.baseImagePath = this.baseImagePath; + dest.baseImagePathName = this.baseImagePathName; + + dest.resolutionType = this.resolutionType; + dest.resolution = this.resolution; + dest.dpi = this.dpi; + dest.skinPath = this.skinPath; + dest.skinPathName = this.skinPathName; + + dest.isSDCardSupport = this.isSDCardSupport; + dest.SDCardPath = this.SDCardPath; + dest.SDCardPathName = this.SDCardPathName; + + dest.ramSize = this.ramSize; + + dest.isFileShareSupport = this.isFileShareSupport; + dest.fileSharePath = this.fileSharePath; + dest.fileSharePathName = this.fileSharePathName; + + return dest; + } + + @Override + public boolean equals(Object obj) { + if(this == obj) + return true; + + if(!(obj instanceof VMPropertyValue)) + return false; + + VMPropertyValue dest = (VMPropertyValue)obj; + + if(!this.resolution.equals(dest.resolution)) + return false; + if(this.dpi != dest.dpi) + return false; + if(this.skinPath != dest.skinPath) + return false; + if(this.isSDCardSupport != dest.isSDCardSupport) + return false; + if(this.ramSize != dest.ramSize) + return false; + if(this.isFileShareSupport != dest.isFileShareSupport) + return false; + + return true; + } + + public static VMPropertyValue getDefault(boolean isDefault) { + VMPropertyValue value = new VMPropertyValue(); + + value.archType = "x86"; // TODO + value.imageName = ""; + + value.isDefaultImage = isDefault; + value.baseImagePath = ""; + value.baseImagePathName = isDefault ? "( emulimg-1.0.x86 )" : " ( None )"; + + // TODO + // HD(720x1280) + value.resolutionType = new Resolution(); + value.resolutionType.setWidth(720); + value.resolutionType.setHeight(1280); + value.resolution = "720x1280"; + value.dpi = 316; // this value be related to resolution + // TODO : Skin Path + value.skinPath = FileIO.getInstance().getSkinPath() + File.separator + "emul_" + value.resolution; + value.skinPathName = "emul_" + value.resolution; + // + + value.isSDCardSupport = false; + value.SDCardPath = ""; + value.SDCardPathName = "( None )"; + + value.ramSize = 512; + + value.isFileShareSupport = false; + value.fileSharePath = ""; + value.fileSharePathName = "( None )"; + + return value; + } } diff --git a/src/org/tizen/emulator/manager/vms/VMsCreatorException.java b/src/org/tizen/emulator/manager/vms/VMsCreatorException.java new file mode 100644 index 0000000..58ccf25 --- /dev/null +++ b/src/org/tizen/emulator/manager/vms/VMsCreatorException.java @@ -0,0 +1,9 @@ +package org.tizen.emulator.manager.vms; + +public class VMsCreatorException extends VMsWorkerException { + private static final long serialVersionUID = -1670534140703381550L; + + public VMsCreatorException(String message) { + super(message); + } +} diff --git a/src/org/tizen/emulator/manager/vms/VMsProperty.java b/src/org/tizen/emulator/manager/vms/VMsProperty.java index 76f1c83..f96a1de 100644 --- a/src/org/tizen/emulator/manager/vms/VMsProperty.java +++ b/src/org/tizen/emulator/manager/vms/VMsProperty.java @@ -6,14 +6,27 @@ import org.tizen.emulator.manager.vms.xml.EmulatorConfiguration; public class VMsProperty { File configFile; - EmulatorConfiguration configuration; + + VMsWorker worker; + VMPropertyValue value; public VMsProperty(File configFile, EmulatorConfiguration element) { this.configFile = configFile; this.configuration = element; + + this.worker = new VMsWorker(this); + this.value = new VMPropertyValue(this); } + public VMPropertyValue getPropertyValue() { + return value; + } + + public VMsWorker getWorker() { + return worker; + } + public String getName() { if(configuration.getBaseInformation() == null) return null; diff --git a/src/org/tizen/emulator/manager/vms/VMsWorker.java b/src/org/tizen/emulator/manager/vms/VMsWorker.java new file mode 100644 index 0000000..8910f91 --- /dev/null +++ b/src/org/tizen/emulator/manager/vms/VMsWorker.java @@ -0,0 +1,110 @@ +package org.tizen.emulator.manager.vms; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +import org.tizen.emulator.manager.tool.FileIO; + + + +public class VMsWorker { + VMsProperty property; + + VMsWorker(VMsProperty property) { + this.property = property; + } + + public void launchVM() throws VMsWorkerException { + if(isRunningNow()) + throw new VMsWorkerException("Can not execute emulator.\nEmulator instance with the same name is running now."); + + Launcher.launch(property); + } + + public boolean createVM(VMPropertyValue newVM) throws VMsWorkerException { + Creator.create(newVM); + + return true; + } + + public void modifyVM(VMPropertyValue oldVM, VMPropertyValue newVM) throws VMsWorkerException { + Modifier.modify(property, oldVM, newVM); + } + + public void deleteVM() { + + } + + public void resetVM() throws VMsWorkerException { + String basePath = property.getConfiguration().getBaseInformation().getDiskImage().getBaseDiskImage().getValue(); + String targetPath = property.getConfiguration().getBaseInformation().getDiskImage().getCurrentDiskImage().getValue(); + + if (basePath == null || basePath.isEmpty() || targetPath == null || targetPath.isEmpty()) { + throw new VMsWorkerException("Fail to reset Emulator\nEmulator Name : " + property.getName()); + } + + try { + Creator.createInitialVMImage(basePath, targetPath); + } catch (VMsCreatorException e) { + throw new VMsWorkerException("Fail to reset Emulator\nEmulator Name : " + property.getName() + +"\n" + e.getMessage()); + } + } + + public void cloneVM() { + + } + + // check if the emulator instance with the same name is running now. + public boolean isRunningNow() + { + int isLinux = System.getProperty("os.name").toLowerCase().indexOf("linux"); + int isWindows = System.getProperty("os.name").toLowerCase().indexOf("windows"); + + try { + String line; + List cmd = new ArrayList(); + if(isLinux > -1) { + cmd.add("/bin/ps"); + cmd.add("-ef"); + } + else if(isWindows > -1) { + cmd.add("tasklist"); + cmd.add("/V"); + cmd.add("/FI"); + cmd.add("\"IMAGENAME eq java.exe\""); + } + + ProcessBuilder pb = new ProcessBuilder(cmd); + Process p = pb.start(); + BufferedReader stdOut = new BufferedReader(new InputStreamReader(p.getInputStream())); + + if(isLinux > -1) { + while ((line = stdOut.readLine()) != null) { + if(line.contains(FileIO.getInstance().getVirtualTargetImagePath(property.getName()))) { + //System.out.println("exist in"+ line); + stdOut.close(); + return true; + } + } + } + else if(isWindows > -1) { + while ((line = stdOut.readLine()) != null) { + if(line.contains(property.getName()+ ":261")) { + //System.out.println("exist in"+ line); + stdOut.close(); + return true; + } + } + } + stdOut.close(); + //System.out.println("not exist anywhere"); + return false; + } catch (Exception err) { + err.printStackTrace(); + return true; + } + } +} diff --git a/src/org/tizen/emulator/manager/vms/VMsWorkerException.java b/src/org/tizen/emulator/manager/vms/VMsWorkerException.java new file mode 100644 index 0000000..798a3ca --- /dev/null +++ b/src/org/tizen/emulator/manager/vms/VMsWorkerException.java @@ -0,0 +1,9 @@ +package org.tizen.emulator.manager.vms; + +public class VMsWorkerException extends Exception { + private static final long serialVersionUID = -6819776106619652987L; + + public VMsWorkerException(String message) { + super(message); + } +} -- 2.7.4