Profile: sorting base image list and platform list
authorjihye424.kim <jihye424.kim@samsung.com>
Tue, 2 Jun 2015 08:43:01 +0000 (17:43 +0900)
committerjihye424.kim <jihye424.kim@samsung.com>
Fri, 5 Jun 2015 01:33:14 +0000 (10:33 +0900)
- add 'isAvailable' option to VMProperty
- if there are not plugin or item list(template.xml) in platform, can not launch emulator

Change-Id: I1c219f785edfc0a72543bfb48ec192677fecaec4
Signed-off-by: jihye424.kim <jihye424.kim@samsung.com>
src/org/tizen/emulator/manager/platform/Profile.java
src/org/tizen/emulator/manager/platform/ProfileList.java
src/org/tizen/emulator/manager/ui/VMsMainView.java
src/org/tizen/emulator/manager/ui/detail/PInfoViewPage.java
src/org/tizen/emulator/manager/ui/detail/PModifyViewPage.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/widgets/CommonVMButtonPainter.java
src/org/tizen/emulator/manager/ui/widgets/VMButton.java
src/org/tizen/emulator/manager/vms/VMProperty.java
src/org/tizen/emulator/manager/vms/VMPropertyValue.java

index 0bf1e98..d8f87de 100644 (file)
@@ -32,9 +32,9 @@ package org.tizen.emulator.manager.platform;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
 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;
@@ -51,7 +51,9 @@ public class Profile {
 
        // for sort VM list
        private SortBy sortType = SortBy.DateAsc;
-       private boolean isSort = false;
+       private boolean isSortVMList = false;
+
+       private boolean isSortPlatformList = false;
 
        public Profile(String name) {
                this.name = name;
@@ -89,14 +91,6 @@ public class Profile {
                                return image;
                        }
                }
-               /*
-               // return custom base image
-               Platform platform = ProfileList.getProfile(createProperty.getImageProfile()).
-                               getPlatformByVersion(createProperty.getImageVersion());
-               if (platform != null) {
-                       return new BaseImage(platform, createProperty.getBaseImagePath());
-               }
-               */
                return null;
        }
 
@@ -137,34 +131,21 @@ public class Profile {
                return getPlatformByName(name + "-" + version);
        }
 
