From 41df8be5d8ea027f93c25b1ad757a5201b2ea446 Mon Sep 17 00:00:00 2001 From: "minkee.lee" Date: Wed, 20 May 2015 16:09:28 +0900 Subject: [PATCH] VM property: Modified last-created VM property. - Each profile has last-created VM property. Change-Id: I66d5214a18bb980fc6d3b47380d10cbbf196f226 Signed-off-by: minkee.lee --- .../tizen/emulator/manager/platform/BaseImage.java | 34 ++------- .../emulator/manager/platform/CustomBaseImage.java | 16 +--- .../tizen/emulator/manager/platform/Profile.java | 47 ++++++++++++ .../emulator/manager/platform/ProfileList.java | 6 +- .../manager/resources/StringResources.java | 1 - .../emulator/manager/tool/SettingInfoFile.java | 17 ----- src/org/tizen/emulator/manager/ui/VMsMainView.java | 20 +++-- .../ui/detail/item/property/BaseImageViewItem.java | 89 +++++++++++++--------- .../manager/ui/list/ExtendTreeListView.java | 2 +- .../tizen/emulator/manager/ui/list/RowItem.java | 14 +++- .../emulator/manager/ui/list/TreeListView.java | 6 +- src/org/tizen/emulator/manager/vms/Creator.java | 24 ++++-- src/org/tizen/emulator/manager/vms/VMProperty.java | 19 +++++ 13 files changed, 171 insertions(+), 124 deletions(-) diff --git a/src/org/tizen/emulator/manager/platform/BaseImage.java b/src/org/tizen/emulator/manager/platform/BaseImage.java index e356ff6..f907680 100644 --- a/src/org/tizen/emulator/manager/platform/BaseImage.java +++ b/src/org/tizen/emulator/manager/platform/BaseImage.java @@ -70,7 +70,6 @@ public class BaseImage { protected boolean isStandard; private String information; - protected String lastCreatedPropertyPath; protected VMProperty defaultProperty; protected ItemList itemList; @@ -97,7 +96,6 @@ public class BaseImage { loadProperty(path); settingImagePath(path); - initLastCreatedPropertyPath(); loadTemplate(); } @@ -112,27 +110,18 @@ public class BaseImage { return defaultProperty; } - public ItemList getItemList() { - return itemList; + public void setDefaultProperty(VMProperty property) { + this.defaultProperty = property; } - public String getLastCreatedPropertyPath() { - return lastCreatedPropertyPath; + public ItemList getItemList() { + return itemList; } public SKIN_SHAPE getSkinShape() { return skinShape; } - protected void initLastCreatedPropertyPath() { - StringBuilder sb = new StringBuilder(); - sb.append(FilePathResources.getTizenVmsPath()).append(File.separator) - .append(StringResources.LAST_CREATED_XML_PREFIX).append("_") - .append(profile).append("-").append(version).append("_") - .append(imageName).append(".xml"); - lastCreatedPropertyPath = sb.toString(); - } - private void checkBaseImageName() throws IOException { if (imageName == null) { throw new IOException("Image name is null. This image can not add."); @@ -155,7 +144,7 @@ public class BaseImage { inputStream = new FileInputStream(f); Properties prop = new Properties(); prop.load(inputStream); - imageName = prop.getProperty(StringResources.IMAGE_NAME); + imageName = prop.getProperty(StringResources.IMAGE_NAME, ""); checkBaseImageName(); version = prop.getProperty(StringResources.IMAGE_VERSION, "2.4"); profile = prop.getProperty(StringResources.PRODUCT_PROFILE, PlatformStringResources.MobileProfile).toLowerCase(); @@ -258,19 +247,6 @@ public class BaseImage { return binaryVersion; } - // For usability : return last-created property. - public VMProperty getCreateProperty() { - File lastCreated = new File(lastCreatedPropertyPath); - - // Use last-created_xxx.xml - if(lastCreated.exists()) { - return EmulatorVMList.getInstance().parseXML(lastCreated); - } - - // Use standard.xml - return defaultProperty; - } - private void loadTemplate() { // load template File templateFile = new File(platform.platformPath + File.separator diff --git a/src/org/tizen/emulator/manager/platform/CustomBaseImage.java b/src/org/tizen/emulator/manager/platform/CustomBaseImage.java index 533d54f..ac615a0 100644 --- a/src/org/tizen/emulator/manager/platform/CustomBaseImage.java +++ b/src/org/tizen/emulator/manager/platform/CustomBaseImage.java @@ -33,7 +33,6 @@ import java.io.File; import java.io.IOException; import java.util.List; -import org.tizen.emulator.manager.resources.FilePathResources; import org.tizen.emulator.manager.resources.StringResources; import org.tizen.emulator.manager.vms.SKIN_SHAPE; import org.tizen.emulator.manager.vms.VMProperty; @@ -52,13 +51,10 @@ public class CustomBaseImage extends BaseImage { this.path = path; if (path != null && !path.isEmpty()) { - imageName = pathName = path.substring(path.lastIndexOf(File.separator)); + imageName = pathName = path.substring(path.lastIndexOf(File.separator) + 1); } settingProperty(platform); - - // TODO - initLastCreatedPropertyPath(); } private void settingProperty(Platform platform) { @@ -71,16 +67,6 @@ public class CustomBaseImage extends BaseImage { } @Override - protected void initLastCreatedPropertyPath() { - StringBuilder sb = new StringBuilder(); - sb.append(FilePathResources.getTizenVmsPath()).append(File.separator) - .append(StringResources.LAST_CREATED_XML_PREFIX).append("_") - .append(profile).append("-").append("custom").append("_") - .append(imageName).append(".xml"); - lastCreatedPropertyPath = sb.toString(); - } - - @Override public List getOptionList() { return platform.getCustomOptionList(); } diff --git a/src/org/tizen/emulator/manager/platform/Profile.java b/src/org/tizen/emulator/manager/platform/Profile.java index bc1a0ca..097b977 100644 --- a/src/org/tizen/emulator/manager/platform/Profile.java +++ b/src/org/tizen/emulator/manager/platform/Profile.java @@ -30,11 +30,15 @@ package org.tizen.emulator.manager.platform; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.tizen.emulator.manager.logging.EMLogger; +import org.tizen.emulator.manager.resources.FilePathResources; +import org.tizen.emulator.manager.resources.StringResources; +import org.tizen.emulator.manager.vms.EmulatorVMList; import org.tizen.emulator.manager.vms.VMProperty; import org.tizen.emulator.manager.vms.VMProperty.FSImageType; @@ -44,12 +48,15 @@ public class Profile { private List imageList = new ArrayList(); private List vmList = new ArrayList(); + protected String lastCreatedPropertyPath; + // for sort VM list private SortBy sortType = SortBy.DateDes; private boolean isSort = false; public Profile(String name) { this.name = name; + initLastCreatedPropertyPath(); } public String getName() { @@ -64,6 +71,46 @@ public class Profile { return platformList; } + public String getLastCreatedPropertyPath() { + return lastCreatedPropertyPath; + } + + protected void initLastCreatedPropertyPath() { + StringBuilder sb = new StringBuilder(); + sb.append(FilePathResources.getTizenVmsPath()).append(File.separator) + .append(StringResources.LAST_CREATED_XML_PREFIX).append("_") + .append(name).append(".xml"); + lastCreatedPropertyPath = sb.toString(); + } + + public BaseImage findBaseImage(VMProperty createProperty) { + // return base image + for(BaseImage image : imageList) { + if (createProperty.compareImage(image)) { + return image; + } + } + // return custom base image + Platform platform = ProfileList.getProfile(createProperty.getImageProfile()). + getPlatformByVersion(createProperty.getImageVersion()); + try { + return new CustomBaseImage(platform, createProperty.getBaseImagePath()); + } catch (IOException e) { + EMLogger.getLogger().warning("Failed to find baseimage. No platform"); + return null; + } + } + + public VMProperty getLastCreatedProperty() { + File lastCreated = new File(lastCreatedPropertyPath); + // Use last-created_xxx.xml + if(lastCreated.exists()) { + return EmulatorVMList.getInstance().parseXML(lastCreated); + } + + return null; + } + /** * * @param name profile + "-" + version diff --git a/src/org/tizen/emulator/manager/platform/ProfileList.java b/src/org/tizen/emulator/manager/platform/ProfileList.java index 4104fea..82e1827 100644 --- a/src/org/tizen/emulator/manager/platform/ProfileList.java +++ b/src/org/tizen/emulator/manager/platform/ProfileList.java @@ -246,12 +246,10 @@ public class ProfileList { // Get current last-created property file path. List currentPathList = new ArrayList(); for (Profile p : profileList) { - for (BaseImage image : p.getImageList()) { - currentPathList.add(image.getLastCreatedPropertyPath()); - } + currentPathList.add(p.getLastCreatedPropertyPath()); } - // Remove old last-created property. + // Remove legacy last-created property. File vms = new File(FilePathResources.getTizenVmsPath()); File[] files = vms.listFiles(); if (files != null) { diff --git a/src/org/tizen/emulator/manager/resources/StringResources.java b/src/org/tizen/emulator/manager/resources/StringResources.java index e128f99..2f6edbe 100644 --- a/src/org/tizen/emulator/manager/resources/StringResources.java +++ b/src/org/tizen/emulator/manager/resources/StringResources.java @@ -65,7 +65,6 @@ public class StringResources { public static final String EM_INFO_FILE = ".tizen-em-info"; public static final String MAC_ADDRESS="MAC_ADDRESS"; public static final String LAST_TAB_INDEX="LAST_TAB_INDEX"; - public static final String LAST_IMAGE_INDEX="LAST_IMAGE_INDEX"; //ArchitectureGroup public static final String GROUP_TITLE = "Emulator Architecture"; diff --git a/src/org/tizen/emulator/manager/tool/SettingInfoFile.java b/src/org/tizen/emulator/manager/tool/SettingInfoFile.java index 57d546d..8daa13c 100644 --- a/src/org/tizen/emulator/manager/tool/SettingInfoFile.java +++ b/src/org/tizen/emulator/manager/tool/SettingInfoFile.java @@ -320,23 +320,6 @@ public class SettingInfoFile { return index; } - // For image index reuse. - public static void setLastImageIndex(int index) { - setProperty(StringResources.LAST_IMAGE_INDEX, String.valueOf(index)); - } - public static int getLastImageIndex() { - int index = 0; - String value = getProperty(StringResources.LAST_IMAGE_INDEX); - try { - index = Integer.parseInt(value); - } catch (Exception e) { - EMLogger.addStaticLog("Failed to read last-image-index from property file. " +e.getMessage()); - index = 0; - } - - return index; - } - public static boolean setProperty(String name, String value) { String infoFilePath = null; infoFilePath = FilePathResources.getTizenVmsPath() diff --git a/src/org/tizen/emulator/manager/ui/VMsMainView.java b/src/org/tizen/emulator/manager/ui/VMsMainView.java index 5429ef6..b91b6a1 100644 --- a/src/org/tizen/emulator/manager/ui/VMsMainView.java +++ b/src/org/tizen/emulator/manager/ui/VMsMainView.java @@ -285,17 +285,27 @@ public class VMsMainView { } // TODO - drawCreateVM(currentProfile.getImageList().get(0), setFocus); + drawCreateVM(currentProfile, setFocus); } - public void drawCreateVM(BaseImage image, boolean setFocus) { + public void drawCreateVM(Profile profile, boolean setFocus) { setSetFocus(setFocus); if (!isCreateMode) { isCreateMode = true; - VMProperty createProperty = image.getCreateProperty(); - detailView.drawCreateVM( - new VMPropertyValue(image, createProperty)); + VMProperty lastCreatedProperty = profile.getLastCreatedProperty(); + BaseImage findImage = null; + if (lastCreatedProperty != null) { + findImage = profile.findBaseImage(lastCreatedProperty); + } + + if (findImage == null) { + detailView.drawCreateVM( + new VMPropertyValue(profile.getImageList().get(0))); + } else { + detailView.drawCreateVM( + new VMPropertyValue(findImage, lastCreatedProperty)); + } } } diff --git a/src/org/tizen/emulator/manager/ui/detail/item/property/BaseImageViewItem.java b/src/org/tizen/emulator/manager/ui/detail/item/property/BaseImageViewItem.java index 94b7399..6e4170f 100644 --- a/src/org/tizen/emulator/manager/ui/detail/item/property/BaseImageViewItem.java +++ b/src/org/tizen/emulator/manager/ui/detail/item/property/BaseImageViewItem.java @@ -47,7 +47,6 @@ import org.eclipse.swt.widgets.FileDialog; import org.tizen.emulator.manager.EmulatorManager; import org.tizen.emulator.manager.EmulatorManager.ManagerModeType; import org.tizen.emulator.manager.platform.BaseImage; -import org.tizen.emulator.manager.platform.Platform; import org.tizen.emulator.manager.platform.Profile; import org.tizen.emulator.manager.platform.ProfileList; import org.tizen.emulator.manager.resources.FontResources; @@ -201,7 +200,10 @@ public class BaseImageViewItem extends ComboViewItem { // Select image. int index = combo.getSelectionIndex(); - setCurrentBaseImage(index); + changePropertyView(baseImageItemList.get(index)); + if(isCreateMode()) { + getListener().changeCreateConfirmButton(); + } } @Override @@ -247,11 +249,13 @@ public class BaseImageViewItem extends ComboViewItem { EmulatorVMList.getInstance().CustomArch = !isArm ? "x86" : "arm"; - addCustomImageItem(new BaseImageItem(newPathName, - newPathName, newPath, profile, "", false, SKIN_SHAPE.NONE)); + BaseImageItem newItem = new BaseImageItem(newPathName, + newPathName, newPath, profile, "", false, SKIN_SHAPE.NONE); + addToBaseImageItemList(newItem); + storeCustomImage(newItem); + resetComboList(); + changePropertyView(newItem); - // filePathLabel.setText(newPathName); - // filePathLabel.redraw(); isSelected = true; getListener().changeCreateConfirmButton(); @@ -270,12 +274,11 @@ public class BaseImageViewItem extends ComboViewItem { this.value = value; this.profile = value.profile; - currentBaseImageItem.setFileName(value.baseImagePathName); - currentBaseImageItem.setFilePath(value.baseImagePath); - currentBaseImageItem.setStandard(value.isStandard); - currentBaseImageItem.setImageName(value.baseName); - currentBaseImageItem.setProfile(value.profile); - currentBaseImageItem.setSkinShape(value.skinShape); + currentBaseImageItem.setValue(value); + if (!value.isStandard) { + storeCustomImage(currentBaseImageItem); + } + isSelected = false; if (isCreateMode()) { @@ -319,12 +322,18 @@ public class BaseImageViewItem extends ComboViewItem { return ""; } + private void changePropertyView(BaseImageItem item) { + currentBaseImageItem = item; + setValue(value); + getListener().changePropertyView(value, isCreateMode()); + } + private void loadBaseImageItemList(String profileName) { baseImageItemList.clear(); Profile profile = ProfileList.getProfile(profileName); if (profile != null) { for (BaseImage img : profile.getImageList()) { - baseImageItemList.add(new BaseImageItem(img.getName(), img + addToBaseImageItemList(new BaseImageItem(img.getName(), img .getPathName(), img.getPath(), img.getProfile(), img.getVersion(), true, img.getSkinShape())); } @@ -334,17 +343,17 @@ public class BaseImageViewItem extends ComboViewItem { private void loadCustomImageItemList(String profile) { for (BaseImageItem customImageItem : customImageItemList) { if (customImageItem.getProfile().equals(profile)) { - baseImageItemList.add(new BaseImageItem(customImageItem)); + addToBaseImageItemList(new BaseImageItem(customImageItem)); } } } - private void addCustomImageItem(BaseImageItem customImageItem) { + private void addToBaseImageItemList(BaseImageItem baseImageItem) { // Check duplicated custom image. int index = -1; for (int i = 0; i < baseImageItemList.size(); i++) { BaseImageItem item = baseImageItemList.get(i); - if (item.equals(customImageItem)) { + if (item.equals(baseImageItem)) { index = i; break; } @@ -352,32 +361,26 @@ public class BaseImageViewItem extends ComboViewItem { if (index == -1) { // Add to image list - baseImageItemList.add(customImageItem); - // Setting combo list. - combo.add(customImageItem.getImageName()); - index = baseImageItemList.size() -1; - - customImageItemList.add(new BaseImageItem(customImageItem)); + if (checkBaseImageFile(baseImageItem.getFilePath())) { + baseImageItemList.add(baseImageItem); + } } - - combo.select(index); - setCurrentBaseImage(index); } - private void setCurrentBaseImage(int index) { - currentBaseImageItem = baseImageItemList.get(index); - -// if (currentBaseImageItem.isStandard()) { -// currentCustomImageItem = null; -// } else { -// currentCustomImageItem = currentBaseImageItem; -// } - - setValue(value); - getListener().changePropertyView(value, isCreateMode()); + private void storeCustomImage(BaseImageItem customImageItem) { + int index = -1; + for (int i = 0; i < customImageItemList.size(); i++) { + BaseImageItem item = customImageItemList.get(i); + if (item.equals(customImageItem)) { + index = i; + break; + } + } - if(isCreateMode()) { - getListener().changeCreateConfirmButton(); + if (index == -1) { + if (checkBaseImageFile(customImageItem.getFilePath())) { + customImageItemList.add(new BaseImageItem(customImageItem)); + } } } @@ -487,6 +490,16 @@ class BaseImageItem { return imageName; } + public void setValue(VMPropertyValue value) { + setFileName(value.baseImagePathName); + setFilePath(value.baseImagePath); + setStandard(value.isStandard); + setImageName(value.baseName); + setProfile(value.profile); + setSkinShape(value.skinShape); + setVersion(value.version); + } + public void setImageName(String imageName) { this.imageName = imageName; } diff --git a/src/org/tizen/emulator/manager/ui/list/ExtendTreeListView.java b/src/org/tizen/emulator/manager/ui/list/ExtendTreeListView.java index 3d36486..b4ba8f9 100644 --- a/src/org/tizen/emulator/manager/ui/list/ExtendTreeListView.java +++ b/src/org/tizen/emulator/manager/ui/list/ExtendTreeListView.java @@ -71,7 +71,7 @@ public class ExtendTreeListView extends TreeListView { typeItems.add(tempItem); createItem = new TreeItem(tempItem, SWT.NONE); - rowItem = new CreateMarker(createItem, p.getImageList().get(0)); + rowItem = new CreateMarker(createItem, p); createItem.setData(rowItem); createItems.add(createItem); /* diff --git a/src/org/tizen/emulator/manager/ui/list/RowItem.java b/src/org/tizen/emulator/manager/ui/list/RowItem.java index b7fee71..ebad3ac 100644 --- a/src/org/tizen/emulator/manager/ui/list/RowItem.java +++ b/src/org/tizen/emulator/manager/ui/list/RowItem.java @@ -34,6 +34,7 @@ import org.eclipse.swt.graphics.Font; import org.eclipse.swt.widgets.TreeItem; import org.tizen.emulator.manager.logging.EMLogger; import org.tizen.emulator.manager.platform.BaseImage; +import org.tizen.emulator.manager.platform.Profile; import org.tizen.emulator.manager.resources.FontResources; import org.tizen.emulator.manager.resources.ImageResources; import org.tizen.emulator.manager.ui.VMsMainView; @@ -98,18 +99,21 @@ class PropertyContent implements TreeContent { class CreateMarker implements TreeMarker { private BaseImage image = null; + private Profile profile = null; TreeItem item; - public CreateMarker(TreeItem item, BaseImage image) { + + public CreateMarker(TreeItem item, Profile profile) { item.setText("<< Create new... >>"); // TODO Font font = FontResources.TREE_CREATE_FONT.getFont(); item.setFont(font); - this.image =image; + this.profile = profile; + this.image =profile.getImageList().get(0); this.item = item; } - + public BaseImage getBaseImage() { return image; } @@ -117,6 +121,10 @@ class CreateMarker implements TreeMarker { public TreeItem getItem() { return item; } + + public Profile getProfile() { + return profile; + } } abstract class Container { diff --git a/src/org/tizen/emulator/manager/ui/list/TreeListView.java b/src/org/tizen/emulator/manager/ui/list/TreeListView.java index ca71697..9e1d117 100644 --- a/src/org/tizen/emulator/manager/ui/list/TreeListView.java +++ b/src/org/tizen/emulator/manager/ui/list/TreeListView.java @@ -175,7 +175,7 @@ public class TreeListView extends AbstractListView { case SWT.KEYPAD_CR: if(data instanceof CreateMarker) { VMsMainView.getInstance().drawCreateVM( - ((CreateMarker)data).getBaseImage(), true); + ((CreateMarker)data).getProfile(), true); return; } else if (data instanceof PropertyContent) { if (!VMsMainView.getInstance().isModifyMode()) { @@ -215,7 +215,7 @@ public class TreeListView extends AbstractListView { // TODO : select template using platform if (data instanceof CreateMarker) { VMsMainView.getInstance().drawCreateVM( - ((CreateMarker)data).getBaseImage(), false); + ((CreateMarker)data).getProfile(), false); //setSelectProperty(); vmsTree.setSelection(((CreateMarker) data).getItem()); isSelection = false; @@ -254,7 +254,7 @@ public class TreeListView extends AbstractListView { Profile profile = VMsMainView.getInstance().getProfile(); createItem = new TreeItem(vmsTree, SWT.NONE); - rowItem = new CreateMarker(createItem, profile.getImageList().get(0)); + rowItem = new CreateMarker(createItem, profile); createItem.setData(rowItem); VMProperty prop = null; diff --git a/src/org/tizen/emulator/manager/vms/Creator.java b/src/org/tizen/emulator/manager/vms/Creator.java index 19a19e6..b4e45b1 100644 --- a/src/org/tizen/emulator/manager/vms/Creator.java +++ b/src/org/tizen/emulator/manager/vms/Creator.java @@ -36,6 +36,8 @@ import java.util.ArrayList; import java.util.List; import org.tizen.emulator.manager.logging.EMLogger; +import org.tizen.emulator.manager.platform.Profile; +import org.tizen.emulator.manager.platform.ProfileList; import org.tizen.emulator.manager.platform.Skin; import org.tizen.emulator.manager.resources.FilePathResources; import org.tizen.emulator.manager.resources.StringResources; @@ -101,14 +103,20 @@ public class Creator { EmulatorVMList.getInstance().storeXML(property); // Save last created property file. - File f = new File(newVM.baseImage.getLastCreatedPropertyPath()); - boolean isCreated = true; - if (!f.exists()) { - try { - isCreated = f.createNewFile(); - } catch (IOException e) { - isCreated = false; - EMLogger.getLogger().warning(e.getMessage()); + boolean isCreated = false; + File f = null; + Profile p = ProfileList.getProfile(newVM.profile); + if (p != null) { + f = new File(p.getLastCreatedPropertyPath()); + if (!f.exists()) { + try { + isCreated = f.createNewFile(); + } catch (IOException e) { + isCreated = false; + EMLogger.getLogger().warning(e.getMessage()); + } + } else { + isCreated = true; } } if (isCreated) { diff --git a/src/org/tizen/emulator/manager/vms/VMProperty.java b/src/org/tizen/emulator/manager/vms/VMProperty.java index 7ddf071..edb732e 100644 --- a/src/org/tizen/emulator/manager/vms/VMProperty.java +++ b/src/org/tizen/emulator/manager/vms/VMProperty.java @@ -32,6 +32,7 @@ package org.tizen.emulator.manager.vms; import java.io.File; +import org.tizen.emulator.manager.platform.BaseImage; import org.tizen.emulator.manager.plugin.EMPlugin; import org.tizen.emulator.manager.plugin.ExtensionItem; import org.tizen.emulator.manager.plugin.PluginStringResources; @@ -220,6 +221,24 @@ public class VMProperty { return profile + "-" + version; } + public boolean compareImage(BaseImage image) { + // profile, version, base(image name), path + if (!image.getProfile().equals(getImageProfile())) { + return false; + } + if (!image.getVersion().equals(getImageVersion())) { + return false; + } + if (!image.getName().equals(getBaseImageName())) { + return false; + } + if (!image.getPath().equals(getBaseImagePath())) { + return false; + } + + return true; + } + public EmulatorConfiguration getConfiguration() { return configuration; } -- 2.7.4