package org.ovirt.engine.core.common.businessentities;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.ovirt.engine.core.common.utils.Pair;
import org.ovirt.engine.core.compat.Guid;
/**
* Entity corresponding to <strong>vm_icons</strong> database table.
*/
public class VmIcon implements BusinessEntity<Guid> {
private Guid id;
private String dataUrl;
public VmIcon () {
}
public VmIcon(Guid id, String dataUrl) {
this.id = id;
this.dataUrl = dataUrl;
}
public String getDataUrl() {
return dataUrl;
}
public void setDataUrl(String dataUrl) {
this.dataUrl = dataUrl;
}
public void setTypeAndData(String mediaType, String data) {
this.dataUrl = typeAndDataToDataUrl(mediaType, data);
}
public Pair<String, String> getTypeAndData() {
return dataUrlToTypeAndData(this.dataUrl);
}
/**
* It converts icon from dataurl form to separate media type and data.
* @param dataUrl icon in dataurl form
* @return icon in form of (media_type, base64 encoded data)
*/
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);
}
/**
* It converts icon from couple (media type, base64 data) to dataurl form.
* @param mediaType mime type
* @param data base64 encoded icon data
* @return icon in dataurl
*/
public static String typeAndDataToDataUrl(String mediaType, String data) {
return "data:" + mediaType + ";base64," + data;
}
@Override
public Guid getId() {
return id;
}
@Override
public void setId(Guid id) {
this.id = id;
}
@Override
public String toString() {
return "VmIcon{" +
"id=" + id +
", dataUrl='" + printDataUrl(dataUrl) + '\'' +
'}';
}
private static String printDataUrl(String dataUrl) {
if (dataUrl == null) {
return "null";
}
final int maxLength = 32;
if (dataUrl.length() > maxLength) {
return dataUrl.substring(0, maxLength) + '…';
}
return dataUrl;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof VmIcon)) {
return false;
}
VmIcon vmIcon = (VmIcon) o;
return Objects.equals(id, vmIcon.id)
&& Objects.equals(dataUrl, vmIcon.dataUrl);
}
@Override
public int hashCode() {
return Objects.hash(
id,
dataUrl
);
}
}