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