Jakub Niedermertl has uploaded a new change for review.

Change subject: core, webadmin: Vm Icons REST related changes
......................................................................

core, webadmin: Vm Icons REST related changes

* Icon validation unified in Add/UpdateVmCommand and
  Add/UpdateVmTemplateCommand
* New queries for convenient rest implementation GetAllVmIconsQuery,
  GetVmIconDefaultQuery, GetVmIconQuery
* Query parameters that are used to upload large icon are marked by HasVmIcon
  interface
* Error messages in frontend part

Change-Id: I20440c2443f9217d0fa896fff2911943467954e9
Bug-Url: https://bugzilla.redhat.com/1103175
Signed-off-by: Jakub Niedermertl <jnied...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllVmIconsQuery.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconDefaultQuery.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/IconUtils.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/IconValidator.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HasVmIcon.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmIcon.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmIconDefaultParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
M 
frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
23 files changed, 247 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/42047/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index b0184d2..8312f14 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -666,6 +666,16 @@
             return false;
         }
 
+        if (getSmallIconId() != null
+                && !validate(IconUtils.validateIconId(getSmallIconId(), 
"Small", getVmIconDao()))) {
+            return false;
+        }
+
+        if (getLargeIconId() != null
+                && !validate(IconUtils.validateIconId(getLargeIconId(), 
"Large", getVmIconDao()))) {
+            return false;
+        }
+
         // validate NUMA nodes count not more than CPUs
         if (getParameters().getVm().getMigrationSupport() == 
MigrationSupport.PINNED_TO_HOST &&
                 
!validate(VmHandler.checkVmNumaNodesIntegrity(getParameters().getVm(),
@@ -1510,7 +1520,7 @@
      *         Predefined icons should not be sent in parameters.</li>
      *     <li>If there are no icon in parameters && both (small and large) 
icon ids are set then those ids are used.
      *         </li>
-     *     <li>Otherwise (at least one icon id is null) both icon ids are 
coppied from template.</li>
+     *     <li>Otherwise (at least one icon id is null) both icon ids are 
copied from template.</li>
      * </ul>
      * @param vmStatic
      */
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index 74b6963..0cfc1d0 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -27,8 +27,10 @@
 import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.storage.CINDERStorageHelper;
 import org.ovirt.engine.core.bll.tasks.CommandCoordinatorUtil;
+import org.ovirt.engine.core.bll.utils.IconUtils;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
+import org.ovirt.engine.core.bll.validator.IconValidator;
 import org.ovirt.engine.core.bll.validator.VmWatchdogValidator;
 import org.ovirt.engine.core.bll.validator.storage.CinderDisksValidator;
 import org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator;
@@ -71,6 +73,7 @@
 import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.locks.LockingGroup;
+import org.ovirt.engine.core.common.queries.VmIconIdSizePair;
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils;
 import org.ovirt.engine.core.common.validation.group.CreateEntity;
@@ -481,6 +484,26 @@
             return false;
         }
 
+        if (getParameters().getVmLargeIcon() != null && 
!validate(IconValidator.validate(
+                IconValidator.DimensionsType.LARGE_CUSTOM_ICON,
+                getParameters().getVmLargeIcon()))) {
+            return false;
+        }
+
+        if (getParameters().getMasterVm().getSmallIconId() != null
+                && 
!validate(IconUtils.validateIconId(getParameters().getMasterVm().getSmallIconId(),
+                                                      "Small",
+                                                      getVmIconDao()))) {
+            return false;
+        }
+
+        if (getParameters().getMasterVm().getLargeIconId() != null
+                && 
!validate(IconUtils.validateIconId(getParameters().getMasterVm().getLargeIconId(),
+                                                      "Large",
+                                                      getVmIconDao()))) {
+            return false;
+        }
+
         if (isInstanceType) {
             return true;
         } else {
@@ -699,6 +722,7 @@
                         getParameters().getMasterVm().getLargeIconId(),
                         getParameters().getMasterVm().getNumOfIoThreads(),
                         
getParameters().getMasterVm().getConsoleDisconnectAction()));
+        updateVmIcons();
         DbFacade.getInstance().getVmTemplateDao().save(getVmTemplate());
         getCompensationContext().snapshotNewEntity(getVmTemplate());
         setActionReturnValue(getVmTemplate().getId());
@@ -708,6 +732,15 @@
         VmHandler.addVmInitToDB(getVmTemplate());
     }
 
