VC support for calculated fields
This commit is contained in:
		
							parent
							
								
									8568bb93a8
								
							
						
					
					
						commit
						dfb0549424
					
				@ -69,7 +69,8 @@ public class DefaultEntitiesExportImportService implements EntitiesExportImportS
 | 
				
			|||||||
            EntityType.DASHBOARD, EntityType.ASSET_PROFILE, EntityType.ASSET,
 | 
					            EntityType.DASHBOARD, EntityType.ASSET_PROFILE, EntityType.ASSET,
 | 
				
			||||||
            EntityType.DEVICE_PROFILE, EntityType.DEVICE,
 | 
					            EntityType.DEVICE_PROFILE, EntityType.DEVICE,
 | 
				
			||||||
            EntityType.ENTITY_VIEW, EntityType.WIDGET_TYPE, EntityType.WIDGETS_BUNDLE,
 | 
					            EntityType.ENTITY_VIEW, EntityType.WIDGET_TYPE, EntityType.WIDGETS_BUNDLE,
 | 
				
			||||||
            EntityType.NOTIFICATION_TEMPLATE, EntityType.NOTIFICATION_TARGET, EntityType.NOTIFICATION_RULE
 | 
					            EntityType.NOTIFICATION_TEMPLATE, EntityType.NOTIFICATION_TARGET, EntityType.NOTIFICATION_RULE,
 | 
				
			||||||
 | 
					            EntityType.CALCULATED_FIELD
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Copyright © 2016-2024 The Thingsboard Authors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package org.thingsboard.server.service.sync.ie.exporting.impl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.EntityType;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.cf.CalculatedField;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.sync.ie.EntityExportData;
 | 
				
			||||||
 | 
					import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
				
			||||||
 | 
					import org.thingsboard.server.service.sync.vc.data.EntitiesExportCtx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Service
 | 
				
			||||||
 | 
					@TbCoreComponent
 | 
				
			||||||
 | 
					public class CalculatedFieldExportService extends BaseEntityExportService<CalculatedFieldId, CalculatedField, EntityExportData<CalculatedField>> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void setRelatedEntities(EntitiesExportCtx<?> ctx, CalculatedField calculatedField, EntityExportData<CalculatedField> exportData) {
 | 
				
			||||||
 | 
					        calculatedField.setEntityId(getExternalIdOrElseInternal(ctx, calculatedField.getEntityId()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Set<EntityType> getSupportedEntityTypes() {
 | 
				
			||||||
 | 
					        return Set.of(EntityType.CALCULATED_FIELD);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,78 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Copyright © 2016-2024 The Thingsboard Authors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package org.thingsboard.server.service.sync.ie.importing.impl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.RequiredArgsConstructor;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.EntityType;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.User;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.audit.ActionType;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.cf.CalculatedField;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.sync.ie.EntityExportData;
 | 
				
			||||||
 | 
					import org.thingsboard.server.dao.cf.CalculatedFieldService;
 | 
				
			||||||
 | 
					import org.thingsboard.server.dao.service.ConstraintValidator;
 | 
				
			||||||
 | 
					import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
				
			||||||
 | 
					import org.thingsboard.server.service.sync.vc.data.EntitiesImportCtx;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Service
 | 
				
			||||||
 | 
					@TbCoreComponent
 | 
				
			||||||
 | 
					@RequiredArgsConstructor
 | 
				
			||||||
 | 
					public class CalculatedFieldImportService extends BaseEntityImportService<CalculatedFieldId, CalculatedField, EntityExportData<CalculatedField>> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private final CalculatedFieldService calculatedFieldService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void setOwner(TenantId tenantId, CalculatedField calculatedField, IdProvider idProvider) {
 | 
				
			||||||
 | 
					        calculatedField.setTenantId(tenantId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected CalculatedField prepare(EntitiesImportCtx ctx, CalculatedField calculatedField, CalculatedField oldEntity, EntityExportData<CalculatedField> exportData, IdProvider idProvider) {
 | 
				
			||||||
 | 
					        calculatedField.setEntityId(idProvider.getInternalId(calculatedField.getEntityId()));
 | 
				
			||||||
 | 
					        return calculatedField;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected CalculatedField saveOrUpdate(EntitiesImportCtx ctx, CalculatedField calculatedField, EntityExportData<CalculatedField> exportData, IdProvider idProvider) {
 | 
				
			||||||
 | 
					        ConstraintValidator.validateFields(calculatedField);
 | 
				
			||||||
 | 
					        return calculatedFieldService.save(calculatedField);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected CalculatedField deepCopy(CalculatedField calculatedField) {
 | 
				
			||||||
 | 
					        return new CalculatedField(calculatedField);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onEntitySaved(User user, CalculatedField savedEntity, CalculatedField oldEntity) throws ThingsboardException {
 | 
				
			||||||
 | 
					        entityActionService.logEntityAction(user, savedEntity.getId(), savedEntity, null,
 | 
				
			||||||
 | 
					                oldEntity == null ? ActionType.ADDED : ActionType.UPDATED, null);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void cleanupForComparison(CalculatedField e) {
 | 
				
			||||||
 | 
					        super.cleanupForComparison(e);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public EntityType getEntityType() {
 | 
				
			||||||
 | 
					        return EntityType.CALCULATED_FIELD;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -37,11 +37,14 @@ import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			|||||||
import org.thingsboard.server.common.data.validation.Length;
 | 
					import org.thingsboard.server.common.data.validation.Length;
 | 
				
			||||||
import org.thingsboard.server.common.data.validation.NoXss;
 | 
					import org.thingsboard.server.common.data.validation.NoXss;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.Serial;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Schema
 | 
					@Schema
 | 
				
			||||||
@Data
 | 
					@Data
 | 
				
			||||||
@EqualsAndHashCode(callSuper = true)
 | 
					@EqualsAndHashCode(callSuper = true)
 | 
				
			||||||
public class CalculatedField extends BaseData<CalculatedFieldId> implements HasName, HasTenantId, HasVersion, ExportableEntity<CalculatedFieldId>, HasDebugSettings {
 | 
					public class CalculatedField extends BaseData<CalculatedFieldId> implements HasName, HasTenantId, HasVersion, ExportableEntity<CalculatedFieldId>, HasDebugSettings {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Serial
 | 
				
			||||||
    private static final long serialVersionUID = 4491966747773381420L;
 | 
					    private static final long serialVersionUID = 4491966747773381420L;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private TenantId tenantId;
 | 
					    private TenantId tenantId;
 | 
				
			||||||
@ -78,6 +81,20 @@ public class CalculatedField extends BaseData<CalculatedFieldId> implements HasN
 | 
				
			|||||||
        super(id);
 | 
					        super(id);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public CalculatedField(CalculatedField other) {
 | 
				
			||||||
 | 
					        super(other);
 | 
				
			||||||
 | 
					        this.tenantId = other.tenantId;
 | 
				
			||||||
 | 
					        this.entityId = other.entityId;
 | 
				
			||||||
 | 
					        this.type = other.type;
 | 
				
			||||||
 | 
					        this.name = other.name;
 | 
				
			||||||
 | 
					        this.configurationVersion = other.configurationVersion;
 | 
				
			||||||
 | 
					        this.configuration = other.configuration;
 | 
				
			||||||
 | 
					        this.version = other.version;
 | 
				
			||||||
 | 
					        this.externalId = other.externalId;
 | 
				
			||||||
 | 
					        this.debugMode = other.debugMode;
 | 
				
			||||||
 | 
					        this.debugSettings = other.debugSettings;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public CalculatedField(TenantId tenantId, EntityId entityId, CalculatedFieldType type, String name, int configurationVersion, CalculatedFieldConfiguration configuration, Long version, CalculatedFieldId externalId) {
 | 
					    public CalculatedField(TenantId tenantId, EntityId entityId, CalculatedFieldType type, String name, int configurationVersion, CalculatedFieldConfiguration configuration, Long version, CalculatedFieldId externalId) {
 | 
				
			||||||
        this.tenantId = tenantId;
 | 
					        this.tenantId = tenantId;
 | 
				
			||||||
        this.entityId = entityId;
 | 
					        this.entityId = entityId;
 | 
				
			||||||
 | 
				
			|||||||
@ -28,6 +28,7 @@ import org.thingsboard.server.common.data.EntityView;
 | 
				
			|||||||
import org.thingsboard.server.common.data.TbResource;
 | 
					import org.thingsboard.server.common.data.TbResource;
 | 
				
			||||||
import org.thingsboard.server.common.data.asset.Asset;
 | 
					import org.thingsboard.server.common.data.asset.Asset;
 | 
				
			||||||
import org.thingsboard.server.common.data.asset.AssetProfile;
 | 
					import org.thingsboard.server.common.data.asset.AssetProfile;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.cf.CalculatedField;
 | 
				
			||||||
import org.thingsboard.server.common.data.notification.rule.NotificationRule;
 | 
					import org.thingsboard.server.common.data.notification.rule.NotificationRule;
 | 
				
			||||||
import org.thingsboard.server.common.data.notification.targets.NotificationTarget;
 | 
					import org.thingsboard.server.common.data.notification.targets.NotificationTarget;
 | 
				
			||||||
import org.thingsboard.server.common.data.notification.template.NotificationTemplate;
 | 
					import org.thingsboard.server.common.data.notification.template.NotificationTemplate;
 | 
				
			||||||
@ -58,7 +59,8 @@ import java.lang.annotation.Target;
 | 
				
			|||||||
        @Type(name = "NOTIFICATION_TEMPLATE", value = NotificationTemplate.class),
 | 
					        @Type(name = "NOTIFICATION_TEMPLATE", value = NotificationTemplate.class),
 | 
				
			||||||
        @Type(name = "NOTIFICATION_TARGET", value = NotificationTarget.class),
 | 
					        @Type(name = "NOTIFICATION_TARGET", value = NotificationTarget.class),
 | 
				
			||||||
        @Type(name = "NOTIFICATION_RULE", value = NotificationRule.class),
 | 
					        @Type(name = "NOTIFICATION_RULE", value = NotificationRule.class),
 | 
				
			||||||
        @Type(name = "TB_RESOURCE", value = TbResource.class)
 | 
					        @Type(name = "TB_RESOURCE", value = TbResource.class),
 | 
				
			||||||
 | 
					        @Type(name = "CALCULATED_FIELD", value = CalculatedField.class)
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@JsonIgnoreProperties(value = {"tenantId", "createdTime", "version"}, ignoreUnknown = true)
 | 
					@JsonIgnoreProperties(value = {"tenantId", "createdTime", "version"}, ignoreUnknown = true)
 | 
				
			||||||
public @interface JsonTbEntity {
 | 
					public @interface JsonTbEntity {
 | 
				
			||||||
 | 
				
			|||||||
@ -22,10 +22,11 @@ import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			|||||||
import org.thingsboard.server.common.data.page.PageData;
 | 
					import org.thingsboard.server.common.data.page.PageData;
 | 
				
			||||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
					import org.thingsboard.server.common.data.page.PageLink;
 | 
				
			||||||
import org.thingsboard.server.dao.Dao;
 | 
					import org.thingsboard.server.dao.Dao;
 | 
				
			||||||
 | 
					import org.thingsboard.server.dao.ExportableEntityDao;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public interface CalculatedFieldDao extends Dao<CalculatedField> {
 | 
					public interface CalculatedFieldDao extends Dao<CalculatedField>, ExportableEntityDao<CalculatedFieldId, CalculatedField> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<CalculatedField> findAllByTenantId(TenantId tenantId);
 | 
					    List<CalculatedField> findAllByTenantId(TenantId tenantId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -18,13 +18,16 @@ package org.thingsboard.server.dao.sql.cf;
 | 
				
			|||||||
import org.springframework.data.domain.Page;
 | 
					import org.springframework.data.domain.Page;
 | 
				
			||||||
import org.springframework.data.domain.Pageable;
 | 
					import org.springframework.data.domain.Pageable;
 | 
				
			||||||
import org.springframework.data.jpa.repository.JpaRepository;
 | 
					import org.springframework.data.jpa.repository.JpaRepository;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Repository;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
					import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
				
			||||||
 | 
					import org.thingsboard.server.dao.ExportableEntityRepository;
 | 
				
			||||||
import org.thingsboard.server.dao.model.sql.CalculatedFieldEntity;
 | 
					import org.thingsboard.server.dao.model.sql.CalculatedFieldEntity;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.UUID;
 | 
					import java.util.UUID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public interface CalculatedFieldRepository extends JpaRepository<CalculatedFieldEntity, UUID> {
 | 
					@Repository
 | 
				
			||||||
 | 
					public interface CalculatedFieldRepository extends JpaRepository<CalculatedFieldEntity, UUID>, ExportableEntityRepository<CalculatedFieldEntity> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    boolean existsByTenantIdAndEntityId(UUID tenantId, UUID entityId);
 | 
					    boolean existsByTenantIdAndEntityId(UUID tenantId, UUID entityId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -34,10 +37,16 @@ public interface CalculatedFieldRepository extends JpaRepository<CalculatedField
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    Page<CalculatedFieldEntity> findAllByTenantIdAndEntityId(UUID tenantId, UUID entityId, Pageable pageable);
 | 
					    Page<CalculatedFieldEntity> findAllByTenantIdAndEntityId(UUID tenantId, UUID entityId, Pageable pageable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Page<CalculatedFieldEntity> findByTenantId(UUID tenantId, Pageable pageable);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<CalculatedFieldEntity> findAllByTenantId(UUID tenantId);
 | 
					    List<CalculatedFieldEntity> findAllByTenantId(UUID tenantId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    List<CalculatedFieldEntity> removeAllByTenantIdAndEntityId(UUID tenantId, UUID entityId);
 | 
					    List<CalculatedFieldEntity> removeAllByTenantIdAndEntityId(UUID tenantId, UUID entityId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    long countByTenantIdAndEntityId(UUID tenantId, UUID entityId);
 | 
					    long countByTenantIdAndEntityId(UUID tenantId, UUID entityId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    CalculatedFieldId findExternalIdById(UUID id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    CalculatedFieldEntity findByTenantIdAndName(UUID tenantId, String name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -93,6 +93,26 @@ public class JpaCalculatedFieldDao extends JpaAbstractDao<CalculatedFieldEntity,
 | 
				
			|||||||
        return calculatedFieldRepository.countByTenantIdAndEntityId(tenantId.getId(), entityId.getId());
 | 
					        return calculatedFieldRepository.countByTenantIdAndEntityId(tenantId.getId(), entityId.getId());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public PageData<CalculatedField> findByTenantId(UUID tenantId, PageLink pageLink) {
 | 
				
			||||||
 | 
					        return DaoUtil.toPageData(calculatedFieldRepository.findByTenantId(tenantId, DaoUtil.toPageable(pageLink)));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public CalculatedField findByTenantIdAndName(UUID tenantId, String name) {
 | 
				
			||||||
 | 
					        return DaoUtil.getData(calculatedFieldRepository.findByTenantIdAndName(tenantId, name));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public CalculatedField findByTenantIdAndExternalId(UUID tenantId, UUID externalId) {
 | 
				
			||||||
 | 
					        return DaoUtil.getData(calculatedFieldRepository.findByTenantIdAndExternalId(tenantId, externalId));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public CalculatedFieldId getExternalIdByInternal(CalculatedFieldId internalId) {
 | 
				
			||||||
 | 
					        return calculatedFieldRepository.findExternalIdById(internalId.getId());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    protected Class<CalculatedFieldEntity> getEntityClass() {
 | 
					    protected Class<CalculatedFieldEntity> getEntityClass() {
 | 
				
			||||||
        return CalculatedFieldEntity.class;
 | 
					        return CalculatedFieldEntity.class;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user