-
        public Platform getPlatformByLatestVersion() {
-               Platform latest = null;
-               for (Platform platform :platformList){
-                       if (latest == null) {
-                               latest = platform;
-                       } else if ((platform.getVersion().compareTo(latest.getVersion()) > 0)) {
-                               latest = platform;
-                       }
+               if (!isSortPlatformList) {
+                       sortPlatformList();
                }
-               return latest;
+               return platformList.size() != 0
+                               ? platformList.get(0)
+                               : null;
        }
 
        public String getLatestPlatformVersion() {
-               float latest = 0;
-               float version;
-               for (Platform plt : platformList) {
-                       try {
-                               version = Float.parseFloat(plt.getVersion());
-                               if (version >= latest) {
-                                       latest = version;
-                               }
-                       } catch (NumberFormatException e) {
-                               EMLogger.getLogger().warning(e.getMessage());
-                               EMLogger.getLogger().warning("Wrong platform version : " + plt.getVersion());
-                       }
+               if (getPlatformByLatestVersion() != null) {
+                       return getPlatformByLatestVersion().getVersion();
+               } else {
+                       return "";
                }
-               return String.valueOf(latest);
        }
 
        public void addEmulator(VMProperty vm) {
@@ -173,15 +154,15 @@ public class Profile {
                        if (vm.getImageType().equals(FSImageType.standard)) {
                                for (BaseImage b : imageList) {
                                        if (vm.getBaseImagePath().equals(b.getPath())) {
-                                               vm.getPropertyValue().baseImage = b;
+                                               vm.getPropertyValue().setBaseImage(b);
                                                break;
                                        }
                                }
                        } else {
                                for (Platform p : platformList) {
                                        if (vm.getImagePlatform().equals(p.getName())) {
-                                               vm.getPropertyValue().baseImage
-                                                       = new BaseImage(p, vm.getBaseImagePath());
+                                               vm.getPropertyValue().setBaseImage(
+                                                       new BaseImage(p, vm.getBaseImagePath()));
                                        }
                                }
                        }
@@ -198,13 +179,13 @@ public class Profile {
 
        public void clearVMsList() {
                vmList.clear();
-               isSort = false;
+               isSortVMList = false;
        }
 
        public List<VMProperty> getEmulatorList() {
-               if (!isSort) {
+               if (!isSortVMList) {
                        sortVMList(sortType);
-                       isSort = true;
+                       isSortVMList = true;
                }
                return vmList;
        }
@@ -221,7 +202,11 @@ public class Profile {
        }
 
        public void addBaseImage(BaseImage base) {
-               imageList.add(base);
+               if (base.getType().equals("default")) {
+                       imageList.add(0, base);
+               } else {
+                       imageList.add(base);
+               }
        }
 
        public List<BaseImage> getImageList() {
@@ -231,4 +216,57 @@ public class Profile {
        public void setImageList(List<BaseImage> imageList) {
                this.imageList = imageList;
        }
+
+       public void sortPlatformList() {
+               isSortPlatformList = true;
+               PlatformPair[] pairs = new PlatformPair[platformList.size()];
+               for (int i = 0; i < platformList.size(); i++) {
+                       pairs[i] = new PlatformPair(platformList.get(i));
+               }
+
+               Arrays.sort(pairs);
+
+               for (int i = 0; i < platformList.size(); i++) {
+                       platformList.set(i, pairs[i].prop);
+               }
+       }
+
+       public void sortBaseImageList() {
+               ImagePair[] pairs = new ImagePair[imageList.size()];
+               for (int i = 0; i < imageList.size(); i++) {
+                       pairs[i] = new ImagePair(imageList.get(i));
+               }
+
+               Arrays.sort(pairs);
+
+               for (int i = 0; i < imageList.size(); i++) {
+                       imageList.set(i, pairs[i].prop);
+               }
+       }
+
+       static class PlatformPair implements Comparable<Object> {
+               Platform prop;
+
+               public PlatformPair(Platform platform) {
+                       this.prop = platform;
+               }
+
+               public int compareTo(Object o) {
+                       String u = ((PlatformPair) o).prop.getVersion();
+                       return u.compareTo(this.prop.getVersion());
+               }
+       }
+
+       static class ImagePair implements Comparable<Object> {
+               BaseImage prop;
+
+               public ImagePair(BaseImage base) {
+                       this.prop = base;
+               }
+
+               public int compareTo(Object o) {
+                       String u = ((ImagePair) o).prop.getVersion();
+                       return u.compareTo(this.prop.getVersion());
+               }
+       };
 }
index fc0f8d7..6964171 100644 (file)
@@ -107,6 +107,15 @@ public class ProfileList {
                        }
                }
 
+               for (Profile profile : profileList) {
+                       profile.sortBaseImageList();
+                       profile.sortPlatformList();
+                       // setting base image id and information
+                       for (BaseImage b : profile.getImageList()) {
+                               b.setID(imageID++);
+                       }
+               }
+
                // Check base image version()
                checkingBaseImageBinaryVersion();
                // Make emulator list
@@ -179,11 +188,6 @@ public class ProfileList {
                                }
                        }
                }
-
-               // setting base image id and information
-               for (BaseImage b : profile.getImageList()) {
-                       b.setID(imageID++);
-               }
        }
 
        public static void settingVMPropertyList() {
index dfffb59..3792e3c 100644 (file)
@@ -311,6 +311,7 @@ public class VMsMainView {
                                                if (image.getItemList() != null && image.getPlatform().getPlugin() != null) {
                                                        detailView.drawCreateVM(
                                                                        new VMPropertyValue(image));
+                                                       break;
                                                }
                                        }
                                } else {
index ca478a5..6d2056a 100644 (file)
@@ -30,7 +30,6 @@
 package org.tizen.emulator.manager.ui.detail;
 
 import java.util.ArrayList;
-import java.util.List;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
@@ -192,28 +191,48 @@ public class PInfoViewPage extends DetailViewPage {
                infoItemList = new ArrayList<InfoViewItemList>();
                ExtensionItem item = null;
                for (Profile profile : ProfileList.getProfileList()) {
-                       for (Platform platform : profile.getPlatformList()) {
-                               if (platform.getPlugin() != null) {
-                                       item = platform.getPlugin().getExtensionItem(PluginStringResources.ItemFactory);
-                                       if (item != null) {
-                                               List<ItemList> templateList = new ArrayList<ItemList>();
-                                               for (BaseImage image : profile.getImageList()) {
-                                                       if (!image.getPlatform().equals(platform)) {
-                                                               continue;
-                                                       }
-                                                       ItemList template = image.getItemList();
-                                                       if (template != null) {
-                                                               templateList.add(template);
-                                                               infoItemList.add(new InfoViewItemList(item, this.getItemListComposite(),
-                                                                               template, platform, image.getName(), false));
-                                                       }
-                                               }
-                                               // add item list for custom.
-                                               infoItemList.add(new InfoViewItemList(item, this.getItemListComposite(),
-                                                               platform.getCustomItemList(), platform, null, true));
+                       for (BaseImage base : profile.getImageList()) {
+                               if (base.getPlatform().getPlugin() == null) {
+                                       continue;
+                               }
+                               item = base.getPlatform().getPlugin().getExtensionItem(
+                                               PluginStringResources.ItemFactory);
+                               if (item == null) {
+                                       continue;
+                               }
+                               ItemList template = base.getItemList();
+                               if (template == null) {
+                                       continue;
+                               }
+
+                               if (template != null) {
+                                       infoItemList.add(new InfoViewItemList(item, this.getItemListComposite(),
+                                                       template, base.getPlatform(), base.getName(), false));
+                               }
+                       }
+                       // add item list for custom
+                       InfoViewItemList customItemList = null;
+                       Platform platform = profile.getPlatformByLatestVersion();
+                       if (platform.getPlugin() != null
+                                       && platform.getCustomItemList() != null) {
+                               item = platform.getPlugin().getExtensionItem(
+                                               PluginStringResources.ItemFactory);
+                               customItemList = new InfoViewItemList(item, this.getItemListComposite(),
+                                               profile.getPlatformByLatestVersion().getCustomItemList(),
+                                               profile.getPlatformByLatestVersion(), null, true);
+                       } else {
+                               for (Platform p : profile.getPlatformList()) {
+                                       if (p.getPlugin() != null && p.getCustomItemList() != null) {
+                                               item = p.getPlugin().getExtensionItem(
+                                                               PluginStringResources.ItemFactory);
+                                               customItemList = new InfoViewItemList(item, this.getItemListComposite(),
+                                                               p.getCustomItemList(), p, null, true);
                                        }
                                }
                        }
+                       if (customItemList != null) {
+                               infoItemList.add(customItemList);
+                       }
                }
        }
 
@@ -274,7 +293,7 @@ public class PInfoViewPage extends DetailViewPage {
                        deleteButton.setEnabled(false);
                        resetButton.setEnabled(false);
                } else {
-                       modifyButton.setEnabled(true);
+                       modifyButton.setEnabled(property.isAvailable());
                        exportButton.setEnabled(true);
                        deleteButton.setEnabled(true);
                        resetButton.setEnabled(true);
index 101c252..a962290 100644 (file)
@@ -30,7 +30,6 @@
 package org.tizen.emulator.manager.ui.detail;
 
 import java.util.ArrayList;
-import java.util.List;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
@@ -164,34 +163,57 @@ public class PModifyViewPage extends DetailViewPage
 
        private ArrayList<ModifyViewItemList> modifyItemList;
        private TextDetailBox emptyView;
+
        private void makeModifyView() {
                emptyView = new TextDetailBox(this.getItemListComposite(),
                                                                "Failed to load template");
+
                modifyItemList = new ArrayList<ModifyViewItemList>();
                ExtensionItem item = null;
                for(Profile profile : ProfileList.getProfileList()) {
-                       for (Platform platform : profile.getPlatformList()) {
-                               if (platform.getPlugin() != null) {
-                                       item = platform.getPlugin().getExtensionItem(PluginStringResources.ItemFactory);
-                                       if (item != null) {
-                                               List<ItemList> templateList = new ArrayList<ItemList>();
-                                               for (BaseImage image : profile.getImageList()) {
-                                                       if (!image.getPlatform().equals(platform)) {
-                                                               continue;
-                                                       }
-                                                       ItemList template = image.getItemList();
-                                                       if (template != null) {
-                                                               templateList.add(template);
-                                                               modifyItemList.add(new ModifyViewItemList(item, this,
-                                                                               template, platform, image.getName(), false));
-                                                       }
-                                               }
-                                               // add item list for custom.
-                                               modifyItemList.add(new ModifyViewItemList(item, this,
-                                                               platform.getCustomItemList(), platform, null, true));
+                       for (BaseImage base : profile.getImageList()) {
+                               if (base.getPlatform().getPlugin() == null) {
+                                       continue;
+                               }
+                               item = base.getPlatform().getPlugin().getExtensionItem(
+                                               PluginStringResources.ItemFactory);
+                               if (item == null) {
+                                       continue;
+                               }
+                               ItemList template = base.getItemList();
+                               if (template == null) {
+                                       continue;
+                               }
+
+                               if (template != null) {
+                                       modifyItemList.add(new ModifyViewItemList(item, this,
+                                                       template, base.getPlatform(), base.getName(), false));
+                               }
+                       }
+
+                       // add item list for custom
+                       ModifyViewItemList customItemList = null;
+                       Platform platform = profile.getPlatformByLatestVersion();
+                       if (platform.getPlugin() != null
+                                       && platform.getCustomItemList() != null) {
+                               item = platform.getPlugin().getExtensionItem(
+                                               PluginStringResources.ItemFactory);
+                               customItemList = new ModifyViewItemList(item, this,
+                                               profile.getPlatformByLatestVersion().getCustomItemList(),
+                                               profile.getPlatformByLatestVersion(), null, true);
+                       } else {
+                               for (Platform p : profile.getPlatformList()) {
+                                       if (p.getPlugin() != null && p.getCustomItemList() != null) {
+                                               item = p.getPlugin().getExtensionItem(
+                                                               PluginStringResources.ItemFactory);
+                                               customItemList = new ModifyViewItemList(item, this,
+                                                               p.getCustomItemList(), p, null, true);
                                        }
                                }
                        }
+                       if (customItemList != null) {
+                               modifyItemList.add(customItemList);
+                       }
                }
        }
 
@@ -369,7 +391,6 @@ public class PModifyViewPage extends DetailViewPage
                                                if (errorItem == null || !errorItem.getItemState().isError()) {
                                                        errorItem = viewItem;
                                                }
-
                                        } else if (viewItem.getItemState().isWarning()) {
                                                if (errorItem == null || errorItem.getItemState().isNormal()) {
                                                        errorItem = viewItem;
@@ -476,11 +497,14 @@ class ModifyViewItemList extends ViewItemList{
        }
 
        private void makeItemList(PModifyViewPage page, ItemList deviceItemList, boolean isCustom) {
-               IItemListFactory f = (IItemListFactory)(exItem.getInstance());
-               itemList = new ArrayList<IModifyViewItem>();
-//             itemList = f.getModifyItemList(deviceItemList);
-               if (f != null) {
-                       f.makeItemList(itemList, deviceItemList, isCustom);
+               if (exItem == null) {
+                       // TODO
+               } else {
+                       IItemListFactory f = (IItemListFactory)(exItem.createInstance());
+                       itemList = new ArrayList<IModifyViewItem>();
+                       if (f != null) {
+                               f.makeItemList(itemList, deviceItemList, isCustom);
+                       }
                }
        }
 
index b4ba8f9..57c44f1 100644 (file)
@@ -177,7 +177,9 @@ public class ExtendTreeListView extends TreeListView {
                packAll();  // FIXME: Need second pack avoid column becomes too narrow... why ???
 
                if (currentItem == null) {
-                       currentItem = vmsTree.getItem(0);
+                       if (vmsTree.getItemCount() > 0) {
+                               currentItem = vmsTree.getItem(0);
+                       }
                }
 
                setSelectProperty();
index 78ebb3a..41662f3 100644 (file)
@@ -71,7 +71,7 @@ class PropertyContent implements TreeContent {
        }
 
        public void setImage() {
-               if (property.isRunning()) {
+               if (property.isRunning() || !property.isAvailable()) {
                        item.setImage(0, ImageResources.LAUNCH_DISABLE.getImage());
                } else {
                        item.setImage(0, ImageResources.LAUNCH.getImage());
@@ -79,7 +79,7 @@ class PropertyContent implements TreeContent {
        }
 
        public void launchVM() {
-               if (property != null && !property.isRunning()) {
+               if (property != null && !property.isRunning() && property.isAvailable()) {
                        VMsMainView.getInstance().launchEmulator(property);
 
                        // add cool time
index ef951f7..32477fc 100644 (file)
@@ -74,7 +74,8 @@ public abstract class CommonVMButtonPainter implements PaintListener {
                }
 
                if (button.getProperty() != null) {
-                       if (button.getProperty().isRunning()) {
+                       if (button.getProperty().isRunning()
+                                       || !button.getProperty().isAvailable()) {
                                button.getLaunchButton().setEnabled(false);
                        } else {
                                button.getLaunchButton().setEnabled(true);
@@ -90,10 +91,9 @@ public abstract class CommonVMButtonPainter implements PaintListener {
                                                        .getImage(button.getPlatformName(), skinShape);
                                }
                        }
-               }
-
-               if (image == null) {
-                       return;
+                       if (image == null) {
+                               return;
+                       }
                }
 
                Rectangle rect = ((Canvas) e.widget).getClientArea();
index a2fd9cf..62f032f 100644 (file)
@@ -199,7 +199,7 @@ public class VMButton extends ImageButton {
        }
 
        public void clickLaunchButton() {
-               if (property != null && !property.isRunning()) {
+               if (property != null && !property.isRunning() && property.isAvailable()) {
                        VMsMainView.getInstance().launchEmulator(property);
                        // add cool time
                        synchronized(this) {
@@ -307,10 +307,20 @@ public class VMButton extends ImageButton {
                        }
 
                        if (getProperty() != null) {
-                               if (getProperty().isRunning()) {
-                                       getLaunchButton().setEnabled(false);
-                               } else {
-                                       getLaunchButton().setEnabled(true);
+                               getLaunchButton().setEnabled(false);
+
+                               // If VM is custom,
+                               if (!button.getProperty().getPropertyValue().baseImage.isStandard()) {
+                                       if (state == WSTATE.HOVER || state == WSTATE.SELECTED_HOVER) {
+                                               image = PluginImageResources.VM_IMAGE_CUSTOM_HOVER
+                                                               .getImage(button.getPlatformName(), skinShape);
+                                       } else {
+                                               image = PluginImageResources.VM_IMAGE_CUSTOM_NORMAL
+                                                               .getImage(button.getPlatformName(), skinShape);
+                                       }
+                               }
+                               if (image == null) {
+                                       return;
                                }
                        }
 
index e6b2ec4..b10a812 100644 (file)
@@ -52,6 +52,8 @@ public class VMProperty {
        private VMPropertyValue value = null;
 
        private boolean isRunning = false;
+       // Is it possible to launch emulator or not?
+       private boolean isAvailable = true;
 
        @Override
        public boolean equals(Object obj) {
@@ -280,6 +282,14 @@ public class VMProperty {
                }
        }
 
+       public boolean isAvailable() {
+               return isAvailable;
+       }
+
+       public void setAvailable(boolean isAvailable) {
+               this.isAvailable = isAvailable;
+       }
+
        public enum Architecture {
                x86("x86"), ARM("arm");
 
index 1ab0b75..fb00d9b 100644 (file)
@@ -107,10 +107,8 @@ public class VMPropertyValue implements Cloneable {
                        return;
                }
 
-               this.baseImage  = image;
                this.template   = template;
-
-               baseImagePath = image.getPath();
+               this.setBaseImage(image);
 
                settingConfigure(template);
        }
@@ -137,6 +135,21 @@ public class VMPropertyValue implements Cloneable {
                }
        }
 
+       public void setBaseImage(BaseImage image) {
+               if (image == null) {
+                       template.setAvailable(false);
+                       return;
+               }
+
+               this.baseImage  = image;
+
+               baseImagePath = image.getPath();
+               if (image.getPlatform().getPlugin() == null
+                               || image.getItemList() == null) {
+                       template.setAvailable(false);
+               }
+       }
+
        @Override
        public VMPropertyValue clone() {
                VMPropertyValue dest = new VMPropertyValue();