@ -24,6 +24,7 @@ import lombok.Data;
import lombok.SneakyThrows ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.lang3.StringUtils ;
import org.apache.commons.lang3.exception.ExceptionUtils ;
import org.apache.commons.lang3.tuple.Pair ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Propagation ;
@ -148,6 +149,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic
image . setDescriptorValue ( descriptor ) ;
image . setPreview ( result . getRight ( ) ) ;
log . debug ( "[{}] Creating image {} ('{}')" , image . getTenantId ( ) , image . getResourceKey ( ) , image . getName ( ) ) ;
return new TbResourceInfo ( doSaveResource ( image ) ) ;
}
@ -188,21 +190,25 @@ public class BaseImageService extends BaseResourceService implements ImageServic
resourceKey = basename + "_(" + idx + ")." + extension ;
idx + + ;
}
log . debug ( "[{}] Generated unique key {} for image {}" , tenantId , resourceKey , filename ) ;
return resourceKey ;
}
@Override
public TbResourceInfo saveImageInfo ( TbResourceInfo imageInfo ) {
log . trace ( "Executing saveImageInfo [{}] [{}]" , imageInfo . getTenantId ( ) , imageInfo . getId ( ) ) ;
return saveResource ( new TbResource ( imageInfo ) ) ;
}
@Override
public TbResourceInfo getImageInfoByTenantIdAndKey ( TenantId tenantId , String key ) {
log . trace ( "Executing getImageInfoByTenantIdAndKey [{}] [{}]" , tenantId , key ) ;
return findResourceInfoByTenantIdAndKey ( tenantId , ResourceType . IMAGE , key ) ;
}
@Override
public PageData < TbResourceInfo > getImagesByTenantId ( TenantId tenantId , PageLink pageLink ) {
log . trace ( "Executing getImagesByTenantId [{}]" , tenantId ) ;
TbResourceInfoFilter filter = TbResourceInfoFilter . builder ( )
. tenantId ( tenantId )
. resourceTypes ( Set . of ( ResourceType . IMAGE ) )
@ -212,6 +218,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic
@Override
public PageData < TbResourceInfo > getAllImagesByTenantId ( TenantId tenantId , PageLink pageLink ) {
log . trace ( "Executing getAllImagesByTenantId [{}]" , tenantId ) ;
TbResourceInfoFilter filter = TbResourceInfoFilter . builder ( )
. tenantId ( tenantId )
. resourceTypes ( Set . of ( ResourceType . IMAGE ) )
@ -221,11 +228,13 @@ public class BaseImageService extends BaseResourceService implements ImageServic
@Override
public byte [ ] getImageData ( TenantId tenantId , TbResourceId imageId ) {
log . trace ( "Executing getImageData [{}] [{}]" , tenantId , imageId ) ;
return resourceDao . getResourceData ( tenantId , imageId ) ;
}
@Override
public byte [ ] getImagePreview ( TenantId tenantId , TbResourceId imageId ) {
log . trace ( "Executing getImagePreview [{}] [{}]" , tenantId , imageId ) ;
return resourceDao . getResourcePreview ( tenantId , imageId ) ;
}
@ -260,12 +269,14 @@ public class BaseImageService extends BaseResourceService implements ImageServic
@Override
public TbResourceInfo findSystemOrTenantImageByEtag ( TenantId tenantId , String etag ) {
log . trace ( "Executing findSystemOrTenantImageByEtag [{}] [{}]" , tenantId , etag ) ;
return resourceInfoDao . findSystemOrTenantImageByEtag ( tenantId , ResourceType . IMAGE , etag ) ;
}
@Transactional ( propagation = Propagation . NOT_SUPPORTED ) // we don't want transaction to rollback in case of an image processing failure
@Override
public boolean replaceBase64WithImageUrl ( HasImage entity , String type ) {
log . trace ( "Executing replaceBase64WithImageUrl [{}] [{}] [{}]" , entity . getTenantId ( ) , type , entity . getName ( ) ) ;
String imageName = "\"" + entity . getName ( ) + "\" " ;
if ( entity . getTenantId ( ) = = null | | entity . getTenantId ( ) . isSysTenantId ( ) ) {
imageName + = "system " ;
@ -280,6 +291,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic
@Transactional ( propagation = Propagation . NOT_SUPPORTED ) // we don't want transaction to rollback in case of an image processing failure
@Override
public boolean replaceBase64WithImageUrl ( WidgetTypeDetails entity ) {
log . trace ( "Executing replaceBase64WithImageUrl [{}] [WidgetTypeDetails] [{}]" , entity . getTenantId ( ) , entity . getId ( ) ) ;
String prefix = "\"" + entity . getName ( ) + "\" " ;
if ( entity . getTenantId ( ) = = null | | entity . getTenantId ( ) . isSysTenantId ( ) ) {
prefix + = "system " ;
@ -305,6 +317,7 @@ public class BaseImageService extends BaseResourceService implements ImageServic
@Transactional ( propagation = Propagation . NOT_SUPPORTED ) // we don't want transaction to rollback in case of an image processing failure
@Override
public boolean replaceBase64WithImageUrl ( Dashboard entity ) {
log . trace ( "Executing replaceBase64WithImageUrl [{}] [Dashboard] [{}]" , entity . getTenantId ( ) , entity . getId ( ) ) ;
String prefix = "\"" + entity . getTitle ( ) + "\" dashboard" ;
var result = base64ToImageUrl ( entity . getTenantId ( ) , prefix + " image" , entity . getImage ( ) ) ;
boolean updated = result . isUpdated ( ) ;
@ -442,7 +455,11 @@ public class BaseImageService extends BaseResourceService implements ImageServic
try {
imageInfo = saveImage ( image ) ;
} catch ( Exception e ) {
log . warn ( "[{}][{}] Failed to replace Base64 with image url: {}" , tenantId , name , StringUtils . abbreviate ( data , 50 ) , e ) ;
if ( log . isDebugEnabled ( ) ) { // printing stacktrace
log . warn ( "[{}][{}] Failed to replace Base64 with image url for {}" , tenantId , name , StringUtils . abbreviate ( data , 50 ) , e ) ;
} else {
log . warn ( "[{}][{}] Failed to replace Base64 with image url for {}: {}" , tenantId , name , StringUtils . abbreviate ( data , 50 ) , ExceptionUtils . getMessage ( e ) ) ;
}
return UpdateResult . of ( false , data ) ;
}
}
@ -492,17 +509,20 @@ public class BaseImageService extends BaseResourceService implements ImageServic
@Override
public void inlineImage ( HasImage entity ) {
log . trace ( "Executing inlineImage [{}] [{}] [{}]" , entity . getTenantId ( ) , entity . getClass ( ) . getSimpleName ( ) , entity . getName ( ) ) ;
entity . setImage ( inlineImage ( entity . getTenantId ( ) , "image" , entity . getImage ( ) ) ) ;
}
@Override
public void inlineImages ( Dashboard dashboard ) {
log . trace ( "Executing inlineImage [{}] [Dashboard] [{}]" , dashboard . getTenantId ( ) , dashboard . getId ( ) ) ;
inlineImage ( dashboard ) ;
inlineIntoJson ( dashboard . getTenantId ( ) , dashboard . getConfiguration ( ) ) ;
}
@Override
public void inlineImages ( WidgetTypeDetails widgetTypeDetails ) {
log . trace ( "Executing inlineImage [{}] [WidgetTypeDetails] [{}]" , widgetTypeDetails . getTenantId ( ) , widgetTypeDetails . getId ( ) ) ;
inlineImage ( widgetTypeDetails ) ;
inlineIntoJson ( widgetTypeDetails . getTenantId ( ) , widgetTypeDetails . getDescriptor ( ) ) ;
}