@ -24,6 +24,7 @@ import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.service.cf.ctx.state.ArgumentEntry ;
import org.thingsboard.server.service.cf.ctx.state.ArgumentEntry ;
import org.thingsboard.server.service.cf.ctx.state.ArgumentEntryType ;
import org.thingsboard.server.service.cf.ctx.state.ArgumentEntryType ;
import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldCtx ;
import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldCtx ;
import org.thingsboard.server.service.cf.ctx.state.HasEntityLimit ;
import org.thingsboard.server.service.cf.ctx.state.HasLatestTs ;
import org.thingsboard.server.service.cf.ctx.state.HasLatestTs ;
import org.thingsboard.server.service.cf.ctx.state.SingleValueArgumentEntry ;
import org.thingsboard.server.service.cf.ctx.state.SingleValueArgumentEntry ;
@ -34,7 +35,7 @@ import static org.thingsboard.server.service.cf.ctx.state.BaseCalculatedFieldSta
@Data
@Data
@AllArgsConstructor
@AllArgsConstructor
public class RelatedEntitiesArgumentEntry implements ArgumentEntry , HasLatestTs {
public class RelatedEntitiesArgumentEntry implements ArgumentEntry , HasLatestTs , HasEntityLimit {
private final Map < EntityId , ArgumentEntry > entityInputs ;
private final Map < EntityId , ArgumentEntry > entityInputs ;
@ -66,18 +67,18 @@ public class RelatedEntitiesArgumentEntry implements ArgumentEntry, HasLatestTs
@Override
@Override
public boolean updateEntry ( ArgumentEntry entry , CalculatedFieldCtx ctx ) {
public boolean updateEntry ( ArgumentEntry entry , CalculatedFieldCtx ctx ) {
if ( entry instanceof RelatedEntitiesArgumentEntry relatedEntitiesArgumentEntry ) {
if ( entry instanceof RelatedEntitiesArgumentEntry relatedEntitiesArgumentEntry ) {
checkRelatedEntitiesNumber ( ctx ) ;
checkEntityLimit ( entityInputs . size ( ) , ctx ) ;
entityInputs . putAll ( relatedEntitiesArgumentEntry . entityInputs ) ;
entityInputs . putAll ( relatedEntitiesArgumentEntry . entityInputs ) ;
} else if ( entry instanceof SingleValueArgumentEntry singleValueArgumentEntry ) {
} else if ( entry instanceof SingleValueArgumentEntry singleValueArgumentEntry ) {
if ( entry . isForceResetPrevious ( ) ) {
if ( entry . isForceResetPrevious ( ) ) {
checkRelatedEntitiesNumber ( ctx ) ;
checkEntityLimit ( entityInputs . size ( ) , ctx ) ;
entityInputs . put ( singleValueArgumentEntry . getEntityId ( ) , singleValueArgumentEntry ) ;
entityInputs . put ( singleValueArgumentEntry . getEntityId ( ) , singleValueArgumentEntry ) ;
} else {
} else {
ArgumentEntry argumentEntry = entityInputs . get ( singleValueArgumentEntry . getEntityId ( ) ) ;
ArgumentEntry argumentEntry = entityInputs . get ( singleValueArgumentEntry . getEntityId ( ) ) ;
if ( argumentEntry ! = null ) {
if ( argumentEntry ! = null ) {
argumentEntry . updateEntry ( singleValueArgumentEntry , ctx ) ;
argumentEntry . updateEntry ( singleValueArgumentEntry , ctx ) ;
} else {
} else {
checkRelatedEntitiesNumber ( ctx ) ;
checkEntityLimit ( entityInputs . size ( ) , ctx ) ;
entityInputs . put ( singleValueArgumentEntry . getEntityId ( ) , singleValueArgumentEntry ) ;
entityInputs . put ( singleValueArgumentEntry . getEntityId ( ) , singleValueArgumentEntry ) ;
}
}
}
}
@ -87,15 +88,6 @@ public class RelatedEntitiesArgumentEntry implements ArgumentEntry, HasLatestTs
return true ;
return true ;
}
}
private void checkRelatedEntitiesNumber ( CalculatedFieldCtx ctx ) {
if ( entityInputs . size ( ) > = ctx . getMaxRelatedEntitiesPerCfArgument ( ) ) {
throw new IllegalArgumentException (
"Exceeded the maximum allowed related entities per argument '"
+ ctx . getMaxRelatedEntitiesPerCfArgument ( ) + "'. Increase the limit in the tenant profile configuration."
) ;
}
}
@Override
@Override
public boolean isEmpty ( ) {
public boolean isEmpty ( ) {
return entityInputs . isEmpty ( ) ;
return entityInputs . isEmpty ( ) ;