diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/WhiteLabelService.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/WhiteLabelService.java
index 5a7d715658..8617d6ec1b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/WhiteLabelService.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/api/WhiteLabelService.java
@@ -17,7 +17,6 @@
*/
package org.wso2.carbon.device.mgt.jaxrs.service.api;
-
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
@@ -28,6 +27,7 @@ import io.swagger.annotations.Info;
import io.swagger.annotations.ResponseHeader;
import io.swagger.annotations.SwaggerDefinition;
import io.swagger.annotations.Tag;
+import io.swagger.annotations.ApiParam;
import org.apache.axis2.transport.http.HTTPConstants;
import org.wso2.carbon.apimgt.annotations.api.Scope;
import org.wso2.carbon.apimgt.annotations.api.Scopes;
@@ -40,6 +40,7 @@ import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@@ -86,7 +87,7 @@ import javax.ws.rs.core.Response;
public interface WhiteLabelService {
@GET
- @Path("/favicon")
+ @Path("/{tenantDomain}/favicon")
@ApiOperation(
httpMethod = HTTPConstants.HEADER_GET,
value = "Get whitelabel favicon",
@@ -117,10 +118,13 @@ public interface WhiteLabelService {
"\n Server error occurred while getting white label artifact.",
response = ErrorResponse.class)
})
- Response getWhiteLabelFavicon();
+ Response getWhiteLabelFavicon( @ApiParam(
+ name = "tenantDomain",
+ value = "The tenant domain.",
+ required = true) @PathParam("tenantDomain") String tenantDomain);
@GET
- @Path("/logo")
+ @Path("/{tenantDomain}/logo")
@ApiOperation(
httpMethod = HTTPConstants.HEADER_GET,
value = "Get whitelabel logo",
@@ -152,7 +156,50 @@ public interface WhiteLabelService {
"\n Server error occurred while getting white label artifact.",
response = ErrorResponse.class)
})
- Response getWhiteLabelLogo();
+ Response getWhiteLabelLogo(
+ @ApiParam(
+ name = "tenantDomain",
+ value = "The tenant domain.",
+ required = true)
+ @PathParam("tenantDomain") String tenantDomain);
+
+ @GET
+ @Path("/{tenantDomain}/icon")
+ @ApiOperation(
+ httpMethod = HTTPConstants.HEADER_GET,
+ value = "Get whitelabel logo icon",
+ notes = "Get whitelabel logo icon for the tenant of the logged in user",
+ tags = "Tenant Metadata Management"
+ )
+ @ApiResponses(
+ value = {
+ @ApiResponse(
+ code = 200,
+ message = "OK. \n Successfully retrieved white label logo.",
+ response = Metadata.class,
+ responseHeaders = {
+ @ResponseHeader(
+ name = "Content-Type",
+ description = "The content type of the body"),
+ @ResponseHeader(
+ name = "ETag",
+ description = "Entity Tag of the response resource.\n" +
+ "Used by caches, or in conditional requests."),
+ @ResponseHeader(
+ name = "Last-Modified",
+ description = "Date and time the resource was last modified.\n" +
+ "Used by caches, or in conditional requests."),
+ }),
+ @ApiResponse(
+ code = 500,
+ message = "Internal Server Error. " +
+ "\n Server error occurred while getting white label artifact.",
+ response = ErrorResponse.class)
+ })
+ Response getWhiteLabelLogoIcon( @ApiParam(
+ name = "tenantDomain",
+ value = "The tenant domain.",
+ required = true) @PathParam("tenantDomain") String tenantDomain);
@PUT
@ApiOperation(
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/WhiteLabelServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/WhiteLabelServiceImpl.java
index c61b9034cd..573b954df5 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/WhiteLabelServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/WhiteLabelServiceImpl.java
@@ -20,7 +20,9 @@ package org.wso2.carbon.device.mgt.jaxrs.service.impl;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.FileResponse;
+import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.MetadataManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.NotFoundException;
import org.wso2.carbon.device.mgt.common.metadata.mgt.WhiteLabelTheme;
@@ -33,6 +35,7 @@ import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.ByteArrayInputStream;
@@ -50,10 +53,10 @@ public class WhiteLabelServiceImpl implements WhiteLabelService {
@GET
@Override
- @Path("/favicon")
- public Response getWhiteLabelFavicon() {
+ @Path("/{tenantDomain}/favicon")
+ public Response getWhiteLabelFavicon(@PathParam("tenantDomain") String tenantDomain) {
try {
- FileResponse fileResponse = DeviceMgtAPIUtils.getWhiteLabelManagementService().getWhiteLabelFavicon();
+ FileResponse fileResponse = DeviceMgtAPIUtils.getWhiteLabelManagementService().getWhiteLabelFavicon(tenantDomain);
return sendFileStream(fileResponse);
} catch (NotFoundException e) {
String msg = "Favicon white label image cannot be found in the system. Updating the whitelabel theme might" +
@@ -69,10 +72,29 @@ public class WhiteLabelServiceImpl implements WhiteLabelService {
@GET
@Override
- @Path("/logo")
- public Response getWhiteLabelLogo() {
+ @Path("/{tenantDomain}/logo")
+ public Response getWhiteLabelLogo(@PathParam("tenantDomain") String tenantDomain) {
try {
- FileResponse fileResponse = DeviceMgtAPIUtils.getWhiteLabelManagementService().getWhiteLabelLogo();
+ FileResponse fileResponse = DeviceMgtAPIUtils.getWhiteLabelManagementService().getWhiteLabelLogo(tenantDomain);
+ return sendFileStream(fileResponse);
+ } catch (NotFoundException e) {
+ String msg = "Logo white label image cannot be found in the system. Updating the whitelabel theme might" +
+ "help restore it";
+ log.error(msg, e);
+ return Response.status(Response.Status.NOT_FOUND).entity(msg).build();
+ } catch (MetadataManagementException e) {
+ String msg = "Error occurred while getting logo";
+ log.error(msg, e);
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
+ }
+ }
+
+ @GET
+ @Override
+ @Path("/{tenantDomain}/icon")
+ public Response getWhiteLabelLogoIcon(@PathParam("tenantDomain") String tenantDomain) {
+ try {
+ FileResponse fileResponse = DeviceMgtAPIUtils.getWhiteLabelManagementService().getWhiteLabelLogoIcon(tenantDomain);
return sendFileStream(fileResponse);
} catch (NotFoundException e) {
String msg = "Logo white label image cannot be found in the system. Updating the whitelabel theme might" +
@@ -104,7 +126,8 @@ public class WhiteLabelServiceImpl implements WhiteLabelService {
@Override
public Response getWhiteLabelTheme() {
try {
- WhiteLabelTheme whiteLabelTheme = DeviceMgtAPIUtils.getWhiteLabelManagementService().getWhiteLabelTheme();
+ String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain();
+ WhiteLabelTheme whiteLabelTheme = DeviceMgtAPIUtils.getWhiteLabelManagementService().getWhiteLabelTheme(tenantDomain);
return Response.status(Response.Status.CREATED).entity(whiteLabelTheme).build();
} catch (MetadataManagementException e) {
String msg = "Error occurred while deleting whitelabel for tenant";
@@ -114,6 +137,10 @@ public class WhiteLabelServiceImpl implements WhiteLabelService {
String msg = "Not white label theme configured for this tenant";
log.error(msg, e);
return Response.status(Response.Status.BAD_REQUEST).entity(msg).build();
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while retrieving tenant details of whitelabel";
+ log.error(msg, e);
+ return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(msg).build();
}
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/util/RequestValidationUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/util/RequestValidationUtil.java
index 838983d496..564e16f8dd 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/util/RequestValidationUtil.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/service/impl/util/RequestValidationUtil.java
@@ -696,6 +696,13 @@ public class RequestValidationUtil {
new ErrorResponse.ErrorResponseBuilder()
.setCode(HttpStatus.SC_BAD_REQUEST).setMessage(msg).build());
}
+ if (whiteLabelThemeCreateRequest.getLogoIcon() == null) {
+ String msg = "Logo Icon is required to whitelabel";
+ log.error(msg);
+ throw new InputValidationException(
+ new ErrorResponse.ErrorResponseBuilder()
+ .setCode(HttpStatus.SC_BAD_REQUEST).setMessage(msg).build());
+ }
if (whiteLabelThemeCreateRequest.getFooterText() == null) {
String msg = "Footer text is required to whitelabel";
log.error(msg);
@@ -713,6 +720,7 @@ public class RequestValidationUtil {
try {
validateWhiteLabelImage(whiteLabelThemeCreateRequest.getFavicon());
validateWhiteLabelImage(whiteLabelThemeCreateRequest.getLogo());
+ validateWhiteLabelImage(whiteLabelThemeCreateRequest.getLogoIcon());
} catch (InputValidationException e) {
String msg = "Payload contains invalid base64 files";
log.error(msg, e);
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml
index 5cc5c012ff..00c784efc5 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/webapp/WEB-INF/web.xml
@@ -49,8 +49,9 @@
nonSecuredEndPoints
/api/device-mgt/v1.0/users/validate,
- /api/device-mgt/v1.0/whitelabel/favicon,
- /api/device-mgt/v1.0/whitelabel/logo
+ /api/device-mgt/v1.0/whitelabel/.*/favicon,
+ /api/device-mgt/v1.0/whitelabel/.*/logo,
+ /api/device-mgt/v1.0/whitelabel/.*/icon,
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelArtifactPath.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelArtifactPath.java
index 7cf6368808..22a839803d 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelArtifactPath.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelArtifactPath.java
@@ -21,14 +21,16 @@ package org.wso2.carbon.device.mgt.common.metadata.mgt;
public class WhiteLabelArtifactPath {
private String faviconPath;
private String logoPath;
+ private String logoIconPath;
public WhiteLabelArtifactPath() {
}
- public WhiteLabelArtifactPath(String faviconPath, String logoPath) {
+ public WhiteLabelArtifactPath(String faviconPath, String logoPath, String logoIconPath) {
this.faviconPath = faviconPath;
this.logoPath = logoPath;
+ this.logoIconPath = logoIconPath;
}
public String getFaviconPath() {
@@ -46,4 +48,12 @@ public class WhiteLabelArtifactPath {
public void setLogoPath(String logoPath) {
this.logoPath = logoPath;
}
+
+ public String getLogoIconPath() {
+ return logoIconPath;
+ }
+
+ public void setLogoIconPath(String logoIconPath) {
+ this.logoIconPath = logoIconPath;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelImage.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelImage.java
index ba9e6f82f2..2e8a4da347 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelImage.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelImage.java
@@ -40,7 +40,8 @@ public class WhiteLabelImage {
public enum ImageName {
FAVICON,
- LOGO;
+ LOGO,
+ LOGO_ICON;
@Override
public String toString() {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelManagementService.java
index 68a630a19f..b028c40d7a 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelManagementService.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelManagementService.java
@@ -19,6 +19,7 @@
package org.wso2.carbon.device.mgt.common.metadata.mgt;
import org.wso2.carbon.device.mgt.common.FileResponse;
+import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.MetadataManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.NotFoundException;
@@ -33,7 +34,7 @@ public interface WhiteLabelManagementService {
* @throws MetadataManagementException if error occurred while retrieving favicon
* @throws NotFoundException if favicon is not found
*/
- FileResponse getWhiteLabelFavicon() throws
+ FileResponse getWhiteLabelFavicon(String tenantDomain) throws
MetadataManagementException, NotFoundException;
/**
@@ -42,7 +43,16 @@ public interface WhiteLabelManagementService {
* @throws MetadataManagementException if error occurred while retrieving logo
* @throws NotFoundException if logo is not found
*/
- FileResponse getWhiteLabelLogo() throws
+ FileResponse getWhiteLabelLogo(String tenantDomain) throws
+ MetadataManagementException, NotFoundException;
+
+ /**
+ * Use to get byte content of logo icon whitelabel image
+ * @return byte content of logo icon
+ * @throws MetadataManagementException if error occurred while retrieving logo icon
+ * @throws NotFoundException if logo icon is not found
+ */
+ FileResponse getWhiteLabelLogoIcon(String tenantDomain) throws
MetadataManagementException, NotFoundException;
/**
@@ -69,5 +79,5 @@ public interface WhiteLabelManagementService {
* This method is useful to get existing white label theme
* @throws MetadataManagementException if error while getting existing white label theme
*/
- WhiteLabelTheme getWhiteLabelTheme() throws MetadataManagementException, NotFoundException;
+ WhiteLabelTheme getWhiteLabelTheme(String tenantDomain) throws MetadataManagementException, NotFoundException, DeviceManagementException;
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelTheme.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelTheme.java
index 0b71979843..5761d727cd 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelTheme.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelTheme.java
@@ -21,6 +21,7 @@ package org.wso2.carbon.device.mgt.common.metadata.mgt;
public class WhiteLabelTheme {
private WhiteLabelImage faviconImage;
private WhiteLabelImage logoImage;
+ private WhiteLabelImage logoIconImage;
private String footerText;
private String appTitle;
@@ -55,4 +56,12 @@ public class WhiteLabelTheme {
public void setAppTitle(String appTitle) {
this.appTitle = appTitle;
}
+
+ public WhiteLabelImage getLogoIconImage() {
+ return logoIconImage;
+ }
+
+ public void setLogoIconImage(WhiteLabelImage logoIconImage) {
+ this.logoIconImage = logoIconImage;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelThemeCreateRequest.java b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelThemeCreateRequest.java
index 4b720eeec4..e6d4c2e728 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelThemeCreateRequest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/src/main/java/org/wso2/carbon/device/mgt/common/metadata/mgt/WhiteLabelThemeCreateRequest.java
@@ -21,6 +21,7 @@ package org.wso2.carbon.device.mgt.common.metadata.mgt;
public class WhiteLabelThemeCreateRequest {
private WhiteLabelImageRequestPayload favicon;
private WhiteLabelImageRequestPayload logo;
+ private WhiteLabelImageRequestPayload logoIcon;
private String footerText;
private String appTitle;
@@ -55,4 +56,12 @@ public class WhiteLabelThemeCreateRequest {
public void setAppTitle(String appTitle) {
this.appTitle = appTitle;
}
+
+ public WhiteLabelImageRequestPayload getLogoIcon() {
+ return logoIcon;
+ }
+
+ public void setLogoIcon(WhiteLabelImageRequestPayload logoIcon) {
+ this.logoIcon = logoIcon;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/metadata/mgt/whitelabel/WhiteLabelImages.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/metadata/mgt/whitelabel/WhiteLabelImages.java
index 69ea8fa1d8..76734f785e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/metadata/mgt/whitelabel/WhiteLabelImages.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/metadata/mgt/whitelabel/WhiteLabelImages.java
@@ -28,6 +28,7 @@ public class WhiteLabelImages {
private String defaultImagesLocation;
private String defaultFaviconName;
private String defaultLogoName;
+ private String defaultLogoIconName;
@XmlElement(name = "StoragePath", required = true)
public String getStoragePath() {
@@ -61,6 +62,15 @@ public class WhiteLabelImages {
return defaultImagesLocation;
}
+ @XmlElement(name = "DefaultLogoIconName", required = true)
+ public String getDefaultLogoIconName() {
+ return defaultLogoIconName;
+ }
+
+ public void setDefaultLogoIconName(String defaultLogoIconName) {
+ this.defaultLogoIconName = defaultLogoIconName;
+ }
+
public void setDefaultImagesLocation(String defaultImagesLocation) {
this.defaultImagesLocation = defaultImagesLocation;
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/WhiteLabelManagementServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/WhiteLabelManagementServiceImpl.java
index cb46ec25d3..ada1b7a979 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/WhiteLabelManagementServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/WhiteLabelManagementServiceImpl.java
@@ -26,9 +26,11 @@ import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
+import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.Base64File;
import org.wso2.carbon.device.mgt.common.FileResponse;
+import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.MetadataManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.NotFoundException;
import org.wso2.carbon.device.mgt.common.exceptions.TransactionManagementException;
@@ -48,6 +50,8 @@ import org.wso2.carbon.device.mgt.core.metadata.mgt.dao.MetadataManagementDAOExc
import org.wso2.carbon.device.mgt.core.metadata.mgt.dao.MetadataManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.metadata.mgt.dao.util.MetadataConstants;
import org.wso2.carbon.device.mgt.core.metadata.mgt.util.WhiteLabelStorageUtil;
+import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -67,38 +71,62 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
}
@Override
- public FileResponse getWhiteLabelFavicon() throws MetadataManagementException, NotFoundException {
+ public FileResponse getWhiteLabelFavicon(String tenantDomain) throws MetadataManagementException, NotFoundException {
try {
- WhiteLabelTheme whiteLabelTheme = getWhiteLabelTheme();
- return getImageFileResponse(whiteLabelTheme.getFaviconImage(), WhiteLabelImage.ImageName.FAVICON);
+ WhiteLabelTheme whiteLabelTheme = getWhiteLabelTheme(tenantDomain);
+ return getImageFileResponse(whiteLabelTheme.getFaviconImage(), WhiteLabelImage.ImageName.FAVICON, tenantDomain);
} catch (IOException e) {
String msg = "Error occurred while getting byte content of favicon";
log.error(msg, e);
throw new MetadataManagementException(msg, e);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting tenant details of favicon";
+ log.error(msg, e);
+ throw new MetadataManagementException(msg, e);
+ }
+ }
+
+ @Override
+ public FileResponse getWhiteLabelLogo(String tenantDomain) throws MetadataManagementException, NotFoundException {
+ try {
+ WhiteLabelTheme whiteLabelTheme = getWhiteLabelTheme(tenantDomain);
+ return getImageFileResponse(whiteLabelTheme.getLogoImage(), WhiteLabelImage.ImageName.LOGO, tenantDomain);
+ } catch (IOException e) {
+ String msg = "Error occurred while getting byte content of logo";
+ log.error(msg, e);
+ throw new MetadataManagementException(msg, e);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting tenant details of logo";
+ log.error(msg, e);
+ throw new MetadataManagementException(msg, e);
}
}
@Override
- public FileResponse getWhiteLabelLogo() throws MetadataManagementException, NotFoundException {
+ public FileResponse getWhiteLabelLogoIcon(String tenantDomain) throws MetadataManagementException, NotFoundException {
try {
- WhiteLabelTheme whiteLabelTheme = getWhiteLabelTheme();
- return getImageFileResponse(whiteLabelTheme.getLogoImage(), WhiteLabelImage.ImageName.LOGO);
+ WhiteLabelTheme whiteLabelTheme = getWhiteLabelTheme(tenantDomain);
+ return getImageFileResponse(whiteLabelTheme.getLogoIconImage(), WhiteLabelImage.ImageName.LOGO_ICON, tenantDomain);
} catch (IOException e) {
String msg = "Error occurred while getting byte content of logo";
log.error(msg, e);
throw new MetadataManagementException(msg, e);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting tenant details of icon";
+ log.error(msg, e);
+ throw new MetadataManagementException(msg, e);
}
}
/**
* Useful to get white label image file response for provided {@link WhiteLabelImage.ImageName}
*/
- private FileResponse getImageFileResponse(WhiteLabelImage image, WhiteLabelImage.ImageName imageName) throws
- IOException, MetadataManagementException, NotFoundException {
+ private FileResponse getImageFileResponse(WhiteLabelImage image, WhiteLabelImage.ImageName imageName, String tenantDomain) throws
+ IOException, MetadataManagementException, NotFoundException, DeviceManagementException {
if (image.getImageLocationType() == WhiteLabelImage.ImageLocationType.URL) {
return getImageFileResponseFromUrl(image.getImageLocation());
}
- return WhiteLabelStorageUtil.getWhiteLabelImageStream(image, imageName);
+ return WhiteLabelStorageUtil.getWhiteLabelImageStream(image, imageName, tenantDomain);
}
/**
@@ -169,10 +197,12 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
String appTitle = getDefaultAppTitle();
WhiteLabelImage favicon = constructDefaultFaviconImage();
WhiteLabelImage logo = constructDefaultLogoImage();
+ WhiteLabelImage logoIcon = constructDefaultLogoIconImage();
WhiteLabelTheme defaultTheme = new WhiteLabelTheme();
defaultTheme.setFooterText(footerText);
defaultTheme.setAppTitle(appTitle);
defaultTheme.setLogoImage(logo);
+ defaultTheme.setLogoIconImage(logoIcon);
defaultTheme.setFaviconImage(favicon);
return defaultTheme;
}
@@ -227,6 +257,21 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
return logo;
}
+ /**
+ * This is useful to construct and get the default logo whitelabel image
+ *
+ * @return {@link WhiteLabelImage}
+ */
+ private WhiteLabelImage constructDefaultLogoIconImage() {
+ MetaDataConfiguration metaDataConfiguration = DeviceConfigurationManager.getInstance().
+ getDeviceManagementConfig().getMetaDataConfiguration();
+ WhiteLabelConfiguration whiteLabelConfiguration = metaDataConfiguration.getWhiteLabelConfiguration();
+ WhiteLabelImage logoIcon = new WhiteLabelImage();
+ logoIcon.setImageLocation(whiteLabelConfiguration.getWhiteLabelImages().getDefaultLogoIconName());
+ setDefaultWhiteLabelImageCommonProperties(logoIcon);
+ return logoIcon;
+ }
+
/**
* This is useful to set common properties such as DEFAULT_FILE type for {@link WhiteLabelImage.ImageLocationType}
* for default white label image bean{@link WhiteLabelImage}
@@ -242,18 +287,24 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
log.debug("Creating Metadata : [" + createWhiteLabelTheme.toString() + "]");
}
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
+ String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true);
File existingFaviconImage = null;
File existingLogoImage = null;
+ File existingLogoIconImage = null;
try {
- WhiteLabelTheme theme = getWhiteLabelTheme();
+ WhiteLabelTheme theme = getWhiteLabelTheme(tenantDomain);
if (theme.getFaviconImage().getImageLocationType() == WhiteLabelImage.ImageLocationType.CUSTOM_FILE) {
- existingFaviconImage = WhiteLabelStorageUtil.getWhiteLabelImageFile(theme.getFaviconImage(), WhiteLabelImage.ImageName.FAVICON);
+ existingFaviconImage = WhiteLabelStorageUtil.getWhiteLabelImageFile(theme.getFaviconImage(), WhiteLabelImage.ImageName.FAVICON, tenantDomain);
}
if (theme.getLogoImage().getImageLocationType() == WhiteLabelImage.ImageLocationType.CUSTOM_FILE) {
- existingLogoImage = WhiteLabelStorageUtil.getWhiteLabelImageFile(theme.getLogoImage(), WhiteLabelImage.ImageName.LOGO);
+ existingLogoImage = WhiteLabelStorageUtil.getWhiteLabelImageFile(theme.getLogoImage(), WhiteLabelImage.ImageName.LOGO, tenantDomain);
+ }
+ if (theme.getLogoIconImage().getImageLocationType() == WhiteLabelImage.ImageLocationType.CUSTOM_FILE) {
+ existingLogoIconImage = WhiteLabelStorageUtil.getWhiteLabelImageFile(theme.getLogoIconImage(), WhiteLabelImage.ImageName.LOGO_ICON, tenantDomain);
}
storeWhiteLabelImageIfRequired(createWhiteLabelTheme.getFavicon(), WhiteLabelImage.ImageName.FAVICON, tenantId);
storeWhiteLabelImageIfRequired(createWhiteLabelTheme.getLogo(), WhiteLabelImage.ImageName.LOGO, tenantId);
+ storeWhiteLabelImageIfRequired(createWhiteLabelTheme.getLogoIcon(), WhiteLabelImage.ImageName.LOGO_ICON, tenantId);
WhiteLabelTheme whiteLabelTheme = constructWhiteLabelTheme(createWhiteLabelTheme);
Metadata metadataWhiteLabelTheme = constructWhiteLabelThemeMetadata(whiteLabelTheme);
try {
@@ -266,12 +317,12 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
return whiteLabelTheme;
} catch (MetadataManagementDAOException e) {
MetadataManagementDAOFactory.rollbackTransaction();
- restoreWhiteLabelImages(existingFaviconImage, existingLogoImage, tenantId);
+ restoreWhiteLabelImages(existingFaviconImage, existingLogoImage, existingLogoIconImage, tenantId);
String msg = "Error occurred while creating the metadata entry. " + createWhiteLabelTheme;
log.error(msg, e);
throw new MetadataManagementException(msg, e);
} catch (TransactionManagementException e) {
- restoreWhiteLabelImages(existingFaviconImage, existingLogoImage, tenantId);
+ restoreWhiteLabelImages(existingFaviconImage, existingLogoImage, existingLogoIconImage, tenantId);
String msg = "Error occurred while opening a connection to the data source";
log.error(msg, e);
throw new MetadataManagementException("Error occurred while creating metadata record", e);
@@ -282,6 +333,11 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
String msg = "Error occurred while retrieving existing white label theme";
log.error(msg, e);
throw new MetadataManagementException(msg, e);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting tenant details of white label";
+ log.error(msg, e);
+ throw new MetadataManagementException(msg, e);
+
}
}
@@ -294,7 +350,7 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
* @param existingFavicon existing favicon image file
* @param existingLogo existing logo image file
*/
- private void restoreWhiteLabelImages(File existingFavicon, File existingLogo, int tenantId)
+ private void restoreWhiteLabelImages(File existingFavicon, File existingLogo, File existingLogoIcon, int tenantId)
throws MetadataManagementException {
WhiteLabelStorageUtil.deleteWhiteLabelImageForTenantIfExists(tenantId);
if (existingFavicon != null) {
@@ -303,6 +359,9 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
if (existingLogo != null) {
WhiteLabelStorageUtil.storeWhiteLabelImage(existingLogo, WhiteLabelImage.ImageName.LOGO, tenantId);
}
+ if (existingLogoIcon != null) {
+ WhiteLabelStorageUtil.storeWhiteLabelImage(existingLogoIcon, WhiteLabelImage.ImageName.LOGO_ICON, tenantId);
+ }
}
/**
@@ -328,10 +387,13 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
WhiteLabelTheme whiteLabelTheme = new WhiteLabelTheme();
WhiteLabelImageRequestPayload faviconPayload = whiteLabelThemeCreateRequest.getFavicon();
WhiteLabelImageRequestPayload logoPayload = whiteLabelThemeCreateRequest.getLogo();
+ WhiteLabelImageRequestPayload logoIconPayload = whiteLabelThemeCreateRequest.getLogoIcon();
WhiteLabelImage faviconImage = constructWhiteLabelImageDTO(faviconPayload);
WhiteLabelImage logoImage = constructWhiteLabelImageDTO(logoPayload);
+ WhiteLabelImage logoIconImage = constructWhiteLabelImageDTO(logoIconPayload);
whiteLabelTheme.setFaviconImage(faviconImage);
whiteLabelTheme.setLogoImage(logoImage);
+ whiteLabelTheme.setLogoIconImage(logoIconImage);
whiteLabelTheme.setFooterText(whiteLabelThemeCreateRequest.getFooterText());
whiteLabelTheme.setAppTitle(whiteLabelThemeCreateRequest.getAppTitle());
return whiteLabelTheme;
@@ -367,8 +429,8 @@ public class WhiteLabelManagementServiceImpl implements WhiteLabelManagementServ
}
@Override
- public WhiteLabelTheme getWhiteLabelTheme() throws MetadataManagementException, NotFoundException {
- int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
+ public WhiteLabelTheme getWhiteLabelTheme(String tenantDomain) throws MetadataManagementException, NotFoundException, DeviceManagementException {
+ int tenantId = DeviceManagerUtil.getTenantId(tenantDomain);
if (log.isDebugEnabled()) {
log.debug("Retrieving whitelabel theme for tenant: " + tenantId);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/util/WhiteLabelStorageUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/util/WhiteLabelStorageUtil.java
index c426c86b69..5fe4d9dfcc 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/util/WhiteLabelStorageUtil.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/metadata/mgt/util/WhiteLabelStorageUtil.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.Base64File;
import org.wso2.carbon.device.mgt.common.FileResponse;
+import org.wso2.carbon.device.mgt.common.exceptions.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.MetadataManagementException;
import org.wso2.carbon.device.mgt.common.exceptions.NotFoundException;
import org.wso2.carbon.device.mgt.common.metadata.mgt.WhiteLabelImage;
@@ -31,6 +32,8 @@ import org.wso2.carbon.device.mgt.core.common.util.FileUtil;
import org.wso2.carbon.device.mgt.core.common.util.StorageManagementUtil;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.metadata.mgt.MetaDataConfiguration;
+import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -115,9 +118,9 @@ public class WhiteLabelStorageUtil {
* @param imageName (i.e: LOGO)
* @return white label image file {@link File}
*/
- public static File getWhiteLabelImageFile(WhiteLabelImage image, WhiteLabelImage.ImageName imageName)
- throws MetadataManagementException {
- String fullPathToImage = getPathToImage(image, imageName);
+ public static File getWhiteLabelImageFile(WhiteLabelImage image, WhiteLabelImage.ImageName imageName, String tenantDomain)
+ throws MetadataManagementException, DeviceManagementException {
+ String fullPathToImage = getPathToImage(image, imageName, tenantDomain);
return new File(fullPathToImage);
}
@@ -128,10 +131,10 @@ public class WhiteLabelStorageUtil {
* @param imageName (i.e: LOGO)
* @return white label image input stream
*/
- public static FileResponse getWhiteLabelImageStream(WhiteLabelImage image, WhiteLabelImage.ImageName imageName)
- throws MetadataManagementException, NotFoundException {
+ public static FileResponse getWhiteLabelImageStream(WhiteLabelImage image, WhiteLabelImage.ImageName imageName, String tenantDomain)
+ throws MetadataManagementException, NotFoundException, DeviceManagementException {
FileResponse fileResponse = new FileResponse();
- String fullPathToFile = getPathToImage(image, imageName);
+ String fullPathToFile = getPathToImage(image, imageName, tenantDomain);
try {
InputStream imageStream = StorageManagementUtil.getInputStream(fullPathToFile);
if (imageStream == null) {
@@ -159,15 +162,22 @@ public class WhiteLabelStorageUtil {
* @param imageName (i.e: LOGO)
* @return Full path to white label image in the system
*/
- private static String getPathToImage(WhiteLabelImage image, WhiteLabelImage.ImageName imageName)
- throws MetadataManagementException {
+ private static String getPathToImage(WhiteLabelImage image, WhiteLabelImage.ImageName imageName, String tenantDomain)
+ throws MetadataManagementException, DeviceManagementException {
WhiteLabelImage.ImageLocationType imageLocationType = image.getImageLocationType();
if (imageLocationType == WhiteLabelImage.ImageLocationType.URL) {
String msg = "White label images of URL type is not stored, hence it doesn't have a path in file system.";
log.error(msg);
throw new MetadataManagementException(msg);
}
- int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true);
+ int tenantId = 0;
+ try {
+ tenantId = DeviceManagerUtil.getTenantId(tenantDomain);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting tenant details of logo";
+ log.error(msg, e);
+ throw new DeviceManagementException(msg, e);
+ }
String fileName = image.getImageLocation();
String filePath = String.valueOf(tenantId);
if (imageLocationType == WhiteLabelImage.ImageLocationType.DEFAULT_FILE) {
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf/cdm-config.xml b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf/cdm-config.xml
index fcae0ca5e0..989e6209a7 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf/cdm-config.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf/cdm-config.xml
@@ -197,6 +197,7 @@
repository/resources/whitelabel
favicon.png
logo.png
+ icon.png
default
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2 b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2
index f8c736a56d..c985f6d068 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.basics.feature/src/main/resources/conf_templates/templates/repository/conf/cdm-config.xml.j2
@@ -336,6 +336,7 @@
repository/resources/whitelabel
favicon.png
logo.png
+ icon.png
default