VM property: Modified last-created VM property.
authorminkee.lee <minkee.lee@samsung.com>
Wed, 20 May 2015 07:09:28 +0000 (16:09 +0900)
committerminkee.lee <minkee.lee@samsung.com>
Wed, 20 May 2015 08:51:35 +0000 (17:51 +0900)
- Each profile has last-created VM property.

Change-Id: I66d5214a18bb980fc6d3b47380d10cbbf196f226
Signed-off-by: minkee.lee <minkee.lee@samsung.com>
13 files changed:
src/org/tizen/emulator/manager/platform/BaseImage.java
src/org/tizen/emulator/manager/platform/CustomBaseImage.java
src/org/tizen/emulator/manager/platform/Profile.java
src/org/tizen/emulator/manager/platform/ProfileList.java
src/org/tizen/emulator/manager/resources/StringResources.java
src/org/tizen/emulator/manager/tool/SettingInfoFile.java
src/org/tizen/emulator/manager/ui/VMsMainView.java
src/org/tizen/emulator/manager/ui/detail/item/property/BaseImageViewItem.java
src/org/tizen/emulator/manager/ui/list/ExtendTreeListView.java
src/org/tizen/emulator/manager/ui/list/RowItem.java
src/org/tizen/emulator/manager/ui/list/TreeListView.java
src/org/tizen/emulator/manager/vms/Creator.java
src/org/tizen/emulator/manager/vms/VMProperty.java

index e356ff6..f907680 100644 (file)
@@ -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
index 533d54f..ac615a0 100644 (file)
@@ -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<IOption> getOptionList() {
                return platform.getCustomOptionList();
        }
index bc1a0ca..097b977 100644 (file)
 
 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<BaseImage> imageList = new ArrayList<BaseImage>();
        private List<VMProperty> vmList = new ArrayList<VMProperty>();
 
+       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
index 4104fea..82e1827 100644 (file)
@@ -246,12 +246,10 @@ public class ProfileList {
                // Get current last-created property file path.
                List<String> currentPathList = new ArrayList<String>();
                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) {
index e128f99..2f6edbe 100644 (file)
@@ -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";
index 57d546d..8daa13c 100644 (file)
@@ -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()
index 5429ef6..b91b6a1 100644 (file)
@@ -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));
+                       }
                }
        }
 
index 94b7399..6e4170f 100644 (file)
@@ -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;
        }
index 3d36486..b4ba8f9 100644 (file)
@@ -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);
 /*
index b7fee71..ebad3ac 100644 (file)
@@ -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 {
index ca71697..9e1d117 100644 (file)
@@ -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;
index 19a19e6..b4e45b1 100644 (file)
@@ -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) {
index 7ddf071..edb732e 100644 (file)
@@ -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;
        }