+    private void updateVmIcons() {
+        if (getParameters().getVmLargeIcon() != null) {
+            final VmIconIdSizePair iconIdPair =
+                    
IconUtils.ensureIconPairInDatabase(getParameters().getVmLargeIcon());
+            getVmTemplate().setSmallIconId(iconIdPair.getSmall());
+            getVmTemplate().setLargeIconId(iconIdPair.getLarge());
+        }
+    }
+
     protected void addVmInterfaces(Map<Guid, Guid> 
srcDeviceIdToTargetDeviceIdMapping) {
         List<VmNic> interfaces = 
getVmNicDao().getAllForVm(getParameters().getMasterVm().getId());
         for (VmNic iface : interfaces) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllVmIconsQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllVmIconsQuery.java
new file mode 100644
index 0000000..7dac0de
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAllVmIconsQuery.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.dao.VmIconDao;
+
+import javax.inject.Inject;
+
+public class GetAllVmIconsQuery extends 
QueriesCommandBase<VdcQueryParametersBase> {
+
+    @Inject
+    private VmIconDao vmIconDao;
+
+    public GetAllVmIconsQuery(VdcQueryParametersBase parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        setReturnValue(vmIconDao.getAll());
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconDefaultQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconDefaultQuery.java
new file mode 100644
index 0000000..45a2b6f
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconDefaultQuery.java
@@ -0,0 +1,21 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.queries.GetVmIconDefaultParameters;
+import org.ovirt.engine.core.dao.VmIconDefaultDao;
+
+import javax.inject.Inject;
+
+public class GetVmIconDefaultQuery extends 
QueriesCommandBase<GetVmIconDefaultParameters> {
+
+    @Inject
+    private VmIconDefaultDao vmIconDefaultDao;
+
+    public GetVmIconDefaultQuery(GetVmIconDefaultParameters parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        
setReturnValue(vmIconDefaultDao.getByOperatingSystemId(getParameters().getOperatingSystemId()));
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconQuery.java
new file mode 100644
index 0000000..8e52b10
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmIconQuery.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.dao.VmIconDao;
+
+import javax.inject.Inject;
+
+/**
+ * Given an icon id it returns icons data in dataurl form
+ */
+public class GetVmIconQuery extends QueriesCommandBase<IdQueryParameters> {
+
+    @Inject
+    private VmIconDao vmIconDao;
+
+    public GetVmIconQuery(IdQueryParameters parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        setReturnValue(vmIconDao.get(getParameters().getId()));
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
index c171511..b7de278 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
@@ -725,6 +725,20 @@
             return false;
         }
 
+        if (getParameters().getVmStaticData() != null
+                && getParameters().getVmStaticData().getSmallIconId() != null
+                && !validate(IconUtils.validateIconId(
+                        getParameters().getVmStaticData().getSmallIconId(), 
"Small", getVmIconDao()))) {
+            return false;
+        }
+
+        if (getParameters().getVmStaticData() != null
+                && getParameters().getVmStaticData().getLargeIconId() != null
+                && !validate(IconUtils.validateIconId(
+                        getParameters().getVmStaticData().getLargeIconId(), 
"Large", getVmIconDao()))) {
+            return false;
+        }
+
         if (vmFromParams.getProviderId() != null) {
             Provider<?> provider = 
providerDao.get(vmFromParams.getProviderId());
             if (provider == null) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
index f6201c8..0a92177 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
@@ -119,6 +119,20 @@
             return false;
         }
 
+        if (getParameters().getVmTemplateData() != null
+                && getParameters().getVmTemplateData().getSmallIconId() != null
+                && !validate(IconUtils.validateIconId(
+                        getParameters().getVmTemplateData().getSmallIconId(), 
"Small", getVmIconDao()))) {
+            return false;
+        }
+
+        if (getParameters().getVmTemplateData() != null
+                && getParameters().getVmTemplateData().getLargeIconId() != null
+                && !validate(IconUtils.validateIconId(
+                        getParameters().getVmTemplateData().getLargeIconId(), 
"Large", getVmIconDao()))) {
+            return false;
+        }
+
         if (!isInstanceType && !isBlankTemplate && returnValue) {
             return doClusterRelatedChecks();
         } else {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
index 8453ead..1e8e1ce 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
@@ -61,6 +61,20 @@
         return null;
     }
 
+    protected Guid getSmallIconId() {
+        if (getParameters().getVmStaticData() != null) {
+            return getParameters().getVmStaticData().getSmallIconId();
+        }
+        return null;
+    }
+
+    protected Guid getLargeIconId() {
+        if (getParameters().getVmStaticData() != null) {
+            return getParameters().getVmStaticData().getLargeIconId();
+        }
+        return null;
+    }
+
     protected InstanceType getInstanceType() {
         if (instanceType == null && getInstanceTypeId() != null) {
             instanceType = 
getVmTemplateDAO().getInstanceType(getInstanceTypeId());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/IconUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/IconUtils.java
index 767695f..2bfc798 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/IconUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/IconUtils.java
@@ -1,11 +1,14 @@
 package org.ovirt.engine.core.bll.utils;
 
+import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.validator.IconValidator;
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.core.common.businessentities.VmIconDefault;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.queries.VmIconIdSizePair;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.VmIconDao;
 
 import javax.imageio.ImageIO;
 import javax.xml.bind.DatatypeConverter;
@@ -25,6 +28,14 @@
     private IconUtils() {
     }
 
+    public static ValidationResult validateIconId(Guid iconId, String 
nameForErrorMessage, VmIconDao vmIconDao) {
+        if (vmIconDao.exists(iconId)) {
+            return ValidationResult.VALID;
+        }
+        return new 
ValidationResult(VdcBllMessages.ICON_OF_PROVIDED_ID_DOES_NOT_EXIST,
+                "$iconName " + nameForErrorMessage);
+    }
+
     /**
      *
      * @param dataUrl valid large icon in dataUrl form
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/IconValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/IconValidator.java
index bcbc0e3..ef78e5a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/IconValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/IconValidator.java
@@ -112,7 +112,7 @@
     private void validateParsability() {
         try {
             image = ImageIO.read(new ByteArrayInputStream(rawImageData));
-        } catch (IOException e) {
+        } catch (RuntimeException | IOException e) {
             validationResult = new 
ValidationResult(VdcBllMessages.PROVIDED_VM_ICON_CANT_BE_READ);
         }
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
index 79befcc..414af59 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmTemplateParameters.java
@@ -14,7 +14,7 @@
 import org.ovirt.engine.core.common.validation.group.UpdateEntity;
 import org.ovirt.engine.core.compat.Guid;
 
-public class AddVmTemplateParameters extends VmTemplateParametersBase {
+public class AddVmTemplateParameters extends VmTemplateParametersBase 
implements HasVmIcon {
 
     private static final long serialVersionUID = 2114985552063499069L;
 
@@ -28,6 +28,7 @@
     private Guid destinationStorageDomainId;
     private HashMap<Guid, DiskImage> diskInfoDestinationMap;
     private VmEntityType templateType;
+    private String vmLargeIcon;
 
     @Size(min = 1, max = 40, message = "VALIDATION.VM_TEMPLATE.NAME.MAX", 
groups = { CreateEntity.class, UpdateEntity.class })
     @ValidI18NName(message = 
"ACTION_TYPE_FAILED_NAME_MAY_NOT_CONTAIN_SPECIAL_CHARS")
@@ -170,4 +171,11 @@
         this.baseTemplateId = baseTemplateId;
     }
 
+    @Override public String getVmLargeIcon() {
+        return vmLargeIcon;
+    }
+
+    @Override public void setVmLargeIcon(String vmLargeIcon) {
+        this.vmLargeIcon = vmLargeIcon;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HasVmIcon.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HasVmIcon.java
new file mode 100644
index 0000000..0e583d0
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/HasVmIcon.java
@@ -0,0 +1,7 @@
+package org.ovirt.engine.core.common.action;
+
+public interface HasVmIcon {
+
+    String getVmLargeIcon();
+    void setVmLargeIcon(String largeIcon);
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
index 547cd46..720dfd7 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmTemplateParameters.java
@@ -4,7 +4,7 @@
 
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 
-public class UpdateVmTemplateParameters extends VmTemplateParametersBase {
+public class UpdateVmTemplateParameters extends VmTemplateParametersBase 
implements HasVmIcon {
     private static final long serialVersionUID = 7250355162926369307L;
     @Valid
     private VmTemplate _vmTemplate;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
index 4875c3e..030699f 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
@@ -18,7 +18,7 @@
 import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.compat.Guid;
 
-public class VmManagementParametersBase extends VmOperationParameterBase 
implements HasGraphicsDevices {
+public class VmManagementParametersBase extends VmOperationParameterBase 
implements HasGraphicsDevices, HasVmIcon {
 
     private static final long serialVersionUID = -7695630335738521510L;
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmIcon.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmIcon.java
index af192a1..40aac50 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmIcon.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmIcon.java
@@ -1,8 +1,11 @@
 package org.ovirt.engine.core.common.businessentities;
 
+import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.compat.Guid;
 
 import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * Entity corresponding to <strong>vm_icons</strong> database table.
@@ -28,6 +31,30 @@
         this.dataUrl = dataUrl;
     }
 
+    public void setTypeAndData(String mediaType, String data) {
+        this.dataUrl = typeAndDataToDataUrl(mediaType, data);
+    }
+
+    public Pair<String, String> getTypeAndData() {
+        return dataUrlToTypeAndData(this.dataUrl);
+    }
+
+    public static Pair<String, String> dataUrlToTypeAndData(String dataUrl) {
+        final String dataUrlRegex = 
"^data:(\\w+/\\w+);base64,([\\w+/]+={0,2})$";
+        final Matcher matcher = Pattern.compile(dataUrlRegex).matcher(dataUrl);
+        final boolean matches = matcher.find();
+        if (!matches) {
+            throw new IllegalStateException("DataUrl has invalid format.");
+        }
+        final String mimeType = matcher.group(1);
+        final String base64Data = matcher.group(2);
+        return new Pair<>(mimeType, base64Data);
+    }
+
+    public static String typeAndDataToDataUrl(String mediaType, String data) {
+        return  "data:" + mediaType + ";base64," + data;
+    }
+
     @Override
     public Guid getId() {
         return id;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
index 84720ad..a5e5a36 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
@@ -1245,6 +1245,7 @@
     PROVIDED_VM_ICON_HAS_INVALID_DIMENSIONS,
     DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE,
     VM_ICON_BASE64_PART_MALFORMED,
+    ICON_OF_PROVIDED_ID_DOES_NOT_EXIST,
 
     BLANK_TEMPLATE_CANT_HAVE_SUBTEMPLATES;
 
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmIconDefaultParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmIconDefaultParameters.java
new file mode 100644
index 0000000..ff30093
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmIconDefaultParameters.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.core.common.queries;
+
+public class GetVmIconDefaultParameters extends VdcQueryParametersBase {
+
+
+    private int operatingSystemId;
+
+    private GetVmIconDefaultParameters() {}
+
+    public static GetVmIconDefaultParameters create(int operatingSystemId) {
+        final GetVmIconDefaultParameters result = new 
GetVmIconDefaultParameters();
+        result.operatingSystemId = operatingSystemId;
+        return result;
+    }
+
+    public int getOperatingSystemId() {
+        return operatingSystemId;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index a847c00..e851549 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -31,8 +31,11 @@
     GetVmNextRunConfiguration(VdcQueryAuthType.User),
     GetVmChangedFieldsForNextRun(VdcQueryAuthType.User),
     GetVmsFromExternalProvider,
+    GetVmIcon(VdcQueryAuthType.User),
     GetVmIcons(VdcQueryAuthType.User),
+    GetAllVmIcons(VdcQueryAuthType.User),
     GetVmIconDefaults(VdcQueryAuthType.User),
+    GetVmIconDefault(VdcQueryAuthType.User),
     GetVmDevicesForVm(VdcQueryAuthType.User),
 
     // Vds queries
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
index 78a3773..bb5654d 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
@@ -44,6 +44,7 @@
 import org.ovirt.engine.core.dao.VmAndTemplatesGenerationsDAO;
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.VmDynamicDAO;
+import org.ovirt.engine.core.dao.VmIconDao;
 import org.ovirt.engine.core.dao.VmStaticDAO;
 import org.ovirt.engine.core.dao.VmStatisticsDAO;
 import org.ovirt.engine.core.dao.VmTemplateDAO;
@@ -745,6 +746,10 @@
         return getDbFacade().getCpuProfileDao();
     }
 
+    public VmIconDao getVmIconDao() {
+        return getDbFacade().getVmIconDao();
+    }
+
     public DbFacade getDbFacade() {
         return DbFacade.getInstance();
     }
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index 6a1ffdc..1454bb1 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -1441,7 +1441,8 @@
 PROVIDED_VM_ICON_CANT_BE_READ=Provided VM icon can't be read.
 VM_ICON_MIME_TYPE_DOESNT_MATCH_IMAGE_DATA=Vm icon mime type (${mimeType}) 
doesn't match image data (${imageType}).
 PROVIDED_VM_ICON_HAS_INVALID_DIMENSIONS=Vm icon has invalid dimensions 
(${currentDimensions}). Allowed dimmension: ${allowedDimensions}
-DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE=Data size of provided icon 
(${$currentSize}) is to big. Maximum allowd is ${$maxSize}
+DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE=Data size of provided icon 
(${currentSize}) is to big. Maximum allowd is ${maxSize}
 VM_ICON_BASE64_PART_MALFORMED=Base64 part of vm icon is malformed.
+ICON_OF_PROVIDED_ID_DOES_NOT_EXIST=${iconName} icon of provided id does not 
exists.
 
 BLANK_TEMPLATE_CANT_HAVE_SUBTEMPLATES=Blank template can't have sub-templates.
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
index 2c6c064..fcc95f0 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
@@ -3839,12 +3839,15 @@
     @DefaultStringValue("Vm icon has invalid dimensions 
(${currentDimensions}). Allowed dimmension: ${allowedDimensions}")
     String PROVIDED_VM_ICON_HAS_INVALID_DIMENSIONS();
 
-    @DefaultStringValue("Data size of provided icon (${$currentSize}) is to 
big. Maximum allowd is ${$maxSize}")
+    @DefaultStringValue("Data size of provided icon (${currentSize}) is to 
big. Maximum allowd is ${maxSize}")
     String DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE();
 
     @DefaultStringValue("Base64 part of vm icon is malformed.")
     String VM_ICON_BASE64_PART_MALFORMED();
 
+    @DefaultStringValue("${iconName} icon of provided id does not exists.")
+    String ICON_OF_PROVIDED_ID_DOES_NOT_EXIST();
+
     @DefaultStringValue("Cannot detach a non empty Cinder provider.\n -Please 
remove all VMs / Templates / Disks and try again.")
     String ERROR_CANNOT_DETACH_CINDER_PROVIDER_WITH_IMAGES();
 
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index bd8e233..af69285 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -1109,8 +1109,9 @@
 PROVIDED_VM_ICON_CANT_BE_READ=Provided VM icon can't be read.
 VM_ICON_MIME_TYPE_DOESNT_MATCH_IMAGE_DATA=Vm icon mime type (${mimeType}) 
doesn't match image data (${imageType}).
 PROVIDED_VM_ICON_HAS_INVALID_DIMENSIONS=Vm icon has invalid dimensions 
(${currentDimensions}). Allowed dimmension: ${allowedDimensions}
-DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE=Data size of provided icon 
(${$currentSize}) is to big. Maximum allowd is ${$maxSize}
+DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE=Data size of provided icon 
(${currentSize}) is to big. Maximum allowd is ${maxSize}
 VM_ICON_BASE64_PART_MALFORMED=Base64 part of vm icon is malformed.
+ICON_OF_PROVIDED_ID_DOES_NOT_EXIST=${iconName} icon of provided id does not 
exists.
 ERROR_CANNOT_DETACH_CINDER_PROVIDER_WITH_IMAGES=Cannot detach a non empty 
Cinder provider.\n\
         -Please remove all VMs / Templates / Disks and try again.
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 52edee2..933faf3 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -1386,8 +1386,9 @@
 PROVIDED_VM_ICON_CANT_BE_READ=Provided VM icon can't be read.
 VM_ICON_MIME_TYPE_DOESNT_MATCH_IMAGE_DATA=Vm icon mime type (${mimeType}) 
doesn't match image data (${imageType}).
 PROVIDED_VM_ICON_HAS_INVALID_DIMENSIONS=Vm icon has invalid dimensions 
(${currentDimensions}). Allowed dimmension: ${allowedDimensions}
-DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE=Data size of provided icon 
(${$currentSize}) is to big. Maximum allowd is ${$maxSize}
+DATA_SIZE_OF_PROVIDED_VM_ICON_TOO_LARGE=Data size of provided icon 
(${currentSize}) is to big. Maximum allowd is ${maxSize}
 VM_ICON_BASE64_PART_MALFORMED=Base64 part of vm icon is malformed.
+ICON_OF_PROVIDED_ID_DOES_NOT_EXIST=${iconName} icon of provided id does not 
exists.
 
 VM_NUMA_NODE_MORE_NODES_THAN_CPUS=Cannot ${action} ${type}. Assigned 
${numaNodes} NUMA nodes for ${cpus} CPU cores. Cannot assign more NUMA nodes 
than CPU cores.
 


-- 
To view, visit https://gerrit.ovirt.org/42047
To unsubscribe, visit https://gerrit.ovirt.org/settings

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

Reply via email to