Federico Simoncelli has uploaded a new change for review.

Change subject: core: add repo_file_id to repo_file_meta_data
......................................................................

core: add repo_file_id to repo_file_meta_data

In order to support image repositories that define an id and a friendly
name for the images the two fields have been separated.

Change-Id: I2791fa22820fc021938709f4a921ab4d6213fab7
Signed-off-by: Federico Simoncelli <fsimo...@redhat.com>
---
M backend/manager/dbscripts/create_views.sql
M backend/manager/dbscripts/repo_files_meta_data_sp.sql
A backend/manager/dbscripts/upgrade/03_03_0040_repo_file_id.sql
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RepoFileMetaData.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAOTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendFilesResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendFilesResourceTest.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/GlanceStorageModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageIsoListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.ui.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java
22 files changed, 584 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/13958/1

diff --git a/backend/manager/dbscripts/create_views.sql 
b/backend/manager/dbscripts/create_views.sql
index 94ca169..649ac61 100644
--- a/backend/manager/dbscripts/create_views.sql
+++ b/backend/manager/dbscripts/create_views.sql
@@ -91,7 +91,7 @@
                        storage_domain_static.storage_domain_type as 
storage_domain_type,
                storage_pool_iso_map.storage_pool_id as storage_pool_id,
                storage_pool_iso_map.status as storage_domain_status,
-       repo_file_meta_data.repo_file_name as repo_file_name,
+       repo_file_meta_data.repo_image_id as repo_image_id,
                repo_file_meta_data.size as size,
                repo_file_meta_data.date_created as date_created,
                repo_file_meta_data.last_refreshed as last_refreshed,
