12 changed files with 318 additions and 96 deletions
@ -0,0 +1,46 @@ |
|||
/** |
|||
* Copyright © 2016-2026 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.common.data.rule; |
|||
|
|||
import com.fasterxml.jackson.annotation.JsonInclude; |
|||
import io.swagger.v3.oas.annotations.media.Schema; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
|
|||
import java.util.List; |
|||
|
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
public class RuleChainDetails extends RuleChain { |
|||
|
|||
@JsonInclude(JsonInclude.Include.NON_EMPTY) |
|||
@Schema(description = "List of sticky notes placed on the rule chain canvas") |
|||
private List<RuleChainNote> notes; |
|||
|
|||
public RuleChainDetails() { |
|||
super(); |
|||
} |
|||
|
|||
public RuleChainDetails(RuleChain ruleChain) { |
|||
super(ruleChain); |
|||
} |
|||
|
|||
public RuleChainDetails(RuleChainDetails ruleChainDetails) { |
|||
super(ruleChainDetails); |
|||
this.notes = ruleChainDetails.getNotes(); |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,127 @@ |
|||
/** |
|||
* Copyright © 2016-2026 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.dao.model.sql; |
|||
|
|||
import com.fasterxml.jackson.databind.JsonNode; |
|||
import jakarta.persistence.Column; |
|||
import jakarta.persistence.Convert; |
|||
import jakarta.persistence.EnumType; |
|||
import jakarta.persistence.Enumerated; |
|||
import jakarta.persistence.MappedSuperclass; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import org.thingsboard.server.common.data.id.RuleChainId; |
|||
import org.thingsboard.server.common.data.id.RuleNodeId; |
|||
import org.thingsboard.server.common.data.id.TenantId; |
|||
import org.thingsboard.server.common.data.rule.RuleChain; |
|||
import org.thingsboard.server.common.data.rule.RuleChainType; |
|||
import org.thingsboard.server.dao.DaoUtil; |
|||
import org.thingsboard.server.dao.model.BaseVersionedEntity; |
|||
import org.thingsboard.server.dao.model.ModelConstants; |
|||
import org.thingsboard.server.dao.util.mapping.JsonConverter; |
|||
|
|||
import java.util.UUID; |
|||
|
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@MappedSuperclass |
|||
public abstract class AbstractRuleChainEntity<T extends RuleChain> extends BaseVersionedEntity<T> { |
|||
|
|||
@Column(name = ModelConstants.RULE_CHAIN_TENANT_ID_PROPERTY) |
|||
private UUID tenantId; |
|||
|
|||
@Column(name = ModelConstants.RULE_CHAIN_NAME_PROPERTY) |
|||
private String name; |
|||
|
|||
@Enumerated(EnumType.STRING) |
|||
@Column(name = ModelConstants.RULE_CHAIN_TYPE_PROPERTY) |
|||
private RuleChainType type; |
|||
|
|||
@Column(name = ModelConstants.RULE_CHAIN_FIRST_RULE_NODE_ID_PROPERTY) |
|||
private UUID firstRuleNodeId; |
|||
|
|||
@Column(name = ModelConstants.RULE_CHAIN_ROOT_PROPERTY) |
|||
private boolean root; |
|||
|
|||
@Column(name = ModelConstants.DEBUG_MODE) |
|||
private boolean debugMode; |
|||
|
|||
@Convert(converter = JsonConverter.class) |
|||
@Column(name = ModelConstants.RULE_CHAIN_CONFIGURATION_PROPERTY) |
|||
private JsonNode configuration; |
|||
|
|||
@Convert(converter = JsonConverter.class) |
|||
@Column(name = ModelConstants.ADDITIONAL_INFO_PROPERTY) |
|||
private JsonNode additionalInfo; |
|||
|
|||
@Column(name = ModelConstants.EXTERNAL_ID_PROPERTY) |
|||
private UUID externalId; |
|||
|
|||
public AbstractRuleChainEntity() { |
|||
super(); |
|||
} |
|||
|
|||
public AbstractRuleChainEntity(T ruleChain) { |
|||
super(ruleChain); |
|||
this.tenantId = DaoUtil.getId(ruleChain.getTenantId()); |
|||
this.name = ruleChain.getName(); |
|||
this.type = ruleChain.getType(); |
|||
if (ruleChain.getFirstRuleNodeId() != null) { |
|||
this.firstRuleNodeId = ruleChain.getFirstRuleNodeId().getId(); |
|||
} |
|||
this.root = ruleChain.isRoot(); |
|||
this.debugMode = ruleChain.isDebugMode(); |
|||
this.configuration = ruleChain.getConfiguration(); |
|||
this.additionalInfo = ruleChain.getAdditionalInfo(); |
|||
if (ruleChain.getExternalId() != null) { |
|||
this.externalId = ruleChain.getExternalId().getId(); |
|||
} |
|||
} |
|||
|
|||
public AbstractRuleChainEntity(AbstractRuleChainEntity<?> ruleChainEntity) { |
|||
super(ruleChainEntity); |
|||
this.tenantId = ruleChainEntity.getTenantId(); |
|||
this.name = ruleChainEntity.getName(); |
|||
this.type = ruleChainEntity.getType(); |
|||
this.firstRuleNodeId = ruleChainEntity.getFirstRuleNodeId(); |
|||
this.root = ruleChainEntity.isRoot(); |
|||
this.debugMode = ruleChainEntity.isDebugMode(); |
|||
this.configuration = ruleChainEntity.getConfiguration(); |
|||
this.additionalInfo = ruleChainEntity.getAdditionalInfo(); |
|||
this.externalId = ruleChainEntity.getExternalId(); |
|||
} |
|||
|
|||
protected RuleChain toRuleChain() { |
|||
RuleChain ruleChain = new RuleChain(new RuleChainId(this.getUuid())); |
|||
ruleChain.setCreatedTime(createdTime); |
|||
ruleChain.setVersion(version); |
|||
ruleChain.setTenantId(TenantId.fromUUID(tenantId)); |
|||
ruleChain.setName(name); |
|||
ruleChain.setType(type); |
|||
if (firstRuleNodeId != null) { |
|||
ruleChain.setFirstRuleNodeId(new RuleNodeId(firstRuleNodeId)); |
|||
} |
|||
ruleChain.setRoot(root); |
|||
ruleChain.setDebugMode(debugMode); |
|||
ruleChain.setConfiguration(configuration); |
|||
ruleChain.setAdditionalInfo(additionalInfo); |
|||
if (externalId != null) { |
|||
ruleChain.setExternalId(new RuleChainId(externalId)); |
|||
} |
|||
return ruleChain; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,65 @@ |
|||
/** |
|||
* Copyright © 2016-2026 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.dao.model.sql; |
|||
|
|||
import com.fasterxml.jackson.databind.JsonNode; |
|||
import jakarta.persistence.Column; |
|||
import jakarta.persistence.Convert; |
|||
import jakarta.persistence.Entity; |
|||
import jakarta.persistence.Table; |
|||
import lombok.Data; |
|||
import lombok.EqualsAndHashCode; |
|||
import org.thingsboard.common.util.JacksonUtil; |
|||
import org.thingsboard.server.common.data.rule.RuleChain; |
|||
import org.thingsboard.server.common.data.rule.RuleChainDetails; |
|||
import org.thingsboard.server.common.data.rule.RuleChainNote; |
|||
import org.thingsboard.server.dao.model.ModelConstants; |
|||
import org.thingsboard.server.dao.util.mapping.JsonConverter; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
@Data |
|||
@EqualsAndHashCode(callSuper = true) |
|||
@Entity |
|||
@Table(name = ModelConstants.RULE_CHAIN_TABLE_NAME) |
|||
public class RuleChainDetailsEntity extends AbstractRuleChainEntity<RuleChainDetails> { |
|||
|
|||
@Convert(converter = JsonConverter.class) |
|||
@Column(name = ModelConstants.RULE_CHAIN_NOTES_PROPERTY) |
|||
private JsonNode notes; |
|||
|
|||
public RuleChainDetailsEntity() { |
|||
super(); |
|||
} |
|||
|
|||
public RuleChainDetailsEntity(RuleChainDetails ruleChainDetails) { |
|||
super(ruleChainDetails); |
|||
if (ruleChainDetails.getNotes() != null) { |
|||
this.notes = JacksonUtil.valueToTree(ruleChainDetails.getNotes()); |
|||
} |
|||
} |
|||
|
|||
@Override |
|||
public RuleChainDetails toData() { |
|||
RuleChain ruleChain = super.toRuleChain(); |
|||
RuleChainDetails details = new RuleChainDetails(ruleChain); |
|||
if (notes != null && notes.isArray()) { |
|||
details.setNotes(Arrays.asList(JacksonUtil.treeToValue(notes, RuleChainNote[].class))); |
|||
} |
|||
return details; |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
/** |
|||
* Copyright © 2016-2026 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.dao.sql.rule; |
|||
|
|||
import org.springframework.data.jpa.repository.JpaRepository; |
|||
import org.thingsboard.server.dao.model.sql.RuleChainDetailsEntity; |
|||
|
|||
import java.util.UUID; |
|||
|
|||
public interface RuleChainDetailsRepository extends JpaRepository<RuleChainDetailsEntity, UUID> { |
|||
|
|||
} |
|||
Loading…
Reference in new issue