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