diff --git a/backend/manager/dbscripts/repo_files_meta_data_sp.sql 
b/backend/manager/dbscripts/repo_files_meta_data_sp.sql
index 0ee6422..6b57b7b 100644
--- a/backend/manager/dbscripts/repo_files_meta_data_sp.sql
+++ b/backend/manager/dbscripts/repo_files_meta_data_sp.sql
@@ -2,7 +2,8 @@
 -- [repo_file_meta_data] Table
 --
 Create or replace FUNCTION InsertRepo_domain_file_meta_data(v_repo_domain_id 
UUID,
-    v_repo_file_name VARCHAR(256),
+    v_repo_image_id VARCHAR(256),
+    v_repo_image_name VARCHAR(256),
     v_size BIGINT,
     v_date_created TIMESTAMP WITH TIME ZONE,
     v_last_refreshed BIGINT,
@@ -11,8 +12,10 @@
    AS $procedure$
 BEGIN
 
-INSERT INTO repo_file_meta_data(repo_domain_id, repo_file_name, size, 
date_created, last_refreshed, file_type)
-    VALUES(v_repo_domain_id, v_repo_file_name, v_size, v_date_created, 
v_last_refreshed, v_file_type);
+INSERT INTO repo_file_meta_data(repo_domain_id, repo_image_id, 
repo_image_name, size, date_created,
+        last_refreshed, file_type)
+    VALUES(v_repo_domain_id, v_repo_image_id, v_repo_image_name, v_size, 
v_date_created,
+        v_last_refreshed, v_file_type);
 
 END; $procedure$
 LANGUAGE plpgsql;
diff --git a/backend/manager/dbscripts/upgrade/03_03_0040_repo_file_id.sql 
b/backend/manager/dbscripts/upgrade/03_03_0040_repo_file_id.sql
new file mode 100644
index 0000000..e7143e7
--- /dev/null
+++ b/backend/manager/dbscripts/upgrade/03_03_0040_repo_file_id.sql
@@ -0,0 +1,3 @@
+-- The current file names from now on will be used as images id in the ISO 
domains
+ALTER TABLE repo_file_meta_data RENAME COLUMN repo_file_name TO repo_image_id;
+ALTER TABLE repo_file_meta_data ADD COLUMN repo_image_name VARCHAR(256);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
index 201866d..e057eb1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java
@@ -515,7 +515,7 @@
                                 repo_md.setSize(0);
                                 repo_md.setRepoDomainId(repoStorageDomainId);
                                 repo_md.setDateCreated(null);
-                                repo_md.setRepoFileName(isoFile);
+                                repo_md.setRepoImageId(isoFile);
                                 repo_md.setFileType(imageType);
                                 repoFileMetaDataDao.addRepoFileMap(repo_md);
                             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
index bed660b..98231d9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java
@@ -607,7 +607,7 @@
             Version bestClusterVer = null;
             int bestToolVer = 0;
             for (RepoFileMetaData map : repoFilesMap) {
-                String fileName = map.getRepoFileName() != null ? 
map.getRepoFileName() : "";
+                String fileName = map.getRepoImageId() != null ? 
map.getRepoImageId() : "";
                 Matcher matchToolPattern =
                         
Pattern.compile(IsoDomainListSyncronizer.getRegexToolPattern()).matcher(fileName);
                 if (matchToolPattern.find()) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
index 7bba146..49f9ff4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java
@@ -302,7 +302,7 @@
                 List<RepoFileMetaData> repoFileNameList = 
(List<RepoFileMetaData>) ret.getReturnValue();
                 if (repoFileNameList != null) {
                     for (RepoFileMetaData isoFileMetaData : 
(List<RepoFileMetaData>) ret.getReturnValue()) {
-                        if 
(isoFileMetaData.getRepoFileName().equals(runParams.getDiskPath())) {
+                        if 
(isoFileMetaData.getRepoImageId().equals(runParams.getDiskPath())) {
                             retValForIso = true;
                             break;
                         }
@@ -325,7 +325,7 @@
                 if (repoFileNameList != null) {
 
                     for (RepoFileMetaData isoFileMetaData : 
(List<RepoFileMetaData>) ret.getReturnValue()) {
-                        if 
(isoFileMetaData.getRepoFileName().equals(runParams.getFloppyPath())) {
+                        if 
(isoFileMetaData.getRepoImageId().equals(runParams.getFloppyPath())) {
                             retValForFloppy = true;
                             break;
                         }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RepoFileMetaData.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RepoFileMetaData.java
index b05cbe2..d3e5620 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RepoFileMetaData.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/RepoFileMetaData.java
@@ -15,7 +15,8 @@
     private VDSStatus vdsStatus;
     private Guid repoDomainId = new Guid();
     private StorageDomainStatus storageDomainStatus;
-    private String repoFileName;
+    private String repoImageId;
+    private String repoImageName;
     private long size = 0;
     private Date dateCreated = new Date();
     private long lastRefreshed;
@@ -103,18 +104,48 @@
     }
 
     /**
-     * @param repoFileName
-     *            the repository file name to set
+     * @param repoImageId
+     *            the repository image id to set
      */
-    public void setRepoFileName(String repoFileName) {
-        this.repoFileName = repoFileName;
+    public void setRepoImageId(String repoImageId) {
+        this.repoImageId = repoImageId;
     }
 
     /**
-     * @return the repository file name.
+     * @return the repository image id
      */
-    public String getRepoFileName() {
-        return repoFileName;
+    public String getRepoImageId() {
+        return repoImageId;
+    }
+
+    /**
+     * @param repoImageName
+     *            the repository image name to set
+     */
+    public void setRepoImageName(String repoImageName) {
+        this.repoImageName = repoImageName;
+    }
+
+    /**
+     * @return the repository image name
+     */
+    public String getRepoImageName() {
+        return repoImageName;
+    }
+
+    /**
+     * @return the repository image title to be displayed
+     */
+    public String getRepoImageTitle() {
+        if (repoImageName != null) {
+            /* To provide an hint about the image id and at the same time
+             * maintain the image title short we just report 7 characters
+             * of the id (similarly to what git does with hashes).
+             */
+            return repoImageName + " (" + repoImageId.substring(0, 7) + ")";
+        } else {
+            return repoImageId;
+        }
     }
 
     /**
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAODbFacadeImpl.java
index 5715054..38a8638 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAODbFacadeImpl.java
@@ -40,7 +40,8 @@
     public void addRepoFileMap(RepoFileMetaData map) {
         MapSqlParameterSource parameterSource =
                 getCustomMapSqlParameterSource().addValue("repo_domain_id", 
map.getRepoDomainId())
-                        .addValue("repo_file_name", map.getRepoFileName())
+                        .addValue("repo_image_id", map.getRepoImageId())
+                        .addValue("repo_image_name", map.getRepoImageName())
                         .addValue("size", map.getSize())
                         .addValue("date_created", map.getDateCreated())
                         .addValue("last_refreshed", map.getLastRefreshed())
@@ -108,7 +109,8 @@
         public RepoFileMetaData mapRow(ResultSet rs, int rowNum) throws 
SQLException {
             RepoFileMetaData entity = new RepoFileMetaData();
             
entity.setRepoDomainId(Guid.createGuidFromString(rs.getString("repo_domain_id")));
-            entity.setRepoFileName(rs.getString("repo_file_name"));
+            entity.setRepoImageId(rs.getString("repo_image_id"));
+            entity.setRepoImageName(rs.getString("repo_image_name"));
             entity.setSize(rs.getLong("size"));
             entity.setDateCreated((Date) rs.getObject("date_created"));
             entity.setLastRefreshed(rs.getLong("last_refreshed"));
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAOTest.java
index 94ea821..8234b89 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/RepoFileMetaDataDAOTest.java
@@ -207,8 +207,8 @@
         assertSame(true, !listOfRepoFiles.isEmpty());
         assertSame(
                 true,
-                listOfRepoFiles.get(0).getRepoFileName()
-                        .equals(newRepoFileMap.getRepoFileName()));
+                listOfRepoFiles.get(0).getRepoImageId()
+                        .equals(newRepoFileMap.getRepoImageId()));
         assertSame(true,
                 listOfRepoFiles.get(0).getLastRefreshed() == newRepoFileMap
                         .getLastRefreshed());
@@ -237,9 +237,9 @@
         assertNotSame(true, listOfRepoFiles.isEmpty());
         RepoFileMetaData repoFile = listOfRepoFiles.get(0);
         assertNotNull(repoFile);
-        String oldRepoFileName = repoFile.getRepoFileName();
-        newRepoFileMap.setRepoFileName("updatedFileName"
-                + newRepoFileMap.getRepoFileName());
+        String oldRepoImageId = repoFile.getRepoImageId();
+        newRepoFileMap.setRepoImageId("updatedFileName"
+                + newRepoFileMap.getRepoImageId());
 
         // Remove the file from cache table
         
repoFileMetaDataDao.removeRepoDomainFileList(FixturesTool.STORAGE_DOAMIN_NFS_ISO,
 ImageFileType.ISO);
@@ -256,7 +256,7 @@
         assertNotNull(repoFile);
 
         // Check if not same file name as in the old file.
-        assertNotSame(oldRepoFileName, newRepoFile.getRepoFileName());
+        assertNotSame(oldRepoImageId, newRepoFile.getRepoImageId());
     }
 
     /**
@@ -301,7 +301,7 @@
     private static RepoFileMetaData getNewIsoRepoFile() {
         RepoFileMetaData newRepoFileMap = new RepoFileMetaData();
         newRepoFileMap.setFileType(ImageFileType.ISO);
-        newRepoFileMap.setRepoFileName("isoDomain.iso");
+        newRepoFileMap.setRepoImageId("isoDomain.iso");
         newRepoFileMap.setLastRefreshed(System.currentTimeMillis());
         newRepoFileMap.setSize(0);
         newRepoFileMap.setDateCreated(null);
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 050ef7a..e672c9c 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -3863,7 +3863,7 @@
 
     <table name="repo_file_meta_data">
         <column>repo_domain_id</column>
-        <column>repo_file_name</column>
+        <column>repo_image_id</column>
         <column>size</column>
         <column>last_refreshed</column>
         <column>file_type</column>
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendFilesResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendFilesResource.java
index 575449a..411af64 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendFilesResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendFilesResource.java
@@ -79,7 +79,7 @@
                                     queryParams);
         List<String> fileNames = new LinkedList<String>();
         for (RepoFileMetaData file : files) {
-            fileNames.add(file.getRepoFileName());
+            fileNames.add(file.getRepoImageId());
         }
         return fileNames;
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendFilesResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendFilesResourceTest.java
index fbc7ebd..83257bf 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendFilesResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendFilesResourceTest.java
@@ -197,7 +197,7 @@
         List<RepoFileMetaData> isos = new ArrayList<RepoFileMetaData>();
         for (int i = 0; i < NAMES.length; i++) {
             RepoFileMetaData file = new RepoFileMetaData();
-            file.setRepoFileName(NAMES[i]);
+            file.setRepoImageId(NAMES[i]);
             isos.add(file);
         }
         return isos;
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index cb836ed..b7b3337 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -251,7 +251,7 @@
                     ArrayList<String> fileNameList = new ArrayList<String>();
                     for (RepoFileMetaData RepoFileMetaData : repoList)
                     {
-                        fileNameList.add(RepoFileMetaData.getRepoFileName());
+                        fileNameList.add(RepoFileMetaData.getRepoImageId());
                     }
 
                     Collections.sort(fileNameList, new 
Linq.CaseInsensitiveComparer());
@@ -277,7 +277,7 @@
                     ArrayList<String> fileNameList = new ArrayList<String>();
                     for (RepoFileMetaData RepoFileMetaData : repoList)
                     {
-                        fileNameList.add(RepoFileMetaData.getRepoFileName());
+                        fileNameList.add(RepoFileMetaData.getRepoImageId());
                     }
 
                     Collections.sort(fileNameList, new 
Linq.CaseInsensitiveComparer());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/GlanceStorageModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/GlanceStorageModel.java
new file mode 100644
index 0000000..3e8c351
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/GlanceStorageModel.java
@@ -0,0 +1,137 @@
+package org.ovirt.engine.ui.uicommonweb.models.storage;
+
+import org.ovirt.engine.core.common.businessentities.StorageDomainType;
+import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
+
+@SuppressWarnings("unused")
+public class GlanceStorageModel extends Model implements IStorageModel {
+
+    private UICommand updateCommand;
+
+    @Override
+    public UICommand getUpdateCommand() {
+        return updateCommand;
+    }
+
+    private void setUpdateCommand(UICommand value) {
+        updateCommand = value;
+    }
+
+    private StorageModel container;
+
+    @Override
+    public StorageModel getContainer() {
+        return container;
+    }
+
+    @Override
+    public void setContainer(StorageModel value) {
+        container = value;
+    }
+
+    private StorageDomainType privateRole = StorageDomainType.values()[0];
+
+    @Override
+    public StorageDomainType getRole() {
+        return privateRole;
+    }
+
+    @Override
+    public void setRole(StorageDomainType value) {
+        privateRole = value;
+    }
+
+    private EntityModel glanceUrl;
+
+    public EntityModel getGlanceUrl() {
+        return glanceUrl;
+    }
+
+    private void setGlanceUrl(EntityModel value) {
+        glanceUrl = value;
+    }
+
+    private EntityModel keystoneUrl;
+
+    public EntityModel getKeystoneUrl() {
+        return keystoneUrl;
+    }
+
+    private void setKeystoneUrl(EntityModel value) {
+        keystoneUrl = value;
+    }
+
+    private EntityModel glanceTenantId;
+
+    public EntityModel getGlanceTenantId() {
+        return glanceTenantId;
+    }
+
+    private void setGlanceTenantId(EntityModel value) {
+        glanceTenantId = value;
+    }
+
+    private EntityModel glanceTenantName;
+
+    public EntityModel getGlanceTenantName() {
+        return glanceTenantName;
+    }
+
+    private void setGlanceTenantName(EntityModel value) {
+        glanceTenantName = value;
+    }
+
+    private EntityModel glanceUsername;
+
+    public EntityModel getGlanceUsername() {
+        return glanceUsername;
+    }
+
+    private void setGlanceUsername(EntityModel value) {
+        glanceUsername = value;
+    }
+
+    private EntityModel glancePassword;
+
+    public EntityModel getGlancePassword() {
+        return glancePassword;
+    }
+
+    private void setGlancePassword(EntityModel value) {
+        glancePassword = value;
+    }
+
+    public GlanceStorageModel() {
+        setUpdateCommand(new UICommand("Update", this)); //$NON-NLS-1$
+
+        setGlanceUrl(new EntityModel());
+        setKeystoneUrl(new EntityModel());
+        setGlanceTenantId(new EntityModel());
+        setGlanceTenantName(new EntityModel());
+        setGlanceUsername(new EntityModel());
+        setGlancePassword(new EntityModel());
+    }
+
+    @Override
+    public boolean Validate() {
+        getGlanceUrl().ValidateEntity(
+            new IValidation[] {
+                new NotEmptyValidation(),
+            }
+        );
+
+        /* FIXME: to be completed */
+
+        return getGlanceUrl().getIsValid();
+    }
+
+    @Override
+    public StorageType getType() {
+        return StorageType.GLANCE;
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java
index e31a99a..877abf7 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/NewEditStorageModelBehavior.java
@@ -74,13 +74,14 @@
                 dataCenter.getId().equals(StorageModel.UnassignedDataCenterId);
 
         boolean isData = item.getRole() == StorageDomainType.Data;
+        boolean isImage = item.getRole() == StorageDomainType.Image;
         boolean isExportOrIso = item.getRole() == 
StorageDomainType.ImportExport || item.getRole() == StorageDomainType.ISO;
 
         boolean canAttachData = isData && item.getType() == 
dataCenter.getstorage_pool_type();
         boolean canAttachExportOrIso = isExportOrIso && 
isNoExportOrIsoStorageAttached &&
                 dataCenter.getstatus() != StoragePoolStatus.Uninitialized;
 
-        model.setIsSelectable(isExistingStorage || (isNoneDataCenter && 
isData) ||
+        model.setIsSelectable(isExistingStorage || (isNoneDataCenter && 
(isData || isImage)) ||
                 (!isNoneDataCenter && (canAttachData || 
canAttachExportOrIso)));
 
         OnStorageModelUpdated(item);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageIsoListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageIsoListModel.java
index 4dad952..188c6e5 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageIsoListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageIsoListModel.java
@@ -170,7 +170,7 @@
                 Collections.sort(repoFileList, new 
Comparator<RepoFileMetaData>() {
                     @Override
                     public int compare(RepoFileMetaData a, RepoFileMetaData b) 
{
-                        return 
a.getRepoFileName().compareToIgnoreCase(b.getRepoFileName());
+                        return 
a.getRepoImageId().compareToIgnoreCase(b.getRepoImageId());
                     }
                 });
 
@@ -178,8 +178,8 @@
 
                 for (RepoFileMetaData repoFileItem : repoFileList) {
                     EntityModel entityItem = new EntityModel();
-                    entityItem.setHashName(repoFileItem.getRepoFileName());
-                    entityItem.setTitle(repoFileItem.getRepoFileName());
+                    entityItem.setHashName(repoFileItem.getRepoImageId());
+                    entityItem.setTitle(repoFileItem.getRepoImageTitle());
                     entityItem.setEntity(repoFileItem.getFileType());
                     entityList.add(entityItem);
                 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
index 6941b5d..e006d61 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
@@ -314,6 +314,10 @@
         GlusterDataModel.setRole(StorageDomainType.Data);
         items.add(GlusterDataModel);
 
+        GlanceStorageModel GlanceImageModel = new GlanceStorageModel();
+        GlanceImageModel.setRole(StorageDomainType.Image);
+        items.add(GlanceImageModel);
+
         model.setItems(items);
 
         model.Initialize();
@@ -395,6 +399,10 @@
 
             case GLUSTERFS:
                 item = prepareGlusterStorageForEdit(storage);
+                break;
+
+            case GLANCE:
+                item = prepareGlanceStorageForEdit(storage);
                 break;
         }
 
@@ -565,6 +573,33 @@
                 model.getVfsType().setEntity(connection.getVfsType());
                 
model.getMountOptions().setEntity(connection.getMountOptions());
 
+            }
+        }), storage.getStorage(), true);
+
+        return model;
+    }
+
+    private IStorageModel prepareGlanceStorageForEdit(StorageDomain storage) {
+        final GlanceStorageModel model = new GlanceStorageModel();
+
+/*
+        model.getGlanceUrl().setIsChangable(true);
+        model.getKeystoneUrl().setIsChangable(true);
+        model.getGlanceTenantId().setIsChangable(true);
+        model.getGlanceTenantName().setIsChangable(true);
+        model.getGlanceUsername().setIsChangable(true);
+        model.getGlancePassword().setIsChangable(true);
+*/
+
+        AsyncDataProvider.GetStorageConnectionById(new AsyncQuery(null, new 
INewAsyncCallback() {
+            @Override
+            public void OnSuccess(Object target, Object returnValue) {
+                /*
+                StorageServerConnections connection = 
(StorageServerConnections) returnValue;
+                model.getPath().setEntity(connection.getconnection());
+                model.getVfsType().setEntity(connection.getVfsType());
+                
model.getMountOptions().setEntity(connection.getMountOptions());
+                */
             }
         }), storage.getStorage(), true);
 
@@ -917,6 +952,10 @@
         {
             saveGlusterStorage();
         }
+        else if (model.getSelectedItem() instanceof GlanceStorageModel)
+        {
+            saveGlanceStorage();
+        }
         else
         {
             saveSanStorage();
@@ -967,6 +1006,17 @@
         getWindow().StartProgress(null);
 
         Task.Create(this, new ArrayList<Object>(Arrays.asList(new Object[] 
{"SaveGluster"}))).Run(); //$NON-NLS-1$
+    }
+
+    private void saveGlanceStorage() {
+
+        if (getWindow().getProgress() != null) {
+            return;
+        }
+
+        getWindow().StartProgress(null);
+
+        Task.Create(this, new ArrayList<Object>(Arrays.asList(new Object[] 
{"SaveGlance"}))).Run(); //$NON-NLS-1$
     }
 
     private void saveSanStorage()
@@ -1448,6 +1498,9 @@
             this);
     }
 
+
+    private void saveGlanceStorage(TaskContext context) {
+    }
 
     private void saveNfsStorage(TaskContext context)
     {
@@ -2130,6 +2183,10 @@
         {
             saveGlusterStorage(context);
         }
+        else if (StringHelper.stringsEqual(key, "SaveGlance")) //$NON-NLS-1$
+        {
+            saveGlanceStorage(context);
+        }
         else if (StringHelper.stringsEqual(key, "SaveSan")) //$NON-NLS-1$
         {
             saveSanStorage(context);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
index d053a19..42d3341 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/SpiceConsoleModel.java
@@ -466,7 +466,7 @@
             ArrayList<RepoFileMetaData> repoList =
                     (ArrayList<RepoFileMetaData>) 
returnValues.get(8).getReturnValue();
             for (RepoFileMetaData RepoFileMetaData : repoList) {
-                isos.add(RepoFileMetaData.getRepoFileName());
+                isos.add(RepoFileMetaData.getRepoImageId());
             }
         }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index d94c36a..d215576 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -262,6 +262,33 @@
     @DefaultStringValue("Path to device to mount / remote export")
     String storagePopupPosixPathHintLabel();
 
+    @DefaultStringValue("Glance URL")
+    String storagePopupGlanceUrlLabel();
+
+    @DefaultStringValue("URL to the glance server instance, e.g. 
http://glance:9292";)
+    String storagePopupGlanceUrlHintLabel();
+
+    @DefaultStringValue("Keystone URL")
+    String storagePopupGlanceKeystoneUrlLabel();
+
+    @DefaultStringValue("URL to the keystone server instance, e.g. 
http://keystone:5000/v2.0";)
+    String storagePopupGlanceKeystoneUrlHintLabel();
+
+    @DefaultStringValue("Tenant ID")
+    String storagePopupGlanceTenantIdLabel();
+
+    @DefaultStringValue("It is possible to provide either a Tenant ID or a 
Tenant Name, when both present the Tenant ID has the precedence")
+    String storagePopupGlanceTenantIdHintLabel();
+
+    @DefaultStringValue("Tenant Name")
+    String storagePopupGlanceTenantNameLabel();
+
+    @DefaultStringValue("User Name")
+    String storagePopupGlanceUsernameLabel();
+
+    @DefaultStringValue("Password")
+    String storagePopupGlancePasswordLabel();
+
     @DefaultStringValue("Select Host to be used")
     String storageRemovePopupHostLabel();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.java
new file mode 100644
index 0000000..178ccb4
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.java
@@ -0,0 +1,176 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.storage;
+
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+import org.ovirt.engine.ui.common.idhandler.WithElementId;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelPasswordBoxEditor;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelTextBoxOnlyEditor;
+import org.ovirt.engine.ui.common.widget.uicommon.storage.AbstractStorageView;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.storage.GlanceStorageModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Style;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.ValueBox;
+import com.google.gwt.user.client.ui.Widget;
+
+public class GlanceStorageView extends AbstractStorageView<GlanceStorageModel> 
{
+
+    interface Driver extends SimpleBeanEditorDriver<GlanceStorageModel, 
GlanceStorageView> {
+
+        Driver driver = GWT.create(Driver.class);
+    }
+
+    interface ViewUiBinder extends UiBinder<Widget, GlanceStorageView> {
+
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    interface ViewIdHandler extends ElementIdHandler<GlanceStorageView> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    @UiField
+    WidgetStyle style;
+
+    @UiField
+    @Ignore
+    Label glanceUrlLabel;
+
+    @UiField
+    @WithElementId
+    @Path(value = "glanceUrl.entity")
+    EntityModelTextBoxOnlyEditor glanceUrlEditor;
+
+    @UiField
+    @Ignore
+    Label glanceUrlHintLabel;
+
+    @UiField
+    @Ignore
+    Label keystoneUrlLabel;
+
+    @UiField
+    @WithElementId
+    @Path(value = "keystoneUrl.entity")
+    EntityModelTextBoxOnlyEditor keystoneUrlEditor;
+
+    @UiField
+    @Ignore
+    Label keystoneUrlHintLabel;
+
+    @UiField
+    @Ignore
+    Label glanceTenantIdLabel;
+
+    @UiField
+    @WithElementId
+    @Path(value = "glanceTenantId.entity")
+    EntityModelTextBoxOnlyEditor glanceTenantIdEditor;
+
+    @UiField
+    @Ignore
+    Label glanceTenantIdHintLabel;
+
+    @UiField
+    @Ignore
+    Label glanceTenantNameLabel;
+
+    @UiField
+    @WithElementId
+    @Path(value = "glanceTenantName.entity")
+    EntityModelTextBoxOnlyEditor glanceTenantNameEditor;
+
+    @UiField
+    @Ignore
+    Label glanceUsernameLabel;
+
+    @UiField
+    @WithElementId
+    @Path(value = "glanceUsername.entity")
+    EntityModelTextBoxOnlyEditor glanceUsernameEditor;
+
+    @UiField
+    @Ignore
+    Label glancePasswordLabel;
+
+    @UiField
+    @WithElementId
+    @Path(value = "glancePassword.entity")
+    EntityModelPasswordBoxEditor glancePasswordEditor;
+
+    @UiField
+    Label message;
+
+
+    public GlanceStorageView() {
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        localize(ClientGinjectorProvider.instance().getApplicationConstants());
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+        addStyles();
+        Driver.driver.initialize(this);
+    }
+
+    void addStyles() {
+        glanceUrlEditor.addContentWidgetStyleName(style.longEditorContent());
+        keystoneUrlEditor.addContentWidgetStyleName(style.longEditorContent());
+        
glanceTenantIdEditor.addContentWidgetStyleName(style.longEditorContent());
+    }
+
+    void localize(ApplicationConstants constants) {
+        glanceUrlLabel.setText(constants.storagePopupGlanceUrlLabel());
+        glanceUrlHintLabel.setText(constants.storagePopupGlanceUrlHintLabel());
+        
keystoneUrlLabel.setText(constants.storagePopupGlanceKeystoneUrlLabel());
+        
keystoneUrlHintLabel.setText(constants.storagePopupGlanceKeystoneUrlHintLabel());
+        
glanceTenantIdLabel.setText(constants.storagePopupGlanceTenantIdLabel());
+        
glanceTenantIdHintLabel.setText(constants.storagePopupGlanceTenantIdHintLabel());
+        
glanceTenantNameLabel.setText(constants.storagePopupGlanceTenantNameLabel());
+        
glanceUsernameLabel.setText(constants.storagePopupGlanceUsernameLabel());
+        
glancePasswordLabel.setText(constants.storagePopupGlancePasswordLabel());
+    }
+
+    @Override
+    public void edit(GlanceStorageModel object) {
+        /*
+        Driver.driver.edit(object);
+
+        pathHintLabel.setVisible(object.getPath().getIsAvailable() && 
object.getPath().getIsChangable());
+
+        StyleTextBoxEditor(pathEditor, object.getPath());
+        StyleTextBoxEditor(vfsTypeEditor, object.getVfsType());
+        StyleTextBoxEditor(mountOptionsEditor, object.getMountOptions());
+        */
+    }
+
+    /*
+    Makes a provided editor look like label (enabled, read-only textbox).
+     */
+    private void StyleTextBoxEditor(EntityModelTextBoxOnlyEditor editor, 
EntityModel model) {
+        if (!model.getIsChangable()) {
+            editor.setEnabled(true);
+            ValueBox<Object> valueBox = editor.asValueBox();
+            valueBox.setReadOnly(true);
+            valueBox.getElement().getStyle().setBorderWidth(0, Style.Unit.PX);
+        }
+    }
+
+    @Override
+    public GlanceStorageModel flush() {
+        return Driver.driver.flush();
+    }
+
+    interface WidgetStyle extends CssResource {
+        String longEditorContent();
+    }
+
+    @Override
+    public void focus() {
+        pathEditor.setFocus(true);
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.ui.xml
new file mode 100644
index 0000000..ed321d8
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/GlanceStorageView.ui.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:g="urn:import:com.google.gwt.user.client.ui"
+             xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor">
+
+    <ui:style 
type="org.ovirt.engine.ui.webadmin.section.main.view.popup.storage.GlanceStorageView.WidgetStyle">
+        .content {
+            margin-top: 40px;
+        }
+
+        .label {
+            color: #333333;
+            margin: 0px 5px;
+            font-family: Verdana, sans-serif;
+        }
+
+        .longEditorContent {
+            width: 565px;
+        }
+
+        .entryHintLabel {
+            margin: -8px 0px 0px 5px;
+            font-size: 8pt;
+        }
+
+       .passwordEditor {
+       }
+
+        .errorLabel {
+            color: #CD2127;
+            margin-top: 20px;
+            margin-left: 5px;
+        }
+    </ui:style>
+
+    <g:VerticalPanel addStyleNames="{style.content}">
+        <g:HTMLPanel>
+            <table>
+                <tr>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="glanceUrlLabel" 
addStyleNames="{style.label}"/>
+                    </td>
+                    <td>
+                        <e:EntityModelTextBoxOnlyEditor 
ui:field="glanceUrlEditor"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td></td>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="glanceUrlHintLabel" 
addStyleNames="{style.entryHintLabel}, generalDialogComment"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="keystoneUrlLabel" 
addStyleNames="{style.label}"/>
+                    </td>
+                    <td>
+                        <e:EntityModelTextBoxOnlyEditor 
ui:field="keystoneUrlEditor"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td></td>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="keystoneUrlHintLabel" 
addStyleNames="{style.entryHintLabel}, generalDialogComment"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="glanceTenantIdLabel" 
addStyleNames="{style.label}"/>
+                    </td>
+                    <td>
+                        <e:EntityModelTextBoxOnlyEditor 
ui:field="glanceTenantIdEditor"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td></td>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="glanceTenantIdHintLabel" 
addStyleNames="{style.entryHintLabel}, generalDialogComment"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="glanceTenantNameLabel" 
addStyleNames="{style.label}"/>
+                    </td>
+                    <td>
+                        <e:EntityModelTextBoxOnlyEditor 
ui:field="glanceTenantNameEditor"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="glanceUsernameLabel" 
addStyleNames="{style.label}"/>
+                    </td>
+                    <td>
+                        <e:EntityModelTextBoxOnlyEditor 
ui:field="glanceUsernameEditor"/>
+                    </td>
+                </tr>
+                <tr>
+                    <td nowrap="nowrap">
+                        <g:Label ui:field="glancePasswordLabel" 
addStyleNames="{style.label}"/>
+                    </td>
+                    <td>
+                        <e:EntityModelPasswordBoxEditor 
ui:field="glancePasswordEditor"/>
+                    </td>
+                </tr>
+            </table>
+        </g:HTMLPanel>
+        <g:Label ui:field="message" addStyleNames="{style.errorLabel}"/>
+    </g:VerticalPanel>
+
+</ui:UiBinder>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java
index 6193d66..e1951ad 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/StoragePopupView.java
@@ -224,6 +224,8 @@
                 storageView = new FcpStorageView(true);
             } else if (model.getType() == StorageType.ISCSI) {
                 storageView = new IscsiStorageView(true);
+            } else if (model.getType() == StorageType.GLANCE) {
+                storageView = new GlanceStorageView();
             }
         }
 


--
To view, visit http://gerrit.ovirt.org/13958
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I2791fa22820fc021938709f4a921ab4d6213fab7
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimo...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to